Merge "Add WorkflowSpecification Beans for APIH"
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / client / adapter / network / mapper / NetworkAdapterObjectMapper.java
index ee8f503..8c774d8 100644 (file)
@@ -22,21 +22,31 @@ package org.onap.so.client.adapter.network.mapper;
 
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.UUID;
 
+import org.apache.commons.lang3.StringUtils;
 import org.modelmapper.ModelMapper;
 import org.modelmapper.PropertyMap;
 import org.onap.so.adapters.nwrest.ContrailNetwork;
 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
+import org.onap.so.adapters.nwrest.NetworkTechnology;
 import org.onap.so.adapters.nwrest.ProviderVlanNetwork;
 import org.onap.so.adapters.nwrest.RollbackNetworkRequest;
 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
 import org.onap.so.bpmn.core.UrnPropertiesReader;
-import org.onap.so.bpmn.servicedecomposition.bbobjects.*;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoNetwork;
@@ -44,6 +54,8 @@ import org.onap.so.entity.MsoRequest;
 import org.onap.so.openstack.beans.NetworkRollback;
 import org.onap.so.openstack.beans.RouteTarget;
 import org.onap.so.openstack.beans.Subnet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.web.util.UriUtils;
 
@@ -51,6 +63,7 @@ import org.springframework.web.util.UriUtils;
 public class NetworkAdapterObjectMapper {
        private static final ModelMapper modelMapper = new ModelMapper();
        private static String FORWARD_SLASH = "/";
+       private static final Logger logger = LoggerFactory.getLogger(NetworkAdapterObjectMapper.class);
 
        public CreateNetworkRequest createNetworkRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, OrchestrationContext orchestrationContext, ServiceInstance serviceInstance, L3Network l3Network, Map<String, String> userInput, String cloudRegionPo, Customer customer) throws UnsupportedEncodingException {
                CreateNetworkRequest createNetworkRequest = new CreateNetworkRequest();
@@ -74,13 +87,24 @@ public class NetworkAdapterObjectMapper {
                //build and set provider Vlan Network
                ProviderVlanNetwork providerVlanNetwork = buildProviderVlanNetwork(l3Network);
                createNetworkRequest.setProviderVlanNetwork(providerVlanNetwork);
+               String networkTechnology = l3Network.getModelInfoNetwork().getNetworkTechnology();
+               if(networkTechnology == null) {
+                       networkTechnology = l3Network.getNetworkTechnology();
+                       logger.warn("NetworkTechnology was null in CatalogDB. Using field from AAI: " + networkTechnology);
+               }
+               if (networkTechnology != null) {
+                       createNetworkRequest.setNetworkTechnology(networkTechnology.toUpperCase());
+                       if (createNetworkRequest.getNetworkTechnology().contains("CONTRAIL")) {
+                               createNetworkRequest.setContrailRequest(true);
+                       }
+               }
                
                //build and set Contrail Network
                ContrailNetwork contrailNetwork = buildContrailNetwork(l3Network, customer);
                createNetworkRequest.setContrailNetwork(contrailNetwork);
                
-               //set Network Parameters from VID request
-               createNetworkRequest.setNetworkParams(userInput);
+               //set Network Parameters from VID request, add "shared" and "external" to this map
+               createNetworkRequest.setNetworkParams(addSharedAndExternal(userInput, l3Network));
                
                createNetworkRequest = setFlowFlags(createNetworkRequest, orchestrationContext);
 
@@ -88,12 +112,11 @@ public class NetworkAdapterObjectMapper {
                
                String messageId = getRandomUuid();
                createNetworkRequest.setMessageId(messageId);
-               //TODO clarify callback URL build process
-               //createNetworkRequest.setNotificationUrl(createCallbackUrl("NetworkAResponse", messageId));
+               createNetworkRequest.setNotificationUrl(createCallbackUrl("NetworkAResponse", messageId));
 
                return createNetworkRequest;
        }
-       
+
        public DeleteNetworkRequest deleteNetworkRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, ServiceInstance serviceInstance, L3Network l3Network) throws UnsupportedEncodingException {
                DeleteNetworkRequest deleteNetworkRequest = new DeleteNetworkRequest();
                
@@ -109,11 +132,18 @@ public class NetworkAdapterObjectMapper {
                
                deleteNetworkRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
                deleteNetworkRequest.setNetworkId(l3Network.getNetworkId());
-               deleteNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
+               if (!StringUtils.isEmpty(l3Network.getHeatStackId())){
+                       deleteNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
+               }
+               else {
+                       deleteNetworkRequest.setNetworkStackId(l3Network.getNetworkName());
+               }
                deleteNetworkRequest.setNetworkType(l3Network.getNetworkType());
                deleteNetworkRequest.setSkipAAI(true);
                deleteNetworkRequest.setTenantId(cloudRegion.getTenantId());
                
+               deleteNetworkRequest.setNotificationUrl(createCallbackUrl("NetworkAResponse", messageId));
+               
                return deleteNetworkRequest;
        }
        
@@ -147,7 +177,7 @@ public class NetworkAdapterObjectMapper {
                updateNetworkRequest.setSubnets(buildOpenstackSubnetList(l3Network));
                updateNetworkRequest.setProviderVlanNetwork(buildProviderVlanNetwork(l3Network));
                updateNetworkRequest.setContrailNetwork(buildContrailNetwork(l3Network, customer));
-               updateNetworkRequest.setNetworkParams(userInput);
+               updateNetworkRequest.setNetworkParams(addSharedAndExternal(userInput, l3Network));
                updateNetworkRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
                
                setFlowFlags(updateNetworkRequest, orchestrationContext);
@@ -159,11 +189,10 @@ public class NetworkAdapterObjectMapper {
                return updateNetworkRequest;
        }
        
-       private RollbackNetworkRequest setCommonRollbackRequestFields(RollbackNetworkRequest request,RequestContext requestContext){
-               //TODO confirm flag value
+       private RollbackNetworkRequest setCommonRollbackRequestFields(RollbackNetworkRequest request,RequestContext requestContext) throws UnsupportedEncodingException{
                request.setSkipAAI(true);
-               request.setMessageId(requestContext.getMsoRequestId());
-               //TODO clarify callback URL build process. This will also set SYNC flag
+               String messageId = requestContext.getMsoRequestId();
+               request.setMessageId(messageId);
                //request.setNotificationUrl(createCallbackUrl("NetworkAResponse", messageId));
                return request;
        }
@@ -232,6 +261,7 @@ public class NetworkAdapterObjectMapper {
                                    map(source.getGatewayAddress(), destination.getGatewayIp());
                                    map(source.getIpVersion(), destination.getIpVersion());
                                    map(source.isDhcpEnabled(), destination.getEnableDHCP());
+                                   map(source.getSubnetSequence(), destination.getSubnetSequence());
                                  }
                                };
                        modelMapper.addMappings(personMap);
@@ -252,6 +282,14 @@ public class NetworkAdapterObjectMapper {
                                //add host route to the list
                                openstackHostRouteList.add(openstackHostRoute);
                        }
+                       if (subnet.getDhcpStart() != null && !subnet.getDhcpStart().equals("")) {
+                               org.onap.so.openstack.beans.Pool openstackAllocationPool = new org.onap.so.openstack.beans.Pool();
+                               openstackAllocationPool.setStart(subnet.getDhcpStart());
+                               openstackAllocationPool.setEnd(subnet.getDhcpEnd());
+                               List<org.onap.so.openstack.beans.Pool> allocationPools = new ArrayList<>();
+                               allocationPools.add(openstackAllocationPool);
+                               openstackSubnet.setAllocationPools(allocationPools);
+                       }
                        openstackSubnet.setHostRoutes(openstackHostRouteList);
                        //add subnet to the list
                        subnetList.add(openstackSubnet);
@@ -273,8 +311,8 @@ public class NetworkAdapterObjectMapper {
 
        private ContrailNetwork buildContrailNetwork(L3Network l3Network, Customer customer){
                ContrailNetwork contrailNetwork = new ContrailNetwork();
-               contrailNetwork.setExternal(Boolean.toString(l3Network.isExternalNetwork()));
-               contrailNetwork.setShared(Boolean.toString(l3Network.isSharedNetwork()));
+               contrailNetwork.setExternal(Optional.ofNullable(l3Network.isIsExternalNetwork()).orElse(false).toString());
+               contrailNetwork.setShared(Optional.ofNullable(l3Network.isIsSharedNetwork()).orElse(false).toString());
                contrailNetwork.setPolicyFqdns(buildPolicyFqdns(l3Network.getNetworkPolicies()));
                contrailNetwork.setRouteTableFqdns(buildRouteTableFqdns(l3Network.getContrailNetworkRouteTableReferences()));
                if(customer!= null)
@@ -323,9 +361,8 @@ public class NetworkAdapterObjectMapper {
 
        private CreateNetworkRequest setFlowFlags(CreateNetworkRequest createNetworkRequest, OrchestrationContext orchestrationContext){
                //TODO confirm flag value
-               createNetworkRequest.setSkipAAI(true);
-               //revert suppressRollabck=TRUE into backout=FALSE and vice versa
-               createNetworkRequest.setBackout(orchestrationContext.getIsRollbackEnabled());
+               createNetworkRequest.setSkipAAI(true);          
+               createNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled()));
                //TODO confirm value - false by default
                createNetworkRequest.setFailIfExists(true);
                //NetworkTechnology(NetworkTechnology.NEUTRON); NOOP - default
@@ -333,9 +370,20 @@ public class NetworkAdapterObjectMapper {
        }
        
        private void setFlowFlags(UpdateNetworkRequest updateNetworkRequest, OrchestrationContext orchestrationContext){
-               updateNetworkRequest.setSkipAAI(true);
-               //revert suppressRollabck=TRUE into backout=FALSE and vice versa
-               updateNetworkRequest.setBackout(!Boolean.valueOf(orchestrationContext.getIsRollbackEnabled()));
+               updateNetworkRequest.setSkipAAI(true);          
+               updateNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled()));
                //NetworkTechnology(NetworkTechnology.NEUTRON); NOOP - default
        }
+       
+       private Map<String, String> addSharedAndExternal(Map<String, String> userInput, L3Network l3Network) {
+               if (userInput == null)
+                       userInput = new HashMap<String, String>();
+               if (!userInput.containsKey("shared")) {
+                       userInput.put("shared", Optional.ofNullable(l3Network.isIsSharedNetwork()).orElse(false).toString());
+               }
+               if (!userInput.containsKey("external")) {
+                       userInput.put("external", Optional.ofNullable(l3Network.isIsExternalNetwork()).orElse(false).toString());
+               }
+               return userInput;
+       }
 }