diff options
Diffstat (limited to 'prh-commons/src/main/java/org/onap/dcaegen2')
15 files changed, 917 insertions, 169 deletions
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java new file mode 100644 index 00000000..2be95ee3 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java @@ -0,0 +1,65 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model; + +import com.google.gson.GsonBuilder; +import com.google.gson.TypeAdapterFactory; +import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel.Builder; +import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder; + +import java.util.ServiceLoader; +import org.springframework.util.StringUtils; + + +public class AaiJsonBodyBuilderImpl implements JsonBodyBuilder<ConsumerDmaapModel> { + + /** + * Method for serialization object by GSON. + * + * @param consumerDmaapModel - object which will be serialized + * @return string from serialization + */ + public String createJsonBody(ConsumerDmaapModel consumerDmaapModel) { + GsonBuilder gsonBuilder = new GsonBuilder(); + ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory); + + Builder builder = ImmutableConsumerDmaapModel.builder() + .correlationId(consumerDmaapModel.getCorrelationId()) + .serialNumber(consumerDmaapModel.getSerialNumber()) + .equipVendor(consumerDmaapModel.getEquipVendor()) + .equipModel(consumerDmaapModel.getEquipModel()) + .equipType(consumerDmaapModel.getEquipType()) + .nfRole(consumerDmaapModel.getNfRole()) + .swVersion(consumerDmaapModel.getSwVersion()) + .additionalFields(consumerDmaapModel.getAdditionalFields()); + + String ipv4 = consumerDmaapModel.getIpv4(); + if (!StringUtils.isEmpty(ipv4)) { + builder.ipv4(ipv4); + } + String ipv6 = consumerDmaapModel.getIpv6(); + if (!StringUtils.isEmpty(ipv6)) { + builder.ipv6(ipv6); + } + + return gsonBuilder.create().toJson(builder.build()); + } +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiPnfResultModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiPnfResultModel.java new file mode 100644 index 00000000..424d7f83 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiPnfResultModel.java @@ -0,0 +1,206 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model; + +import com.google.gson.annotations.SerializedName; +import org.immutables.gson.Gson; +import org.immutables.value.Value; +import org.springframework.lang.Nullable; + + +/** + * PNF represents a physical network function. typically equipment used in the D1 world. in 1607, this will be populated by SDN-C to represent a premises router that a uCPE connects to. But this can be used to represent any physical device that is not an AIC node or uCPE. ###### Related Nodes - TO complex( pnf LocatedIn complex, MANY2ONE) - TO instance-group( pnf MemberOf instance-group, MANY2MANY) - TO zone( pnf LocatedIn zone, MANY2ONE) - FROM configuration( configuration AppliesTo pnf, ONE2MANY) - FROM esr-thirdparty-sdnc( esr-thirdparty-sdnc AppliesTo pnf, ONE2MANY) - FROM generic-vnf( generic-vnf HostedOn pnf, MANY2MANY) - FROM lag-interface (CHILD of pnf, lag-interface BindsTo pnf, MANY2ONE)(1) - FROM logical-link( logical-link BridgedTo pnf, MANY2MANY) - FROM p-interface (CHILD of pnf, p-interface BindsTo pnf, MANY2ONE)(1) - FROM service-instance( service-instance ComposedOf pnf, ONE2MANY) -(1) IF this PNF node is deleted, this FROM node is DELETED also + */ +@Value.Immutable +@Gson.TypeAdapters(fieldNamingStrategy = true) +public interface AaiPnfResultModel { + + /** + * unique name of Physical Network Function. + **/ + @Nullable + @SerializedName("pnf-name") + String getPnfName(); + + /** + * name of Physical Network Function. + **/ + @Nullable + @SerializedName("pnf-name2") + String getPnfName2(); + + /** + * URL to endpoint where AAI can get more details. + **/ + @Nullable + @SerializedName("selflink") + String getSelflink(); + + /** + * source of name2 + **/ + @Nullable + @SerializedName("pnf-name2-source") + String getPnfName2Source(); + + /** + * id of pnf + **/ + @Nullable + @SerializedName("pnf-id") + String getPnfId(); + + /** + * Equipment type. Source of truth should define valid values. + **/ + @Nullable + @SerializedName("equip-type") + String getEquipType(); + + /** + * Equipment vendor. Source of truth should define valid values. + **/ + @Nullable + @SerializedName("equip-vendor") + String getEquipVendor(); + + /** + * Equipment model. Source of truth should define valid values. + **/ + @Nullable + @SerializedName("equip-model") + String getEquipModel(); + + /** + * identifier of managed by ATT or customer + **/ + @Nullable + @SerializedName("management-option") + String getManagementOption(); + + /** + * ipv4-oam-address with new naming convention for IP addresses + **/ + @Nullable + @SerializedName("ipaddress-v4-oam") + String getIpaddressV4Oam(); + + /** + * sw-version is the version of SW for the hosted application on the PNF. + **/ + @Nullable + @SerializedName("sw-version") + String getSwVersion(); + + /** + * Used to indicate whether or not this object is in maintenance mode (maintenance mode = true). This field (in conjunction with prov-status) is used to suppress alarms and vSCL on VNFs/VMs. + **/ + @Nullable + @SerializedName("in-maint") + Boolean isInMaint(); + + /** + * ID of the physical frame (relay rack) where pnf is installed. + **/ + @Nullable + @SerializedName("frame-id") + String getFrameId(); + + /** + * Serial number of the device + **/ + @Nullable + @SerializedName("serial-number") + String getSerialNumber(); + + /** + * IPV4 Loopback 0 address + **/ + @Nullable + @SerializedName("ipaddress-v4-loopback-0") + String getIpaddressV4Loopback0(); + + /** + * IPV6 Loopback 0 address + **/ + @Nullable + @SerializedName("ipaddress-v6-loopback-0") + String getIpaddressV6Loopback0(); + + /** + * IPV4 AIM address + **/ + @Nullable + @SerializedName("ipaddress-v4-aim") + String getIpaddressV4Aim(); + + /** + * IPV6 AIM address + **/ + @Nullable + @SerializedName("ipaddress-v6-aim") + String getIpaddressV6Aim(); + + /** + * IPV6 OAM address + **/ + @Nullable + @SerializedName("ipaddress-v6-oam") + String getIpaddressV6Oam(); + + /** + * CANOPI's inventory status. Only set with values exactly as defined by CANOPI. + **/ + @Nullable + @SerializedName("inv-status") + String getInvStatus(); + + /** + * Used for optimistic concurrency. Must be empty on createGson, valid on update and delete. + **/ + @Nullable + @SerializedName("resource-version") + String getResourceVersion(); + + /** + * Prov Status of this device (not under canopi control) Valid values [PREPROV/NVTPROV/PROV] + **/ + @Nullable + @SerializedName("prov-status") + String getProvStatus(); + + /** + * Nf Role is the role performed by this instance in the network. + **/ + @Nullable + @SerializedName("nf-role") + String getNfRole(); + + /** + * Get relationshipList + **/ + @SerializedName("relationship-list") + @Value.Default + default Relationship getRelationshipList() { + return ImmutableRelationship.builder().build(); + } +} + diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiServiceInstanceResultModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiServiceInstanceResultModel.java new file mode 100644 index 00000000..67d6ff90 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiServiceInstanceResultModel.java @@ -0,0 +1,209 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model; + +import com.google.gson.annotations.SerializedName; +import org.immutables.gson.Gson; +import org.immutables.value.Value; +import org.springframework.lang.Nullable; + +@Value.Immutable +@Gson.TypeAdapters(fieldNamingStrategy = true) +public interface AaiServiceInstanceResultModel { + + /** + * Uniquely identifies this instance of a service + **/ + @Nullable + @SerializedName("service-instance-id") + String getServiceInstanceId(); + + /** + * This field will store a name assigned to the service-instance. + **/ + @Nullable + @SerializedName("service-instance-name") + String getServiceInstanceName(); + + /** + * String capturing type of service. + **/ + @Nullable + @SerializedName("service-type") + String getServiceType(); + + /** + * String capturing the service role. + **/ + @Nullable + @SerializedName("service-role") + String getServiceRole(); + + /** + * This field will store the environment context assigned to the service-instance. + **/ + @Nullable + @SerializedName("environment-context") + String getEnvironmentContext(); + + /** + * This field will store the workload context assigned to the service-instance. + **/ + @Nullable + @SerializedName("workload-context") + String getWorkloadContext(); + + /** + * createGson time of Network Service. + **/ + @Nullable + @SerializedName("created-at") + String getCreatedAt(); + + /** + * last update of Network Service. + **/ + @Nullable + @SerializedName("updated-at") + String getUpdatedAt(); + + /** + * short description for service-instance. + **/ + @Nullable + @SerializedName("description") + String getDescription(); + + /** + * the ASDC model id for this resource or service model. + **/ + @Nullable + @SerializedName("model-invariant-id") + String getModelInvariantId(); + + /** + * the ASDC model version for this resource or service model. + **/ + @Nullable + @SerializedName("model-version-id") + String getModelVersionId(); + + /** + * the ASDC model version for this resource or service model. + **/ + @Nullable + @SerializedName("persona-model-version") + String getPersonaModelVersion(); + + /** + * the ASDC data dictionary widget model. This maps directly to the A&AI widget. + **/ + @Nullable + @SerializedName("widget-model-id") + String getWidgetModelId(); + + /** + * the ASDC data dictionary version of the widget model.This maps directly to the A&AI version of the widget. + **/ + @Nullable + @SerializedName("widget-model-version") + String getWidgetModelVersion(); + + /** + * Indicates the total bandwidth to be used for this service. + **/ + @Nullable + @SerializedName("bandwidth-total") + String getBandwidthTotal(); + + /** + * indicates the upstream bandwidth this service will use on the WAN1 port of the physical device. + **/ + @Nullable + @SerializedName("bandwidth-up-wan1") + String getBandwidthUpWan1(); + + /** + * indicates the downstream bandwidth this service will use on the WAN1 port of the physical device. + **/ + @Nullable + @SerializedName("bandwidth-down-wan1") + String getBandwidthDownWan1(); + + /** + * indicates the upstream bandwidth this service will use on the WAN2 port of the physical device. + **/ + @Nullable + @SerializedName("bandwidth-up-wan2") + String getBandwidthUpWan2(); + + /** + * indicates the downstream bandwidth this service will use on the WAN2 port of the physical device. + **/ + @Nullable + @SerializedName("bandwidth-down-wan2") + String getBandwidthDownWan2(); + + /** + * URL customers will use to access the vHN Portal. + **/ + @Nullable + @SerializedName("vhn-portal-url") + String getVhnPortalUrl(); + + /** + * An identifier that customers assign to the location where this service is being used. + **/ + @Nullable + @SerializedName("service-instance-location-id") + String getServiceInstanceLocationId(); + + /** + * Used for optimistic concurrency. Must be empty on createGson, valid on update and delete. + **/ + @Nullable + @SerializedName("resource-version") + String getResourceVersion(); + + /** + * Path to the controller object. + **/ + @Nullable + @SerializedName("selflink") + String getSelflink(); + + /** + * Orchestration status of this service. + **/ + @Nullable + @SerializedName("orchestration-status") + String getOrchestrationStatus(); + + /** + * Get relationshipList + **/ + @SerializedName("relationship-list") + @Value.Default + default Relationship getRelationshipList() { + return ImmutableRelationship.builder().build(); + } + +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java index b2bac24c..b519c3a5 100644 --- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java @@ -20,7 +20,9 @@ package org.onap.dcaegen2.services.prh.model; +import com.google.gson.JsonObject; import com.google.gson.annotations.SerializedName; +import org.springframework.lang.Nullable; import org.immutables.gson.Gson; import org.immutables.value.Value; import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel; @@ -37,9 +39,39 @@ public interface ConsumerDmaapModel extends AaiModel, DmaapModel { @SerializedName(value = "correlationId", alternate = "correlationId") String getCorrelationId(); + @Nullable @SerializedName(value = "ipaddress-v4-oam", alternate = "ipaddress-v4-oam") String getIpv4(); + @Nullable @SerializedName(value = "ipaddress-v6-oam", alternate = "ipaddress-v6-oam") String getIpv6(); + + @Nullable + @SerializedName(value = "serial-number", alternate = "serial-number") + String getSerialNumber(); + + @Nullable + @SerializedName(value = "equip-vendor", alternate = "equip-vendor") + String getEquipVendor(); + + @Nullable + @SerializedName(value = "equip-model", alternate = "equip-model") + String getEquipModel(); + + @Nullable + @SerializedName(value = "equip-type", alternate = "equip-type") + String getEquipType(); + + @Nullable + @SerializedName(value = "nf-role", alternate = "nf-role") + String getNfRole(); + + @Nullable + @SerializedName(value = "sw-version", alternate = "sw-version") + String getSwVersion(); + + @Nullable + @SerializedName(value = "additionalFields", alternate = "additionalFields") + JsonObject getAdditionalFields(); } diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/JsonBodyBuilderImpl.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/PnfReadyJsonBodyBuilder.java index b504a4bd..b39c4690 100644 --- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/JsonBodyBuilderImpl.java +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/PnfReadyJsonBodyBuilder.java @@ -20,16 +20,13 @@ package org.onap.dcaegen2.services.prh.model; -import com.google.gson.GsonBuilder; -import com.google.gson.TypeAdapterFactory; -import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel.Builder; +import org.onap.dcaegen2.services.prh.model.utils.PrhModelAwareGsonBuilder; -import java.util.ServiceLoader; - -public class JsonBodyBuilderImpl implements JsonBodyBuilder<ConsumerDmaapModel> { - - public JsonBodyBuilderImpl() {} +public class PnfReadyJsonBodyBuilder { /** * Method for serialization object by GSON. @@ -37,10 +34,14 @@ public class JsonBodyBuilderImpl implements JsonBodyBuilder<ConsumerDmaapModel> * @param consumerDmaapModel - object which will be serialized * @return string from serialization */ - public String createJsonBody(ConsumerDmaapModel consumerDmaapModel) { - GsonBuilder gsonBuilder = new GsonBuilder(); - ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory); - return gsonBuilder.create().toJson(ImmutableConsumerDmaapModel.builder().ipv4(consumerDmaapModel.getIpv4()) - .ipv6(consumerDmaapModel.getIpv6()).correlationId(consumerDmaapModel.getCorrelationId()).build()); + public JsonElement createJsonBody(ConsumerDmaapModel consumerDmaapModel) { + Builder builder = ImmutableConsumerDmaapModel.builder() + .correlationId(consumerDmaapModel.getCorrelationId()); + + JsonObject additionalFields = consumerDmaapModel.getAdditionalFields(); + if(additionalFields != null && !additionalFields.equals(new JsonObject())) { + builder.additionalFields(additionalFields); + } + return PrhModelAwareGsonBuilder.createGson().toJsonTree(builder.build()); } }
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/logging/MdcVariables.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/Relationship.java index c6fc4592..d92b7c75 100644 --- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/logging/MdcVariables.java +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/Relationship.java @@ -18,27 +18,18 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.services.prh.model.logging; +package org.onap.dcaegen2.services.prh.model; -import java.util.Map; -import org.slf4j.MDC; +import com.google.gson.annotations.SerializedName; +import org.immutables.gson.Gson; +import org.immutables.value.Value; -public final class MdcVariables { +import java.util.List; - public static final String X_ONAP_REQUEST_ID = "X-ONAP-RequestID"; - public static final String X_INVOCATION_ID = "X-InvocationID"; - public static final String REQUEST_ID = "RequestID"; - public static final String INVOCATION_ID = "InvocationID"; - public static final String INSTANCE_UUID = "InstanceUUID"; - public static final String RESPONSE_CODE = "ResponseCode"; - public static final String SERVICE_NAME = "ServiceName"; +@Value.Immutable +@Gson.TypeAdapters(fieldNamingStrategy = true) +public interface Relationship { - private MdcVariables() { - } - - public static void setMdcContextMap(Map<String, String> mdcContextMap) { - if (mdcContextMap != null) { - MDC.setContextMap(mdcContextMap); - } - } -} + @SerializedName("relationship") + List<RelationshipDict> getRelationship(); +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModelForUnitTest.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/RelationshipData.java index cbada731..4b1670c6 100644 --- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModelForUnitTest.java +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/RelationshipData.java @@ -20,32 +20,30 @@ package org.onap.dcaegen2.services.prh.model; -public class ConsumerDmaapModelForUnitTest implements ConsumerDmaapModel { +import com.google.gson.annotations.SerializedName; +import org.immutables.gson.Gson; +import org.immutables.value.Value; - private final String correlationId; - private final String ipv4; - private final String ipv6; +/** + * RelationshipData + */ +@Value.Immutable +@Gson.TypeAdapters(fieldNamingStrategy = true) +public interface RelationshipData { /** - * Class for testing serialization of ConsumerDmaapModel. - */ - public ConsumerDmaapModelForUnitTest() { - this.correlationId = "NOKnhfsadhff"; - this.ipv4 = "256.22.33.155"; - this.ipv6 = "200J:0db8:85a3:0000:0000:8a2e:0370:7334"; - - } - - public String getCorrelationId() { - return correlationId; - } + * A keyword provided by A&AI to indicate an attribute. + * + * @return relationshipKey + **/ + @SerializedName("relationship-key") + String getRelationshipKey(); - public String getIpv4() { - return ipv4; - } - - public String getIpv6() { - return ipv6; - } - -} + /** + * Value of the attribute. + * + * @return relationshipValue + **/ + @SerializedName("relationship-value") + String getRelationshipValue(); +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/RelationshipDict.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/RelationshipDict.java new file mode 100644 index 00000000..007f371b --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/RelationshipDict.java @@ -0,0 +1,68 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model; + +import com.google.gson.annotations.SerializedName; +import org.immutables.gson.Gson; +import org.immutables.value.Value; +import org.springframework.lang.Nullable; + +import java.util.Collections; +import java.util.List; + +/** + * RelationshipDict + */ +@Value.Immutable +@Gson.TypeAdapters(fieldNamingStrategy = true) +public interface RelationshipDict { + + /** + * A keyword provided by A&AI to indicate type of node. + **/ + @Nullable + @SerializedName("related-to") + String getRelatedTo(); + + /** + * The edge label for this relationship. + **/ + @Nullable + @SerializedName("relationship-label") + String getRelationshipLabel(); + + /** + * URL to the object in A&AI. + **/ + @Nullable + @SerializedName("related-link") + String getRelatedLink(); + + /** + * relationship Data + **/ + @SerializedName("relationship-data") + @Value.Default + default List<RelationshipData> getRelationshipData() { + return Collections.emptyList(); + } + +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java new file mode 100644 index 00000000..3b3dce15 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/bbs/LogicalLink.java @@ -0,0 +1,49 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model.bbs; + +import com.google.gson.annotations.SerializedName; +import org.immutables.gson.Gson; +import org.immutables.value.Value; +import org.onap.dcaegen2.services.prh.model.ImmutableRelationship; +import org.onap.dcaegen2.services.prh.model.Relationship; +import org.onap.dcaegen2.services.sdk.rest.services.model.ClientModel; +import org.springframework.lang.Nullable; + +@Value.Immutable +@Gson.TypeAdapters(fieldNamingStrategy = true) +public interface LogicalLink extends ClientModel { + + @SerializedName(value = "link-name") + String getLinkName(); + + @SerializedName(value = "link-type") + String getLinkType(); + + @Nullable + @SerializedName(value = "resource-version") + String getResourceVersion(); + + @SerializedName("relationship-list") + @Value.Default + default Relationship getRelationshipList() { + return ImmutableRelationship.builder().build(); + } +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNode.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNode.java new file mode 100644 index 00000000..6329e7e0 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNode.java @@ -0,0 +1,34 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model.queries; + +import java.util.Map; +import org.immutables.value.Value; + +/** + * @see NamedNodeAdapter + * @see NamedNodes + */ +@Value.Immutable +public interface NamedNode { + String name(); + Map<String, Object> properties(); +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNodeAdapter.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNodeAdapter.java new file mode 100644 index 00000000..be6c8d5b --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNodeAdapter.java @@ -0,0 +1,71 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model.queries; + +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import org.onap.dcaegen2.services.prh.model.queries.ImmutableNamedNode.Builder; + +/** + * @see NamedNode + * @see <a href="https://docs.onap.org/en/dublin/submodules/aai/aai-common.git/docs/AAI%20REST%20API%20Documentation/customQueries.html">AAI + * Custom queries</a></a> + */ +public class NamedNodeAdapter extends TypeAdapter<NamedNode> { + + @Override + public void write(JsonWriter jsonWriter, NamedNode namedNode) { + throw new UnsupportedOperationException("This model is read only!"); + } + + @Override + public NamedNode read(JsonReader jsonReader) throws IOException { + jsonReader.beginObject(); + Builder nodeBuilder = ImmutableNamedNode.builder().name(jsonReader.nextName()); + readProperties(jsonReader, nodeBuilder); + jsonReader.endObject(); + + return nodeBuilder.build(); + } + + private void readProperties(JsonReader jsonReader, Builder nodeBuilder) throws IOException { + jsonReader.beginObject(); + while (jsonReader.hasNext()) { + String key = jsonReader.nextName(); + switch (jsonReader.peek()) { + case STRING: + nodeBuilder.putProperties(key, jsonReader.nextString()); + break; + case NUMBER: + nodeBuilder.putProperties(key, jsonReader.nextInt()); + break; + case BOOLEAN: + nodeBuilder.putProperties(key, jsonReader.nextBoolean()); + break; + default: + jsonReader.skipValue(); + } + } + jsonReader.endObject(); + } +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNodes.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNodes.java new file mode 100644 index 00000000..6a463ddf --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/NamedNodes.java @@ -0,0 +1,40 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model.queries; + +import com.google.gson.annotations.SerializedName; +import java.util.List; +import org.immutables.gson.Gson; +import org.immutables.value.Value; + +/** + * @see NamedNode + * @see PnfQuery + * @see <a href="https://docs.onap.org/en/dublin/submodules/aai/aai-common.git/docs/AAI%20REST%20API%20Documentation/customQueries.html">AAI + * Custom queries</a></a> + */ +@Value.Immutable +@Gson.TypeAdapters(fieldNamingStrategy = true) +public interface NamedNodes { + + @SerializedName(value = "results") + List<NamedNode> results(); +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/PnfQuery.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/PnfQuery.java new file mode 100644 index 00000000..7a9025aa --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/queries/PnfQuery.java @@ -0,0 +1,54 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model.queries; + +import static java.util.Arrays.asList; +import static org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod.PUT; + +import com.google.gson.annotations.SerializedName; +import java.util.List; +import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.Request; +import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod; + +/** + * @see NamedNodes + * @see <a href="https://docs.onap.org/en/dublin/submodules/aai/aai-common.git/docs/AAI%20REST%20API%20Documentation/customQueries.html">AAI + * Custom queries</a></a> + */ +public class PnfQuery implements Request { + + @SerializedName("start") + private final List<String> startNodes; + + public PnfQuery(String pnfName) { + this.startNodes = asList("/nodes/pnfs/pnf/" + pnfName); + } + + @Override + public HttpMethod method() { + return PUT; + } + + @Override + public String uri() { + return "/query?format=resource&subgraph=star&nodesOnly=true"; + } +}
\ No newline at end of file diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/utils/PrhModelAwareGsonBuilder.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/utils/PrhModelAwareGsonBuilder.java new file mode 100644 index 00000000..e01711a7 --- /dev/null +++ b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/utils/PrhModelAwareGsonBuilder.java @@ -0,0 +1,41 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcaegen2.services.prh.model.utils; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.TypeAdapterFactory; +import java.util.ServiceLoader; +import org.onap.dcaegen2.services.prh.model.queries.NamedNode; +import org.onap.dcaegen2.services.prh.model.queries.NamedNodeAdapter; + +public final class PrhModelAwareGsonBuilder { + + private static final Iterable<TypeAdapterFactory> TYPE_ADAPTER_FACTORIES = + ServiceLoader.load(TypeAdapterFactory.class); + + public static Gson createGson() { + GsonBuilder gsonBuilder = new GsonBuilder(); + TYPE_ADAPTER_FACTORIES.forEach(gsonBuilder::registerTypeAdapterFactory); + gsonBuilder.registerTypeAdapter(NamedNode.class, new NamedNodeAdapter()); + return gsonBuilder.create(); + } +} diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/ssl/SslFactory.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/ssl/SslFactory.java deleted file mode 100644 index 60e1224e..00000000 --- a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/ssl/SslFactory.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * PNF-REGISTRATION-HANDLER - * ================================================================================ - * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. - * ================================================================================ - * 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.dcaegen2.services.prh.ssl; - -import io.netty.handler.ssl.SslContext; -import io.netty.handler.ssl.SslContextBuilder; -import io.netty.handler.ssl.util.InsecureTrustManagerFactory; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.security.GeneralSecurityException; -import java.security.KeyStore; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.SSLException; -import javax.net.ssl.TrustManagerFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SslFactory { - - private static final Logger LOGGER = LoggerFactory.getLogger(SslFactory.class); - - /** - * Function for creating secure ssl context. - * - * @param keyStorePath - path to file with keystore - * @param keyStorePasswordPath - path to file with keystore password - * @param trustStorePath - path to file with truststore - * @param trustStorePasswordPath - path to file with truststore password - * @return configured ssl context - */ - public SslContext createSecureContext(String keyStorePath, - String keyStorePasswordPath, - String trustStorePath, - String trustStorePasswordPath) throws SSLException { - LOGGER.info("Creating secure ssl context for: {} {}", keyStorePath, trustStorePath); - try { - return SslContextBuilder - .forClient() - .keyManager(keyManagerFactory(keyStorePath, loadPasswordFromFile(keyStorePasswordPath))) - .trustManager(trustManagerFactory(trustStorePath, loadPasswordFromFile(trustStorePasswordPath))) - .build(); - } catch (GeneralSecurityException | IOException ex) { - throw new SSLException(ex); - } - } - - /** - * Function for creating insecure ssl context. - * - * @return configured insecure ssl context - */ - public SslContext createInsecureContext() throws SSLException { - LOGGER.info("Creating insecure ssl context"); - return SslContextBuilder - .forClient() - .trustManager(InsecureTrustManagerFactory.INSTANCE) - .build(); - } - - private KeyManagerFactory keyManagerFactory(String path, String password) - throws GeneralSecurityException, IOException { - KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - kmf.init(loadKeyStoreFromFile(path, password), - password.toCharArray()); - return kmf; - } - - private TrustManagerFactory trustManagerFactory(String path, String password) - throws GeneralSecurityException, IOException { - TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - tmf.init(loadKeyStoreFromFile(path, password)); - return tmf; - } - - private KeyStore loadKeyStoreFromFile(String path, String keyStorePassword) - throws GeneralSecurityException, IOException { - KeyStore ks = KeyStore.getInstance("jks"); - ks.load(getResource(path), keyStorePassword.toCharArray()); - return ks; - } - - private InputStream getResource(String path) throws FileNotFoundException { - return new FileInputStream(path); - } - - private String loadPasswordFromFile(String path) throws IOException { - return new String(Files.readAllBytes(Paths.get(path))); - } -} |