From aa44951faf04e2cddfc537bbc9f6a18d76c76ec1 Mon Sep 17 00:00:00 2001 From: Jan Srnicek Date: Fri, 21 Jul 2017 15:10:46 +0200 Subject: HC2VPP-180 - Doc coverage generator TODO - links to specific vpp api section(now points just to section with apis) TODO - links to specific java binding code(now points to class thats doing binding) TODO - operational coverage(ASM does not support lambda processing) TODO - generate coverage adoc links Change-Id: I44c85012da3bd2e7cdd41930753e5aae6955cd7b Signed-off-by: Jan Srnicek Signed-off-by: Marek Gradzki --- vpp-integration/api-docs/api/asciidoc/Readme.adoc | 13 +++ vpp-integration/api-docs/api/pom.xml | 33 ++++++ .../java/io/fd/hc2vpp/docs/api/CoverageUnit.java | 124 +++++++++++++++++++++ .../java/io/fd/hc2vpp/docs/api/JavaApiMessage.java | 56 ++++++++++ .../main/java/io/fd/hc2vpp/docs/api/Operation.java | 93 ++++++++++++++++ .../java/io/fd/hc2vpp/docs/api/PluginCoverage.java | 85 ++++++++++++++ .../java/io/fd/hc2vpp/docs/api/VppApiMessage.java | 69 ++++++++++++ .../main/java/io/fd/hc2vpp/docs/api/YangType.java | 66 +++++++++++ 8 files changed, 539 insertions(+) create mode 100644 vpp-integration/api-docs/api/asciidoc/Readme.adoc create mode 100644 vpp-integration/api-docs/api/pom.xml create mode 100644 vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/CoverageUnit.java create mode 100644 vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/JavaApiMessage.java create mode 100644 vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/Operation.java create mode 100644 vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/PluginCoverage.java create mode 100644 vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/VppApiMessage.java create mode 100644 vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/YangType.java (limited to 'vpp-integration/api-docs/api') diff --git a/vpp-integration/api-docs/api/asciidoc/Readme.adoc b/vpp-integration/api-docs/api/asciidoc/Readme.adoc new file mode 100644 index 000000000..145404972 --- /dev/null +++ b/vpp-integration/api-docs/api/asciidoc/Readme.adoc @@ -0,0 +1,13 @@ += docs-api + +Defines general api for VPP binary api coverage + +== Elements + +* PluginCoverage - Contains coverage data for single JVPP plugin, including supported + VPP binary equivalents in JVpp, what Yang nodes are bind to such api and what operations are + supported +* VppApiMessage - Reference to single VPP binary api with link to its documentation +* JavaApiMessage - Reference to JVpp equivalent of VPP binary api +* YangType - Reference to single Yang type with link to its model +* Operation - reference to single CRUD operation with link to binding class \ No newline at end of file diff --git a/vpp-integration/api-docs/api/pom.xml b/vpp-integration/api-docs/api/pom.xml new file mode 100644 index 000000000..9c40d1f65 --- /dev/null +++ b/vpp-integration/api-docs/api/pom.xml @@ -0,0 +1,33 @@ + + + + + + hc2vpp-parent + io.fd.hc2vpp.common + 1.17.10-SNAPSHOT + ../../../common/hc2vpp-parent + + 4.0.0 + + docs-api + io.fd.hc2vpp.docs + 1.17.10-SNAPSHOT + + \ No newline at end of file diff --git a/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/CoverageUnit.java b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/CoverageUnit.java new file mode 100644 index 000000000..06cb59f69 --- /dev/null +++ b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/CoverageUnit.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.docs.api; + +import java.util.List; +import java.util.Objects; + +/** + * Represents mapping between single supported VPP binary api and its binding + */ +public class CoverageUnit { + + /** + * VPP binary api reference + */ + private final VppApiMessage vppApi; + + /** + * Java equivalent of VPP binary api + */ + private final JavaApiMessage javaApi; + + /** + * Yang types used to bind this request + */ + private final List yangTypes; + + /** + * Operations supported for this api + */ + private final List supportedOperations; + + private CoverageUnit(final VppApiMessage vppApi, final JavaApiMessage javaApi, + final List yangTypes, + final List supportedOperations) { + this.vppApi = vppApi; + this.javaApi = javaApi; + this.yangTypes = yangTypes; + this.supportedOperations = supportedOperations; + } + + public VppApiMessage getVppApi() { + return vppApi; + } + + public JavaApiMessage getJavaApi() { + return javaApi; + } + + public List getYangTypes() { + return yangTypes; + } + + public List getSupportedOperations() { + return supportedOperations; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final CoverageUnit that = (CoverageUnit) o; + + return Objects.equals(this.vppApi, that.vppApi) && + Objects.equals(this.javaApi, that.javaApi) && + Objects.equals(this.yangTypes, that.yangTypes) && + Objects.equals(this.supportedOperations, that.supportedOperations); + } + + @Override + public int hashCode() { + return Objects.hash(vppApi, javaApi, yangTypes, supportedOperations); + } + + public static class CoverageUnitBuilder { + private VppApiMessage vppApi; + private JavaApiMessage javaApi; + private List yangTypes; + private List supportedOperations; + + public CoverageUnitBuilder setVppApi(final VppApiMessage vppApi) { + this.vppApi = vppApi; + return this; + } + + public CoverageUnitBuilder setJavaApi(final JavaApiMessage javaApi) { + this.javaApi = javaApi; + return this; + } + + public CoverageUnitBuilder setYangTypes(final List yangTypes) { + this.yangTypes = yangTypes; + return this; + } + + public CoverageUnitBuilder setSupportedOperations(final List supportedOperations) { + this.supportedOperations = supportedOperations; + return this; + } + + public CoverageUnit build() { + return new CoverageUnit(vppApi, javaApi, yangTypes, supportedOperations); + } + } +} diff --git a/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/JavaApiMessage.java b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/JavaApiMessage.java new file mode 100644 index 000000000..db4575c5a --- /dev/null +++ b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/JavaApiMessage.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.docs.api; + +import java.util.Objects; + +/** + * Reference of Java equivalent of VPP binary api + */ +public class JavaApiMessage { + + /** + * Name of the call + */ + private final String api; + + public JavaApiMessage(final String api) { + this.api = api; + } + + public String getApi() { + return api; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final JavaApiMessage that = (JavaApiMessage) o; + return Objects.equals(this.api, that.api); + } + + @Override + public int hashCode() { + return Objects.hash(api); + } +} diff --git a/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/Operation.java b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/Operation.java new file mode 100644 index 000000000..e471fb6bf --- /dev/null +++ b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/Operation.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.docs.api; + +import java.util.Objects; + +/** + * Reference to single crud operation + */ +public class Operation { + + /** + * Git link to class that performs referenced operation + */ + private final String link; + //TODO - investigate option to link directly to line number + + /** + * Type of crud operation + */ + private final CrudOperation operation; + + public Operation(final String link, final CrudOperation operation) { + this.link = link; + this.operation = operation; + } + + public String getLink() { + return link; + } + + public CrudOperation getOperation() { + return operation; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final Operation that = (Operation) o; + + return Objects.equals(this.link, that.link) && + Objects.equals(this.operation, that.operation); + } + + @Override + public int hashCode() { + return Objects.hash(link, operation); + } + + public enum CrudOperation { + WRITE("Write", "writeCurrentAttributes"), + UPDATE("Update", "updateCurrentAttributes"), + DELETE("Delete", "deleteCurrentAttributes"), + READ_ALL("Read all", "getAllIds"), + READ_ONE("Read details", "readCurrentAttributes"); + + private final String displayName; + private final String methodReference; + + CrudOperation(final String displayName, final String methodReference) { + this.displayName = displayName; + this.methodReference = methodReference; + } + + public String getMethodReference() { + return methodReference; + } + + public String getDisplayName() { + return displayName; + } + } +} diff --git a/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/PluginCoverage.java b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/PluginCoverage.java new file mode 100644 index 000000000..8e62e9ca3 --- /dev/null +++ b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/PluginCoverage.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.docs.api; + +import java.util.Objects; +import java.util.Set; + +/** + * Represents coverage data for single VPP plugin + */ +public class PluginCoverage { + + /** + * Name of the covered plugin + */ + private final String pluginName; + + /** + * Coverage data + */ + private final Set coverage; + + /** + * Whether this is config or operational coverage + */ + private final boolean isConfig; + + public PluginCoverage(final String pluginName, final Set coverage, final boolean isConfig) { + this.pluginName = pluginName; + this.coverage = coverage; + this.isConfig = isConfig; + } + + public String getPluginName() { + return pluginName; + } + + public Set getCoverage() { + return coverage; + } + + public boolean isConfig() { + return isConfig; + } + + public boolean hasCoverage() { + return !coverage.isEmpty(); + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final PluginCoverage that = (PluginCoverage) o; + + return Objects.equals(this.isConfig, that.isConfig) && + Objects.equals(this.pluginName, that.pluginName) && + Objects.equals(this.coverage, that.coverage); + } + + @Override + public int hashCode() { + return Objects.hash(this.pluginName, this.coverage, this.isConfig); + } +} + diff --git a/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/VppApiMessage.java b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/VppApiMessage.java new file mode 100644 index 000000000..78010471a --- /dev/null +++ b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/VppApiMessage.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.docs.api; + +import java.util.Objects; + +/** + * Represents reference to VPP binary api + */ +public class VppApiMessage { + + /** + * Name of the api + */ + private final String name; + + /** + * fd.io doc link + */ + // TODO - check if possible to add direct link for specific api + private final String link; + + public VppApiMessage(final String name, final String link) { + this.name = name; + this.link = link; + } + + public String getName() { + return name; + } + + public String getLink() { + return link; + } + + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final VppApiMessage that = (VppApiMessage) o; + + return Objects.equals(this.name, that.name) && Objects.equals(this.link, that.link); + } + + @Override + public int hashCode() { + return Objects.hash(name, link); + } +} diff --git a/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/YangType.java b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/YangType.java new file mode 100644 index 000000000..a2585acf6 --- /dev/null +++ b/vpp-integration/api-docs/api/src/main/java/io/fd/hc2vpp/docs/api/YangType.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.docs.api; + +import java.util.Objects; + +/** + * Represents Yang type used to bind VPP api's + */ +public class YangType { + + /** + * Fully qualified name of Yang type + */ + private final String type; + + /** + * Git link to its model origin + */ + private final String link; + + public YangType(final String type, final String link) { + this.type = type; + this.link = link; + } + + public String getType() { + return type; + } + + public String getLink() { + return link; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final YangType that = (YangType) o; + return Objects.equals(this.type, that.type) && !Objects.equals(this.link, that.link); + } + + @Override + public int hashCode() { + return Objects.hash(type, link); + } +} -- cgit 1.2.3-korg