From 3f5ba3e09c2056a83e7376c24b7c44ac3e6d32dd Mon Sep 17 00:00:00 2001 From: "Tait,Trevor(rt0435)" Date: Sun, 4 Nov 2018 16:30:21 -0500 Subject: Attributes for GENERIC-RESOURCE-API and VNF-API Extract Attributes for GENERIC-RESOURCE-API and VNF-API Issue-ID: LOG-797 Change-Id: I6ae2727bd85069fc89d65c0083167ca69b343895 Signed-off-by: Tait,Trevor(rt0435) --- .../sdnc/handlers/VnfApiHandler.java | 1 - .../pomba/contextbuilder/sdnc/model/Image.java | 92 ++++++++++++++++++++++ .../pomba/contextbuilder/sdnc/model/Pserver.java | 91 +++++++++++++++++++++ .../sdnc/model/VnfTopologyIdentifier.java | 66 +++++++++++++++- .../pomba/contextbuilder/sdnc/util/RestUtil.java | 38 ++++++++- .../pomba/contextbuilder/sdnc/test/ImageTest.java | 49 ++++++++++++ .../contextbuilder/sdnc/test/PserverTest.java | 50 ++++++++++++ .../sdnc/test/VnfTopologyIdentifierTest.java | 31 +++++++- .../sdnc/test/VnfTopologyInformationTest.java | 2 +- src/test/resources/junit/vnfApiResponse.json | 10 ++- 10 files changed, 420 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/onap/pomba/contextbuilder/sdnc/model/Image.java create mode 100644 src/main/java/org/onap/pomba/contextbuilder/sdnc/model/Pserver.java create mode 100644 src/test/java/org/onap/pomba/contextbuilder/sdnc/test/ImageTest.java create mode 100644 src/test/java/org/onap/pomba/contextbuilder/sdnc/test/PserverTest.java (limited to 'src') diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/handlers/VnfApiHandler.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/handlers/VnfApiHandler.java index e16ec40..c7d3971 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdnc/handlers/VnfApiHandler.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/handlers/VnfApiHandler.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.ws.rs.client.Client; -import javax.ws.rs.core.MediaType; import org.apache.camel.Exchange; import org.json.JSONArray; import org.json.JSONException; diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/Image.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/Image.java new file mode 100644 index 0000000..5ad0529 --- /dev/null +++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/Image.java @@ -0,0 +1,92 @@ +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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. + * ============LICENSE_END===================================================== + */ + +package org.onap.pomba.contextbuilder.sdnc.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Image { + + @SerializedName("image-name") + @Expose + private String imageName; + + private final static String NULL_STR = ""; + + /** + * No args constructor for use in serialization + * + */ + public Image() { + } + + /** + * + * @param imageName + */ + public Image(String imageName) { + super(); + this.imageName = imageName; + } + + public String getImageName() { + return imageName; + } + + public void setImageName(String imageName) { + this.imageName = imageName; + } + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Image.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("imageName"); + sb.append('='); + sb.append(((this.imageName == null)?NULL_STR:this.imageName)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.imageName == null)? 0 :this.imageName.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if (!(other instanceof Image)) { + return false; + } + Image rhs = ((Image) other); + return ((this.imageName == rhs.imageName)||((this.imageName!= null)&&this.imageName.equals(rhs.imageName))); + } + +} diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/Pserver.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/Pserver.java new file mode 100644 index 0000000..1c7a832 --- /dev/null +++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/Pserver.java @@ -0,0 +1,91 @@ +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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. + * ============LICENSE_END===================================================== + */ + +package org.onap.pomba.contextbuilder.sdnc.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Pserver { + @SerializedName("hostname") + @Expose + private String hostname; + + private final static String NULL_STR = ""; + + /** + * No args constructor for use in serialization + * + */ + public Pserver() { + } + + /** + * + * @param hostname + */ + public Pserver(String hostname) { + super(); + this.hostname = hostname; + } + + public String getHostname() { + return hostname; + } + + public void setHostname(String hostname) { + this.hostname = hostname; + } + + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Pserver.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("hostname"); + sb.append('='); + sb.append(((this.hostname == null)?NULL_STR:this.hostname)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.hostname == null)? 0 :this.hostname.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if (!(other instanceof Pserver)) { + return false; + } + Pserver rhs = ((Pserver) other); + return ((this.hostname == rhs.hostname)||((this.hostname!= null)&&this.hostname.equals(rhs.hostname))); + } + +} diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/VnfTopologyIdentifier.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/VnfTopologyIdentifier.java index 8dbf0c8..de22373 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/VnfTopologyIdentifier.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/model/VnfTopologyIdentifier.java @@ -38,6 +38,20 @@ public class VnfTopologyIdentifier { @SerializedName("vnf-type") @Expose private String vnfType; + @SerializedName("inMaint") + @Expose + private String inMaint; + @SerializedName("prov-status") + @Expose + private String provStatus; + @SerializedName("pserver") + @Expose + private Pserver pserver; + @SerializedName("image") + @Expose + private Image image; + + private final static String NULL_STR = ""; @@ -56,13 +70,17 @@ public class VnfTopologyIdentifier { * @param vnfType * @param genericVnfType */ - public VnfTopologyIdentifier(String genericVnfType, String serviceType, String vnfName, String genericVnfName, String vnfType) { + public VnfTopologyIdentifier(String genericVnfType, String serviceType, String vnfName, String genericVnfName, String vnfType, String inMaint, String provStatus, Pserver pserver, Image image) { super(); this.genericVnfType = genericVnfType; this.serviceType = serviceType; this.vnfName = vnfName; this.genericVnfName = genericVnfName; this.vnfType = vnfType; + this.inMaint = inMaint; + this.provStatus = provStatus; + this.pserver = pserver; + this.image = image; } public String getGenericVnfType() { @@ -105,6 +123,39 @@ public class VnfTopologyIdentifier { this.vnfType = vnfType; } + public String getInMaint() { + return inMaint; + } + + public void setInMaint(String inMaint) { + this.inMaint = inMaint; + } + + public String getProvStatus() { + return provStatus; + } + + public void setProvStatus(String provStatus) { + this.provStatus = provStatus; + } + + public Pserver getPserver() { + return pserver; + } + + public void setPserver(Pserver pserver) { + this.pserver = pserver; + } + + public Image getImage() { + return image; + } + + public void setImage(Image image) { + this.image = image; + } + + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -129,6 +180,15 @@ public class VnfTopologyIdentifier { sb.append('='); sb.append(((this.vnfType == null)?NULL_STR:this.vnfType)); sb.append(','); + sb.append("inMaint"); + sb.append('='); + sb.append(((this.inMaint == null)?NULL_STR:this.inMaint)); + sb.append(','); + sb.append("provStatus"); + sb.append('='); + sb.append(((this.provStatus == null)?NULL_STR:this.provStatus)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { sb.setCharAt((sb.length()- 1), ']'); } else { @@ -145,6 +205,10 @@ public class VnfTopologyIdentifier { result = ((result* 31)+((this.genericVnfName == null)? 0 :this.genericVnfName.hashCode())); result = ((result* 31)+((this.vnfType == null)? 0 :this.vnfType.hashCode())); result = ((result* 31)+((this.genericVnfType == null)? 0 :this.genericVnfType.hashCode())); + result = ((result* 31)+((this.inMaint == null)? 0 :this.inMaint.hashCode())); + result = ((result* 31)+((this.provStatus == null)? 0 :this.provStatus.hashCode())); + result = ((result* 31)+((this.pserver == null)? 0 :this.pserver.hashCode())); + result = ((result* 31)+((this.image == null)? 0 :this.image.hashCode())); return result; } diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdnc/util/RestUtil.java b/src/main/java/org/onap/pomba/contextbuilder/sdnc/util/RestUtil.java index 4575230..ad91155 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdnc/util/RestUtil.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdnc/util/RestUtil.java @@ -43,6 +43,8 @@ import org.json.JSONException; import org.json.JSONObject; import org.onap.aai.restclient.client.OperationResult; import org.onap.aai.restclient.client.RestClient; +import org.onap.pomba.common.datatypes.Attribute; +import org.onap.pomba.common.datatypes.Attribute.Name; import org.onap.pomba.common.datatypes.ModelContext; import org.onap.pomba.common.datatypes.Service; import org.onap.pomba.common.datatypes.VF; @@ -202,8 +204,8 @@ public class RestUtil { } - public static ModelContext transformGenericResource(String sdncResponse, String specPath) { - List jsonSpec = JsonUtils.filepathToList(specPath); + public static ModelContext transformGenericResource(String sdncResponse, String SPEC_PATH) { + List jsonSpec = JsonUtils.filepathToList(SPEC_PATH); Object jsonInput = JsonUtils.jsonToObject(sdncResponse); Chainr chainr = Chainr.fromSpec(jsonSpec); Object transObject = chainr.transform(jsonInput); @@ -249,6 +251,38 @@ public class RestUtil { if (vf.getType().contentEquals("null")) { vf.setType(vnfTopologyId.getGenericVnfType()); } + if (vf.getAttributes().isEmpty()) { + if ((null != vnfTopologyId.getInMaint()) && !(vnfTopologyId.getInMaint().isEmpty())) { + Attribute lockedBoolean = new Attribute(); + lockedBoolean.setName(Name.lockedBoolean); + lockedBoolean.setValue(vnfTopologyId.getInMaint()); + vf.addAttribute(lockedBoolean); + } + if ((null != vnfTopologyId.getProvStatus()) && !(vnfTopologyId.getProvStatus().isEmpty())) { + Attribute provStatus = new Attribute(); + // attribute.setName(Name.provStatus); + provStatus.setValue(vnfTopologyId.getProvStatus()); + vf.addAttribute(provStatus); + } + if (null != vnfTopologyId.getPserver()) { + if ((null != vnfTopologyId.getPserver().getHostname()) && !(vnfTopologyId.getPserver().getHostname().isEmpty())) { + Attribute hostname = new Attribute(); + hostname.setName(Name.hostName); + hostname.setValue(vnfTopologyId.getPserver().getHostname()); + vf.addAttribute(hostname); + + } + } + if (null != vnfTopologyId.getImage()) { + if ((null != vnfTopologyId.getImage().getImageName()) && !(vnfTopologyId.getImage().getImageName().isEmpty())) { + Attribute imageName = new Attribute(); + imageName.setName(Name.imageId); + imageName.setValue(vnfTopologyId.getImage().getImageName()); + vf.addAttribute(imageName); + + } + } + } } } } catch (Exception e) { diff --git a/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/ImageTest.java b/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/ImageTest.java new file mode 100644 index 0000000..daa3dd7 --- /dev/null +++ b/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/ImageTest.java @@ -0,0 +1,49 @@ +package org.onap.pomba.contextbuilder.sdnc.test; +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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. + * ============LICENSE_END===================================================== + */ + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.onap.pomba.contextbuilder.sdnc.model.Image; + +public class ImageTest { + @Test + public void testImageWithParameters() { + Image image = new Image("imageName"); + assertEquals("imageName", image.getImageName()); + } + + @Test + public void testImage() { + Image image = new Image(); + image.setImageName("imageName"); + assertEquals("imageName", image.getImageName()); + String imageString = image.toString(); + assertTrue(imageString.contains("imageName")); + } + + @Test + public void testImageIsEqual() { + Image image1 = new Image("imageName"); + assertTrue(image1.equals(image1)); + assertTrue(image1.hashCode() == -878349659); + } + +} diff --git a/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/PserverTest.java b/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/PserverTest.java new file mode 100644 index 0000000..4212334 --- /dev/null +++ b/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/PserverTest.java @@ -0,0 +1,50 @@ +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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. + * ============LICENSE_END===================================================== + */ + +package org.onap.pomba.contextbuilder.sdnc.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.onap.pomba.contextbuilder.sdnc.model.Pserver; + +public class PserverTest { + @Test + public void testPserverWithParameters() { + Pserver pserver = new Pserver("hostname"); + assertEquals("hostname", pserver.getHostname()); + } + + @Test + public void testPserver() { + Pserver pserver = new Pserver(); + pserver.setHostname("hostname"); + assertEquals("hostname", pserver.getHostname()); + String pserverString = pserver.toString(); + assertTrue(pserverString.contains("hostname")); + } + + @Test + public void testPserverIsEqual() { + Pserver pserver1 = new Pserver("hostname"); + assertTrue(pserver1.equals(pserver1)); + assertTrue(pserver1.hashCode() == -299803566); + } + +} diff --git a/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/VnfTopologyIdentifierTest.java b/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/VnfTopologyIdentifierTest.java index a4a36f3..a311286 100644 --- a/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/VnfTopologyIdentifierTest.java +++ b/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/VnfTopologyIdentifierTest.java @@ -22,6 +22,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Test; +import org.onap.pomba.contextbuilder.sdnc.model.Image; +import org.onap.pomba.contextbuilder.sdnc.model.Pserver; import org.onap.pomba.contextbuilder.sdnc.model.VnfTopologyIdentifier; public class VnfTopologyIdentifierTest { @@ -31,12 +33,21 @@ public class VnfTopologyIdentifierTest { "serviceType", "vnfName", "genericVnfName", - "vnfType"); + "vnfType", + "inMaint", + "provStatus", + new Pserver(), + new Image()); assertEquals("genericVnfType", vnfTopologyIdentifier.getGenericVnfType()); assertEquals("serviceType", vnfTopologyIdentifier.getServiceType()); assertEquals("vnfName", vnfTopologyIdentifier.getVnfName()); assertEquals("genericVnfName", vnfTopologyIdentifier.getGenericVnfName()); assertEquals("vnfType", vnfTopologyIdentifier.getVnfType()); + assertEquals("inMaint", vnfTopologyIdentifier.getInMaint()); + assertEquals("provStatus", vnfTopologyIdentifier.getProvStatus()); + assertEquals(new Pserver(), vnfTopologyIdentifier.getPserver()); + assertEquals(new Image(), vnfTopologyIdentifier.getImage()); + } @Test @@ -47,15 +58,23 @@ public class VnfTopologyIdentifierTest { vnfTopologyIdentifier.setVnfName("vnfName"); vnfTopologyIdentifier.setGenericVnfName("genericVnfName"); vnfTopologyIdentifier.setVnfType("vnfType"); + vnfTopologyIdentifier.setInMaint("inMaint"); + vnfTopologyIdentifier.setProvStatus("provStatus"); + vnfTopologyIdentifier.setPserver(new Pserver()); + vnfTopologyIdentifier.setImage(new Image()); assertEquals("genericVnfType", vnfTopologyIdentifier.getGenericVnfType()); assertEquals("serviceType", vnfTopologyIdentifier.getServiceType()); assertEquals("vnfName", vnfTopologyIdentifier.getVnfName()); assertEquals("genericVnfName", vnfTopologyIdentifier.getGenericVnfName()); assertEquals("vnfType", vnfTopologyIdentifier.getVnfType()); + assertEquals("inMaint", vnfTopologyIdentifier.getInMaint()); + assertEquals("provStatus", vnfTopologyIdentifier.getProvStatus()); + assertEquals(new Pserver(), vnfTopologyIdentifier.getPserver()); + assertEquals(new Image(), vnfTopologyIdentifier.getImage()); String vnfTopologyIdentifierString = vnfTopologyIdentifier.toString(); assertTrue(vnfTopologyIdentifierString .contains("[genericVnfType=genericVnfType,serviceType=serviceType,vnfName=vnfName," - + "genericVnfName=genericVnfName,vnfType=vnfType]")); + + "genericVnfName=genericVnfName,vnfType=vnfType,inMaint=inMaint,provStatus=provStatus]")); } @Test @@ -64,9 +83,13 @@ public class VnfTopologyIdentifierTest { "serviceType1", "vnfName1", "genericVnfName1", - "vnfType1"); + "vnfType1", + "inMaint", + "provStatus", + new Pserver(), + new Image()); assertTrue(vnfTopologyIdentifier1.equals(vnfTopologyIdentifier1)); - assertTrue(vnfTopologyIdentifier1.hashCode() == 1705030683); + assertTrue(vnfTopologyIdentifier1.hashCode() == -1409805056); } } diff --git a/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/VnfTopologyInformationTest.java b/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/VnfTopologyInformationTest.java index f33d5c4..340e11c 100644 --- a/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/VnfTopologyInformationTest.java +++ b/src/test/java/org/onap/pomba/contextbuilder/sdnc/test/VnfTopologyInformationTest.java @@ -56,7 +56,7 @@ public class VnfTopologyInformationTest { new VnfAssignments(), new ArrayList()); assertTrue(vnfTopologyInformation1.equals(vnfTopologyInformation1)); - assertTrue(vnfTopologyInformation1.hashCode() == 917116897); + assertTrue(vnfTopologyInformation1.hashCode() == -1767338143); } } diff --git a/src/test/resources/junit/vnfApiResponse.json b/src/test/resources/junit/vnfApiResponse.json index e3828a0..e1e4e51 100644 --- a/src/test/resources/junit/vnfApiResponse.json +++ b/src/test/resources/junit/vnfApiResponse.json @@ -147,7 +147,15 @@ "vnf-type": "VshakenIst09042018..base_alb..module-3", "generic-vnf-name": "zdyh3bsflb0001v_01", "generic-vnf-type": "vShaken_DNS_ns592n/vSHAKEN_IST_09042018 0", - "vnf-name": "zdyh3bsflb0001v_base_module_01" + "vnf-name": "zdyh3bsflb0001v_base_module_01", + "inMaint":"no", + "pserver":{ + "hostname": "somerandomserver.ottawa.com" + }, + "image":{ + "image-name": "cfad8f38-3d4c-4aec-8bd4-f83ad605acbe" + }, + "prov-status": "Available" } }, "service-information": { -- cgit 1.2.3-korg