diff options
358 files changed, 11037 insertions, 26628 deletions
diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/audit/beans/AuditInventory.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/audit/beans/AuditInventory.java new file mode 100644 index 0000000000..025d40d7c4 --- /dev/null +++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/audit/beans/AuditInventory.java @@ -0,0 +1,74 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017-2019 AT&T 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.so.audit.beans; + +import java.io.Serializable; + +public class AuditInventory implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 4937350343452380760L; + + private String cloudRegion; + + private String cloudOwner; + + private String tenantId; + + private String heatStackName; + + public String getCloudRegion() { + return cloudRegion; + } + + public void setCloudRegion(String cloudRegion) { + this.cloudRegion = cloudRegion; + } + + public String getCloudOwner() { + return cloudOwner; + } + + public void setCloudOwner(String cloudOwner) { + this.cloudOwner = cloudOwner; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getHeatStackName() { + return heatStackName; + } + + public void setHeatStackName(String heatStackName) { + this.heatStackName = heatStackName; + } + + + +} diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java index f132f10ebb..14aee2f4f2 100644 --- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java +++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java @@ -29,6 +29,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import org.onap.so.adapters.vdu.CloudInfo; @@ -79,6 +80,7 @@ import com.woorea.openstack.base.client.OpenStackRequest; import com.woorea.openstack.base.client.OpenStackResponseException; import com.woorea.openstack.heat.Heat; import com.woorea.openstack.heat.model.CreateStackParam; +import com.woorea.openstack.heat.model.Resources; import com.woorea.openstack.heat.model.Stack; import com.woorea.openstack.heat.model.Stack.Output; import com.woorea.openstack.heat.model.Stacks; @@ -311,37 +313,23 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin{ Stack heatStack = null; try { - // Execute the actual Openstack command to create the Heat stack OpenStackRequest <Stack> request = heatClient.getStacks ().create (stack); - // Begin X-Auth-User - // Obtain an MSO token for the tenant CloudIdentity cloudIdentity = cloudSite.getIdentityService(); - // cloudIdentity.getMsoId(), cloudIdentity.getMsoPass() - //req request.header ("X-Auth-User", cloudIdentity.getMsoId ()); request.header ("X-Auth-Key", CryptoUtils.decryptCloudConfigPassword(cloudIdentity.getMsoPass ())); - LOGGER.debug ("headers added, about to executeAndRecordOpenstackRequest"); - //LOGGER.debug(this.requestToStringBuilder(stack).toString()); - // END - try to fix X-Auth-User heatStack = executeAndRecordOpenstackRequest (request); } catch (OpenStackResponseException e) { - // Since this came on the 'Create Stack' command, nothing was changed - // in the cloud. Return the error as an exception. - if (e.getStatus () == 409) { - // Stack already exists. Return a specific error for this case + if (e.getStatus () == 409) { MsoStackAlreadyExists me = new MsoStackAlreadyExists (stackName, tenantId, cloudSiteId); me.addContext (CREATE_STACK); throw me; - } else { - // Convert the OpenStackResponseException to an MsoOpenstackException + } else { LOGGER.debug("ERROR STATUS = " + e.getStatus() + ",\n" + e.getMessage() + "\n" + e.getLocalizedMessage()); throw heatExceptionToMsoException (e, CREATE_STACK); } - } catch (OpenStackConnectException e) { - // Error connecting to Openstack instance. Convert to an MsoException + } catch (OpenStackConnectException e) { throw heatExceptionToMsoException (e, CREATE_STACK); - } catch (RuntimeException e) { - // Catch-all + } catch (RuntimeException e) { throw runtimeExceptionToMsoException (e, CREATE_STACK); } @@ -349,211 +337,197 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin{ // Otherwise, simple query by name returns a 302 redirect. // NOTE: This is specific to the v1 Orchestration API. String canonicalName = stackName + "/" + heatStack.getId (); - - // If client has requested a final response, poll for stack completion + if (pollForCompletion) { - // Set a time limit on overall polling. - // Use the resource (template) timeout for Openstack (expressed in minutes) - // and add one poll interval to give Openstack a chance to fail on its own.s - - int createPollInterval = Integer.parseInt(this.environment.getProperty(createPollIntervalProp, createPollIntervalDefault)); - int pollTimeout = (timeoutMinutes * 60) + createPollInterval; - // New 1610 - poll on delete if we rollback - use same values for now - int deletePollInterval = createPollInterval; - int deletePollTimeout = pollTimeout; - boolean createTimedOut = false; - StringBuilder stackErrorStatusReason = new StringBuilder(""); - LOGGER.debug("createPollInterval=" + createPollInterval + ", pollTimeout=" + pollTimeout); - - while (true) { - try { - heatStack = queryHeatStack (heatClient, canonicalName); - LOGGER.debug (heatStack.getStackStatus () + " (" + canonicalName + ")"); - try { - LOGGER.debug("Current stack " + this.getOutputsAsStringBuilder(heatStack).toString()); - } catch (Exception e) { - LOGGER.debug("an error occurred trying to print out the current outputs of the stack", e); - } - - if ("CREATE_IN_PROGRESS".equals (heatStack.getStackStatus ())) { - // Stack creation is still running. - // Sleep and try again unless timeout has been reached - if (pollTimeout <= 0) { - // Note that this should not occur, since there is a timeout specified - // in the Openstack call. - LOGGER.error (MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, stackName, heatStack.getStackStatus (), "", "", MsoLogger.ErrorCode.AvailabilityError, "Create stack timeout"); - createTimedOut = true; - break; - } - - sleep(createPollInterval * 1000L); - - pollTimeout -= createPollInterval; - LOGGER.debug("pollTimeout remaining: " + pollTimeout); - } else { - //save off the status & reason msg before we attempt delete - stackErrorStatusReason.append("Stack error (" + heatStack.getStackStatus() + "): " + heatStack.getStackStatusReason()); - break; - } - } catch (MsoException me) { - // Cannot query the stack status. Something is wrong. - // Try to roll back the stack - if (!backout) - { - LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion suppressed", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in Create Stack, stack deletion suppressed"); - } - else - { - try { - LOGGER.debug("Create Stack error - unable to query for stack status - attempting to delete stack: " + canonicalName + " - This will likely fail and/or we won't be able to query to see if delete worked"); - OpenStackRequest <Void> request = heatClient.getStacks ().deleteByName (canonicalName); - executeAndRecordOpenstackRequest (request); - // this may be a waste of time - if we just got an exception trying to query the stack - we'll just - // get another one, n'est-ce pas? - boolean deleted = false; - while (!deleted) { - try { - heatStack = queryHeatStack(heatClient, canonicalName); - if (heatStack != null) { - LOGGER.debug(heatStack.getStackStatus()); - if ("DELETE_IN_PROGRESS".equals(heatStack.getStackStatus())) { - if (deletePollTimeout <= 0) { - LOGGER.error (MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, stackName, - heatStack.getStackStatus (), "", "", MsoLogger.ErrorCode.AvailabilityError, - "Rollback: DELETE stack timeout"); - break; - } else { - sleep(deletePollInterval * 1000L); - deletePollTimeout -= deletePollInterval; - } - } else if ("DELETE_COMPLETE".equals(heatStack.getStackStatus())){ - LOGGER.debug("DELETE_COMPLETE for " + canonicalName); - deleted = true; - continue; - } else { - //got a status other than DELETE_IN_PROGRESS or DELETE_COMPLETE - so break and evaluate - break; - } - } else { - // assume if we can't find it - it's deleted - LOGGER.debug("heatStack returned null - assume the stack " + canonicalName + " has been deleted"); - deleted = true; - continue; - } - - } catch (Exception e3) { - // Just log this one. We will report the original exception. - LOGGER.error (MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e3, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack: Nested exception rolling back stack on error on query"); - - } - } - } catch (Exception e2) { - // Just log this one. We will report the original exception. - LOGGER.error (MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e2, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack: Nested exception rolling back stack"); - } - } - - // Propagate the original exception from Stack Query. - me.addContext (CREATE_STACK); - throw me; - } - } - - if (!"CREATE_COMPLETE".equals (heatStack.getStackStatus ())) { - LOGGER.error (MessageEnum.RA_CREATE_STACK_ERR, "Create Stack error: Polling complete with non-success status: " - + heatStack.getStackStatus () + ", " + heatStack.getStackStatusReason (), "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error"); - - // Rollback the stack creation, since it is in an indeterminate state. - if (!backout) - { - LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion suppressed", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error, stack deletion suppressed"); - } - else - { - try { - LOGGER.debug("Create Stack errored - attempting to DELETE stack: " + canonicalName); - LOGGER.debug("deletePollInterval=" + deletePollInterval + ", deletePollTimeout=" + deletePollTimeout); - OpenStackRequest <Void> request = heatClient.getStacks ().deleteByName (canonicalName); - executeAndRecordOpenstackRequest (request); - boolean deleted = false; - while (!deleted) { - try { - heatStack = queryHeatStack(heatClient, canonicalName); - if (heatStack != null) { - LOGGER.debug(heatStack.getStackStatus() + " (" + canonicalName + ")"); - if ("DELETE_IN_PROGRESS".equals(heatStack.getStackStatus())) { - if (deletePollTimeout <= 0) { - LOGGER.error (MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, stackName, - heatStack.getStackStatus (), "", "", MsoLogger.ErrorCode.AvailabilityError, - "Rollback: DELETE stack timeout"); - break; - } else { - sleep(deletePollInterval * 1000L); - deletePollTimeout -= deletePollInterval; - LOGGER.debug("deletePollTimeout remaining: " + deletePollTimeout); - } - } else if ("DELETE_COMPLETE".equals(heatStack.getStackStatus())){ - LOGGER.debug("DELETE_COMPLETE for " + canonicalName); - deleted = true; - continue; - } else if ("DELETE_FAILED".equals(heatStack.getStackStatus())) { - // Warn about this (?) - but still throw the original exception - LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion FAILED", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error, stack deletion FAILED"); - LOGGER.debug("Stack deletion FAILED on a rollback of a create - " + canonicalName + ", status=" + heatStack.getStackStatus() + ", reason=" + heatStack.getStackStatusReason()); - break; - } else { - //got a status other than DELETE_IN_PROGRESS or DELETE_COMPLETE - so break and evaluate - break; - } - } else { - // assume if we can't find it - it's deleted - LOGGER.debug("heatStack returned null - assume the stack " + canonicalName + " has been deleted"); - deleted = true; - continue; - } - - } catch (MsoException me2) { - // We got an exception on the delete - don't throw this exception - throw the original - just log. - LOGGER.debug("Exception thrown trying to delete " + canonicalName + " on a create->rollback: " + me2.getContextMessage(), me2); - LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, then stack deletion FAILED - exception thrown", "", "", MsoLogger.ErrorCode.BusinessProcesssError, me2.getContextMessage()); - } - - } // end while !deleted - StringBuilder errorContextMessage; - if (createTimedOut) { - errorContextMessage = new StringBuilder("Stack Creation Timeout"); - } else { - errorContextMessage = stackErrorStatusReason; - } - if (deleted) { - errorContextMessage.append(" - stack successfully deleted"); - } else { - errorContextMessage.append(" - encountered an error trying to delete the stack"); - } -// MsoOpenstackException me = new MsoOpenstackException(0, "", stackErrorStatusReason.toString()); - // me.addContext(CREATE_STACK); - - // throw me; - } catch (Exception e2) { - // shouldn't happen - but handle - LOGGER.error (MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e2, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in Create Stack: rolling back stack"); - } - } - MsoOpenstackException me = new MsoOpenstackException(0, "", stackErrorStatusReason.toString()); - me.addContext(CREATE_STACK); - - throw me; - } - + heatStack = pollStackForCompletion(cloudSiteId, tenantId, stackName, timeoutMinutes, backout, heatClient, + heatStack, canonicalName); } else { // Get initial status, since it will have been null after the create. heatStack = queryHeatStack (heatClient, canonicalName); LOGGER.debug (heatStack.getStackStatus ()); } - return new StackInfoMapper(heatStack).map(); } + private Stack pollStackForCompletion(String cloudSiteId, String tenantId, String stackName, int timeoutMinutes, + boolean backout, Heat heatClient, Stack heatStack, String canonicalName) + throws MsoException, MsoOpenstackException { + int createPollInterval = Integer.parseInt(this.environment.getProperty(createPollIntervalProp, createPollIntervalDefault)); + int pollTimeout = (timeoutMinutes * 60) + createPollInterval; + int deletePollInterval = createPollInterval; + int deletePollTimeout = pollTimeout; + boolean createTimedOut = false; + StringBuilder stackErrorStatusReason = new StringBuilder(""); + LOGGER.debug("createPollInterval=" + createPollInterval + ", pollTimeout=" + pollTimeout); + + while (true) { + try { + heatStack = queryHeatStack (heatClient, canonicalName); + LOGGER.debug (heatStack.getStackStatus () + " (" + canonicalName + ")"); + try { + LOGGER.debug("Current stack " + this.getOutputsAsStringBuilder(heatStack).toString()); + } catch (Exception e) { + LOGGER.debug("an error occurred trying to print out the current outputs of the stack", e); + } + + if ("CREATE_IN_PROGRESS".equals (heatStack.getStackStatus ())) { + if (pollTimeout <= 0) { + LOGGER.error (MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, stackName, heatStack.getStackStatus (), "", "", MsoLogger.ErrorCode.AvailabilityError, "Create stack timeout"); + createTimedOut = true; + break; + } + sleep(createPollInterval * 1000L); + pollTimeout -= createPollInterval; + LOGGER.debug("pollTimeout remaining: " + pollTimeout); + } else { + stackErrorStatusReason.append("Stack error (" + heatStack.getStackStatus() + "): " + heatStack.getStackStatusReason()); + break; + } + } catch (MsoException me) { + // Cannot query the stack status. Something is wrong. + // Try to roll back the stack + if (!backout) + { + LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion suppressed", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in Create Stack, stack deletion suppressed"); + } + else + { + try { + LOGGER.debug("Create Stack error - unable to query for stack status - attempting to delete stack: " + canonicalName + " - This will likely fail and/or we won't be able to query to see if delete worked"); + OpenStackRequest <Void> request = heatClient.getStacks ().deleteByName (canonicalName); + executeAndRecordOpenstackRequest (request); + boolean deleted = false; + while (!deleted) { + try { + heatStack = queryHeatStack(heatClient, canonicalName); + if (heatStack != null) { + LOGGER.debug(heatStack.getStackStatus()); + if ("DELETE_IN_PROGRESS".equals(heatStack.getStackStatus())) { + if (deletePollTimeout <= 0) { + LOGGER.error (MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, stackName, + heatStack.getStackStatus (), "", "", MsoLogger.ErrorCode.AvailabilityError, + "Rollback: DELETE stack timeout"); + break; + } else { + sleep(deletePollInterval * 1000L); + deletePollTimeout -= deletePollInterval; + } + } else if ("DELETE_COMPLETE".equals(heatStack.getStackStatus())){ + LOGGER.debug("DELETE_COMPLETE for " + canonicalName); + deleted = true; + continue; + } else { + //got a status other than DELETE_IN_PROGRESS or DELETE_COMPLETE - so break and evaluate + break; + } + } else { + // assume if we can't find it - it's deleted + LOGGER.debug("heatStack returned null - assume the stack " + canonicalName + " has been deleted"); + deleted = true; + continue; + } + + } catch (Exception e3) { + // Just log this one. We will report the original exception. + LOGGER.error (MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e3, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack: Nested exception rolling back stack on error on query"); + + } + } + } catch (Exception e2) { + // Just log this one. We will report the original exception. + LOGGER.error (MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e2, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack: Nested exception rolling back stack"); + } + } + + // Propagate the original exception from Stack Query. + me.addContext (CREATE_STACK); + throw me; + } + } + + if (!"CREATE_COMPLETE".equals (heatStack.getStackStatus ())) { + LOGGER.error (MessageEnum.RA_CREATE_STACK_ERR, "Create Stack error: Polling complete with non-success status: " + + heatStack.getStackStatus () + ", " + heatStack.getStackStatusReason (), "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error"); + + // Rollback the stack creation, since it is in an indeterminate state. + if (!backout) + { + LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion suppressed", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error, stack deletion suppressed"); + } + else + { + try { + LOGGER.debug("Create Stack errored - attempting to DELETE stack: " + canonicalName); + LOGGER.debug("deletePollInterval=" + deletePollInterval + ", deletePollTimeout=" + deletePollTimeout); + OpenStackRequest <Void> request = heatClient.getStacks ().deleteByName (canonicalName); + executeAndRecordOpenstackRequest (request); + boolean deleted = false; + while (!deleted) { + try { + heatStack = queryHeatStack(heatClient, canonicalName); + if (heatStack != null) { + LOGGER.debug(heatStack.getStackStatus() + " (" + canonicalName + ")"); + if ("DELETE_IN_PROGRESS".equals(heatStack.getStackStatus())) { + if (deletePollTimeout <= 0) { + LOGGER.error (MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, stackName, + heatStack.getStackStatus (), "", "", MsoLogger.ErrorCode.AvailabilityError, + "Rollback: DELETE stack timeout"); + break; + } else { + sleep(deletePollInterval * 1000L); + deletePollTimeout -= deletePollInterval; + LOGGER.debug("deletePollTimeout remaining: " + deletePollTimeout); + } + } else if ("DELETE_COMPLETE".equals(heatStack.getStackStatus())){ + LOGGER.debug("DELETE_COMPLETE for " + canonicalName); + deleted = true; + continue; + } else if ("DELETE_FAILED".equals(heatStack.getStackStatus())) { + // Warn about this (?) - but still throw the original exception + LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion FAILED", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error, stack deletion FAILED"); + LOGGER.debug("Stack deletion FAILED on a rollback of a create - " + canonicalName + ", status=" + heatStack.getStackStatus() + ", reason=" + heatStack.getStackStatusReason()); + break; + } else { + //got a status other than DELETE_IN_PROGRESS or DELETE_COMPLETE - so break and evaluate + break; + } + } else { + // assume if we can't find it - it's deleted + LOGGER.debug("heatStack returned null - assume the stack " + canonicalName + " has been deleted"); + deleted = true; + continue; + } + + } catch (MsoException me2) { + // We got an exception on the delete - don't throw this exception - throw the original - just log. + LOGGER.debug("Exception thrown trying to delete " + canonicalName + " on a create->rollback: " + me2.getContextMessage(), me2); + LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, then stack deletion FAILED - exception thrown", "", "", MsoLogger.ErrorCode.BusinessProcesssError, me2.getContextMessage()); + } + + } // end while !deleted + StringBuilder errorContextMessage; + if (createTimedOut) { + errorContextMessage = new StringBuilder("Stack Creation Timeout"); + } else { + errorContextMessage = stackErrorStatusReason; + } + if (deleted) { + errorContextMessage.append(" - stack successfully deleted"); + } else { + errorContextMessage.append(" - encountered an error trying to delete the stack"); + } + } catch (Exception e2) { + // shouldn't happen - but handle + LOGGER.error (MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e2, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in Create Stack: rolling back stack"); + } + } + MsoOpenstackException me = new MsoOpenstackException(0, "", stackErrorStatusReason.toString()); + me.addContext(CREATE_STACK); + throw me; + } + return heatStack; + } + /** * Query for a single stack (by Name) in a tenant. This call will always return a * StackInfo object. If the stack does not exist, an "empty" StackInfo will be @@ -1231,7 +1205,7 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin{ sb.append("[END]"); return sb; } - + public void copyBaseOutputsToInputs(Map<String, Object> inputs, Map<String, Object> otherStackOutputs, List<String> paramNames, Map<String, String> aliases) { @@ -1727,6 +1701,22 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin{ return vduStatus; } + + public Resources queryStackResources(String cloudSiteId, String tenantId, String stackName) throws MsoException { + CloudSite cloudSite = cloudConfig.getCloudSite(cloudSiteId) + .orElseThrow(() -> new MsoCloudSiteNotFound(cloudSiteId)); + Heat heatClient = getHeatClient(cloudSite, tenantId); + OpenStackRequest<Resources> request = heatClient.getResources().listResources(stackName); + return executeAndRecordOpenstackRequest(request); + } + + public <R> R executeHeatClientRequest(String url, String cloudSiteId, String tenantId, Class<R> returnType) throws MsoException { + CloudSite cloudSite = cloudConfig.getCloudSite(cloudSiteId) + .orElseThrow(() -> new MsoCloudSiteNotFound(cloudSiteId)); + Heat heatClient = getHeatClient(cloudSite, tenantId); + OpenStackRequest<R> request = heatClient.get(url, returnType); + return executeAndRecordOpenstackRequest(request); + } protected void sleep(long time) { try { diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoMulticloudUtils.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoMulticloudUtils.java index c9b70610d1..5c0110b680 100644 --- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoMulticloudUtils.java +++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoMulticloudUtils.java @@ -28,12 +28,9 @@ import java.util.List; import java.util.Map; import java.util.Scanner; -import javax.ws.rs.core.UriBuilderException; import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriBuilderException; -import org.onap.so.client.HttpClientFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.onap.so.adapters.vdu.CloudInfo; import org.onap.so.adapters.vdu.PluginAction; import org.onap.so.adapters.vdu.VduArtifact; @@ -44,20 +41,25 @@ import org.onap.so.adapters.vdu.VduModelInfo; import org.onap.so.adapters.vdu.VduPlugin; import org.onap.so.adapters.vdu.VduStateType; import org.onap.so.adapters.vdu.VduStatus; +import org.onap.so.client.HttpClientFactory; +import org.onap.so.client.RestClient; +import org.onap.so.db.catalog.beans.CloudSite; +import org.onap.so.logger.MessageEnum; +import org.onap.so.logger.MsoLogger; import org.onap.so.openstack.beans.HeatStatus; import org.onap.so.openstack.beans.StackInfo; +import org.onap.so.openstack.exceptions.MsoAdapterException; import org.onap.so.openstack.exceptions.MsoCloudSiteNotFound; import org.onap.so.openstack.exceptions.MsoException; import org.onap.so.openstack.exceptions.MsoOpenstackException; -import org.onap.so.client.RestClient; -import org.onap.so.db.catalog.beans.CloudSite; -import org.onap.so.logger.MessageEnum; -import org.onap.so.logger.MsoLogger; import org.onap.so.utils.TargetEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.woorea.openstack.heat.model.CreateStackParam; @@ -66,7 +68,7 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ public static final String OOF_DIRECTIVES = "oof_directives"; public static final String SDNC_DIRECTIVES = "sdnc_directives"; - public static final String GENERIC_VNF_ID = "generic_vnf_id"; + public static final String VNF_ID = "vnf_id"; public static final String VF_MODULE_ID = "vf_module_id"; public static final String TEMPLATE_TYPE = "template_type"; public static final List<String> MULTICLOUD_INPUTS = @@ -143,8 +145,8 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ logger.trace("Started MsoMulticloudUtils.createStack"); // Get the directives, if present. - String oofDirectives = ""; - String sdncDirectives = ""; + String oofDirectives = "{}"; + String sdncDirectives = "{}"; String genericVnfId = ""; String vfModuleId = ""; String templateType = ""; @@ -167,11 +169,11 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ } } - if (!stackInputs.isEmpty() && stackInputs.containsKey("VF_MODULE_ID")){ - vfModuleId = (String) stackInputs.get("VF_MODULE_ID"); + if (!stackInputs.isEmpty() && stackInputs.containsKey(VF_MODULE_ID)){ + vfModuleId = (String) stackInputs.get(VF_MODULE_ID); } - if (!stackInputs.isEmpty() && stackInputs.containsKey("GENERIC_VNF_ID")){ - genericVnfId = (String) stackInputs.get("GENERIC_VNF_ID"); + if (!stackInputs.isEmpty() && stackInputs.containsKey(VNF_ID)){ + genericVnfId = (String) stackInputs.get(VNF_ID); } // create the multicloud payload @@ -179,26 +181,17 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ MulticloudRequest multicloudRequest= new MulticloudRequest(); - try { - multicloudRequest.setGenericVnfId(genericVnfId); - multicloudRequest.setVfModuleId(vfModuleId); - multicloudRequest.setOofDirectives(JSON_MAPPER.readTree(oofDirectives)); - multicloudRequest.setSdncDirectives(JSON_MAPPER.readTree(sdncDirectives)); - multicloudRequest.setTemplateType(templateType); - if (logger.isDebugEnabled()) { - logger.debug(String.format("Stack Template Data is: %s", stack.toString().substring(16))); - } - multicloudRequest.setTemplateData(stack); - if (logger.isDebugEnabled()) { - logger.debug(String.format("Multicloud Request is: %s", multicloudRequest.toString())); - } - } catch (Exception e) { - logger.debug("ERROR making multicloud JSON body ", e); - } - String multicloudEndpoint = getMulticloudEndpoint(cloudSiteId, null); + multicloudRequest.setGenericVnfId(genericVnfId); + multicloudRequest.setVfModuleId(vfModuleId); + multicloudRequest.setTemplateType(templateType); + multicloudRequest.setTemplateData(stack); + multicloudRequest.setOofDirectives(getDirectiveNode(oofDirectives)); + multicloudRequest.setSdncDirectives(getDirectiveNode(sdncDirectives)); if (logger.isDebugEnabled()) { - logger.debug(String.format("Multicloud Endpoint is: %s", multicloudEndpoint)); + logger.debug(String.format("Multicloud Request is: %s", multicloudRequest.toString())); } + + String multicloudEndpoint = getMulticloudEndpoint(cloudSiteId, null); RestClient multicloudClient = getMulticloudClient(multicloudEndpoint); Response response = multicloudClient.post(multicloudRequest); @@ -207,17 +200,23 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ createInfo.setName(stackName); MulticloudCreateResponse multicloudResponseBody = null; - if (response.getStatus() == Response.Status.CREATED.getStatusCode() && response.hasEntity()) { + if (response.hasEntity()) { multicloudResponseBody = getCreateBody((java.io.InputStream)response.getEntity()); + } + if (response.getStatus() == Response.Status.CREATED.getStatusCode() && response.hasEntity()) { createInfo.setCanonicalName(stackName + "/" + multicloudResponseBody.getWorkloadId()); if (logger.isDebugEnabled()) { logger.debug("Multicloud Create Response Body: " + multicloudResponseBody); } return getStackStatus(cloudSiteId, tenantId, createInfo.getCanonicalName(), pollForCompletion, timeoutMinutes, backout); } else { - createInfo.setStatus(HeatStatus.FAILED); - createInfo.setStatusMessage(response.getStatusInfo().getReasonPhrase()); - return createInfo; + StringBuilder stackErrorStatusReason = new StringBuilder(response.getStatusInfo().getReasonPhrase()); + if (null != multicloudResponseBody) { + stackErrorStatusReason.append(multicloudResponseBody.toString()); + } + MsoOpenstackException me = new MsoOpenstackException(0, "", stackErrorStatusReason.toString()); + me.addContext(CREATE_STACK); + throw me; } } @@ -385,7 +384,7 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ if (pollTimeout <= 0) { // Note that this should not occur, since there is a timeout specified // in the Openstack (multicloud?) call. - logger.error(String.format("%d %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, instanceId, stackInfo.getStatus(), "", "", MsoLogger.ErrorCode.AvailabilityError, "Create stack timeout")); + logger.error(String.format("%s %s %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_TIMEOUT.toString(), cloudSiteId, tenantId, instanceId, stackInfo.getStatus(), "", "", MsoLogger.ErrorCode.AvailabilityError.getValue(), "Create stack timeout")); createTimedOut = true; break; } @@ -403,7 +402,7 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ // Cannot query the stack status. Something is wrong. // Try to roll back the stack if (!backout) { - logger.warn(String.format("%d %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion suppressed", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in Create Stack, stack deletion suppressed")); + logger.warn(String.format("%s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR.toString(), "Create Stack error, stack deletion suppressed", "", "", MsoLogger.ErrorCode.BusinessProcesssError.getValue(), "Exception in Create Stack, stack deletion suppressed")); } else { try { logger.debug("Create Stack error - unable to query for stack status - attempting to delete stack: " + instanceId + " - This will likely fail and/or we won't be able to query to see if delete worked"); @@ -417,8 +416,8 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ logger.debug("Deleting " + instanceId + ", status: " + queryInfo.getStatus()); if (HeatStatus.DELETING.equals(queryInfo.getStatus())) { if (deletePollTimeout <= 0) { - logger.error(String.format("%d %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, instanceId, - queryInfo.getStatus(), "", "", MsoLogger.ErrorCode.AvailabilityError, + logger.error(String.format("%s %s %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_TIMEOUT.toString(), cloudSiteId, tenantId, instanceId, + queryInfo.getStatus(), "", "", MsoLogger.ErrorCode.AvailabilityError.getValue(), "Rollback: DELETE stack timeout")); break; } else { @@ -435,12 +434,12 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ } } catch (Exception e3) { // Just log this one. We will report the original exception. - logger.error(String.format("%d %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e3, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack: Nested exception rolling back stack on error on query")); + logger.error(String.format("%s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR.toString(), "Create Stack: Nested exception rolling back stack: " + e3, "", "", MsoLogger.ErrorCode.BusinessProcesssError.getValue(), "Create Stack: Nested exception rolling back stack on error on query")); } } } catch (Exception e2) { // Just log this one. We will report the original exception. - logger.error(String.format("%d %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e2, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack: Nested exception rolling back stack")); + logger.error(String.format("%s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR.toString(), "Create Stack: Nested exception rolling back stack: " + e2, "", "", MsoLogger.ErrorCode.BusinessProcesssError.getValue(), "Create Stack: Nested exception rolling back stack")); } } @@ -451,12 +450,12 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ } if (!HeatStatus.CREATED.equals(stackInfo.getStatus())) { - logger.error(String.format("%d %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR, "Create Stack error: Polling complete with non-success status: " - + stackInfo.getStatus () + ", " + stackInfo.getStatusMessage(), "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error")); + logger.error(String.format("%s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR.toString(), "Create Stack error: Polling complete with non-success status: " + + stackInfo.getStatus () + ", " + stackInfo.getStatusMessage(), "", "", MsoLogger.ErrorCode.BusinessProcesssError.getValue(), "Create Stack error")); // Rollback the stack creation, since it is in an indeterminate state. if (!backout) { - logger.warn(String.format("%d %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion suppressed", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error, stack deletion suppressed")); + logger.warn(String.format("%s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR.toString(), "Create Stack errored, stack deletion suppressed", "", "", MsoLogger.ErrorCode.BusinessProcesssError.getValue(), "Create Stack error, stack deletion suppressed")); } else { @@ -471,8 +470,8 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ logger.debug("Deleting " + instanceId + ", status: " + queryInfo.getStatus()); if (HeatStatus.DELETING.equals(queryInfo.getStatus())) { if (deletePollTimeout <= 0) { - logger.error(String.format("%d %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_TIMEOUT, cloudSiteId, tenantId, instanceId, - queryInfo.getStatus(), "", "", MsoLogger.ErrorCode.AvailabilityError, + logger.error(String.format("%s %s %s %s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_TIMEOUT.toString(), cloudSiteId, tenantId, instanceId, + queryInfo.getStatus(), "", "", MsoLogger.ErrorCode.AvailabilityError.getValue(), "Rollback: DELETE stack timeout")); break; } else { @@ -485,14 +484,14 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ continue; } else { //got a status other than DELETE_IN_PROGRESS or DELETE_COMPLETE - so break and evaluate - logger.warn(String.format("%d %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, stack deletion FAILED", "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Create Stack error, stack deletion FAILED")); + logger.warn(String.format("%s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR.toString(), "Create Stack errored, stack deletion FAILED", "", "", MsoLogger.ErrorCode.BusinessProcesssError.getValue(), "Create Stack error, stack deletion FAILED")); logger.debug("Stack deletion FAILED on a rollback of a create - " + instanceId + ", status=" + queryInfo.getStatus() + ", reason=" + queryInfo.getStatusMessage()); break; } } catch (MsoException me2) { // Just log this one. We will report the original exception. logger.debug("Exception thrown trying to delete " + instanceId + " on a create->rollback: " + me2.getContextMessage(), me2); - logger.warn(String.format("%d %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, then stack deletion FAILED - exception thrown", "", "", MsoLogger.ErrorCode.BusinessProcesssError, me2.getContextMessage())); + logger.warn(String.format("%s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR.toString(), "Create Stack errored, then stack deletion FAILED - exception thrown", "", "", MsoLogger.ErrorCode.BusinessProcesssError.getValue(), me2.getContextMessage())); } } StringBuilder errorContextMessage; @@ -508,7 +507,7 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ } } catch (MsoException e2) { // shouldn't happen - but handle - logger.error(String.format("%d %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR, "Create Stack: Nested exception rolling back stack: " + e2, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in Create Stack: rolling back stack")); + logger.error(String.format("%s %s %s %s %d %s", MessageEnum.RA_CREATE_STACK_ERR.toString(), "Create Stack: Nested exception rolling back stack: " + e2, "", "", MsoLogger.ErrorCode.BusinessProcesssError.getValue(), "Exception in Create Stack: rolling back stack")); } } MsoOpenstackException me = new MsoOpenstackException(0, "", stackErrorStatusReason.toString()); @@ -611,6 +610,21 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin{ return client; } + private JsonNode getDirectiveNode(String directives) throws MsoException { + try { + return JSON_MAPPER.readTree(directives); + } catch (Exception e) { + logger.error(String.format("%s %s %s %s %d %s", + MessageEnum.RA_CREATE_STACK_ERR.toString(), + "Create Stack: " + e, "", "", + MsoLogger.ErrorCode.BusinessProcesssError.getValue(), + "Exception in Create Stack: Invalid JSON format of directives" + directives)); + MsoException me = new MsoAdapterException("Invalid JSON format of directives parameter: " + directives); + me.addContext(CREATE_STACK); + throw me; + } + } + /** * VduPlugin interface for instantiate function. * diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoCommonUtilsTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoCommonUtilsTest.java index 7ac92574a0..dbce712cb0 100644 --- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoCommonUtilsTest.java +++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoCommonUtilsTest.java @@ -24,7 +24,7 @@ package org.onap.so.openstack.utils; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/CreateNetworkRequest.java b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/CreateNetworkRequest.java index 3e4d18cb1b..153ee78cb0 100644 --- a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/CreateNetworkRequest.java +++ b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/CreateNetworkRequest.java @@ -54,7 +54,7 @@ public class CreateNetworkRequest extends NetworkRequestCommon { private String networkType; private String networkTypeVersion; private String modelCustomizationUuid; - private NetworkTechnology networkTechnology = NetworkTechnology.NEUTRON; + private String networkTechnology = "NEUTRON"; private List<Subnet> subnets; private ProviderVlanNetwork providerVlanNetwork; private ContrailNetwork contrailNetwork; @@ -62,7 +62,6 @@ public class CreateNetworkRequest extends NetworkRequestCommon { private Boolean backout = true; private Map<String,String> networkParams = new HashMap<>(); private MsoRequest msoRequest = new MsoRequest(); - @JsonProperty private boolean contrailRequest; public CreateNetworkRequest() { @@ -125,13 +124,12 @@ public class CreateNetworkRequest extends NetworkRequestCommon { this.networkTypeVersion = networkTypeVersion; } - public NetworkTechnology getNetworkTechnology() { + public String getNetworkTechnology() { return networkTechnology; } - public void setNetworkTechnology(NetworkTechnology networkTechnology) { + public void setNetworkTechnology(String networkTechnology) { this.networkTechnology = networkTechnology; - this.contrailRequest = determineContrail(); } public List<Subnet> getSubnets() { @@ -156,7 +154,6 @@ public class CreateNetworkRequest extends NetworkRequestCommon { public void setContrailNetwork(ContrailNetwork contrailNetwork) { this.contrailNetwork = contrailNetwork; - this.contrailRequest = determineContrail(); } public Boolean getFailIfExists() { @@ -195,12 +192,8 @@ public class CreateNetworkRequest extends NetworkRequestCommon { return this.contrailRequest; } - @JsonIgnore - protected void setContrailRequest(boolean contrailRequest) { + public void setContrailRequest(boolean contrailRequest) { this.contrailRequest = contrailRequest; } - private boolean determineContrail() { - return (networkTechnology == NetworkTechnology.CONTRAIL && (contrailNetwork != null)); - } } diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/UpdateNetworkRequest.java b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/UpdateNetworkRequest.java index a7976840b7..595662251f 100644 --- a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/UpdateNetworkRequest.java +++ b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/nwrest/UpdateNetworkRequest.java @@ -52,7 +52,7 @@ public class UpdateNetworkRequest extends NetworkRequestCommon { private String networkType; private String networkTypeVersion; private String modelCustomizationUuid; - private NetworkTechnology networkTechnology = NetworkTechnology.NEUTRON; + private String networkTechnology = "NEUTRON"; private List<Subnet> subnets; private ProviderVlanNetwork providerVlanNetwork; private ContrailNetwork contrailNetwork; @@ -130,13 +130,12 @@ public class UpdateNetworkRequest extends NetworkRequestCommon { this.networkTypeVersion = networkTypeVersion; } - public NetworkTechnology getNetworkTechnology() { + public String getNetworkTechnology() { return networkTechnology; } - public void setNetworkTechnology(NetworkTechnology networkTechnology) { + public void setNetworkTechnology(String networkTechnology) { this.networkTechnology = networkTechnology; - this.contrailRequest = determineContrail(); } public List<Subnet> getSubnets() { @@ -161,7 +160,6 @@ public class UpdateNetworkRequest extends NetworkRequestCommon { public void setContrailNetwork(ContrailNetwork contrailNetwork) { this.contrailNetwork = contrailNetwork; - this.contrailRequest = determineContrail(); } public Boolean getBackout() { @@ -195,8 +193,4 @@ public class UpdateNetworkRequest extends NetworkRequestCommon { return contrailRequest; } - private boolean determineContrail() { - return (networkTechnology == NetworkTechnology.CONTRAIL && (contrailNetwork != null)); - } - } diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java index d0caef33e4..a383aac77f 100644 --- a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java +++ b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java @@ -54,8 +54,8 @@ public class CreateVfModuleRequest extends VfRequestCommon { private String modelCustomizationUuid; private String requestType; - private Boolean failIfExists; - private Boolean backout; + private Boolean failIfExists = false; + private Boolean backout = true; private Boolean enableBridge; private Map<String, String> vfModuleParams = new HashMap<>(); diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/openstack/beans/Pool.java b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/openstack/beans/Pool.java index 1c82907f80..ca3a9c5a8d 100644 --- a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/openstack/beans/Pool.java +++ b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/openstack/beans/Pool.java @@ -20,14 +20,15 @@ package org.onap.so.openstack.beans; +import java.io.Serializable; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.EqualsBuilder; - - - -public class Pool { +public class Pool implements Serializable { private String start; private String end; + private static final long serialVersionUID = 768026109321305392L; /** * @return the start @@ -58,5 +59,19 @@ public class Pool { public String toString() { return "Allocation_pool [start=" + start + ", end=" + end + "]"; } + + @Override + public boolean equals(final Object other) { + if (!(other instanceof Pool)) { + return false; + } + Pool castOther = (Pool) other; + return new EqualsBuilder().append(start, castOther.start).append(end, castOther.end).isEquals(); + } + @Override + public int hashCode() { + return new HashCodeBuilder().append(start).append(end).toHashCode(); + } + } diff --git a/adapters/mso-adapters-rest-interface/src/test/java/org/onap/so/adapters/nwrest/NetworkRequestTest.java b/adapters/mso-adapters-rest-interface/src/test/java/org/onap/so/adapters/nwrest/NetworkRequestTest.java index 08851c2ce9..5e04fc49ee 100644 --- a/adapters/mso-adapters-rest-interface/src/test/java/org/onap/so/adapters/nwrest/NetworkRequestTest.java +++ b/adapters/mso-adapters-rest-interface/src/test/java/org/onap/so/adapters/nwrest/NetworkRequestTest.java @@ -38,13 +38,4 @@ public class NetworkRequestTest { assertEquals(true, networkResponse.isSynchronous()); } - @Test - public void isContrailRequest() { - CreateNetworkRequest networkResponse = new CreateNetworkRequest(); - assertEquals(false, networkResponse.isContrailRequest()); - networkResponse.setNetworkTechnology(NetworkTechnology.CONTRAIL); - assertEquals(false, networkResponse.isContrailRequest()); - networkResponse.setContrailNetwork(new ContrailNetwork()); - assertEquals(true, networkResponse.isContrailRequest()); - } } diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQuery.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQuery.java index 63ef8e6dd0..cc1b3ddb17 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQuery.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQuery.java @@ -57,7 +57,7 @@ public abstract class CatalogQuery { while (m.find()) { String key = template.substring(m.start() + 1, m.end() - 1); logger.debug("CatalogQuery key: {} contains key? {}", key , valueMap.containsKey(key)); - m.appendReplacement(result, valueMap.getOrDefault(key, "\"TBD\"")); + m.appendReplacement(result, Matcher.quoteReplacement(valueMap.getOrDefault(key, "\"TBD\""))); } m.appendTail(result); logger.debug("CatalogQuery return: {}", result.toString()); diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryAllottedResourceCustomization.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryAllottedResourceCustomization.java index 3dca6a395c..859666f446 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryAllottedResourceCustomization.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryAllottedResourceCustomization.java @@ -52,7 +52,8 @@ public class QueryAllottedResourceCustomization extends CatalogQuery { "\t\t\"nfFunction\" : <NF_FUNCTION>,\n"+ "\t\t\"nfType\" : <NF_TYPE>,\n"+ "\t\t\"nfRole\" : <NF_ROLE>,\n"+ - "\t\t\"nfNamingCode\" : <NF_NAMING_CODE>\n"+ + "\t\t\"nfNamingCode\" : <NF_NAMING_CODE>,\n"+ + "\t\t\"resourceInput\" : <RESOURCE_INPUT>\n"+ "\t}"; public QueryAllottedResourceCustomization() { @@ -117,7 +118,7 @@ public class QueryAllottedResourceCustomization extends CatalogQuery { put(valueMap, "MODEL_INSTANCE_NAME", o.getModelInstanceName()); put(valueMap, "TOSCA_NODE_TYPE", arNull ? null : o.getAllottedResource().getToscaNodeType()); put(valueMap, "ALLOTTED_RESOURCE_TYPE", arNull ? null : o.getAllottedResource().getSubcategory()); - put(valueMap, "ALLOTTED_RESOURCE_ROLE", o.getTargetNetworkRole()); + put(valueMap, "ALLOTTED_RESOURCE_ROLE", o.getTargetNetworkRole() != null ? o.getTargetNetworkRole() : o.getNfRole()); put(valueMap, "NF_TYPE", o.getNfType()); put(valueMap, "NF_ROLE", o.getNfRole()); put(valueMap, "NF_FUNCTION", o.getNfFunction()); @@ -125,6 +126,7 @@ public class QueryAllottedResourceCustomization extends CatalogQuery { put(valueMap, "PROVIDING_SERVICE_MODEL_INVARIANT_UUID", o.getProvidingServiceModelInvariantUUID()); put(valueMap, "PROVIDING_SERVICE_MODEL_UUID", o.getProvidingServiceModelUUID()); put(valueMap, "PROVIDING_SERVICE_MODEL_NAME", o.getProvidingServiceModelName()); + put(valueMap, "RESOURCE_INPUT", o.getResourceInput()); sb.append(sep).append(this.setTemplate(TEMPLATE, valueMap)); sep = ",\n"; diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipe.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipe.java index 8670b78e15..58a2e852f0 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipe.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipe.java @@ -22,6 +22,7 @@ package org.onap.so.adapters.catalogdb.catalogrest; import java.util.HashMap; import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.onap.so.db.catalog.beans.Recipe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,12 +57,18 @@ public class QueryResourceRecipe extends CatalogQuery{ @Override public String JSON2(boolean isArray, boolean isEmbed) { Map<String, String> valueMap = new HashMap<>(); - valueMap.put("id", null == resourceRecipe ? null :String.valueOf(resourceRecipe.getId())); - valueMap.put("action", null == resourceRecipe ? null :resourceRecipe.getAction()); - valueMap.put("orchestrationUri", null == resourceRecipe ? null : resourceRecipe.getOrchestrationUri()); - valueMap.put("recipeTimeout", null == resourceRecipe ? null : String.valueOf(resourceRecipe.getRecipeTimeout())); - valueMap.put("paramXSD", null == resourceRecipe ? null : resourceRecipe.getParamXsd()); - valueMap.put("description", null == resourceRecipe ? null : resourceRecipe.getDescription()); + valueMap.put("id", null == resourceRecipe || null == resourceRecipe.getId() + ? StringUtils.EMPTY :String.valueOf(resourceRecipe.getId())); + valueMap.put("action", null == resourceRecipe || null == resourceRecipe.getAction() + ? StringUtils.EMPTY :resourceRecipe.getAction()); + valueMap.put("orchestrationUri", null == resourceRecipe || null == resourceRecipe.getOrchestrationUri() + ? StringUtils.EMPTY : resourceRecipe.getOrchestrationUri()); + valueMap.put("recipeTimeout", null == resourceRecipe || null == resourceRecipe.getRecipeTimeout() + ? StringUtils.EMPTY : String.valueOf(resourceRecipe.getRecipeTimeout())); + valueMap.put("paramXSD", null == resourceRecipe || null == resourceRecipe.getParamXsd() + ? StringUtils.EMPTY : resourceRecipe.getParamXsd()); + valueMap.put("description", null == resourceRecipe || null == resourceRecipe.getDescription() + ? StringUtils.EMPTY : resourceRecipe.getDescription()); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false); String jsonStr = ""; diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceMacroHolder.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceMacroHolder.java index 3b50871a8d..edbf9749c6 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceMacroHolder.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceMacroHolder.java @@ -45,6 +45,7 @@ public class QueryServiceMacroHolder extends CatalogQuery { "\t\"serviceType\" : <SERVICE_TYPE>,\n"+ "\t\"serviceRole\" : <SERVICE_ROLE>,\n"+ "\t\"environmentContext\" : <ENVIRONMENT_CONTEXT>,\n"+ + "\t\"resourceOrder\" : <RESOURCE_ORDER>,\n"+ "\t\"workloadContext\" : <WORKLOAD_CONTEXT>,\n"+ "<_SERVICEVNFS_>,\n"+ "<_SERVICENETWORKS_>,\n"+ @@ -81,6 +82,7 @@ public class QueryServiceMacroHolder extends CatalogQuery { put(valueMap, "SERVICE_ROLE", service.getServiceRole()); put(valueMap, "ENVIRONMENT_CONTEXT", service.getEnvironmentContext()); put(valueMap, "WORKLOAD_CONTEXT", service.getWorkloadContext()); + put(valueMap, "RESOURCE_ORDER", service.getResourceOrder()); String subitem; subitem = new QueryServiceVnfs(service.getVnfCustomizations()).JSON2(true, true); diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceNetworks.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceNetworks.java index a2256f724a..f7457fda4a 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceNetworks.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceNetworks.java @@ -50,6 +50,7 @@ public class QueryServiceNetworks extends CatalogQuery { "\t\t\"toscaNodeType\" : <TOSCA_NODE_TYPE>,\n"+ "\t\t\"networkType\" : <NETWORK_TYPE>,\n"+ "\t\t\"networkTechnology\" : <NETWORK_TECHNOLOGY>,\n"+ + "\t\t\"resourceInput\" : <RESOURCE_INPUT>,\n"+ "\t\t\"networkRole\" : <NETWORK_ROLE>,\n"+ "\t\t\"networkScope\" : <NETWORK_SCOPE>\n"+ "\t}"; @@ -116,6 +117,7 @@ public class QueryServiceNetworks extends CatalogQuery { put(valueMap, "NETWORK_ROLE", o.getNetworkRole()); put(valueMap, "NETWORK_SCOPE", o.getNetworkScope()); put(valueMap, "NETWORK_TECHNOLOGY", o.getNetworkTechnology()); + put(valueMap, "RESOURCE_INPUT", o.getResourceInput()); sb.append(sep).append(this.setTemplate(TEMPLATE, valueMap)); sep = ",\n"; diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java index 82b6aa2aeb..4170047e0b 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java @@ -53,6 +53,7 @@ public class QueryServiceVnfs extends CatalogQuery { "\t\"nfRole\" : <NF_ROLE>,\n"+ "\t\"nfNamingCode\" : <NF_NAMING_CODE>,\n"+ "\t\"multiStageDesign\" : <MULTI_STEP_DESIGN>,\n"+ + "\t\"resourceInput\" : <RESOURCE_INPUT>,\n"+ "<_VFMODULES_>\n" + "\t}"; @@ -119,6 +120,7 @@ public class QueryServiceVnfs extends CatalogQuery { put(valueMap, "NF_ROLE", o.getNfRole()); put(valueMap, "NF_NAMING_CODE", o.getNfNamingCode()); put(valueMap, "MULTI_STEP_DESIGN", o.getMultiStageDesign()); + put(valueMap, "RESOURCE_INPUT", o.getResourceInput()); String subitem = new QueryVfModule(vrNull ? null : o.getVfModuleCustomizations()).JSON2(true, true); valueMap.put("_VFMODULES_", subitem.replaceAll("(?m)^", "\t\t")); diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java index 70f53133dd..dbb168bd15 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java @@ -520,6 +520,7 @@ public class CatalogDbAdapterRest { try { if (smUuid != null && !"".equals(smUuid)) { logger.debug("Query Csar by service model uuid: {}",smUuid); + Service service = serviceRepo.findFirstOneByModelUUIDOrderByModelVersionDesc(smUuid); if (service != null) { @@ -587,18 +588,22 @@ public class CatalogDbAdapterRest { if (null == recipe) { NetworkResource nResource = networkResourceRepo.findResourceByModelUUID(rmUuid); - if(null!=vnf) { - recipe = networkRecipeRepo.findFirstByModelNameAndActionAndVersionStr(nResource.getModelName(), action, vnf.getModelVersion()); - } - // for network fetch the default recipe - if (recipe == null) { - recipe = networkRecipeRepo.findFirstByModelNameAndAction("SDNC_DEFAULT", action); + + if(nResource != null) { + recipe = networkRecipeRepo.findFirstByModelNameAndActionAndVersionStr(nResource.getModelName(), action, nResource.getModelVersion()); + + // for network fetch the default recipe + if (recipe == null) { + recipe = networkRecipeRepo.findFirstByModelNameAndAction("SDNC_DEFAULT", action); + } } } if (null == recipe) { AllottedResource arResource = arResourceRepo.findResourceByModelUUID(rmUuid); - recipe = arRecipeRepo.findByModelNameAndActionAndVersion(arResource.getModelName(), action, arResource.getModelVersion()); + if (arResource != null) { + recipe = arRecipeRepo.findByModelNameAndActionAndVersion(arResource.getModelName(), action, arResource.getModelVersion()); + } } if (recipe != null) { QueryResourceRecipe resourceRecipe = new QueryResourceRecipe(recipe); diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.14___remove_retry_from_rainy_day_handling_table.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.14__RemoveRetryFromRainyDayHandlingTable.sql index e4b599a044..e4b599a044 100644 --- a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.14___remove_retry_from_rainy_day_handling_table.sql +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.14__RemoveRetryFromRainyDayHandlingTable.sql diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.15__UpdateRainyDayHandlerMacroForScaleOut.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.15__UpdateRainyDayHandlerMacroForScaleOut.sql new file mode 100644 index 0000000000..75a8c20352 --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.15__UpdateRainyDayHandlerMacroForScaleOut.sql @@ -0,0 +1,4 @@ +use catalogdb; + +UPDATE rainy_day_handler_macro SET POLICY = 'Abort' WHERE FLOW_NAME = 'GenericVnfHealthCheckBB'; +UPDATE rainy_day_handler_macro SET POLICY = 'Abort' WHERE FLOW_NAME = 'ConfigurationScaleOutBB';
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.16__Add_Default_NeutronNetwork.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.16__Add_Default_NeutronNetwork.sql new file mode 100644 index 0000000000..47c540b95d --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.16__Add_Default_NeutronNetwork.sql @@ -0,0 +1,31 @@ +USE catalogdb; + +INSERT INTO `heat_template` (`ARTIFACT_UUID`,`NAME`,`VERSION`,`BODY`,`TIMEOUT_MINUTES`,`DESCRIPTION`,`CREATION_TIMESTAMP`,`ARTIFACT_CHECKSUM`) VALUES +('efee1d84-b8ec-11e7-abc4-cec278b6b50a','Generic NeutronNet','1',' +heat_template_version: 2013-05-23 +description: A simple Neutron network +parameters: + network_name: + type: string + description: Name of the Neutron Network + default: ONAP-NW1 + shared: + type: boolean + description: Shared amongst tenants + default: False +outputs: + network_id: + description: Openstack network identifier + value: { get_resource: network } +resources: + network: + type: OS::Neutron::Net + properties: + name: { get_param: network_name } + shared: { get_param: shared }',10,'Generic Neutron Template','2017-10-26 14:44:00', 'MANUAL RECORD'); + + + +INSERT INTO `temp_network_heat_template_lookup` (`NETWORK_RESOURCE_MODEL_NAME`, `HEAT_TEMPLATE_ARTIFACT_UUID`,`AIC_VERSION_MIN` , `AIC_VERSION_MAX` ) +VALUES ('Generic NeutronNet','efee1d84-b8ec-11e7-abc4-cec278b6b50a','2.0','3.0'); + diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.17__UpdateCloudSiteColumn.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.17__UpdateCloudSiteColumn.sql new file mode 100644 index 0000000000..7077032fca --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.17__UpdateCloudSiteColumn.sql @@ -0,0 +1,5 @@ +use catalogdb; + +ALTER TABLE cloud_sites + MODIFY IF EXISTS REGION_ID varchar(50) NULL, + MODIFY IF EXISTS CLLI varchar(50) NULL;
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.18__ControllerSelectionReferenceData.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.18__ControllerSelectionReferenceData.sql new file mode 100644 index 0000000000..00f4777c03 --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.18__ControllerSelectionReferenceData.sql @@ -0,0 +1,4 @@ +use catalogdb; + +INSERT INTO controller_selection_reference (VNF_TYPE, CONTROLLER_NAME, ACTION_CATEGORY) VALUES ('vLoadBalancerMS/vLoadBalancerMS 0', 'APPC', 'HealthCheck'); +INSERT INTO controller_selection_reference (VNF_TYPE, CONTROLLER_NAME, ACTION_CATEGORY) VALUES ('vLoadBalancerMS/vLoadBalancerMS 0', 'APPC', 'ConfigScaleOut');
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.19__RenameCustomToNoValidate.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.19__RenameCustomToNoValidate.sql new file mode 100644 index 0000000000..bded179395 --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.19__RenameCustomToNoValidate.sql @@ -0,0 +1,2 @@ +update building_block_detail set RESOURCE_TYPE = "NO_VALIDATE" where RESOURCE_TYPE = "CUSTOM"; +update orchestration_status_state_transition_directive set RESOURCE_TYPE = "NO_VALIDATE" where RESOURCE_TYPE = "CUSTOM";
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.20__SetActivitiesBBsToNoValidate.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.20__SetActivitiesBBsToNoValidate.sql new file mode 100644 index 0000000000..9f51ed173d --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.20__SetActivitiesBBsToNoValidate.sql @@ -0,0 +1,13 @@ +USE catalogdb; + +INSERT INTO building_block_detail (BUILDING_BLOCK_NAME, RESOURCE_TYPE, TARGET_ACTION) +VALUES +('FlowCompleteActivity', 'NO_VALIDATE', 'CUSTOM'), +('VNFHealthCheckActivity', 'NO_VALIDATE', 'CUSTOM'), +('VNFQuiesceTrafficActivity', 'NO_VALIDATE', 'CUSTOM'), +('VNFResumeTrafficActivity', 'NO_VALIDATE', 'CUSTOM'), +('VNFSetInMaintFlagActivity', 'NO_VALIDATE', 'CUSTOM'), +('VNFUnsetInMaintFlagActivity', 'NO_VALIDATE', 'CUSTOM'), +('VNFUpgradePostCheckActivity', 'NO_VALIDATE', 'CUSTOM'), +('VNFUpgradePreCheckActivity', 'NO_VALIDATE', 'CUSTOM'), +('VNFUpgradeSoftwareActivity', 'NO_VALIDATE', 'CUSTOM');
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.21__AddHomingTables.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.21__AddHomingTables.sql new file mode 100644 index 0000000000..1725028104 --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.21__AddHomingTables.sql @@ -0,0 +1,9 @@ +use catalogdb; + +CREATE TABLE IF NOT EXISTS `homing_instances` ( +`SERVICE_INSTANCE_ID` varchar(50) NOT NULL, +`CLOUD_OWNER` VARCHAR(200) NOT NULL, +`CLOUD_REGION_ID` VARCHAR(200) NOT NULL, +`OOF_DIRECTIVES` longtext NULL DEFAULT NULL, +PRIMARY KEY (`SERVICE_INSTANCE_ID`) +) ; diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.22__AddResourceInput.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.22__AddResourceInput.sql new file mode 100644 index 0000000000..10d8789328 --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.22__AddResourceInput.sql @@ -0,0 +1,13 @@ +use catalogdb; + +ALTER TABLE service +ADD RESOURCE_ORDER varchar(255); + +ALTER TABLE vnf_resource_customization +ADD RESOURCE_INPUT varchar(2000); + +ALTER TABLE network_resource_customization +ADD RESOURCE_INPUT varchar(2000); + +ALTER TABLE allotted_resource_customization +ADD RESOURCE_INPUT varchar(2000);
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.23__ChangeResourceInputLength.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.23__ChangeResourceInputLength.sql new file mode 100644 index 0000000000..dfb5075674 --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.23__ChangeResourceInputLength.sql @@ -0,0 +1,10 @@ +use catalogdb; + +ALTER TABLE vnf_resource_customization + MODIFY IF EXISTS RESOURCE_INPUT varchar(20000); + +ALTER TABLE network_resource_customization + MODIFY IF EXISTS RESOURCE_INPUT varchar(20000); + +ALTER TABLE allotted_resource_customization + MODIFY IF EXISTS RESOURCE_INPUT varchar(20000);
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.24__UpdateHeatRelatedAttribute.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.24__UpdateHeatRelatedAttribute.sql new file mode 100644 index 0000000000..b1aefaf56c --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V4.24__UpdateHeatRelatedAttribute.sql @@ -0,0 +1,5 @@ +use catalogdb; + +ALTER TABLE network_resource MODIFY COLUMN AIC_VERSION_MIN varchar(20) NULL; +ALTER TABLE network_resource MODIFY COLUMN HEAT_TEMPLATE_ARTIFACT_UUID varchar(200) NULL; +ALTER TABLE network_resource DROP FOREIGN KEY fk_network_resource__temp_network_heat_template_lookup__mod_nm1;
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java index 077b4ea6d5..0f5ad6d92f 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java @@ -25,6 +25,8 @@ import static org.junit.Assert.*; import java.io.IOException; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -65,6 +67,8 @@ public class CatalogDBRestTest { private static final String ECOMP_MSO_CATALOG_V2_SERVICE_ALLOTTED_RESOURCES = "ecomp/mso/catalog/v2/serviceAllottedResources"; + private static final String ECOMP_MSO_CATALOG_V2_RESOURCE_RECEIPE = "ecomp/mso/catalog/v2/resourceRecipe"; + private static final String ECOMP_MSO_CATALOG_V2_SERVICE_NETWORKS = "ecomp/mso/catalog/v2/serviceNetworks"; private static final String ECOMP_MSO_CATALOG_V2_SERVICE_VNFS = "ecomp/mso/catalog/v2/serviceVnfs"; @@ -94,6 +98,8 @@ public class CatalogDBRestTest { private final String expectedAllottedResponse = "{\r\n\"serviceAllottedResources\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"Tunnel_Xconn\",\r\n\"modelUuid\": \"f6b7d4c6-e8a4-46e2-81bc-31cad5072842\",\r\n\"modelInvariantUuid\": \"b7a1b78e-6b6b-4b36-9698-8c9530da14af\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"367a8ba9-057a-4506-b106-fbae818597c6\",\r\n\"modelInstanceName\": \"Sec_Tunnel_Xconn 11\"\r\n},\r\n\"toscaNodeType\": \"\",\r\n\"allottedResourceType\": \"\",\r\n\"allottedResourceRole\": null,\r\n\"providingServiceModelName\": null,\r\n\"providingServiceModelInvariantUuid\": null,\r\n\"providingServiceModelUuid\": null,\r\n\"nfFunction\": null,\r\n\"nfType\": null,\r\n\"nfRole\": null,\r\n\"nfNamingCode\": null\r\n}\r\n]\r\n}"; private final String serviceUUID = "5df8b6de-2083-11e7-93ae-92361f002671"; + + private final String arResourceUUID = "25e2d69b-3b22-47b8-b4c9-7b14fd4a80df"; private final String serviceInvariantUUID = "9647dfc4-2083-11e7-93ae-92361f002671"; @@ -648,6 +654,42 @@ public class CatalogDBRestTest { assertEquals(Response.Status.OK.getStatusCode(),response.getStatusCode().value()); JSONAssert.assertEquals(expectedAllottedResponse, response.getBody().toString(), false); } + + @Test + public void testResourceReceipe() throws JSONException { + String expectedResourceRecipe = "{\"orchestrationUri\":\"/mso/async/services/CreateSDNCNetworkResource\",\"action\":\"createInstance\",\"description\":\"sotnvpnattachmentvF\",\"id\":\"1\",\"recipeTimeout\":\"180\",\"paramXSD\":\"\"}"; + + HttpEntity<String> entity = new HttpEntity<String>(null, headers); + headers.set("Accept", MediaType.APPLICATION_JSON); + + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_V2_RESOURCE_RECEIPE)) + .queryParam("resourceModelUuid", arResourceUUID) + .queryParam("action", "createInstance"); + + ResponseEntity<String> response = restTemplate.exchange( + builder.toUriString(), + HttpMethod.GET, entity, String.class); + + assertEquals(Response.Status.OK.getStatusCode(),response.getStatusCode().value()); + JSONAssert.assertEquals(expectedResourceRecipe, response.getBody().toString(), false); + } + + @Test + public void testResourceReceipeNotMatched() throws JSONException { + + HttpEntity<String> entity = new HttpEntity<String>(null, headers); + headers.set("Accept", MediaType.APPLICATION_JSON); + + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_V2_RESOURCE_RECEIPE)) + .queryParam("resourceModelUuid", arResourceUUID) + .queryParam("action", "invalid_action"); + + ResponseEntity<String> response = restTemplate.exchange( + builder.toUriString(), + HttpMethod.GET, entity, String.class); + + assertEquals(Response.Status.NOT_FOUND.getStatusCode(),response.getStatusCode().value()); + } @Test public void testGetServiceAllottedResourcesByServiceModelInvariantUuid() throws JSONException { diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CloudConfigTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CloudConfigTest.java index 05d1928a17..5a6ab747c5 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CloudConfigTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CloudConfigTest.java @@ -63,14 +63,14 @@ public class CloudConfigTest { headers.set("Content-Type",MediaType.APPLICATION_JSON); CloudSite cloudSite = new CloudSite(); - cloudSite.setId("MTN6"); + cloudSite.setId("MTN7"); cloudSite.setClli("TESTCLLI"); cloudSite.setRegionId("regionId"); cloudSite.setCloudVersion("VERSION"); cloudSite.setPlatform("PLATFORM"); CloudIdentity cloudIdentity = new CloudIdentity(); - cloudIdentity.setId("RANDOMID"); + cloudIdentity.setId("RANDOMID-test"); cloudIdentity.setIdentityUrl("URL"); cloudIdentity.setMsoId("MSO_ID"); cloudIdentity.setMsoPass("MSO_PASS"); @@ -81,7 +81,7 @@ public class CloudConfigTest { cloudSite.setIdentityService(cloudIdentity); String uri = "/cloudSite"; UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:"+ port + uri); - HttpEntity<CloudSite> request = new HttpEntity<CloudSite>(cloudSite, headers); + HttpEntity<CloudSite> request = new HttpEntity<CloudSite>(cloudSite, headers); ResponseEntity<String> response = restTemplate.exchange(builder.toUriString(), HttpMethod.POST, request, String.class); assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusCode().value()); @@ -98,4 +98,6 @@ public class CloudConfigTest { } + + } diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CvnfcCatalogDbQueryTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CvnfcCatalogDbQueryTest.java new file mode 100644 index 0000000000..aeee279002 --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CvnfcCatalogDbQueryTest.java @@ -0,0 +1,198 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2018 AT&T 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.so.adapters.catalogdb.catalogrest; + +import static com.shazam.shazamcrest.MatcherAssert.assertThat; +import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.so.adapters.catalogdb.CatalogDBApplication; +import org.onap.so.db.catalog.beans.ConfigurationResource; +import org.onap.so.db.catalog.beans.CvnfcCustomization; +import org.onap.so.db.catalog.beans.VfModule; +import org.onap.so.db.catalog.beans.VfModuleCustomization; +import org.onap.so.db.catalog.beans.VnfResource; +import org.onap.so.db.catalog.beans.VnfResourceCustomization; +import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization; +import org.onap.so.db.catalog.beans.VnfcCustomization; +import org.onap.so.db.catalog.client.CatalogDbClientPortChanger; +import org.onap.so.db.catalog.data.repository.CvnfcCustomizationRepository; +import org.onap.so.logger.MsoLogger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +import org.springframework.beans.BeanUtils; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = CatalogDBApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles("test") +public class CvnfcCatalogDbQueryTest { + + @Autowired + private CvnfcCustomizationRepository cvnfcCustomizationRepository; + + private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, CvnfcCatalogDbQueryTest.class); + + @LocalServerPort + private int port; + boolean isInitialized; + + @Autowired + CatalogDbClientPortChanger client; + + @Before + public void initialize(){ + client.wiremockPort= String.valueOf(port); + } + + @Test + public void cVnfcTest() { + + CvnfcCustomization cvnfcCustomization = setUpCvnfcCustomization("dadc2c8c-2bab-11e9-b210-d663bd873d93"); + + List<CvnfcCustomization> foundCvnfcCustomization = client.getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID("68dc9a92-214c-11e7-93ae-92361f002671","cb82ffd8-252a-11e7-93ae-92361f002671"); + assertNotNull(foundCvnfcCustomization); + assertTrue(foundCvnfcCustomization.size() > 0); + CvnfcCustomization found = foundCvnfcCustomization.get(0); + + CvnfcCustomization templateCvnfcCustomization = new CvnfcCustomization(); + BeanUtils.copyProperties(found, templateCvnfcCustomization, "vnfVfmoduleCvnfcConfigurationCustomization"); + + assertThat(cvnfcCustomization, sameBeanAs(templateCvnfcCustomization) + .ignoring("id") + .ignoring("created") + .ignoring("vnfVfmoduleCvnfcConfigurationCustomization") + .ignoring("vnfResourceCusteModelCustomizationUUID")); + } + + @Test + public void getLinkedVnfVfmoduleCvnfcConfigurationCustomizationTest() { + + CvnfcCustomization cvnfcCustomization = setUpCvnfcCustomization("0c042562-2bac-11e9-b210-d663bd873d93"); + + VnfcCustomization vnfcCustomization = setUpVnfcCustomization(); + vnfcCustomization.setModelCustomizationUUID("d95d704a-9ff2-11e8-98d0-529269fb1459"); + cvnfcCustomization.setVnfcCustomization(vnfcCustomization); + + ConfigurationResource configurationResource = new ConfigurationResource(); + configurationResource.setToscaNodeType("FabricConfiguration"); + configurationResource.setModelInvariantUUID("modelInvariantUUID"); + configurationResource.setModelUUID("modelUUID"); + configurationResource.setModelName("modelName"); + configurationResource.setModelVersion("modelVersion"); + configurationResource.setDescription("description"); + configurationResource.setToscaNodeType("toscaNodeTypeFC"); + + VnfResource vnfResource = new VnfResource(); + vnfResource.setModelUUID("6f19c5fa-2b19-11e9-b210-d663bd873d93"); + vnfResource.setModelVersion("modelVersion"); + vnfResource.setOrchestrationMode("orchestrationMode"); + + VfModule vfModule = new VfModule(); + vfModule.setModelUUID("98aa2a6e-2b18-11e9-b210-d663bd873d93"); + vfModule.setModelInvariantUUID("9fe57860-2b18-11e9-b210-d663bd873d93"); + vfModule.setIsBase(true); + vfModule.setModelName("modelName"); + vfModule.setModelVersion("modelVersion"); + vfModule.setVnfResources(vnfResource); + + VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); + vfModuleCustomization.setModelCustomizationUUID("bdbf984a-2b16-11e9-b210-d663bd873d93"); + vfModuleCustomization.setVfModule(vfModule); + cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization); + + VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization(); + vnfResourceCustomization.setModelCustomizationUUID("6912dd02-2b16-11e9-b210-d663bd873d93"); + vnfResourceCustomization.setModelInstanceName("testModelInstanceName"); + vnfResourceCustomization.setVnfResources(vnfResource); + cvnfcCustomization.setVnfResourceCustomization(vnfResourceCustomization); + + VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization = new VnfVfmoduleCvnfcConfigurationCustomization(); + vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationFunction("configurationFunction"); + vnfVfmoduleCvnfcConfigurationCustomization.setModelCustomizationUUID("64627fec-2b1b-11e9-b210-d663bd873d93"); + vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource); + vnfVfmoduleCvnfcConfigurationCustomization.setCvnfcCustomization(cvnfcCustomization); + vnfVfmoduleCvnfcConfigurationCustomization.setModelInstanceName("modelInstanceName"); + vnfVfmoduleCvnfcConfigurationCustomization.setVfModuleCustomization(vfModuleCustomization); + vnfVfmoduleCvnfcConfigurationCustomization.setVnfResourceCustomization(vnfResourceCustomization); + + Set<VnfVfmoduleCvnfcConfigurationCustomization> vnfVfmoduleCvnfcConfigurationCustomizationSet = new HashSet<VnfVfmoduleCvnfcConfigurationCustomization>(); + vnfVfmoduleCvnfcConfigurationCustomizationSet.add(vnfVfmoduleCvnfcConfigurationCustomization); + cvnfcCustomization.setVnfVfmoduleCvnfcConfigurationCustomization(vnfVfmoduleCvnfcConfigurationCustomizationSet); + + vnfVfmoduleCvnfcConfigurationCustomization.setCvnfcCustomization(cvnfcCustomization); + + cvnfcCustomizationRepository.save(cvnfcCustomization); + + List<CvnfcCustomization> foundCvnfcCustomization = client.getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID("6912dd02-2b16-11e9-b210-d663bd873d93","bdbf984a-2b16-11e9-b210-d663bd873d93"); + assertNotNull(foundCvnfcCustomization); + assertTrue(foundCvnfcCustomization.size() > 0); + CvnfcCustomization found = foundCvnfcCustomization.get(0); + + Set<VnfVfmoduleCvnfcConfigurationCustomization> vnfVfmoduleCvnfcConfigurationCustomizations = found.getVnfVfmoduleCvnfcConfigurationCustomization(); + if (vnfVfmoduleCvnfcConfigurationCustomizations.size() > 0){ + for(VnfVfmoduleCvnfcConfigurationCustomization customization : vnfVfmoduleCvnfcConfigurationCustomizations) { + Assert.assertTrue(customization.getConfigurationResource().getToscaNodeType().equalsIgnoreCase("toscaNodeTypeFC")); + } + } else { + Assert.fail("No linked VnfVfmoduleCvnfcConfigurationCustomization found for CvnfcCustomization"); + } + } + + protected CvnfcCustomization setUpCvnfcCustomization(String id){ + CvnfcCustomization cvnfcCustomization = new CvnfcCustomization(); + cvnfcCustomization.setModelCustomizationUUID(id); + cvnfcCustomization.setModelInstanceName("testModelInstanceName"); + cvnfcCustomization.setModelUUID("b25735fe-9b37-11e8-98d0-529269fb1459"); + cvnfcCustomization.setModelInvariantUUID("ba7e6ef0-9b37-11e8-98d0-529269fb1459"); + cvnfcCustomization.setModelVersion("testModelVersion"); + cvnfcCustomization.setModelName("testModelName"); + cvnfcCustomization.setToscaNodeType("testToscaNodeType"); + cvnfcCustomization.setDescription("testCvnfcCustomzationDescription"); + cvnfcCustomization.setNfcFunction("testNfcFunction"); + cvnfcCustomization.setNfcNamingCode("testNfcNamingCode"); + return cvnfcCustomization; + } + + protected VnfcCustomization setUpVnfcCustomization(){ + VnfcCustomization vnfcCustomization = new VnfcCustomization(); + vnfcCustomization.setModelInstanceName("testVnfcCustomizationModelInstanceName"); + vnfcCustomization.setModelUUID("321228a4-9f15-11e8-98d0-529269fb1459"); + vnfcCustomization.setModelInvariantUUID("c0659136-9f15-11e8-98d0-529269fb1459"); + vnfcCustomization.setModelVersion("testModelVersion"); + vnfcCustomization.setModelName("testModelName"); + vnfcCustomization.setToscaNodeType("testToscaModelType"); + vnfcCustomization.setDescription("testVnfcCustomizationDescription"); + return vnfcCustomization; + } +} diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipeTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipeTest.java index 645714cc80..e403867c42 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipeTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipeTest.java @@ -21,11 +21,16 @@ package org.onap.so.adapters.catalogdb.catalogrest; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.onap.so.db.catalog.beans.ArRecipe; +import org.onap.so.db.catalog.beans.NetworkRecipe; import org.onap.so.db.catalog.beans.Recipe; import org.onap.so.db.catalog.beans.ServiceRecipe; +import org.onap.so.db.catalog.beans.VnfRecipe; import org.onap.so.jsonpath.JsonPathUtil; public class QueryResourceRecipeTest { @@ -67,4 +72,24 @@ public class QueryResourceRecipeTest { return recipe; } + @Test + public void convertToJson() { + Recipe recipe = createRecipe(); + QueryResourceRecipe queryResourceRecipe = new QueryResourceRecipe(recipe); + assertEquals("{\"orchestrationUri\":\"uriTest\",\"action\":\"actionTest\",\"description\":\"descrTest\",\"id\":\"123\",\"recipeTimeout\":\"100\",\"paramXSD\":\"paramsXsdTest\"}", + queryResourceRecipe.JSON2(false,false)); + } + + @Test + public void convertToJsonEmptyRecipe() { + QueryResourceRecipe vnfQueryRR = new QueryResourceRecipe(new VnfRecipe()); + QueryResourceRecipe networkQueryRR = new QueryResourceRecipe(new NetworkRecipe()); + QueryResourceRecipe arQueryRR = new QueryResourceRecipe(new ArRecipe()); + + String expected = "{\"orchestrationUri\":\"\",\"action\":\"\",\"description\":\"\",\"id\":\"\",\"recipeTimeout\":\"\",\"paramXSD\":\"\"}"; + assertEquals(expected, vnfQueryRR.JSON2(false, false)); + assertEquals(expected, networkQueryRR.JSON2(false,false)); + assertEquals(expected, arQueryRR.JSON2(false,false)); + } + } diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java index e249285867..4479e1ba4a 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java @@ -39,6 +39,7 @@ import org.onap.so.db.catalog.beans.CloudIdentity; import org.onap.so.db.catalog.beans.CloudSite; import org.onap.so.db.catalog.beans.CloudifyManager; import org.onap.so.db.catalog.beans.ExternalServiceToInternalService; +import org.onap.so.db.catalog.beans.HomingInstance; import org.onap.so.db.catalog.beans.InstanceGroup; import org.onap.so.db.catalog.beans.NetworkResourceCustomization; import org.onap.so.db.catalog.beans.ServerType; @@ -425,6 +426,81 @@ public class CatalogDbClientTest { Assert.assertEquals("regionId", getCloudSite.getRegionId()); Assert.assertEquals("RANDOMID", getCloudSite.getIdentityServiceId()); } + + @Test + public void testGetHomingInstance() { + HomingInstance homingInstance = client.getHomingInstance("5df8b6de-2083-11e7-93ae-92361f232671"); + Assert.assertNotNull(homingInstance); + Assert.assertNotNull(homingInstance.getCloudOwner()); + Assert.assertNotNull(homingInstance.getCloudRegionId()); + Assert.assertNotNull(homingInstance.getOofDirectives()); + } + + @Test + public void testPostHomingInstance() { + CatalogDbClientPortChanger localClient = new CatalogDbClientPortChanger("http://localhost:" + client.wiremockPort, msoAdaptersAuth, client.wiremockPort); + HomingInstance homingInstance = new HomingInstance(); + homingInstance.setServiceInstanceId("5df8d6be-2083-11e7-93ae-92361f232671"); + homingInstance.setCloudOwner("CloudOwner-1"); + homingInstance.setCloudRegionId("CloudRegionOne"); + homingInstance.setOofDirectives("{\n" + + "\"directives\": [\n" + + "{\n" + + "\"directives\": [\n" + + "{\n" + + "\"attributes\": [\n" + + "{\n" + + "\"attribute_value\": \"onap.hpa.flavor31\",\n" + + "\"attribute_name\": \"firewall_flavor_name\"\n" + + "}\n" + + "],\n" + + "\"type\": \"flavor_directives\"\n" + + "}\n" + + "],\n" + + "\"type\": \"vnfc\",\n" + + "\"id\": \"vfw\"\n" + + "},\n" + + "{\n" + + "\"directives\": [\n" + + "{\n" + + "\"attributes\": [\n" + + "{\n" + + "\"attribute_value\": \"onap.hpa.flavor32\",\n" + + "\"attribute_name\": \"packetgen_flavor_name\"\n" + + "}\n" + + "],\n" + + "\"type\": \"flavor_directives\"\n" + + "}\n" + + "],\n" + + "\"type\": \"vnfc\",\n" + + "\"id\": \"vgenerator\"\n" + + "},\n" + + "{\n" + + "\"directives\": [\n" + + "{\n" + + "\"attributes\": [\n" + + "{\n" + + "\"attribute_value\": \"onap.hpa.flavor31\",\n" + + "\"attribute_name\": \"sink_flavor_name\"\n" + + "}\n" + + "],\n" + + "\"type\": \"flavor_directives\"\n" + + "}\n" + + "],\n" + + "\"type\": \"vnfc\",\n" + + "\"id\": \"vsink\"\n" + + "}\n" + + "]\n" + + "}"); + localClient.postHomingInstance(homingInstance); + HomingInstance getHomingInstance = this.client.getHomingInstance("5df8d6be-2083-11e7-93ae-92361f232671"); + Assert.assertNotNull(getHomingInstance); + Assert.assertNotNull(getHomingInstance.getCloudRegionId()); + Assert.assertNotNull(getHomingInstance.getCloudOwner()); + Assert.assertEquals("CloudOwner-1", getHomingInstance.getCloudOwner()); + Assert.assertEquals("CloudRegionOne", getHomingInstance.getCloudRegionId()); + } + @Test public void testGetServiceByModelName() { Service service = client.getServiceByModelName("MSOTADevInfra_Test_Service"); diff --git a/adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql b/adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql index 9eb3daa5ae..1223080e59 100644 --- a/adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql +++ b/adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql @@ -51,6 +51,14 @@ CREATE TABLE IF NOT EXISTS `cloud_sites` ( CONSTRAINT `FK_cloud_sites_identity_services` FOREIGN KEY (`IDENTITY_SERVICE_ID`) REFERENCES `identity_services` (`ID`) ) ; +CREATE TABLE IF NOT EXISTS `homing_instances` ( +`SERVICE_INSTANCE_ID` varchar(50) NOT NULL, +`CLOUD_OWNER` VARCHAR(200) NOT NULL, +`CLOUD_REGION_ID` VARCHAR(200) NOT NULL, +`OOF_DIRECTIVES` longtext NULL DEFAULT NULL, +PRIMARY KEY (`SERVICE_INSTANCE_ID`) +) ; + insert into heat_files(artifact_uuid, name, version, description, body, artifact_checksum, creation_timestamp) values ('00535bdd-0878-4478-b95a-c575c742bfb0', 'nimbus-ethernet-gw', '1', 'created from csar', 'DEVICE=$dev\nBOOTPROTO=none\nNM_CONTROLLED=no\nIPADDR=$ip\nNETMASK=$netmask\nGATEWAY=$gateway\n', 'MANUAL RECORD', '2017-01-21 23:56:43'); @@ -105,8 +113,8 @@ insert into heat_environment(artifact_uuid, name, version, description, body, ar insert into vnf_resource(orchestration_mode, description, creation_timestamp, model_uuid, aic_version_min, aic_version_max, model_invariant_uuid, model_version, model_name, tosca_node_type, heat_template_artifact_uuid) values ('HEAT', '1607 vSAMP10a - inherent network', '2017-04-14 21:46:28', 'ff2ae348-214a-11e7-93ae-92361f002671', '', '', '2fff5b20-214b-11e7-93ae-92361f002671', '1.0', 'vSAMP10a', 'VF', 'ff874603-4222-11e7-9252-005056850d2e'); -insert into vnf_resource_customization(model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design) values -('68dc9a92-214c-11e7-93ae-92361f002671', 'vSAMP10a 1', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002671', null); +insert into vnf_resource_customization(model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design, resource_input) values +('68dc9a92-214c-11e7-93ae-92361f002671', 'vSAMP10a 1', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002671', null, "{\\\"vf_module_id\\\":\\\"vFirewall\\\",\\\"vfw_private_ip_1\\\":\\\"192.168.20.100\\\",\\\"public_net_id\\\":\\\"PUBLIC NET ID\\\",\\\"vfw_private_ip_0\\\":\\\"192.168.10.100\\\",\\\"onap_private_subnet_id\\\":\\\"PRIVATE NETWORK\\\",\\\"sec_group\\\":\\\"SECURITY GROUP\\\",\\\"vfw_private_ip_2\\\":\\\"10.0.100.1\\\",\\\"vfw_name_0\\\":\\\"zdfw1fwl01fwl01\\\",\\\"nexus_artifact_repo\\\":\\\"https://nexus.onap.org\\\",\\\"onap_private_net_cidr\\\":\\\"10.0.0.0/16\\\",\\\"dcae_collector_ip\\\":\\\"10.0.4.1\\\",\\\"vnf_id\\\":\\\"vFirewall_demo_app\\\",\\\"dcae_collector_port\\\":\\\"8081\\\",\\\"vpg_name_0\\\":\\\"zdfw1fwl01pgn01\\\",\\\"vsn_private_ip_0\\\":\\\"192.168.20.250\\\",\\\"vpg_private_ip_1\\\":\\\"10.0.100.2\\\",\\\"vsn_private_ip_1\\\":\\\"10.0.100.3\\\",\\\"vpg_private_ip_0\\\":\\\"192.168.10.200\\\",\\\"protected_private_net_cidr\\\":\\\"192.168.20.0/24\\\",\\\"unprotected_private_net_cidr\\\":\\\"192.168.10.0/24\\\",\\\"nf_naming\\\":\\\"true\\\",\\\"vsn_name_0\\\":\\\"zdfw1fwl01snk01\\\",\\\"multi_stage_design\\\":\\\"false\\\",\\\"onap_private_net_id\\\":\\\"PRIVATE NETWORK\\\",\\\"unprotected_private_net_id\\\":\\\"zdfw1fwl01_unprotected\\\",\\\"availability_zone_max_count\\\":\\\"1\\\",\\\"vfw_flavor_name\\\":\\\"(m1.medium suggested)\\\",\\\"demo_artifacts_version\\\":\\\"1.3.0-SNAPSHOT\\\",\\\"pub_key\\\":\\\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQXYJYYi3/OUZXUiCYWdtc7K0m5C0dJKVxPG0eI8EWZrEHYdfYe6WoTSDJCww+1qlBSpA5ac/Ba4Wn9vh+lR1vtUKkyIC/nrYb90ReUd385Glkgzrfh5HdR5y5S2cL/Frh86lAn9r6b3iWTJD8wBwXFyoe1S2nMTOIuG4RPNvfmyCTYVh8XTCCE8HPvh3xv2r4egawG1P4Q4UDwk+hDBXThY2KS8M5/8EMyxHV0ImpLbpYCTBA6KYDIRtqmgS6iKyy8v2D1aSY5mc9J0T5t9S2Gv+VZQNWQDDKNFnxqYaAo1uEoq/i1q63XC5AD3ckXb2VT6dp23BQMdDfbHyUWfJN\\\",\\\"key_name\\\":\\\"vfw_key\\\",\\\"install_script_version\\\":\\\"1.3.0-SNAPSHOT\\\",\\\"vfw_image_name\\\":\\\"(UBUNTU 1404 required)\\\",\\\"protected_private_net_id\\\":\\\"zdfw1fwl01_protected\\\",\\\"cloud_env\\\":\\\"openstack\\\"}"); insert into vf_module(model_uuid, model_invariant_uuid, model_version, model_name, description, is_base, heat_template_artifact_uuid, vol_heat_template_artifact_uuid, creation_timestamp, vnf_resource_model_uuid) values @@ -210,7 +218,17 @@ INSERT INTO vnf_components_recipe (VNF_COMPONENT_TYPE, ACTION, VERSION, DESCRIPT VALUES ('volumeGroup', 'createInstance', '1', 'Gr api recipe to create volume-group', '/mso/async/services/WorkflowActionBB', 180, '20c4431c-246d-11e7-93ae-92361f002671'); +insert into homing_instances (service_instance_id, cloud_owner, cloud_region_id, oof_directives) values +('5df8b6de-2083-11e7-93ae-92361f232671', 'CloudOwner', 'CloudRegionId', '{"directives": [{"directives": [{"attributes": [{"attribute_value": "onap.hpa.flavor32","attribute_name": "firewall_flavor_name"}],"type": "flavor_directives"}],"type": "vnfc","id": "vfw"},{"directives": [{"attributes": [{"attribute_value": "onap.hpa.flavor33","attribute_name": "packetgen_flavor_name"}],"type": "flavor_directives"}],"type": "vnfc","id": "vgenerator"},{"directives": [{"attributes": [{"attribute_value": "onap.hpa.flavor32","attribute_name": "sink_flavor_name"}],"type": "flavor_directives"}],"type": "vnfc","id": "vsink"}]}'), +('5df8b6de-2083-11e7-93ae-92361f562672', 'CloudOwner', 'CloudRegionId', '{"directives": [{"directives": [{"attributes": [{"attribute_value": "onap.hpa.flavor32","attribute_name": "firewall_flavor_name"}],"type": "flavor_directives"}],"type": "vnfc","id": "vfw"},{"directives": [{"attributes": [{"attribute_value": "onap.hpa.flavor33","attribute_name": "packetgen_flavor_name"}],"type": "flavor_directives"}],"type": "vnfc","id": "vgenerator"},{"directives": [{"attributes": [{"attribute_value": "onap.hpa.flavor32","attribute_name": "sink_flavor_name"}],"type": "flavor_directives"}],"type": "vnfc","id": "vsink"}]}'); +-- for query resource receipe +INSERT INTO allotted_resource +(MODEL_UUID, MODEL_INVARIANT_UUID, MODEL_VERSION, MODEL_NAME, TOSCA_NODE_TYPE, SUBCATEGORY, DESCRIPTION, CREATION_TIMESTAMP) +VALUES('25e2d69b-3b22-47b8-b4c9-7b14fd4a80df', '8f5fe343-9a3a-4d31-a829-49b27bbfc1c4', '2.0', 'sotnvpnattachmentvF', 'org.openecomp.resource.vf.Sdwanvpnattachmentvf', 'Allotted Resource', 'sdwanvpnattachmentVF', '2019-01-24 09:59:16.000'); + +INSERT INTO ar_recipe(ID, MODEL_NAME, ACTION, VERSION_STR, SERVICE_TYPE, DESCRIPTION, ORCHESTRATION_URI, AR_PARAM_XSD, RECIPE_TIMEOUT, CREATION_TIMESTAMP) +VALUES(1, 'sotnvpnattachmentvF', 'createInstance', '2.0', 'VF', 'sotnvpnattachmentvF', '/mso/async/services/CreateSDNCNetworkResource', '', 180, '2019-01-24 09:59:16.000'); INSERT INTO northbound_request_ref_lookup(MACRO_ACTION, ACTION, REQUEST_SCOPE, IS_ALACARTE, MIN_API_VERSION, MAX_API_VERSION, CLOUD_OWNER, SERVICE_TYPE) VALUES ('Service-Create', 'createInstance', 'Service', true, '7','7', 'my-custom-cloud-owner','*'); @@ -223,3 +241,55 @@ INSERT INTO northbound_request_ref_lookup(MACRO_ACTION, ACTION, REQUEST_SCOPE, I INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, FLOW_VERSION, NB_REQ_REF_LOOKUP_ID) VALUES ('Service-Create', '1', 'AssignServiceInstanceBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Create' and CLOUD_OWNER = 'my-custom-cloud-owner' and SERVICE_TYPE = 'TRANSPORT')); + +INSERT INTO `vnfc_customization` + (`model_customization_uuid`, + `model_instance_name`, + `model_uuid`, + `model_invariant_uuid`, + `model_version`, + `model_name`, + `tosca_node_type`, + `description`, + `creation_timestamp`) +VALUES ( '9bcce658-9b37-11e8-98d0-529269fb1459', + 'testModelInstanceName', + 'b25735fe-9b37-11e8-98d0-529269fb1459', + 'ba7e6ef0-9b37-11e8-98d0-529269fb1459', + 'testModelVersion', + 'testModelName', + 'toscaNodeType', + 'testVnfcCustomizationDescription', + '2018-07-17 14:05:08'); + +INSERT INTO `cvnfc_customization` + (`id`, + `model_customization_uuid`, + `model_instance_name`, + `model_uuid`, + `model_invariant_uuid`, + `model_version`, + `model_name`, + `tosca_node_type`, + `description`, + `nfc_function`, + `nfc_naming_code`, + `creation_timestamp`, + `vnf_resource_cust_model_customization_uuid`, + `vf_module_cust_model_customization_uuid`, + `vnfc_cust_model_customization_uuid`) +VALUES ( '1', + 'dadc2c8c-2bab-11e9-b210-d663bd873d93', + 'testModelInstanceName', + 'b25735fe-9b37-11e8-98d0-529269fb1459', + 'ba7e6ef0-9b37-11e8-98d0-529269fb1459', + 'testModelVersion', + 'testModelName', + 'testToscaNodeType', + 'testCvnfcCustomzationDescription', + 'testNfcFunction', + 'testNfcNamingCode', + '2018-07-17 14:05:08', + '68dc9a92-214c-11e7-93ae-92361f002671', + 'cb82ffd8-252a-11e7-93ae-92361f002671', + '9bcce658-9b37-11e8-98d0-529269fb1459'); diff --git a/adapters/mso-openstack-adapters/pom.xml b/adapters/mso-openstack-adapters/pom.xml index 743c50dc75..8d4f30b631 100644 --- a/adapters/mso-openstack-adapters/pom.xml +++ b/adapters/mso-openstack-adapters/pom.xml @@ -269,5 +269,15 @@ <artifactId>cxf-logging</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.onap.so.libs.openstack-java-sdk</groupId> + <artifactId>nova-model</artifactId> + <version>${openstack.version}</version> + </dependency> + <dependency> + <groupId>org.camunda.bpm</groupId> + <artifactId>camunda-external-task-client</artifactId> + <version>1.2.0-SNAPSHOT</version> + </dependency> </dependencies> </project> diff --git a/adapters/mso-openstack-adapters/src/main/java/db/migration/R__CloudConfigMigration.java b/adapters/mso-openstack-adapters/src/main/java/db/migration/R__CloudConfigMigration.java index 257ad3c023..5acd8359ec 100644 --- a/adapters/mso-openstack-adapters/src/main/java/db/migration/R__CloudConfigMigration.java +++ b/adapters/mso-openstack-adapters/src/main/java/db/migration/R__CloudConfigMigration.java @@ -65,7 +65,22 @@ public class R__CloudConfigMigration implements JdbcMigration , MigrationInfoPro LOGGER.debug("Starting migration for CloudConfig"); CloudConfig cloudConfig = null; - + + String tableQuery = "SELECT * FROM identity_services"; + int totalRetries = 20; + boolean tableExists = false; + int count = 1; + while(!tableExists && count != totalRetries) { + try(Statement stmt = connection.createStatement();) { + stmt.executeQuery(tableQuery); + tableExists = true; + } catch (SQLException e) { + count++; + // Wait 5 mintues + Thread.sleep(300000); + } + } + // Try the override file String configLocation = System.getProperty("spring.config.additional-location"); if (configLocation != null) { diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ModelType.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAudit.java index 7b3ea3a181..292cebf292 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ModelType.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AbstractAudit.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019 AT&T 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. @@ -18,15 +18,22 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.apihandlerinfra; +package org.onap.so.adapters.audit; -/* - * Enum for Status values returned by API Handler to Tail-F -*/ -public enum ModelType { - service, - vnf, - vfModule, - volumeGroup, - network +import org.onap.so.client.aai.AAIResourcesClient; + +public class AbstractAudit { + + private AAIResourcesClient aaiClient; + + protected AAIResourcesClient getAaiClient(){ + if(aaiClient == null) + return new AAIResourcesClient(); + else + return aaiClient; + } + + protected void setAaiClient(AAIResourcesClient aaiResource){ + aaiClient = aaiResource; + } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java new file mode 100644 index 0000000000..38b00688a7 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackService.java @@ -0,0 +1,68 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 AT&T 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.so.adapters.audit; + +import java.security.GeneralSecurityException; + +import javax.annotation.PostConstruct; + +import org.camunda.bpm.client.ExternalTaskClient; +import org.camunda.bpm.client.backoff.ExponentialBackoffStrategy; +import org.camunda.bpm.client.interceptor.ClientRequestInterceptor; +import org.camunda.bpm.client.interceptor.auth.BasicAuthProvider; +import org.onap.so.utils.CryptoUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Profile("!test") +public class AuditStackService { + + private static final Logger logger = LoggerFactory.getLogger(AuditStackService.class); + + @Autowired + public Environment env; + + @Autowired + private AuditStackServiceData auditStack; + + @PostConstruct + public void auditAAIInventory() { + String auth = ""; + try { + auth = CryptoUtils.decrypt(env.getRequiredProperty("mso.auth"), env.getRequiredProperty("mso.msoKey")); + } catch (IllegalStateException | GeneralSecurityException e) { + logger.error("Error Decrypting Password", e); + } + ClientRequestInterceptor interceptor = new BasicAuthProvider(env.getRequiredProperty("mso.config.cadi.aafId"), + auth); + ExternalTaskClient client = ExternalTaskClient.create() + .baseUrl(env.getRequiredProperty("mso.workflow.endpoint")).maxTasks(5).addInterceptor(interceptor) + .asyncResponseTimeout(120000).backoffStrategy(new ExponentialBackoffStrategy(0, 0, 0)).build(); + client.subscribe("InventoryAudit").lockDuration(5000) + .handler(auditStack::executeExternalTask).open(); + } + +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackServiceData.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackServiceData.java new file mode 100644 index 0000000000..b0369395ed --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditStackServiceData.java @@ -0,0 +1,86 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017-2019 AT&T 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.so.adapters.audit; + +import java.util.Collections; + +import org.camunda.bpm.client.task.ExternalTask; +import org.camunda.bpm.client.task.ExternalTaskService; +import org.onap.so.audit.beans.AuditInventory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +public class AuditStackServiceData { + + private static final String UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI = "Unable to find all VServers and L-Interaces in A&AI"; + + private static final int[] RETRY_SEQUENCE = new int[] { 1, 1, 2, 3, 5, 8, 13, 20}; + + + private static final Logger logger = LoggerFactory.getLogger(AuditStackServiceData.class); + + @Autowired + public HeatStackAudit heatStackAudit; + + @Autowired + public Environment env; + + protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService){ + AuditInventory auditInventory = externalTask.getVariable("auditInventory"); + boolean success = false; + try { + logger.info("Executing External Task Audit Inventory, Retry Number: {} \n {}", auditInventory,externalTask.getRetries()); + success=heatStackAudit.auditHeatStack(auditInventory.getCloudRegion(), auditInventory.getCloudOwner(), + auditInventory.getTenantId(), auditInventory.getHeatStackName()); + } catch (Exception e) { + logger.error("Error during audit of stack", e); + } + + if (success) { + externalTaskService.complete(externalTask); + logger.debug("The External Task Id: {} Successful", externalTask.getId()); + } else { + if(externalTask.getRetries() == null){ + logger.debug("The External Task Id: {} Failed, Setting Retries to Default Start Value: {}", externalTask.getId(),RETRY_SEQUENCE.length); + externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, RETRY_SEQUENCE.length, 10000); + }else if(externalTask.getRetries() != null && + externalTask.getRetries()-1 == 0){ + logger.debug("The External Task Id: {} Failed, All Retries Exhausted", externalTask.getId()); + externalTaskService.handleBpmnError(externalTask, "AuditAAIInventoryFailure", "Number of Retries Exceeded auditing inventory"); + }else{ + logger.debug("The External Task Id: {} Failed, Decrementing Retries: {} , Retry Delay: ", externalTask.getId(),externalTask.getRetries()-1, calculateRetryDelay(externalTask.getRetries())); + externalTaskService.handleFailure(externalTask, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, UNABLE_TO_FIND_ALL_V_SERVERS_AND_L_INTERACES_IN_A_AI, externalTask.getRetries()-1, calculateRetryDelay(externalTask.getRetries())); + } + logger.debug("The External Task Id: {} Failed", externalTask.getId()); + } + + + } + protected long calculateRetryDelay(int currentRetries){ + int retrySequence = RETRY_SEQUENCE.length - currentRetries; + long retryMultiplier = Long.parseLong(env.getProperty("mso.workflow.topics.retryMultiplier","6000")); + return RETRY_SEQUENCE[retrySequence] * retryMultiplier; + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java new file mode 100644 index 0000000000..6e6ecd51d4 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/AuditVServer.java @@ -0,0 +1,111 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 AT&T 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.so.adapters.audit; + +import java.util.Optional; +import java.util.Set; + +import org.onap.aai.domain.yang.LInterface; +import org.onap.aai.domain.yang.LInterfaces; +import org.onap.aai.domain.yang.Vserver; +import org.onap.so.client.aai.AAIObjectPlurals; +import org.onap.so.client.aai.AAIObjectType; +import org.onap.so.client.aai.entities.AAIResultWrapper; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; +import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class AuditVServer extends AbstractAudit { + private static final Logger logger = LoggerFactory.getLogger(AuditVServer.class); + + public boolean auditVservers(Set<Vserver> vServersToAudit, String tenantId, String cloudOwner, String cloudRegion) { + if (vServersToAudit == null || vServersToAudit.isEmpty()){ + return false; + } + return vServersToAudit.stream() + .filter(vServer -> !doesVServerExistInAAI(vServer, tenantId, cloudOwner, cloudRegion)).findFirst() + .map(v -> false).orElse(true); + } + + private boolean doesVServerExistInAAI(Vserver vServer, String tenantId, String cloudOwner, String cloudRegion) { + AAIResourceUri vserverURI = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, + tenantId, vServer.getVserverId()); + boolean vServerExists = getAaiClient().exists(vserverURI); + boolean doesExist = getAaiClient().exists(vserverURI); + logger.info("v-server {} exists: {}", vServer.getVserverId(), doesExist); + boolean allNeutronNetworksExist = true; + if (vServerExists && vServer.getLInterfaces() != null) { + allNeutronNetworksExist = vServer.getLInterfaces() + .getLInterface().stream().filter(lInterface -> !doesLinterfaceExistinAAI(lInterface, + vServer.getVserverId(), tenantId, cloudOwner, cloudRegion)) + .findFirst().map(v -> false).orElse(true); + } + return vServerExists && allNeutronNetworksExist; + } + + private boolean doesLinterfaceExistinAAI(LInterface lInterface, String vServerId, String tenantId, + String cloudOwner, String cloudRegion) { + boolean doesLInterfaceExist = false; + boolean doSubInterfacesExist = true; + AAIResourceUri linterfaceURI = AAIUriFactory + .createResourceUri(AAIObjectPlurals.L_INTERFACE, cloudOwner, cloudRegion, tenantId, vServerId) + .queryParam("interface-id", lInterface.getInterfaceId()); + Optional<LInterfaces> queriedLInterface = getAaiClient().get(LInterfaces.class, linterfaceURI); + if (queriedLInterface.isPresent()) { + if (queriedLInterface.get().getLInterface().size() > 1) { + logger.error("Non-Unique LInterface Found stopping audit, L-Interface Id: " +lInterface.getInterfaceId()); + doesLInterfaceExist = false; + } else { + doesLInterfaceExist = true; + lInterface.setInterfaceName(queriedLInterface.get().getLInterface().get(0).getInterfaceName()); + } + } + logger.info("l-interface id:{} name: {} exists: {}", lInterface.getInterfaceId(), lInterface.getInterfaceName(), + doesLInterfaceExist); + + if (doesLInterfaceExist && lInterface.getLInterfaces() != null) { + doSubInterfacesExist = lInterface.getLInterfaces().getLInterface() + .stream().filter(subInterface -> !doesSubInterfaceExistinAAI(subInterface, + lInterface.getInterfaceName(), vServerId, tenantId, cloudOwner, cloudRegion)) + .findFirst().map(v -> false).orElse(true); + } else + logger.debug("l-interface {} does not contain any sub-iterfaces", lInterface.getInterfaceId()); + + return doesLInterfaceExist && doSubInterfacesExist; + } + + private boolean doesSubInterfaceExistinAAI(LInterface subInterface, String linterfaceName, String vServerId, + String tenantId, String cloudOwner, String cloudRegion) { + logger.info("checking if sub-l-interface {} , linterfaceName: {} vserverId: {} exists", + subInterface.getInterfaceId(), linterfaceName, vServerId); + + AAIResourceUri linterfaceURI = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, cloudOwner, + cloudRegion, tenantId, vServerId, linterfaceName) + .queryParam("interface-id", subInterface.getInterfaceId()); + + boolean doesExist = getAaiClient().exists(linterfaceURI); + logger.info("sub-l-interface {} exists: {}", subInterface.getInterfaceId(), doesExist); + return doesExist; + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java new file mode 100644 index 0000000000..974315374a --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java @@ -0,0 +1,200 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 AT&T 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.so.adapters.audit; + +import java.net.URI; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.onap.aai.domain.yang.LInterface; +import org.onap.aai.domain.yang.LInterfaces; +import org.onap.aai.domain.yang.Vserver; +import org.onap.so.openstack.utils.MsoHeatUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.woorea.openstack.heat.model.Link; +import com.woorea.openstack.heat.model.Resource; +import com.woorea.openstack.heat.model.Resources; +import com.woorea.openstack.heat.model.Stack; + +@Component +public class HeatStackAudit { + + private static final String RESOURCES = "/resources"; + + protected static final Logger logger = LoggerFactory.getLogger(HeatStackAudit.class); + + @Autowired + protected MsoHeatUtils heat; + + @Autowired + protected AuditVServer auditVservers; + + public boolean auditHeatStack(String cloudRegion, String cloudOwner, String tenantId, String heatStackName) { + try { + logger.debug("Fetching Top Level Stack Information"); + Resources resources = heat.queryStackResources(cloudRegion, tenantId, heatStackName); + List<Resource> novaResources = resources.getList().stream() + .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList()); + List<Resource> resourceGroups = resources.getList().stream() + .filter(p -> "OS::Heat::ResourceGroup".equals(p.getType()) && p.getName().contains("subinterfaces")).collect(Collectors.toList()); + Set<Vserver> vserversToAudit = createVserverSet(resources, novaResources); + Set<Vserver> vserversWithSubInterfaces = processSubInterfaces(cloudRegion, tenantId, resourceGroups, + vserversToAudit); + return auditVservers.auditVservers(vserversWithSubInterfaces, tenantId, cloudOwner, cloudRegion); + } catch (Exception e) { + logger.error("Error during auditing stack resources", e); + return false; + } + } + + protected Set<Vserver> processSubInterfaces(String cloudRegion, String tenantId, List<Resource> resourceGroups, + Set<Vserver> vServersToAudit) throws Exception { + for (Resource resourceGroup : resourceGroups) { + processResourceGroups(cloudRegion, tenantId, vServersToAudit, resourceGroup); + } + return vServersToAudit; + } + + protected void processResourceGroups(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, + Resource resourceGroup) throws Exception { + Optional<Link> stackLink = resourceGroup.getLinks().stream().filter(link -> "nested".equals(link.getRel())) + .findAny(); + if (stackLink.isPresent()) { + try { + Optional<String> path = extractResourcePathFromHref(stackLink.get().getHref()); + if (path.isPresent()) { + logger.debug("Fetching nested Resource Stack Information"); + Resources nestedResourceGroupResources = heat.executeHeatClientRequest(path.get(), cloudRegion, + tenantId, Resources.class); + processNestedResourceGroup(cloudRegion, tenantId, vServersWithLInterface, + nestedResourceGroupResources); + } else + throw new Exception("Error finding Path from Self Link"); + } catch (Exception e) { + logger.error("Error Parsing Link to obtain Path", e); + throw new Exception("Error finding Path from Self Link"); + } + + } + } + + protected void processNestedResourceGroup(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, + Resources nestedResourceGroupResources) throws Exception { + for (Resource resourceGroupNested : nestedResourceGroupResources) { + Optional<Link> subInterfaceStackLink = resourceGroupNested.getLinks().stream() + .filter(link -> "nested".equals(link.getRel())).findAny(); + if (subInterfaceStackLink.isPresent()) { + addSubInterface(cloudRegion, tenantId, vServersWithLInterface,subInterfaceStackLink.get()); + } + } + } + + protected void addSubInterface(String cloudRegion, String tenantId, Set<Vserver> vServersWithLInterface, Link subInterfaceStackLink) throws Exception { + Optional<String> resourcePath = extractResourcePathFromHref(subInterfaceStackLink.getHref()); + Optional<String> stackPath = extractStackPathFromHref(subInterfaceStackLink.getHref()); + if (resourcePath.isPresent() && stackPath.isPresent()) { + logger.debug("Fetching nested Sub-Interface Stack Information"); + Stack subinterfaceStack = heat.executeHeatClientRequest(stackPath.get(), cloudRegion, tenantId, Stack.class); + Resources subinterfaceResources = heat.executeHeatClientRequest(resourcePath.get(), cloudRegion, tenantId, Resources.class); + if (subinterfaceStack != null) { + addSubInterfaceToVserver(vServersWithLInterface, subinterfaceStack, subinterfaceResources); + } + } else + throw new Exception("Error finding Path from Self Link"); + + } + + protected void addSubInterfaceToVserver(Set<Vserver> vServersWithLInterface, Stack subinterfaceStack, Resources subinterfaceResources) throws Exception { + String parentNeutronPortId = (String) subinterfaceStack.getParameters().get("port_interface"); + logger.debug("Parent neutron Port: {} on SubInterface: {}", parentNeutronPortId, subinterfaceStack.getId()); + for (Vserver auditVserver : vServersWithLInterface) + for (LInterface lInterface : auditVserver.getLInterfaces().getLInterface()) + + if (parentNeutronPortId.equals(lInterface.getInterfaceId())) { + logger.debug("Found Parent Port on VServer: {} on Port: {}", auditVserver.getVserverId(), lInterface.getInterfaceId()); + Resource contrailVm = subinterfaceResources.getList().stream().filter(resource -> "OS::ContrailV2::VirtualMachineInterface".equals(resource.getType())).findAny() + .orElse(null); + if(contrailVm == null){ + throw new Exception("Cannnot find Contrail Virtual Machine Interface on Stack: "+ subinterfaceStack.getId()); + } + LInterface subInterface = new LInterface(); + subInterface.setInterfaceId(contrailVm.getPhysicalResourceId()); + + if(lInterface.getLInterfaces() == null) + lInterface.setLInterfaces(new LInterfaces()); + + lInterface.getLInterfaces().getLInterface().add(subInterface); + }else + logger.debug("Did Not Find Parent Port on VServer: {} Parent Port: SubInterface: {}",auditVserver.getVserverId(), + lInterface.getInterfaceId(),subinterfaceStack.getId()); + } + + protected Set<Vserver> createVserverSet(Resources resources, List<Resource> novaResources) { + Set<Vserver> vserversToAudit = new HashSet<>(); + for (Resource novaResource : novaResources) { + Vserver auditVserver = new Vserver(); + auditVserver.setLInterfaces(new LInterfaces()); + auditVserver.setVserverId(novaResource.getPhysicalResourceId()); + Stream<Resource> filteredNeutronNetworks = resources.getList().stream() + .filter(resource -> resource.getRequiredBy().contains(novaResource.getLogicalResourceId())) + .filter(resource -> "OS::Neutron::Port".equals(resource.getType())); + filteredNeutronNetworks.forEach(network -> { + LInterface lInterface = new LInterface(); + lInterface.setInterfaceId(network.getPhysicalResourceId()); + auditVserver.getLInterfaces().getLInterface().add(lInterface); + }); + vserversToAudit.add(auditVserver); + } + return vserversToAudit; + } + + protected Optional<String> extractResourcePathFromHref(String href) { + URI uri; + try { + uri = new URI(href); + return Optional.of(uri.getPath().replaceFirst("/v\\d+", "")+RESOURCES); + } catch (Exception e) { + logger.error("Error parsing URI", e); + } + return Optional.empty(); + } + + protected Optional<String> extractStackPathFromHref(String href) { + URI uri; + try { + uri = new URI(href); + return Optional.of(uri.getPath().replaceFirst("/v\\d+", "")); + } catch (Exception e) { + logger.error("Error parsing URI", e); + } + return Optional.empty(); + } + + +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java index 27829a6156..6e2fcb02c9 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapter.java @@ -55,9 +55,12 @@ public interface MsoNetworkAdapter @WebParam(name="networkName") @XmlElement(required=true) String networkName, @WebParam(name="physicalNetworkName") String physicalNetworkName, @WebParam(name="vlans") List<Integer> vlans, + @WebParam(name="shared") String shared, + @WebParam(name="external") String external, @WebParam(name="failIfExists") Boolean failIfExists, @WebParam(name="backout") Boolean backout, @WebParam(name="subnets") List<Subnet> subnets, + @WebParam(name="networkParams") Map<String, String> networkParams, @WebParam(name="request") MsoRequest msoRequest, @WebParam(name="networkId", mode=Mode.OUT) Holder<String> networkId, @WebParam(name="neutronNetworkId", mode=Mode.OUT) Holder<String> neutronNetworkId, @@ -77,6 +80,7 @@ public interface MsoNetworkAdapter @WebParam(name="failIfExists") Boolean failIfExists, @WebParam(name="backout") Boolean backout, @WebParam(name="subnets") List<Subnet> subnets, + @WebParam(name="networkParams") Map<String, String> networkParams, @WebParam(name="policyFqdns") List<String> policyFqdns, @WebParam(name="routeTableFqdns") List<String> routeTableFqdns, @WebParam(name="request") MsoRequest msoRequest, @@ -100,7 +104,10 @@ public interface MsoNetworkAdapter @WebParam(name="networkName") @XmlElement(required=true) String networkName, @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName, @WebParam(name="vlans") @XmlElement(required=true) List<Integer> vlans, + @WebParam(name="shared") String shared, + @WebParam(name="external") String external, @WebParam(name="subnets") List<Subnet> subnets, + @WebParam(name="networkParams") Map<String,String> networkParams, @WebParam(name="request") MsoRequest msoRequest, @WebParam(name="subnetIdMap", mode=Mode.OUT) Holder<Map<String, String>> subnetIdMap, @WebParam(name="rollback", mode=Mode.OUT) Holder<NetworkRollback> rollback ) @@ -117,6 +124,7 @@ public interface MsoNetworkAdapter @WebParam(name="shared") String shared, @WebParam(name="external") String external, @WebParam(name="subnets") List<Subnet> subnets, + @WebParam(name="networkParams") Map<String,String> networkParams, @WebParam(name="policyFqdns") List<String> policyFqdns, @WebParam(name="routeTableFqdns") List<String> routeTableFqdns, @WebParam(name="request") MsoRequest msoRequest, diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java index 99f590b773..a85da58536 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsync.java @@ -22,6 +22,7 @@ package org.onap.so.adapters.network; import java.util.List; +import java.util.Map; import javax.jws.Oneway; import javax.jws.WebMethod; @@ -56,6 +57,7 @@ public interface MsoNetworkAdapterAsync @WebParam(name="failIfExists") Boolean failIfExists, @WebParam(name="backout") Boolean backout, @WebParam(name="subnets") List<Subnet> subnets, + @WebParam(name="networkParams") Map<String, String> networkParams, @WebParam(name="messageId") @XmlElement(required=true) String messageId, @WebParam(name="request") MsoRequest msoRequest, @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); @@ -71,6 +73,7 @@ public interface MsoNetworkAdapterAsync @WebParam(name="physicalNetworkName") @XmlElement(required=true) String physicalNetworkName, @WebParam(name="vlans") @XmlElement(required=true) List<Integer> vlans, @WebParam(name="subnets") List<Subnet> subnets, + @WebParam(name="networkParams") Map<String, String> networkParams, @WebParam(name="messageId") @XmlElement(required=true) String messageId, @WebParam(name="request") MsoRequest msoRequest, @WebParam(name="notificationUrl") @XmlElement(required=true) String notificationUrl ); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java index 608f39adb4..8181714c0a 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImpl.java @@ -122,6 +122,7 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { Boolean failIfExists, Boolean backout, List <Subnet> subnets, + Map<String,String> networkParams, String messageId, MsoRequest msoRequest, String notificationUrl) { @@ -145,6 +146,16 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { Holder <String> neutronNetworkId = new Holder <> (); Holder <NetworkRollback> networkRollback = new Holder <> (); Holder <Map <String, String>> subnetIdMap = new Holder <> (); + + HashMap<String, String> params = (HashMap<String,String>) networkParams; + if (params == null) + params = new HashMap<String,String>(); + String shared = null; + String external = null; + if (params.containsKey("shared")) + shared = params.get("shared"); + if (params.containsKey("external")) + external = params.get("external"); try { networkAdapter.createNetwork (cloudSiteId, @@ -154,9 +165,12 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { networkName, physicalNetworkName, vlans, + shared, + external, failIfExists, backout, subnets, + params, msoRequest, networkId, neutronNetworkId, @@ -239,6 +253,7 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { String physicalNetworkName, List <Integer> vlans, List <Subnet> subnets, + Map <String,String> networkParams, String messageId, MsoRequest msoRequest, String notificationUrl) { @@ -261,6 +276,16 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { // Synchronous Web Service Outputs Holder <NetworkRollback> networkRollback = new Holder <> (); Holder <Map <String, String>> subnetIdMap = new Holder <> (); + + HashMap<String, String> params = (HashMap<String,String>) networkParams; + if (params == null) + params = new HashMap<String,String>(); + String shared = null; + String external = null; + if (params.containsKey("shared")) + shared = params.get("shared"); + if (params.containsKey("external")) + external = params.get("external"); try { networkAdapter.updateNetwork (cloudSiteId, @@ -271,7 +296,10 @@ public class MsoNetworkAdapterAsyncImpl implements MsoNetworkAdapterAsync { networkName, physicalNetworkName, vlans, + shared, + external, subnets, + params, msoRequest, subnetIdMap, networkRollback); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java index 45285d0e51..d250561f16 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java @@ -138,9 +138,12 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { String networkName, String physicalNetworkName, List <Integer> vlans, + String shared, + String external, Boolean failIfExists, Boolean backout, List <Subnet> subnets, + Map<String, String> networkParams, MsoRequest msoRequest, Holder <String> networkId, Holder <String> neutronNetworkId, @@ -155,8 +158,8 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { physicalNetworkName, vlans, null, - null, - null, + shared, + external, failIfExists, backout, subnets, @@ -182,6 +185,7 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { Boolean failIfExists, Boolean backout, List <Subnet> subnets, + Map<String, String> networkParams, List <String> policyFqdns, List<String> routeTableFqdns, MsoRequest msoRequest, @@ -660,7 +664,10 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { String networkName, String physicalNetworkName, List <Integer> vlans, + String shared, + String external, List <Subnet> subnets, + Map<String,String> networkParams, MsoRequest msoRequest, Holder <Map <String, String>> subnetIdMap, Holder <NetworkRollback> rollback) throws NetworkException { @@ -673,8 +680,8 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { physicalNetworkName, vlans, null, - null, - null, + shared, + external, subnets, null, null, @@ -695,6 +702,7 @@ public class MsoNetworkAdapterImpl implements MsoNetworkAdapter { String shared, String external, List <Subnet> subnets, + Map<String, String> networkParams, List <String> policyFqdns, List<String> routeTableFqdns, MsoRequest msoRequest, diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java index effe7a8c61..8d08b3b52c 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/NetworkAdapterRest.java @@ -168,6 +168,13 @@ public class NetworkAdapterRest { Holder<String> networkFqdn = new Holder<>(); Holder<Map<String, String>> subnetIdMap = new Holder<>(); Holder<NetworkRollback> rollback = new Holder<>(); + + HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams(); + if (params == null) { + params = new HashMap<String,String>(); + } + String shared = null; + String external = null; String cloudsite = req.getCloudSiteId(); if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) { @@ -186,6 +193,20 @@ public class NetworkAdapterRest { ctn = new ContrailNetwork(); req.setContrailNetwork(ctn); } + if (params.containsKey("shared")) { + shared = params.get("shared"); + } else { + if (ctn.getShared() != null) { + shared = ctn.getShared(); + } + } + if (params.containsKey("external")) { + external = params.get("external"); + } else { + if (ctn.getExternal() != null) { + external = ctn.getExternal(); + } + } adapter.createNetworkContrail( req.getCloudSiteId(), req.getTenantId(), @@ -193,11 +214,12 @@ public class NetworkAdapterRest { req.getModelCustomizationUuid(), req.getNetworkName(), req.getContrailNetwork().getRouteTargets(), - req.getContrailNetwork().getShared(), - req.getContrailNetwork().getExternal(), + shared, + external, req.getFailIfExists(), req.getBackout(), req.getSubnets(), + params, req.getContrailNetwork().getPolicyFqdns(), req.getContrailNetwork().getRouteTableFqdns(), req.getMsoRequest(), @@ -212,6 +234,10 @@ public class NetworkAdapterRest { pvn = new ProviderVlanNetwork(); req.setProviderVlanNetwork(pvn); } + if (params.containsKey("shared")) + shared = params.get("shared"); + if (params.containsKey("external")) + external = params.get("external"); adapter.createNetwork( req.getCloudSiteId(), req.getTenantId(), @@ -220,9 +246,12 @@ public class NetworkAdapterRest { req.getNetworkName(), req.getProviderVlanNetwork().getPhysicalNetworkName(), req.getProviderVlanNetwork().getVlans(), + shared, + external, req.getFailIfExists(), req.getBackout(), req.getSubnets(), + params, req.getMsoRequest(), networkId, neutronNetworkId, @@ -593,6 +622,12 @@ public class NetworkAdapterRest { try { Holder<Map<String, String>> subnetIdMap = new Holder<>(); Holder<NetworkRollback> rollback = new Holder<> (); + HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams(); + if (params == null) { + params = new HashMap<String,String>(); + } + String shared = null; + String external = null; if (req.getCloudSiteId().equals(TESTING_KEYWORD)) { subnetIdMap.value = testMap(); @@ -607,6 +642,20 @@ public class NetworkAdapterRest { ctn = new ContrailNetwork(); req.setContrailNetwork(ctn); } + if (params.containsKey("shared")) { + shared = params.get("shared"); + } else { + if (ctn.getShared() != null) { + shared = ctn.getShared(); + } + } + if (params.containsKey("external")) { + external = params.get("external"); + } else { + if (ctn.getExternal() != null) { + external = ctn.getExternal(); + } + } adapter.updateNetworkContrail( req.getCloudSiteId(), req.getTenantId(), @@ -615,9 +664,10 @@ public class NetworkAdapterRest { req.getNetworkStackId(), req.getNetworkName(), req.getContrailNetwork().getRouteTargets(), - req.getContrailNetwork().getShared(), - req.getContrailNetwork().getExternal(), + shared, + external, req.getSubnets(), + params, req.getContrailNetwork().getPolicyFqdns(), req.getContrailNetwork().getRouteTableFqdns(), req.getMsoRequest(), @@ -629,6 +679,12 @@ public class NetworkAdapterRest { pvn = new ProviderVlanNetwork(); req.setProviderVlanNetwork(pvn); } + if (params.containsKey("shared")) { + shared = params.get("shared"); + } + if (params.containsKey("external")) { + external = params.get("external"); + } adapter.updateNetwork( req.getCloudSiteId(), req.getTenantId(), @@ -638,7 +694,10 @@ public class NetworkAdapterRest { req.getNetworkName(), req.getProviderVlanNetwork().getPhysicalNetworkName(), req.getProviderVlanNetwork().getVlans(), + shared, + external, req.getSubnets(), + params, req.getMsoRequest(), subnetIdMap, rollback); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java new file mode 100644 index 0000000000..c529413891 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java @@ -0,0 +1,69 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T 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.so.adapters.openstack; + +import java.net.MalformedURLException; +import java.net.URL; + +import org.onap.so.client.aai.AAIProperties; +import org.onap.so.client.aai.AAIVersion; +import org.onap.so.spring.SpringContextHelper; +import org.springframework.context.ApplicationContext; + +public class AaiClientPropertiesImpl implements AAIProperties { + + private String aaiEndpoint; + private String auth; + private String key; + private static final String SYSTEM_NAME = "MSO"; + + public AaiClientPropertiesImpl() { + ApplicationContext context = SpringContextHelper.getAppContext(); + aaiEndpoint = context.getEnvironment().getProperty("aai.endpoint"); + this.auth = context.getEnvironment().getProperty("aai.auth"); + this.key = context.getEnvironment().getProperty("mso.msoKey"); + } + + @Override + public URL getEndpoint() throws MalformedURLException { + return new URL(aaiEndpoint); + } + + @Override + public String getSystemName() { + return SYSTEM_NAME; + } + + @Override + public AAIVersion getDefaultVersion() { + return AAIVersion.LATEST; + } + + @Override + public String getAuth() { + return this.auth; + } + + @Override + public String getKey() { + return this.key; + } +} diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/MsoOpenstackAdaptersApplication.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/MsoOpenstackAdaptersApplication.java index a9aa50f654..9408f0d681 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/MsoOpenstackAdaptersApplication.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/MsoOpenstackAdaptersApplication.java @@ -31,10 +31,12 @@ import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @SpringBootApplication(scanBasePackages = { "org.onap.so" }) @EnableAsync +@EnableScheduling @EnableJpaRepositories({ "org.onap.so.db.catalog.data.repository", "org.onap.so.db.request.data.repository"}) @EntityScan({ "org.onap.so.db.catalog.beans", "org.onap.so.db.request.beans"}) diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java index e0d7581dcf..09ee0cde04 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java @@ -994,10 +994,6 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter { } } } - if (multicloudInputs) { - goldenInputs.put(MsoMulticloudUtils.GENERIC_VNF_ID, genericVnfId); - goldenInputs.put(MsoMulticloudUtils.VF_MODULE_ID, vfModuleId); - } LOGGER.debug("Ignoring extra inputs: " + extraInputs); } diff --git a/adapters/mso-openstack-adapters/src/main/resources/META-INF/services/org.onap.so.client.RestProperties b/adapters/mso-openstack-adapters/src/main/resources/META-INF/services/org.onap.so.client.RestProperties new file mode 100644 index 0000000000..4ce4d750a5 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/main/resources/META-INF/services/org.onap.so.client.RestProperties @@ -0,0 +1 @@ +org.onap.so.adapters.openstack.AaiClientPropertiesImpl
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/main/resources/application.yaml b/adapters/mso-openstack-adapters/src/main/resources/application.yaml index 8fd6d4279d..18084ced8d 100644 --- a/adapters/mso-openstack-adapters/src/main/resources/application.yaml +++ b/adapters/mso-openstack-adapters/src/main/resources/application.yaml @@ -13,7 +13,9 @@ mso: core-pool-size: 50 max-pool-size: 50 queue-capacity: 500 - + workflow: + topics: + retryMultiplier: 60000 spring: datasource: jdbc-url: jdbc:mariadb://${DB_HOST}:${DB_PORT}/catalogdb diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java new file mode 100644 index 0000000000..52b67b8eb9 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditStackServiceDataTest.java @@ -0,0 +1,150 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017-2019 AT&T 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.so.adapters.audit; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; + +import java.io.IOException; +import java.util.Optional; + +import org.camunda.bpm.client.task.ExternalTask; +import org.camunda.bpm.client.task.ExternalTaskService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.onap.aai.domain.yang.LInterface; +import org.onap.so.audit.beans.AuditInventory; +import org.springframework.core.env.Environment; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; + +public class AuditStackServiceDataTest extends AuditStackServiceData { + + @InjectMocks + AuditStackServiceData auditStackService = new AuditStackServiceData(); + + @Mock + HeatStackAudit heatStackAuditMock; + + @Mock + Environment mockEnv; + + @Mock + ExternalTask mockExternalTask; + + @Mock + ExternalTaskService mockExternalTaskService; + + AuditInventory auditInventory = new AuditInventory(); + + @Before + public void setup() { + auditInventory.setCloudOwner("cloudOwner"); + auditInventory.setCloudRegion("cloudRegion"); + auditInventory.setTenantId("tenantId"); + auditInventory.setHeatStackName("stackName"); + MockitoAnnotations.initMocks(this); + doReturn(auditInventory).when(mockExternalTask).getVariable("auditInventory"); + doReturn("6000").when(mockEnv).getProperty("mso.workflow.topics.retryMultiplier","6000"); + doReturn("aasdfasdf").when(mockExternalTask).getId(); + } + + @Test + public void execute_external_task_audit_success_Test() { + doReturn(true).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", "stackName"); + auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); + Mockito.verify(mockExternalTaskService).complete(mockExternalTask); + } + + @Test + public void execute_external_task_audit_first_failure_Test() { + doReturn(false).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", "stackName"); + doReturn(null).when(mockExternalTask).getRetries(); + auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); + Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask, + "Unable to find all VServers and L-Interaces in A&AI", + "Unable to find all VServers and L-Interaces in A&AI", 8, 10000L); + } + + @Test + public void execute_external_task_audit_intermediate_failure_Test() { + doReturn(false).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", "stackName"); + doReturn(6).when(mockExternalTask).getRetries(); + auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); + Mockito.verify(mockExternalTaskService).handleFailure(mockExternalTask, + "Unable to find all VServers and L-Interaces in A&AI", + "Unable to find all VServers and L-Interaces in A&AI", 5, 12000L); + + } + + @Test + public void execute_external_task_audit_final_failure_Test() { + doReturn(false).when(heatStackAuditMock).auditHeatStack("cloudRegion", "cloudOwner", "tenantId", "stackName"); + doReturn(1).when(mockExternalTask).getRetries(); + auditStackService.executeExternalTask(mockExternalTask, mockExternalTaskService); + Mockito.verify(mockExternalTaskService).handleBpmnError(mockExternalTask, + "AuditAAIInventoryFailure", "Number of Retries Exceeded auditing inventory"); + } + + @Test + public void retry_sequence_calculation_Test() { + long firstRetry = auditStackService.calculateRetryDelay(8); + assertEquals(6000L, firstRetry); + long secondRetry = auditStackService.calculateRetryDelay(7); + assertEquals(6000L, secondRetry); + long thirdRetry = auditStackService.calculateRetryDelay(6); + assertEquals(12000L, thirdRetry); + long fourthRetry = auditStackService.calculateRetryDelay(5); + assertEquals(18000L, fourthRetry); + long fifthRetry = auditStackService.calculateRetryDelay(4); + assertEquals(30000L, fifthRetry); + long sixRetry = auditStackService.calculateRetryDelay(3); + assertEquals(48000L, sixRetry); + long seventhRetry = auditStackService.calculateRetryDelay(2); + assertEquals(78000L, seventhRetry); + long eigthRetry = auditStackService.calculateRetryDelay(1); + assertEquals(120000L, eigthRetry); + } + + @Test + public void retry_sequence_Test() { + long firstRetry = auditStackService.calculateRetryDelay(8); + assertEquals(6000L, firstRetry); + long secondRetry = auditStackService.calculateRetryDelay(7); + assertEquals(6000L, secondRetry); + long thirdRetry = auditStackService.calculateRetryDelay(6); + assertEquals(12000L, thirdRetry); + long fourthRetry = auditStackService.calculateRetryDelay(5); + assertEquals(18000L, fourthRetry); + long fifthRetry = auditStackService.calculateRetryDelay(4); + assertEquals(30000L, fifthRetry); + long sixRetry = auditStackService.calculateRetryDelay(3); + assertEquals(48000L, sixRetry); + long seventhRetry = auditStackService.calculateRetryDelay(2); + assertEquals(78000L, seventhRetry); + long eigthRetry = auditStackService.calculateRetryDelay(1); + assertEquals(120000L, eigthRetry); + } +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java new file mode 100644 index 0000000000..02557d8c20 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/AuditVServerTest.java @@ -0,0 +1,332 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017-2019 AT&T 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.so.adapters.audit; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Stream; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.aai.domain.yang.LInterface; +import org.onap.aai.domain.yang.LInterfaces; +import org.onap.aai.domain.yang.Vserver; +import org.onap.so.client.aai.AAIObjectPlurals; +import org.onap.so.client.aai.AAIObjectType; +import org.onap.so.client.aai.AAIResourcesClient; +import org.onap.so.client.aai.entities.AAIResultWrapper; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; +import org.onap.so.client.aai.entities.uri.AAIUriFactory; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.woorea.openstack.heat.model.Resource; +import com.woorea.openstack.heat.model.Resources; + +@RunWith(MockitoJUnitRunner.Silent.class) +public class AuditVServerTest extends AuditVServer { + + private ObjectMapper objectMapper = new ObjectMapper(); + + @InjectMocks + private AuditVServer auditNova = new AuditVServer(); + + @Mock + private AAIResourcesClient aaiResourcesMock; + + private String cloudOwner = "cloudOwner"; + private String cloudRegion = "cloudRegion"; + private String tenantId = "tenantId"; + + private AAIResourceUri vserverURI = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER,cloudOwner, cloudRegion, + tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db"); + + private AAIResourceUri vserverURI2 = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion, + tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz"); + + private AAIResourceUri ssc_1_trusted_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "dec8bdc7-5718-41dc-bfbb-561ff6eeb81c"); + + private AAIResourceUri ssc_1_service1_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "1c56a24b-5f03-435a-850d-31cd4252de56"); + + private AAIResourceUri ssc_1_mgmt_port_1_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "12afcd28-929f-4d80-8a5a-0833bfd5e20b"); + + private AAIResourceUri ssc_1_mgmt_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "80baec42-ffae-425f-ad8c-3f7b2c24bfff"); + + private AAIResourceUri ssc_1_service2_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "13eddf95-4cf3-45f2-823a-2d890a6549b4"); + + private AAIResourceUri ssc_1_int_ha_port_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db").queryParam("interface-id", "9cab2903-70f7-44fd-b681-491d6ae2adb8"); + + private AAIResourceUri test_port_1_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz").queryParam("interface-id", "9cab2903-70f7-44fd-b681-491d6ae2adz1"); + + + private AAIResourceUri test_port_2_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4dz").queryParam("interface-id", "9cab2903-70f7-44fd-b681-491d6ae2adz2"); + + + + private AAIResourceUri service2_sub_1_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db","interface-name").queryParam("interface-id", "f711be16-2654-4a09-b89d-0511fda20e81"); + + private AAIResourceUri service1_sub_0_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db","interface-name").queryParam("interface-id", "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb"); + + private AAIResourceUri service1_sub_1_uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, + cloudOwner, cloudRegion, tenantId, "3a4c2ca5-27b3-4ecc-98c5-06804867c4db","interface-name").queryParam("interface-id", "b7019dd0-2ee9-4447-bdef-ac25676b205a"); + + + + private Set<Vserver> vserversToAudit = new HashSet<>(); + + + LInterface test_port_1 = new LInterface(); + LInterface test_port_2 = new LInterface(); + LInterface ssc_1_int_ha_port_0 = new LInterface(); + LInterface service2_sub_interface_1 = new LInterface(); + LInterface ssc_1_service2_port_0 = new LInterface(); + LInterface ssc_1_mgmt_port_0 = new LInterface(); + LInterface ssc_1_mgmt_port_1 = new LInterface(); + LInterface service1_sub_interface_2 = new LInterface(); + LInterface service1_sub_interface_1 = new LInterface(); + LInterface ssc_1_service1_port_0 = new LInterface(); + LInterface ssc_1_trusted_port_0 = new LInterface(); + + LInterfaces test_port_1_plural = new LInterfaces(); + LInterfaces test_port_2_plural = new LInterfaces(); + LInterfaces ssc_1_int_ha_port_0_plural = new LInterfaces(); + LInterfaces service2_sub_interface_1_plural = new LInterfaces(); + LInterfaces ssc_1_service2_port_0_plural = new LInterfaces(); + LInterfaces ssc_1_mgmt_port_0_plural = new LInterfaces(); + LInterfaces ssc_1_mgmt_port_1_plural = new LInterfaces(); + LInterfaces service1_sub_interface_2_plural = new LInterfaces(); + LInterfaces service1_sub_interface_1_plural = new LInterfaces(); + LInterfaces ssc_1_service1_port_0_plural = new LInterfaces(); + LInterfaces ssc_1_trusted_port_0_plural = new LInterfaces(); + + + @Before + public void setup() { + auditNova.setAaiClient(aaiResourcesMock); + + Vserver vServer1= new Vserver(); + vServer1.setVserverId("3a4c2ca5-27b3-4ecc-98c5-06804867c4db"); + LInterfaces vServer1Linterfaces = new LInterfaces(); + vServer1.setLInterfaces(vServer1Linterfaces); + + ssc_1_trusted_port_0.setInterfaceId("dec8bdc7-5718-41dc-bfbb-561ff6eeb81c"); + ssc_1_trusted_port_0.setInterfaceName("interface-name"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0); + + + ssc_1_service1_port_0.setInterfaceId("1c56a24b-5f03-435a-850d-31cd4252de56"); + ssc_1_service1_port_0.setInterfaceName("interface-name"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_service1_port_0); + ssc_1_service1_port_0.setLInterfaces(new LInterfaces()); + + + service1_sub_interface_1.setInterfaceId("0d9cd813-2ae1-46c0-9ebb-48081f6cffbb"); + ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_1); + + + service1_sub_interface_2.setInterfaceId("b7019dd0-2ee9-4447-bdef-ac25676b205a"); + ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_2); + + + ssc_1_mgmt_port_1.setInterfaceId("12afcd28-929f-4d80-8a5a-0833bfd5e20b"); + ssc_1_mgmt_port_1.setInterfaceName("interface-name"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1); + + ssc_1_mgmt_port_0.setInterfaceId("80baec42-ffae-425f-ad8c-3f7b2c24bfff"); + ssc_1_mgmt_port_0.setInterfaceName("interface-name"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_0); + + + ssc_1_service2_port_0.setLInterfaces(new LInterfaces()); + ssc_1_service2_port_0.setInterfaceId("13eddf95-4cf3-45f2-823a-2d890a6549b4"); + ssc_1_service2_port_0.setInterfaceName("interface-name"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_service2_port_0); + + + service2_sub_interface_1.setInterfaceId("f711be16-2654-4a09-b89d-0511fda20e81"); + ssc_1_service2_port_0.getLInterfaces().getLInterface().add(service2_sub_interface_1); + + + ssc_1_int_ha_port_0.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adb8"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_int_ha_port_0); + + + Vserver vServer2= new Vserver(); + vServer2.setVserverId("3a4c2ca5-27b3-4ecc-98c5-06804867c4dz"); + LInterfaces vServer2Linterfaces = new LInterfaces(); + vServer2.setLInterfaces(vServer2Linterfaces); + + test_port_1.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adz1"); + test_port_1.setInterfaceName("interface-name"); + + + test_port_2.setInterfaceId("9cab2903-70f7-44fd-b681-491d6ae2adz2"); + test_port_2.setInterfaceName("interface-name"); + + vServer2.getLInterfaces().getLInterface().add(test_port_1); + vServer2.getLInterfaces().getLInterface().add(test_port_2); + + vserversToAudit.add(vServer1); + vserversToAudit.add(vServer2); + + + test_port_1_plural.getLInterface().add(test_port_1); + test_port_2_plural.getLInterface().add(test_port_2); + ssc_1_int_ha_port_0_plural.getLInterface().add(ssc_1_int_ha_port_0); + ssc_1_service2_port_0_plural.getLInterface().add(ssc_1_service2_port_0); + ssc_1_mgmt_port_0_plural.getLInterface().add(ssc_1_mgmt_port_0); + ssc_1_mgmt_port_1_plural.getLInterface().add(ssc_1_mgmt_port_1); + ssc_1_service1_port_0_plural.getLInterface().add(ssc_1_service1_port_0); + ssc_1_trusted_port_0_plural.getLInterface().add(ssc_1_trusted_port_0); + + } + + @Test + public void audit_Vserver_Empty_HashSet() throws JsonParseException, JsonMappingException, IOException { + boolean exists = auditNova.auditVservers(new HashSet<Vserver>(), tenantId, cloudOwner, cloudRegion); + assertEquals(false, exists); + } + + @Test + public void audit_Vserver_Found_Test() throws JsonParseException, JsonMappingException, IOException { + doReturn(true).when(aaiResourcesMock).exists(vserverURI); + doReturn(true).when(aaiResourcesMock).exists(vserverURI2); + doReturn(Optional.of(ssc_1_trusted_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_trusted_port_0_uri); + doReturn(Optional.of(ssc_1_service1_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_service1_port_0_uri); + doReturn(Optional.of(ssc_1_mgmt_port_1_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_mgmt_port_1_uri); + doReturn(Optional.of(ssc_1_mgmt_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_mgmt_port_0_uri); + doReturn(Optional.of(ssc_1_service2_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_service2_port_0_uri); + doReturn(Optional.of(ssc_1_int_ha_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_int_ha_port_0_uri); + doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterfaces.class,test_port_1_uri); + doReturn(Optional.of(test_port_2_plural)).when(aaiResourcesMock).get(LInterfaces.class,test_port_2_uri); + + doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); + + boolean exists = auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + assertEquals(true, exists); + } + + @Test + public void audit_Vserver_Found_Test_Network_Not_Found() + throws JsonParseException, JsonMappingException, IOException { + doReturn(true).when(aaiResourcesMock).exists(vserverURI); + doReturn(true).when(aaiResourcesMock).exists(vserverURI2); + doReturn(Optional.of(ssc_1_trusted_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_trusted_port_0_uri); + doReturn(Optional.of(ssc_1_service1_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_service1_port_0_uri); + doReturn(Optional.of(ssc_1_mgmt_port_1_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_mgmt_port_1_uri); + doReturn(Optional.empty()).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_mgmt_port_0_uri); + doReturn(Optional.of(ssc_1_service2_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_service2_port_0_uri); + doReturn(Optional.of(ssc_1_int_ha_port_0_plural)).when(aaiResourcesMock).get(LInterfaces.class,ssc_1_int_ha_port_0_uri); + doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterfaces.class,test_port_1_uri); + doReturn(Optional.of(test_port_2_plural)).when(aaiResourcesMock).get(LInterfaces.class,test_port_2_uri); + + doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); + + boolean exists = auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + assertEquals(false, exists); + } + + @Test + public void audit_Vserver_Found_Test_Network_Not_Found_Second_Server() + throws JsonParseException, JsonMappingException, IOException { + doReturn(true).when(aaiResourcesMock).exists(vserverURI); + doReturn(true).when(aaiResourcesMock).exists(vserverURI2); + doReturn(Optional.of(ssc_1_trusted_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_trusted_port_0_uri); + doReturn(Optional.of(ssc_1_service1_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_service1_port_0_uri); + doReturn(Optional.of(ssc_1_mgmt_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_mgmt_port_1_uri); + doReturn(Optional.of(ssc_1_mgmt_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_mgmt_port_0_uri); + doReturn(Optional.of(ssc_1_service2_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_service2_port_0_uri); + doReturn(Optional.of(ssc_1_int_ha_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_int_ha_port_0_uri); + doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_1_uri); + doReturn(Optional.empty()).when(aaiResourcesMock).get(LInterface.class,test_port_2_uri); + doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); + boolean exists = auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + assertEquals(false, exists); + } + + @Test + public void audit_Vserver_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { + doReturn(false).when(aaiResourcesMock).exists(vserverURI); + doReturn(false).when(aaiResourcesMock).exists(vserverURI2); + boolean exists = auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + assertEquals(false, exists); + } + + @Test + public void audit_Vserver_first_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { + doReturn(false).when(aaiResourcesMock).exists(vserverURI); + doReturn(true).when(aaiResourcesMock).exists(vserverURI2); + doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_1_uri); + doReturn(Optional.of(test_port_2_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_2_uri); + boolean exists = auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + assertEquals(false, exists); + } + + @Test + public void audit_Vserver_Second_Not_Found_Test() throws JsonParseException, JsonMappingException, IOException { + doReturn(true).when(aaiResourcesMock).exists(vserverURI); + doReturn(Optional.of(ssc_1_trusted_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_trusted_port_0_uri); + doReturn(Optional.of(ssc_1_service1_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_service1_port_0_uri); + doReturn(Optional.of(ssc_1_mgmt_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_mgmt_port_1_uri); + doReturn(Optional.of(ssc_1_mgmt_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_mgmt_port_0_uri); + doReturn(Optional.of(ssc_1_service2_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_service2_port_0_uri); + doReturn(Optional.of(ssc_1_int_ha_port_0_plural)).when(aaiResourcesMock).get(LInterface.class,ssc_1_int_ha_port_0_uri); + doReturn(Optional.of(test_port_1_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_1_uri); + doReturn(Optional.of(test_port_2_plural)).when(aaiResourcesMock).get(LInterface.class,test_port_2_uri); + doReturn(true).when(aaiResourcesMock).exists(service2_sub_1_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_0_uri); + doReturn(true).when(aaiResourcesMock).exists(service1_sub_1_uri); + doReturn(false).when(aaiResourcesMock).exists(vserverURI2); + boolean exists = auditNova.auditVservers(vserversToAudit, tenantId, cloudOwner, cloudRegion); + assertEquals(false, exists); + } + +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/HeatStackAuditTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/HeatStackAuditTest.java new file mode 100644 index 0000000000..c5b93a7cb9 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/HeatStackAuditTest.java @@ -0,0 +1,239 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017-2019 AT&T 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.so.adapters.audit; + +import static com.shazam.shazamcrest.MatcherAssert.assertThat; +import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; + +import java.io.File; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.aai.domain.yang.LInterface; +import org.onap.aai.domain.yang.LInterfaces; +import org.onap.aai.domain.yang.Vserver; +import org.onap.so.openstack.utils.MsoHeatUtils; +import org.skyscreamer.jsonassert.JSONAssert; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.woorea.openstack.heat.model.Resource; +import com.woorea.openstack.heat.model.Resources; +import com.woorea.openstack.heat.model.Stack; + + +@RunWith(MockitoJUnitRunner.Silent.class) +public class HeatStackAuditTest extends HeatStackAudit { + + @InjectMocks + private HeatStackAudit heatStackAudit = new HeatStackAudit(); + + @Mock + private MsoHeatUtils msoHeatUtilsMock; + + @Mock + private AuditVServer auditVserver; + + private static final String cloudRegion = "cloudRegion"; + private static final String tenantId = "tenantId"; + + private Resources resources = new Resources(); + + private ObjectMapper objectMapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + private ObjectMapper stackObjectMapper = new ObjectMapper().configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); + + @Before + public void setup() throws Exception{ + resources= objectMapper.readValue(new File("src/test/resources/GetResources.json"), Resources.class); + + } + + @Test + public void extract_proper_path_Test(){ + Optional<String> actualResult = extractStackPathFromHref("https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); + assertEquals("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81", actualResult.get()); + } + + @Test + public void extract_proper_resources_path_Test(){ + Optional<String> actualResult = extractResourcePathFromHref("https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); + assertEquals("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81/resources", actualResult.get()); + } + + @Test + public void extract_invalid_uri_Test(){ + Optional<String> actualResult = extractStackPathFromHref("orchestrn.com:8004/v18b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81"); + assertEquals(false, actualResult.isPresent()); + } + + @Test + public void createVserverSet_Test() throws Exception{ + List<Resource> novaResources = resources.getList().stream() + .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList()); + + List<Resource> resourceGroups = resources.getList().stream() + .filter(p -> "OS::Heat::ResourceGroup".equals(p.getType())).collect(Collectors.toList()); + + Set<Vserver> expectedVservers = new HashSet<>(); + Vserver vServer1= new Vserver(); + vServer1.setVserverId("92272b67-d23f-42ca-87fa-7b06a9ec81f3"); + LInterfaces vServer1Linterfaces = new LInterfaces(); + vServer1.setLInterfaces(vServer1Linterfaces); + + LInterface ssc_1_trusted_port_0 = new LInterface(); + ssc_1_trusted_port_0.setInterfaceId("d2f51f82-0ec2-4581-bd1a-d2a82073e52b"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0); + + LInterface ssc_1_mgmt_port_1 = new LInterface(); + ssc_1_mgmt_port_1.setInterfaceId("07f5b14c-147a-4d14-8c94-a9e94dbc097b"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1); + + LInterface ssc_1_mgmt_port_0 = new LInterface(); + ssc_1_mgmt_port_0.setInterfaceId("8d93f63e-e972-48c7-ad98-b2122da47315"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_0); + + LInterface ssc_1_service2_port_0 = new LInterface(); + ssc_1_service2_port_0.setLInterfaces(new LInterfaces()); + ssc_1_service2_port_0.setInterfaceId("0594a2f2-7ea4-42eb-abc2-48ea49677fca"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_service2_port_0); + + LInterface service2_sub_interface_1 = new LInterface(); + service2_sub_interface_1.setInterfaceId("2bbfa345-33bb-495a-94b2-fb514ee1cffc"); + ssc_1_service2_port_0.getLInterfaces().getLInterface().add(service2_sub_interface_1); + + LInterface ssc_1_int_ha_port_0 = new LInterface(); + ssc_1_int_ha_port_0.setInterfaceId("00bb8407-650e-48b5-b919-33b88d6f8fe3"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_int_ha_port_0); + + + LInterface ssc_1_service1_port_0 = new LInterface(); + ssc_1_service1_port_0.setInterfaceId("27391d94-33af-474a-927d-d409249e8fd3"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_service1_port_0); + ssc_1_service1_port_0.setLInterfaces(new LInterfaces()); + + LInterface service1_sub_interface_0 = new LInterface(); + service1_sub_interface_0.setInterfaceId("d54dfd09-75c6-4e04-b204-909455b8f933"); + ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_0); + + LInterface service1_sub_interface_1 = new LInterface(); + service1_sub_interface_1.setInterfaceId("f7a998c0-8939-4b07-bf4a-0862e9c325e1"); + ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_1); + + LInterface service1_sub_interface_2 = new LInterface(); + service1_sub_interface_2.setInterfaceId("621c1fea-60b8-44ee-aede-c01b8b1aaa70"); + ssc_1_service1_port_0.getLInterfaces().getLInterface().add(service1_sub_interface_2); + + + expectedVservers.add(vServer1); + + Resources service1QueryResponse = objectMapper.readValue(new File("src/test/resources/Service1ResourceGroupResponse.json"), Resources.class); + doReturn(service1QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources", cloudRegion, tenantId, Resources.class); + + Resources service2QueryResponse =objectMapper.readValue(new File("src/test/resources/Service2ResourceGroupResponse.json"), Resources.class); + doReturn(service2QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources", cloudRegion, tenantId, Resources.class); + + + Stack service2StackQuerySubInt = stackObjectMapper.readValue(new File("src/test/resources/Service2SubInterface0.json"), Stack.class); + doReturn(service2StackQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", cloudRegion,tenantId, Stack.class); + Resources service2ResourceQuerySubInt = objectMapper.readValue(new File("src/test/resources/Service2SubInterface1Resources.json"), Resources.class); + doReturn(service2ResourceQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources", cloudRegion,tenantId, Resources.class); + + Stack service1StackQuerySubInt1 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface0.json"), Stack.class); + doReturn(service1StackQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", cloudRegion,tenantId, Stack.class); + Resources service1ResourceQuerySubInt1 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface0Resources.json"), Resources.class); + doReturn(service1ResourceQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb/resources", cloudRegion,tenantId, Resources.class); + + + Stack service1StackQuerySubInt2 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface1.json"), Stack.class); + doReturn(service1StackQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a", cloudRegion,tenantId, Stack.class); + Resources service1ResourceQuerySubInt2 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface1Resources.json"), Resources.class); + doReturn(service1ResourceQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a/resources", cloudRegion,tenantId, Resources.class); + + Stack service1StackQuerySubInt3 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface2.json"), Stack.class); + doReturn(service1StackQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c", cloudRegion,tenantId, Stack.class); + Resources service1ResourceQuerySubInt3 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface2Resources.json"), Resources.class); + doReturn(service1ResourceQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c/resources", cloudRegion,tenantId, Resources.class); + + Set<Vserver> vServersToAudit = heatStackAudit.createVserverSet(resources, novaResources); + Set<Vserver> vserversWithSubInterfaces = heatStackAudit.processSubInterfaces(cloudRegion,tenantId,resourceGroups, vServersToAudit); + + String actualValue = objectMapper.writeValueAsString(vserversWithSubInterfaces); + String expectedValue = objectMapper.writeValueAsString(expectedVservers); + + JSONAssert.assertEquals(expectedValue, actualValue, false); + } + + + @Test + public void findInterfaceInformation_Test(){ + List<Resource> novaResources = resources.getList().stream() + .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList()); + Set<Vserver> expectedVservers = new HashSet<>(); + Vserver vServer1= new Vserver(); + vServer1.setVserverId("92272b67-d23f-42ca-87fa-7b06a9ec81f3"); + LInterfaces vServer1Linterfaces = new LInterfaces(); + vServer1.setLInterfaces(vServer1Linterfaces); + + LInterface ssc_1_trusted_port_0 = new LInterface(); + ssc_1_trusted_port_0.setInterfaceId("d2f51f82-0ec2-4581-bd1a-d2a82073e52b"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0); + + LInterface ssc_1_service1_port_0 = new LInterface(); + ssc_1_service1_port_0.setInterfaceId("27391d94-33af-474a-927d-d409249e8fd3"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_service1_port_0); + + LInterface ssc_1_mgmt_port_1 = new LInterface(); + ssc_1_mgmt_port_1.setInterfaceId("07f5b14c-147a-4d14-8c94-a9e94dbc097b"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1); + + LInterface ssc_1_mgmt_port_0 = new LInterface(); + ssc_1_mgmt_port_0.setInterfaceId("8d93f63e-e972-48c7-ad98-b2122da47315"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_0); + + LInterface ssc_1_service2_port_0 = new LInterface(); + ssc_1_service2_port_0.setInterfaceId("0594a2f2-7ea4-42eb-abc2-48ea49677fca"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_service2_port_0); + + LInterface ssc_1_int_ha_port_0 = new LInterface(); + ssc_1_int_ha_port_0.setInterfaceId("00bb8407-650e-48b5-b919-33b88d6f8fe3"); + vServer1.getLInterfaces().getLInterface().add(ssc_1_int_ha_port_0); + + expectedVservers.add(vServer1); + + Set<Vserver> actualVservers = heatStackAudit.createVserverSet(resources, novaResources); + + assertThat(actualVservers, sameBeanAs(expectedVservers)); + } + + +} diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java index 094d308221..f8dcddde04 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/MsoNetworkAdapterAsyncImplTest.java @@ -25,10 +25,12 @@ import org.junit.Test; import org.onap.so.adapters.vnf.BaseRestTestUtils; import org.onap.so.entity.MsoRequest; import org.onap.so.openstack.beans.NetworkRollback; +import org.onap.so.openstack.beans.Subnet; import org.springframework.beans.factory.annotation.Autowired; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.containing; @@ -184,8 +186,11 @@ public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils { " </soapenv:Body>\n" + "</soapenv:Envelope>") .withStatus(HttpStatus.SC_OK))); + HashMap<String,String> networkParams = new HashMap<String,String>(); + networkParams.put("shared", "true"); + networkParams.put("external", "false"); impl.updateNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "dvspg-VCE_VPE-mtjnj40avbc", - "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), "messageId", + "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<Subnet>(), networkParams, "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); } @@ -199,14 +204,17 @@ public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils { mockOpenStackGetStackCreated_200("OpenstackResponse_Stack_Created.json", "dvspg-VCE_VPE-mtjnj40avbc"); mockOpenStackGetStackDeleteOrUpdateComplete_200("OpenstackResponse_Stack_UpdateComplete.json"); mockOpenStackPutPublicUrlStackByNameAndID_NETWORK2_200(); + HashMap<String,String> networkParams = new HashMap<String,String>(); + networkParams.put("shared", "true"); + networkParams.put("external", "false"); impl.updateNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "dvspg-VCE_VPE-mtjnj40avbc", - "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), "messageId", + "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), networkParams, "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); } @Test public void updateNetworkATest_NetworkException() { impl.updateNetworkA("cloudSiteId", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "networkId", - "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), "messageId", + "dvspg-VCE_VPE-mtjnj40avbc", "physicalNetworkName", new ArrayList<>(), new ArrayList<>(), new HashMap<String,String>(), "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); } @@ -237,8 +245,10 @@ public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils { .withStatus(HttpStatus.SC_OK))); mockOpenStackGetStackCreatedVUSP_200(); mockOpenStackPostStacks_200(); + mockOpenStackPostStacks_200(); + HashMap<String,String> networkParams = new HashMap<String,String>(); impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", - "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), "messageId", + "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), networkParams, "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); } @@ -251,15 +261,18 @@ public class MsoNetworkAdapterAsyncImplTest extends BaseRestTestUtils { .withStatus(HttpStatus.SC_OK))); mockOpenStackGetStackCreatedVUSP_200(); mockOpenStackPostStacks_200(); + HashMap<String,String> networkParams = new HashMap<String,String>(); + networkParams.put("shared", "true"); + networkParams.put("external", "false"); impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", - "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), "messageId", + "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), networkParams, "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); } @Test public void createNetworkATest_NetworkException() { impl.createNetworkA("mtn13", "tenantId", "networkType", "3bdbb104-476c-483e-9f8b-c095b3d3068c", "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0", - "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), "messageId", + "physicalNetworkName", new ArrayList<>(), false, false, new ArrayList<>(), new HashMap<String,String>(), "messageId", new MsoRequest(), "http://localhost:"+wireMockPort+"/notificationUrl"); } } diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java index 6123415b41..3910d9ec44 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/network/NetworkAdapterRestTest.java @@ -88,7 +88,7 @@ public class NetworkAdapterRestTest extends BaseRestTestUtils { request.setSkipAAI(true); request.setFailIfExists(false); MsoRequest msoReq = new MsoRequest(); - NetworkTechnology networkTechnology = NetworkTechnology.CONTRAIL; + String networkTechnology = "CONTRAIL"; msoReq.setRequestId(MSO_REQUEST_ID); msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID); @@ -296,6 +296,33 @@ public class NetworkAdapterRestTest extends BaseRestTestUtils { assertThat(response.getBody(), sameBeanAs(expectedResponse)); } + @Test + public void testCreateNetworkNC_Shared_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException { + + mockOpenStackResponseAccess(wireMockPort); + + mockOpenStackPostPublicUrlWithBodyFile_200(); + + mockOpenStackGetStackCreatedAppC_200(); + + mockOpenStackGetStackAppC_404(); + + headers.add("Content-Type", MediaType.APPLICATION_JSON); + headers.add("Accept", MediaType.APPLICATION_JSON); + + String request = readJsonFileAsString("src/test/resources/CreateNetwork4.json"); + HttpEntity<String> entity = new HttpEntity<String>(request, headers); + + ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange( + createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class); + + CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue( + new File("src/test/resources/__files/CreateNetworkResponse4.json"), CreateNetworkResponse.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + assertThat(response.getBody(), sameBeanAs(expectedResponse)); + } + @Override protected String readJsonFileAsString(String fileLocation) throws JsonParseException, JsonMappingException, IOException{ return new String(Files.readAllBytes(Paths.get(fileLocation))); diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfMulticloudAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfMulticloudAdapterImplTest.java index f958a5b140..1fd3ffc90a 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfMulticloudAdapterImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfMulticloudAdapterImplTest.java @@ -67,8 +67,8 @@ public class MsoVnfMulticloudAdapterImplTest extends BaseRestTestUtils{ public void createVfModule() throws Exception { //expectedException.expect(VnfException.class); Map<String, String> stackInputs = new HashMap<>(); - stackInputs.put("oof_directives", "{oofDIRECTIVES}"); - stackInputs.put("sdnc_directives", "{sdncDIRECTIVES}"); + stackInputs.put("oof_directives", "{}"); + stackInputs.put("sdnc_directives", "{}"); stackInputs.put("generic_vnf_id", "genVNFID"); stackInputs.put("vf_module_id", "vfMODULEID"); diff --git a/adapters/mso-openstack-adapters/src/test/resources/CreateNetwork4.json b/adapters/mso-openstack-adapters/src/test/resources/CreateNetwork4.json new file mode 100644 index 0000000000..3a116a6fc1 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/CreateNetwork4.json @@ -0,0 +1,46 @@ +{ + "createNetworkRequest": { + "skipAAI": true, + "messageId": "c4c44af4-4310-4d8b-a1eb-656fc99fe709", + "synchronous": true, + "cloudSiteId": "mtn13", + "tenantId": "ba38bc24a2ef4fb2ad2810c894f1938f", + "networkId": "da886914-efb2-4917-b335-c8381528d90b", + "networkName": "APP-C-24595-T-IST-04AShared_untrusted_vDBE_net_3", + "networkType": "CONTRAIL30_BASIC", + "modelCustomizationUuid": "3bdbb104-ffff-483e-9f8b-c095b3d30844", + "networkTechnology": "NEUTRON", + "subnets": [{ + "subnetName": "APP-C-24595-T-IST-04AShared_untrusted_vDBE_net_3_subnet_1", + "subnetId": "da60501d-9aa8-48d2-99b7-26644fa01093", + "cidr": "20", + "gatewayIp": "", + "ipVersion": "4", + "enableDHCP": false, + "addrFromStart": true, + "hostRoutes": [] + }], + "providerVlanNetwork": { + "physicalNetworkName": "FALSE", + "vlans": [] + }, + "contrailNetwork": { + "shared": "false", + "external": "false", + "routeTargets": [], + "policyFqdns": [], + "routeTableFqdns": [] + }, + "failIfExists": true, + "backout": false, + "networkParams": { + "shared": "true", + "external": "false" + }, + "msoRequest": { + "requestId": "5349f419-b3e9-4546-b3a1-094bd568d6b7", + "serviceInstanceId": "cf965caf-a003-4189-abf9-e0ed77056dd6" + }, + "contrailRequest": false + } +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/GetResources.json b/adapters/mso-openstack-adapters/src/test/resources/GetResources.json new file mode 100644 index 0000000000..22e66d41bb --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/GetResources.json @@ -0,0 +1,228 @@ +{ + "resources": [ + { + "links": [ + { + "href": "https://orchestration.com:8004/v1/99cecb7b19dc4690960761abd0fe2413/stacks/zdyh3brlba05_addon/03840be2-7ce6-4e38-a748-dbd59a798732/resources/vlbagent_eph_aff_id", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/99cecb7b19dc4690960761abd0fe2413/stacks/zdyh3brlba05_addon/03840be2-7ce6-4e38-a748-dbd59a798732", + "rel": "stack" + } + ], + "logical_resource_id": "vlbagent_eph_aff_id", + "physical_resource_id": "zdyh3brlba05_addon-vlbagent_eph_aff_id-euhxoicxsgso", + "required_by": [ + "ssc_server_1" + ], + "resource_name": "vlbagent_eph_aff_id", + "resource_status": "CREATE_COMPLETE", + "resource_status_reason": "state changed", + "resource_type": "OS::Heat::RandomString", + "updated_time": "2019-02-07T22:56:12Z" + }, + { + "resource_name": "ssc_1_trusted_port_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_trusted_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_trusted_port_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [ + "ssc_server_1" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "d2f51f82-0ec2-4581-bd1a-d2a82073e52b", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "ssc_1_service1_port_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_service1_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_service1_port_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [ + "ssc_1_subint_service1_port_0_subinterfaces", + "ssc_server_1" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "27391d94-33af-474a-927d-d409249e8fd3", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "ssc_1_subint_service2_port_0_subinterfaces", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_subint_service2_port_0_subinterfaces", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c", + "rel": "nested" + } + ], + "logical_resource_id": "ssc_1_subint_service2_port_0_subinterfaces", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "447a9b41-714e-434b-b1d0-6cce8d9f0f0c", + "resource_type": "OS::Heat::ResourceGroup" + }, + { + "resource_name": "ssc_1_mgmt_port_1", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_mgmt_port_1", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_mgmt_port_1", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [ + "ssc_server_1" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "07f5b14c-147a-4d14-8c94-a9e94dbc097b", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "ssc_1_mgmt_port_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_mgmt_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_mgmt_port_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [ + "ssc_server_1" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "8d93f63e-e972-48c7-ad98-b2122da47315", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "ssc_1_service2_port_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_service2_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_service2_port_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [ + "ssc_1_subint_service2_port_0_subinterfaces", + "ssc_server_1" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "0594a2f2-7ea4-42eb-abc2-48ea49677fca", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "ssc_1_int_ha_port_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_int_ha_port_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_1_int_ha_port_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [ + "ssc_server_1" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "00bb8407-650e-48b5-b919-33b88d6f8fe3", + "resource_type": "OS::Neutron::Port" + }, + { + "resource_name": "ssc_server_1", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_server_1", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_server_1", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "92272b67-d23f-42ca-87fa-7b06a9ec81f3", + "resource_type": "OS::Nova::Server" + }, + { + "resource_name": "ssc_1_subint_service1_port_0_subinterfaces", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34/resources/ssc_1_subint_service1_port_0_subinterfaces", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001/75e046b1-cf7d-4590-91e7-a6079f83fd34", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", + "rel": "nested" + } + ], + "logical_resource_id": "ssc_1_subint_service1_port_0_subinterfaces", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:15Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "31d0647a-6043-49a4-81b6-ccab29380672", + "resource_type": "OS::Heat::ResourceGroup" + } + ] +} diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1ResourceGroupResponse.json b/adapters/mso-openstack-adapters/src/test/resources/Service1ResourceGroupResponse.json new file mode 100644 index 0000000000..e2e701233f --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1ResourceGroupResponse.json @@ -0,0 +1,79 @@ +{ + "resources": [ + { + "parent_resource": "ssc_1_subint_service1_port_0_subinterfaces", + "resource_name": "1", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources/1", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "rel": "nested" + } + ], + "logical_resource_id": "1", + "resource_status_reason": "state changed", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "resource_type": "vlan_subinterface_ssc_service1.yaml" + }, + { + "parent_resource": "ssc_1_subint_service1_port_0_subinterfaces", + "resource_name": "0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources/0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a", + "rel": "nested" + } + ], + "logical_resource_id": "0", + "resource_status_reason": "state changed", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "resource_type": "vlan_subinterface_ssc_service1.yaml" + }, + { + "parent_resource": "ssc_1_subint_service1_port_0_subinterfaces", + "resource_name": "2", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources/2", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c", + "rel": "nested" + } + ], + "logical_resource_id": "2", + "resource_status_reason": "state changed", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "bd0fc728-cbde-4301-a581-db56f494675c", + "resource_type": "vlan_subinterface_ssc_service1.yaml" + } + ] +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0.json new file mode 100644 index 0000000000..20121e6ff9 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0.json @@ -0,0 +1,41 @@ +{ + "stack": { + "parent": "31d0647a-6043-49a4-81b6-ccab29380672", + "disable_rollback": true, + "description": "HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\n", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "rel": "self" + } + ], + "stack_status_reason": "Stack CREATE completed successfully", + "stack_name": "tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m", + "stack_user_project_id": "dfffe8b2401b45368ca6e21f19796ce1", + "stack_owner": "m08699", + "creation_time": "2019-01-23T19:34:57Z", + "capabilities": [], + "notification_topics": [], + "updated_time": null, + "timeout_mins": 120, + "stack_status": "CREATE_COMPLETE", + "parameters": { + "OS::project_id": "ea2d13cc98b44d60a6f94bdcb2738f9e", + "port_interface": "27391d94-33af-474a-927d-d409249e8fd3", + "OS::stack_id": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "OS::stack_name": "tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m", + "vip_v6_address": "2001:1890:e005:1403::", + "network_id": "1bc1c5fe-896f-4629-b499-a5a36ece4253,c2f4ad4a-0089-41fa-aba7-a80963def29b,70bc637c-ea0f-4452-8aca-01e90c842ff1", + "subinterface_name_prefix": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1", + "counter": "0", + "mac_address": "02:27:39:1d:94:33", + "vip_address": "12.251.1.8", + "vlan_tag": "101,102,103", + "ip_address": "12.251.1.5", + "ip_v6_address": "2001:1890:e005:1402:8000::" + }, + "id": "0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", + "outputs": [], + "template_description": "HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\n" + } +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0Resources.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0Resources.json new file mode 100644 index 0000000000..0f3f35418e --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface0Resources.json @@ -0,0 +1,72 @@ + + +{ + "resources": [ + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [ + "ssc_subint_mis_vmi_0_v6_ip_0", + "ssc_subint_mis_vmi_0_ip_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "d54dfd09-75c6-4e04-b204-909455b8f933", + "resource_type": "OS::ContrailV2::VirtualMachineInterface" + }, + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0_v6_ip_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_v6_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0_v6_ip_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "e7f25707-12fd-454f-95ac-6a05cd70806f", + "resource_type": "OS::ContrailV2::InstanceIp" + }, + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0_ip_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0_ip_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "6d23f4d3-8f7b-42c5-bb9e-4aee5797d506", + "resource_type": "OS::ContrailV2::InstanceIp" + } + ] +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1.json new file mode 100644 index 0000000000..788757b24e --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1.json @@ -0,0 +1,43 @@ + + +{ + "stack": { + "parent": "31d0647a-6043-49a4-81b6-ccab29380672", + "disable_rollback": true, + "description": "HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\n", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a", + "rel": "self" + } + ], + "stack_status_reason": "Stack CREATE completed successfully", + "stack_name": "tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m", + "stack_user_project_id": "dfffe8b2401b45368ca6e21f19796ce1", + "stack_owner": "m08699", + "creation_time": "2019-01-23T19:34:57Z", + "capabilities": [], + "notification_topics": [], + "updated_time": null, + "timeout_mins": 120, + "stack_status": "CREATE_COMPLETE", + "parameters": { + "OS::project_id": "ea2d13cc98b44d60a6f94bdcb2738f9e", + "port_interface": "27391d94-33af-474a-927d-d409249e8fd3", + "OS::stack_id": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "OS::stack_name": "tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m", + "vip_v6_address": "2001:1890:e005:1403::", + "network_id": "1bc1c5fe-896f-4629-b499-a5a36ece4253,c2f4ad4a-0089-41fa-aba7-a80963def29b,70bc637c-ea0f-4452-8aca-01e90c842ff1", + "subinterface_name_prefix": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1", + "counter": "0", + "mac_address": "02:27:39:1d:94:33", + "vip_address": "12.251.1.8", + "vlan_tag": "101,102,103", + "ip_address": "12.251.1.5", + "ip_v6_address": "2001:1890:e005:1402:8000::" + }, + "id": "b7019dd0-2ee9-4447-bdef-ac25676b205a", + "outputs": [], + "template_description": "HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\n" + } +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1Resources.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1Resources.json new file mode 100644 index 0000000000..cfc4d7fed6 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface1Resources.json @@ -0,0 +1,72 @@ + + +{ + "resources": [ + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [ + "ssc_subint_mis_vmi_0_v6_ip_0", + "ssc_subint_mis_vmi_0_ip_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "f7a998c0-8939-4b07-bf4a-0862e9c325e1", + "resource_type": "OS::ContrailV2::VirtualMachineInterface" + }, + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0_v6_ip_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_v6_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0_v6_ip_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "e7f25707-12fd-454f-95ac-6a05cd70806f", + "resource_type": "OS::ContrailV2::InstanceIp" + }, + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0_ip_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0_ip_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "6d23f4d3-8f7b-42c5-bb9e-4aee5797d506", + "resource_type": "OS::ContrailV2::InstanceIp" + } + ] +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2.json new file mode 100644 index 0000000000..c8fab2ae80 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2.json @@ -0,0 +1,41 @@ +{ + "stack": { + "parent": "31d0647a-6043-49a4-81b6-ccab29380672", + "disable_rollback": true, + "description": "HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\n", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbtsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675cc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c", + "rel": "self" + } + ], + "stack_status_reason": "Stack CREATE completed successfully", + "stack_name": "tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv", + "stack_user_project_id": "dfffe8b2401b45368ca6e21f19796ce1", + "stack_owner": "m08699", + "creation_time": "2019-01-23T19:34:57Z", + "capabilities": [], + "notification_topics": [], + "updated_time": null, + "timeout_mins": 120, + "stack_status": "CREATE_COMPLETE", + "parameters": { + "OS::project_id": "ea2d13cc98b44d60a6f94bdcb2738f9e", + "port_interface": "27391d94-33af-474a-927d-d409249e8fd3", + "OS::stack_id": "bd0fc728-cbde-4301-a581-db56f494675c", + "OS::stack_name": "tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv", + "vip_v6_address": "2001:1890:e005:1403::", + "network_id": "1bc1c5fe-896f-4629-b499-a5a36ece4253,c2f4ad4a-0089-41fa-aba7-a80963def29b,70bc637c-ea0f-4452-8aca-01e90c842ff1", + "subinterface_name_prefix": "tsbc0005v_tsbc0005vm002_subint_untrusted_service1", + "counter": "2", + "mac_address": "02:27:39:1d:94:33", + "vip_address": "12.251.1.8", + "vlan_tag": "101,102,103", + "ip_address": "12.251.1.5", + "ip_v6_address": "2001:1890:e005:1402:8000::" + }, + "id": "bd0fc728-cbde-4301-a581-db56f494675c", + "outputs": [], + "template_description": "HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\n" + } +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2Resources.json b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2Resources.json new file mode 100644 index 0000000000..e8aa80eb6f --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service1SubInterface2Resources.json @@ -0,0 +1,72 @@ + + +{ + "resources": [ + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [ + "ssc_subint_mis_vmi_0_v6_ip_0", + "ssc_subint_mis_vmi_0_ip_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "621c1fea-60b8-44ee-aede-c01b8b1aaa70", + "resource_type": "OS::ContrailV2::VirtualMachineInterface" + }, + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0_v6_ip_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_v6_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0_v6_ip_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "e7f25707-12fd-454f-95ac-6a05cd70806f", + "resource_type": "OS::ContrailV2::InstanceIp" + }, + { + "parent_resource": "0", + "resource_name": "ssc_subint_mis_vmi_0_ip_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_mis_vmi_0_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_mis_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_mis_vmi_0_ip_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "6d23f4d3-8f7b-42c5-bb9e-4aee5797d506", + "resource_type": "OS::ContrailV2::InstanceIp" + } + ] +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service2ResourceGroupResponse.json b/adapters/mso-openstack-adapters/src/test/resources/Service2ResourceGroupResponse.json new file mode 100644 index 0000000000..59f315a726 --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service2ResourceGroupResponse.json @@ -0,0 +1,31 @@ + + +{ + "resources": [ + { + "parent_resource": "ssc_1_subint_service2_port_0_subinterfaces", + "resource_name": "0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources/0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c", + "rel": "stack" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "nested" + } + ], + "logical_resource_id": "0", + "resource_status_reason": "state changed", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status": "CREATE_COMPLETE", + "physical_resource_id": "f711be16-2654-4a09-b89d-0511fda20e81", + "resource_type": "vlan_subinterface_ssc_service2.yaml" + } + ] +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service2SubInterface0.json b/adapters/mso-openstack-adapters/src/test/resources/Service2SubInterface0.json new file mode 100644 index 0000000000..d10332b76e --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service2SubInterface0.json @@ -0,0 +1,41 @@ +{ + "stack": { + "parent": "447a9b41-714e-434b-b1d0-6cce8d9f0f0c", + "disable_rollback": true, + "description": "HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\n", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "self" + } + ], + "stack_status_reason": "Stack CREATE completed successfully", + "stack_name": "tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y", + "stack_user_project_id": "dfffe8b2401b45368ca6e21f19796ce1", + "stack_owner": "m08699", + "creation_time": "2019-01-23T19:34:56Z", + "capabilities": [], + "notification_topics": [], + "updated_time": null, + "timeout_mins": 120, + "stack_status": "CREATE_COMPLETE", + "parameters": { + "OS::project_id": "ea2d13cc98b44d60a6f94bdcb2738f9e", + "port_interface": "0594a2f2-7ea4-42eb-abc2-48ea49677fca", + "OS::stack_id": "f711be16-2654-4a09-b89d-0511fda20e81", + "OS::stack_name": "tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y", + "vip_v6_address": "2001:1890:1001:4a32::3", + "network_id": "8be20e92-68d6-4aec-ae66-0fc0fc933546", + "subinterface_name_prefix": "tsbc0005v_tsbc0005vm002_subint_untrusted_service2", + "counter": "0", + "mac_address": "02:05:94:a2:f2:7e", + "vip_address": "32.68.12.91", + "vlan_tag": "81", + "ip_address": "32.68.12.92", + "ip_v6_address": "2001:1890:1001:4a32::4" + }, + "id": "f711be16-2654-4a09-b89d-0511fda20e81", + "outputs": [], + "template_description": "HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\n" + } +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/Service2SubInterface1Resources.json b/adapters/mso-openstack-adapters/src/test/resources/Service2SubInterface1Resources.json new file mode 100644 index 0000000000..84ae20f43e --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/Service2SubInterface1Resources.json @@ -0,0 +1,70 @@ +{ + "resources": [ + { + "parent_resource": "0", + "resource_name": "ssc_subint_service2_vmi_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service2_vmi_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service2_vmi_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [ + "ssc_subint_service2_vmi_0_v6_ip_0", + "ssc_subint_service2_vmi_0_ip_0" + ], + "resource_status_reason": "state changed", + "physical_resource_id": "2bbfa345-33bb-495a-94b2-fb514ee1cffc", + "resource_type": "OS::ContrailV2::VirtualMachineInterface" + }, + { + "parent_resource": "0", + "resource_name": "ssc_subint_service2_vmi_0_v6_ip_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service2_vmi_0_v6_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service2_vmi_0_v6_ip_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "e7f25707-12fd-454f-95ac-6a05cd70806f", + "resource_type": "OS::ContrailV2::InstanceIp" + }, + { + "parent_resource": "0", + "resource_name": "ssc_subint_service2_vmi_0_ip_0", + "links": [ + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources/ssc_subint_service2_vmi_0_ip_0", + "rel": "self" + }, + { + "href": "https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", + "rel": "stack" + } + ], + "logical_resource_id": "ssc_subint_service2_vmi_0_ip_0", + "resource_status": "CREATE_COMPLETE", + "updated_time": "2019-01-23T19:34:56Z", + "required_by": [], + "resource_status_reason": "state changed", + "physical_resource_id": "6d23f4d3-8f7b-42c5-bb9e-4aee5797d506", + "resource_type": "OS::ContrailV2::InstanceIp" + } + ] +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/__files/CreateNetworkResponse4.json b/adapters/mso-openstack-adapters/src/test/resources/__files/CreateNetworkResponse4.json new file mode 100644 index 0000000000..2e5517cebb --- /dev/null +++ b/adapters/mso-openstack-adapters/src/test/resources/__files/CreateNetworkResponse4.json @@ -0,0 +1,25 @@ +{ + "createNetworkResponse": { + "networkId": "da886914-efb2-4917-b335-c8381528d90b", + "neutronNetworkId": null, + "networkStackId": "stackname/stackId", + "networkFqdn": null, + "networkCreated": true, + "subnetMap": { + + }, + "rollback": { + "networkStackId": "stackname/stackId", + "tenantId": "ba38bc24a2ef4fb2ad2810c894f1938f", + "cloudId": "mtn13", + "networkType": "CONTRAIL30_BASIC", + "modelCustomizationUuid": "3bdbb104-ffff-483e-9f8b-c095b3d30844", + "networkCreated": true, + "msoRequest": { + "requestId": "5349f419-b3e9-4546-b3a1-094bd568d6b7", + "serviceInstanceId": "cf965caf-a003-4189-abf9-e0ed77056dd6" + } + }, + "messageId": "c4c44af4-4310-4d8b-a1eb-656fc99fe709" + } +}
\ No newline at end of file diff --git a/adapters/mso-openstack-adapters/src/test/resources/logback-test.xml b/adapters/mso-openstack-adapters/src/test/resources/logback-test.xml index 0611e62f3d..5d6eee746f 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/logback-test.xml +++ b/adapters/mso-openstack-adapters/src/test/resources/logback-test.xml @@ -41,7 +41,11 @@ <appender-ref ref="STDOUT" /> </logger> - <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false"> + <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false"> <appender-ref ref="STDOUT" /> </logger> diff --git a/adapters/mso-openstack-adapters/src/test/resources/schema.sql b/adapters/mso-openstack-adapters/src/test/resources/schema.sql index 72810d6f3c..e9f2a09860 100644 --- a/adapters/mso-openstack-adapters/src/test/resources/schema.sql +++ b/adapters/mso-openstack-adapters/src/test/resources/schema.sql @@ -28,6 +28,7 @@ create table `allotted_resource_customization` ( `min_instances` int(11) default null, `max_instances` int(11) default null, `ar_model_uuid` varchar(200) not null, + `resource_input` varchar(20000) default null, `creation_timestamp` datetime not null default current_timestamp, primary key (`model_customization_uuid`), key `fk_allotted_resource_customization__allotted_resource1_idx` (`ar_model_uuid`), @@ -138,11 +139,11 @@ create table `network_resource` ( `model_name` varchar(200) not null, `model_invariant_uuid` varchar(200) default null, `description` varchar(1200) default null, - `heat_template_artifact_uuid` varchar(200) not null, + `heat_template_artifact_uuid` varchar(200) null, `neutron_network_type` varchar(20) default null, `model_version` varchar(20) default null, `tosca_node_type` varchar(200) default null, - `aic_version_min` varchar(20) not null, + `aic_version_min` varchar(20) null, `aic_version_max` varchar(20) default null, `orchestration_mode` varchar(20) default 'heat', `resource_category` varchar(20) default null, @@ -151,8 +152,7 @@ create table `network_resource` ( primary key (`model_uuid`), key `fk_network_resource__temp_network_heat_template_lookup1_idx` (`model_name`), key `fk_network_resource__heat_template1_idx` (`heat_template_artifact_uuid`), - constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade, - constraint `fk_network_resource__temp_network_heat_template_lookup__mod_nm1` foreign key (`model_name`) references `temp_network_heat_template_lookup` (`network_resource_model_name`) on delete no action on update no action + constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade ) engine=innodb default charset=latin1; @@ -168,6 +168,7 @@ create table `network_resource_customization` ( `network_scope` varchar(45) default null, `creation_timestamp` datetime not null default current_timestamp, `network_resource_model_uuid` varchar(200) not null, + `resource_input` varchar(20000) default null, primary key (`model_customization_uuid`), key `fk_network_resource_customization__network_resource1_idx` (`network_resource_model_uuid`), constraint `fk_network_resource_customization__network_resource1` foreign key (`network_resource_model_uuid`) references `network_resource` (`model_uuid`) on delete cascade on update cascade @@ -203,6 +204,7 @@ create table `service` ( `service_role` varchar(200) default null, `environment_context` varchar(200) default null, `workload_context` varchar(200) default null, + `resource_order` varchar(200) default null, primary key (`model_uuid`), key `fk_service__tosca_csar1_idx` (`tosca_csar_artifact_uuid`), constraint `fk_service__tosca_csar1` foreign key (`tosca_csar_artifact_uuid`) references `tosca_csar` (`artifact_uuid`) on delete cascade on update cascade @@ -381,6 +383,7 @@ create table `vnf_resource_customization` ( `creation_timestamp` datetime not null default current_timestamp, `vnf_resource_model_uuid` varchar(200) not null, `multi_stage_design` varchar(20) default null, + `resource_input` varchar(20000) default null, primary key (`model_customization_uuid`), key `fk_vnf_resource_customization__vnf_resource1_idx` (`vnf_resource_model_uuid`), constraint `fk_vnf_resource_customization__vnf_resource1` foreign key (`vnf_resource_model_uuid`) references `vnf_resource` (`model_uuid`) on delete cascade on update cascade diff --git a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/MsoRequestsDbAdapter.java b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/MsoRequestsDbAdapter.java index e28bdb2f96..0c2a49ae53 100644 --- a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/MsoRequestsDbAdapter.java +++ b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/MsoRequestsDbAdapter.java @@ -73,6 +73,17 @@ public interface MsoRequestsDbAdapter { @WebParam(name = "reason") @XmlElement(required = false) String reason) throws MsoRequestsDbException; @WebMethod + public void initServiceOperationStatus( + @WebParam(name = "serviceId") @XmlElement(required = true) String serviceId, + @WebParam(name = "operationId") @XmlElement(required = false) String operationId, + @WebParam(name = "operationType") @XmlElement(required = false) String operationType, + @WebParam(name = "userId") @XmlElement(required = false) String userId, + @WebParam(name = "result") @XmlElement(required = false) String result, + @WebParam(name = "operationContent") @XmlElement(required = false) String operationContent, + @WebParam(name = "progress") @XmlElement(required = false) String progress, + @WebParam(name = "reason") @XmlElement(required = false) String reason) throws MsoRequestsDbException; + + @WebMethod public void initResourceOperationStatus(@WebParam(name = "serviceId") @XmlElement(required = true) String serviceId, @WebParam(name = "operationId") @XmlElement(required = true) String operationId, @WebParam(name = "operationType") @XmlElement(required = true) String operationType, diff --git a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/MsoRequestsDbAdapterImpl.java b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/MsoRequestsDbAdapterImpl.java index 893156ce7d..626e3568bc 100644 --- a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/MsoRequestsDbAdapterImpl.java +++ b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/MsoRequestsDbAdapterImpl.java @@ -220,6 +220,38 @@ public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter { } /** + * Init operation status <br> + * + * @param serviceId + * @param operationId + * @param operationType + * @param userId + * @param result + * @param operationContent + * @param progress + * @param reason + * @throws MsoRequestsDbException + * @since ONAP Casablanca Release + */ + @Override + @Transactional + public void initServiceOperationStatus(String serviceId, String operationId, String operationType, String userId, + String result, String operationContent, String progress, String reason) throws MsoRequestsDbException { + OperationStatus operStatus = new OperationStatus(); + + operStatus.setOperationId(operationId); + operStatus.setServiceId(serviceId); + operStatus.setUserId(userId); + operStatus.setOperation(operationType); + operStatus.setReason(reason); + operStatus.setProgress(progress); + operStatus.setResult(result); + operStatus.setOperationContent(operationContent); + operStatus.setResult(result); + operationStatusRepository.save(operStatus); + } + + /** * init the operation status of all the resources <br> * * @param serviceId @@ -306,7 +338,7 @@ public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter { resStatus.setErrorCode(errorCode); resStatus.setStatusDescription(statusDescription); resourceOperationStatusRepository.save(resStatus); - + updateOperationStatusBasedOnResourceStatus(resStatus); } diff --git a/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V4.3__Expand_Column_Size.sql b/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V4.3__Expand_Column_Size.sql new file mode 100644 index 0000000000..87401ade13 --- /dev/null +++ b/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V4.3__Expand_Column_Size.sql @@ -0,0 +1,11 @@ +use requestdb; + +ALTER TABLE infra_active_requests + MODIFY IF EXISTS AIC_CLOUD_REGION varchar(50) NULL, + MODIFY IF EXISTS AIC_NODE_CLLI varchar(50) NULL; + +ALTER TABLE archived_infra_requests + MODIFY IF EXISTS AIC_CLOUD_REGION varchar(50) NULL, + MODIFY IF EXISTS AIC_NODE_CLLI varchar(50) NULL; + + diff --git a/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V5.3__Add_Add_Column_To_WatchDog_Model_Id_Lookup.sql b/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V5.3__Add_Add_Column_To_WatchDog_Model_Id_Lookup.sql new file mode 100644 index 0000000000..9a5bef6cc8 --- /dev/null +++ b/adapters/mso-requests-db-adapter/src/main/resources/db/migration/V5.3__Add_Add_Column_To_WatchDog_Model_Id_Lookup.sql @@ -0,0 +1,6 @@ +use requestdb; + +ALTER TABLE watchdog_service_mod_ver_id_lookup ADD DISTRIBUTION_NOTIFICATION LONGTEXT NULL AFTER SERVICE_MODEL_VERSION_ID; +ALTER TABLE watchdog_service_mod_ver_id_lookup ADD CONSUMER_ID varchar(200) NULL AFTER DISTRIBUTION_NOTIFICATION; + +CREATE INDEX watchdog_service_mod_ver_id_lookup_serv_mod_ver_id_idx ON watchdog_service_mod_ver_id_lookup (SERVICE_MODEL_VERSION_ID ASC);
\ No newline at end of file diff --git a/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/impl/SDNCRestClient.java b/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/impl/SDNCRestClient.java index 4b3181e6e9..65c7d093a9 100644 --- a/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/impl/SDNCRestClient.java +++ b/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/impl/SDNCRestClient.java @@ -84,6 +84,14 @@ public class SDNCRestClient{ msoLogger.debug("BPEL Request:" + bpelRequest.toString()); + // Added delay to allow completion of create request to SDNC + // before executing activate of create request. + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + String action = bpelRequest.getRequestHeader().getSvcAction(); String operation = bpelRequest.getRequestHeader().getSvcOperation(); String bpelReqId = bpelRequest.getRequestHeader().getRequestId(); diff --git a/asdc-controller/pom.xml b/asdc-controller/pom.xml index 2a20b96048..50fbdd447b 100644 --- a/asdc-controller/pom.xml +++ b/asdc-controller/pom.xml @@ -192,12 +192,12 @@ <dependency> <groupId>org.onap.sdc.sdc-tosca</groupId> <artifactId>sdc-tosca</artifactId> - <version>1.4.4</version> + <version>1.4.8</version> </dependency> <dependency> <groupId>org.onap.sdc.jtosca</groupId> <artifactId>jtosca</artifactId> - <version>1.4.4</version> + <version>1.4.8</version> </dependency> <dependency> <groupId>org.onap.so</groupId> diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java index 9a1392bdca..7a02f47d3f 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java @@ -28,6 +28,7 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.file.Paths; import java.util.List; +import java.util.Optional; import org.onap.sdc.api.IDistributionClient; import org.onap.sdc.api.consumer.IDistributionStatusMessage; @@ -55,11 +56,16 @@ import org.onap.so.asdc.util.ASDCNotificationLogging; import org.onap.so.db.request.beans.WatchdogDistributionStatus; import org.onap.so.db.request.data.repository.WatchdogDistributionStatusRepository; import org.onap.so.logger.MessageEnum; - import org.onap.so.logger.MsoLogger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; + @Component public class ASDCController { @@ -555,6 +561,22 @@ public class ASDCController { LOGGER.recordMetricEvent (subStarttime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully sent Final notification to ASDC", "ASDC", null, null); } + private Optional<String> getNotificationJson(INotificationData iNotif) { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(Include.NON_NULL); + mapper.setSerializationInclusion(Include.NON_EMPTY); + mapper.setSerializationInclusion(Include.NON_ABSENT); + mapper.enable(MapperFeature.USE_ANNOTATIONS); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + Optional<String> returnValue = Optional.empty(); + try { + returnValue = Optional.of(mapper.writeValueAsString(iNotif)); + } catch (JsonProcessingException e) { + LOGGER.error("Error converting incoming ASDC notification to JSON" , e); + } + return returnValue; + } + public void treatNotification (INotificationData iNotif) { int noOfArtifacts = 0; @@ -571,7 +593,9 @@ public class ASDCController { LOGGER.debug(ASDCNotificationLogging.dumpASDCNotification(iNotif)); LOGGER.info(MessageEnum.ASDC_RECEIVE_SERVICE_NOTIF, iNotif.getServiceUUID(), "ASDC", "treatNotification"); this.changeControllerStatus(ASDCControllerStatus.BUSY); - toscaInstaller.processWatchdog(iNotif.getDistributionID(),iNotif.getServiceUUID()); + Optional<String> notificationMessage = getNotificationJson(iNotif); + toscaInstaller.processWatchdog(iNotif.getDistributionID(), iNotif.getServiceUUID(), notificationMessage, + asdcConfig.getConsumerID()); // Process only the Resource artifacts in MSO this.processResourceNotification(iNotif); @@ -687,6 +711,13 @@ public class ASDCController { try { this.processCsarServiceArtifacts(iNotif, toscaResourceStructure); + IArtifactInfo iArtifact = toscaResourceStructure.getToscaArtifact(); + String filePath = System.getProperty("mso.config.path") + "/ASDC/" + iArtifact.getArtifactVersion() + "/" + iArtifact.getArtifactName(); + File csarFile = new File(filePath); + String csarFilePath = csarFile.getAbsolutePath(); + if (bpmnInstaller.containsWorkflows(csarFilePath)) { + bpmnInstaller.installBpmn(csarFilePath); + } for (IResourceInstance resource : iNotif.getResources()){ diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java index 7dab49f82a..ed97f5bdea 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java @@ -24,6 +24,8 @@ import java.util.ArrayList; import java.util.List; import org.onap.sdc.api.notification.IArtifactInfo; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.EqualsBuilder; public class ArtifactInfoImpl implements IArtifactInfo { @@ -168,4 +170,23 @@ public class ArtifactInfoImpl implements IArtifactInfo { public void setRelatedArtifacts(List<ArtifactInfoImpl> relatedArtifacts) { this.relatedArtifactsImpl = relatedArtifacts; } + + @Override + public boolean equals(final Object other) { + if (!(other instanceof ArtifactInfoImpl)) { + return false; + } + ArtifactInfoImpl castOther = (ArtifactInfoImpl) other; + return new EqualsBuilder().append(artifactUUID, castOther.artifactUUID) + .append(artifactVersion, castOther.artifactVersion).isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(artifactName).append(artifactType).append(artifactURL) + .append(artifactChecksum).append(artifactDescription).append(artifactTimeout).append(artifactVersion) + .append(artifactUUID).append(generatedFromUUID).append(generatedArtifact).append(relatedArtifactsInfo) + .append(relatedArtifactsImpl).toHashCode(); + } + } diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java index 294221352c..a1c660f75f 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java @@ -23,11 +23,15 @@ package org.onap.so.asdc.client.test.emulators; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; import org.onap.sdc.api.notification.IArtifactInfo; import org.onap.sdc.api.notification.INotificationData; import org.onap.sdc.api.notification.IResourceInstance; import org.springframework.stereotype.Component; +import com.fasterxml.jackson.annotation.JsonIgnore; + @Component public class NotificationDataImpl implements INotificationData { @@ -114,6 +118,7 @@ public class NotificationDataImpl implements INotificationData { return ret; } + @JsonIgnore public List<ResourceInfoImpl> getResourcesImpl(){ return resources; } @@ -172,4 +177,22 @@ public class NotificationDataImpl implements INotificationData { } return ret; } + + @Override + public boolean equals(final Object other) { + if (!(other instanceof NotificationDataImpl)) { + return false; + } + NotificationDataImpl castOther = (NotificationDataImpl) other; + return new EqualsBuilder().append(serviceUUID, castOther.serviceUUID) + .append(serviceVersion, castOther.serviceVersion).isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(distributionID).append(serviceName).append(serviceVersion) + .append(serviceUUID).append(serviceDescription).append(serviceInvariantUUID).append(resources) + .append(serviceArtifacts).append(workloadContext).toHashCode(); + } + } diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java index eb4764dec1..dad7e64931 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java @@ -23,9 +23,13 @@ package org.onap.so.asdc.client.test.emulators; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; import org.onap.sdc.api.notification.IArtifactInfo; import org.onap.sdc.api.notification.IResourceInstance; +import com.fasterxml.jackson.annotation.JsonIgnore; + public class ResourceInfoImpl implements IResourceInstance{ ResourceInfoImpl (){} private String resourceInstanceName; @@ -120,7 +124,8 @@ public class ResourceInfoImpl implements IResourceInstance{ this.artifacts = artifacts; } - public List<ArtifactInfoImpl> getArtifactsImpl(){ + @JsonIgnore + public List<ArtifactInfoImpl> getArtifactsImpl() { return artifacts; } @@ -155,4 +160,21 @@ public class ResourceInfoImpl implements IResourceInstance{ public void setSubcategory(String subcategory) { this.subcategory = subcategory; } + + @Override + public boolean equals(final Object other) { + if (!(other instanceof ResourceInfoImpl)) { + return false; + } + ResourceInfoImpl castOther = (ResourceInfoImpl) other; + return new EqualsBuilder().append(resourceUUID, castOther.resourceUUID) + .append(resourceVersion, castOther.resourceVersion).isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(resourceInstanceName).append(resourceCustomizationUUID).append(resourceName) + .append(resourceVersion).append(resourceType).append(resourceUUID).append(resourceInvariantUUID) + .append(category).append(subcategory).append(artifacts).toHashCode(); + } } diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/ToscaResourceStructure.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/ToscaResourceStructure.java index 179dac3c35..6ddc2a8bdd 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/ToscaResourceStructure.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/ToscaResourceStructure.java @@ -132,7 +132,7 @@ public class ToscaResourceStructure { LOGGER.info(MessageEnum.ASDC_RECEIVE_SERVICE_NOTIF, "***PATH", "ASDC", spoolFile.getAbsolutePath()); - sdcCsarHelper = factory.getSdcCsarHelper(spoolFile.getAbsolutePath()); + sdcCsarHelper = factory.getSdcCsarHelper(spoolFile.getAbsolutePath(),false); }catch(Exception e){ System.out.println("System out " + e.getMessage()); diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java index 486844ae02..cd9a121ddb 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java @@ -27,7 +27,9 @@ import java.io.IOException; import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Enumeration; import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import org.apache.commons.io.IOUtils; @@ -109,6 +111,30 @@ public class BpmnInstaller { } return; } + + public boolean containsWorkflows(String csarFilePath) { + boolean workflowsInCsar = false; + try { + ZipFile zipFile = new ZipFile(csarFilePath); + Enumeration<? extends ZipEntry> zipEntries = zipFile.entries(); + while (zipEntries.hasMoreElements()) { + String fileName = ((ZipEntry) zipEntries.nextElement()).getName(); + if (fileName.endsWith(BPMN_SUFFIX)) { + workflowsInCsar = true; + break; + } + } + } + catch (Exception e) { + LOGGER.debug("Exception :",e); + LOGGER.error(MessageEnum.ASDC_ARTIFACT_CHECK_EXC, + csarFilePath, + "", + "", + e.getMessage(), "", "", MsoLogger.ErrorCode.DataError, "ASDC Unable to check CSAR entries"); + } + return workflowsInCsar; + } protected HttpResponse sendDeploymentRequest(String bpmnFileName) throws Exception { HttpClient client = HttpClientBuilder.create().build(); diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java index 722e1599b6..90b705c019 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java @@ -25,25 +25,34 @@ package org.onap.so.asdc.installer.heat; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import org.hibernate.exception.ConstraintViolationException; import org.hibernate.exception.LockAcquisitionException; import org.onap.sdc.api.notification.IArtifactInfo; import org.onap.sdc.api.notification.IResourceInstance; import org.onap.sdc.api.notification.IStatusData; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.enums.SdcTypes; import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; -import org.onap.sdc.tosca.parser.impl.SdcTypes; import org.onap.sdc.toscaparser.api.CapabilityAssignment; import org.onap.sdc.toscaparser.api.CapabilityAssignments; import org.onap.sdc.toscaparser.api.Group; import org.onap.sdc.toscaparser.api.NodeTemplate; import org.onap.sdc.toscaparser.api.Policy; +import org.onap.sdc.toscaparser.api.Property; import org.onap.sdc.toscaparser.api.RequirementAssignment; +import org.onap.sdc.toscaparser.api.RequirementAssignments; import org.onap.sdc.toscaparser.api.elements.Metadata; +import org.onap.sdc.toscaparser.api.functions.GetInput; +import org.onap.sdc.toscaparser.api.parameters.Input; import org.onap.sdc.utils.DistributionStatusEnum; import org.onap.so.asdc.client.ASDCConfiguration; import org.onap.so.asdc.client.exceptions.ArtifactInstallerException; @@ -118,6 +127,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + @Component public class ToscaResourceInstaller { @@ -137,6 +149,7 @@ public class ToscaResourceInstaller { protected static final String MSO = "SO"; + @Autowired protected ServiceRepository serviceRepo; @@ -145,7 +158,7 @@ public class ToscaResourceInstaller { @Autowired protected ServiceProxyResourceCustomizationRepository serviceProxyCustomizationRepo; - + @Autowired protected CollectionResourceRepository collectionRepo; @@ -267,9 +280,9 @@ public class ToscaResourceInstaller { @Transactional(rollbackFor = { ArtifactInstallerException.class }) public void installTheResource(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStruct) - throws ArtifactInstallerException { + throws ArtifactInstallerException { VfResourceStructure vfResourceStructure = vfResourceStruct; - extractHeatInformation(toscaResourceStruct, vfResourceStructure); + extractHeatInformation(toscaResourceStruct, vfResourceStructure); // PCLO: in case of deployment failure, use a string that will represent // the type of artifact that failed... @@ -278,9 +291,23 @@ public class ToscaResourceInstaller { createToscaCsar(toscaResourceStruct); createService(toscaResourceStruct, vfResourceStruct); Service service = toscaResourceStruct.getCatalogService(); - + List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList(); + + + for (NodeTemplate nodeTemplate : vfNodeTemplatesList) { + + Metadata metadata = nodeTemplate.getMetaData(); + String serviceType = toscaResourceStruct.getCatalogService().getServiceType(); + String vfCustomizationCategory = toscaResourceStruct.getSdcCsarHelper() + .getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CATEGORY); + processVfModules(toscaResourceStruct, vfResourceStructure, service, nodeTemplate, metadata, + vfCustomizationCategory); + } + + processResourceSequence(toscaResourceStruct, service); processVFResources(toscaResourceStruct, service, vfResourceStructure); - processAllottedResources(toscaResourceStruct, service); + List<NodeTemplate> allottedResourceList = toscaResourceStruct.getSdcCsarHelper().getAllottedResources(); + processAllottedResources(toscaResourceStruct, service, allottedResourceList); processNetworks(toscaResourceStruct, service); // process Network Collections processNetworkCollections(toscaResourceStruct, service); @@ -327,12 +354,136 @@ public class ToscaResourceInstaller { } } + + List<NodeTemplate> getRequirementList(List<NodeTemplate> resultList, List<NodeTemplate> nodeTemplates, + ISdcCsarHelper iSdcCsarHelper) { + + List<NodeTemplate> nodes = new ArrayList<NodeTemplate>(); + nodes.addAll(nodeTemplates); + + for (NodeTemplate nodeTemplate : nodeTemplates) { + RequirementAssignments requirement = iSdcCsarHelper.getRequirementsOf(nodeTemplate); + List<RequirementAssignment> reqAs = requirement.getAll(); + for (RequirementAssignment ra : reqAs) { + String reqNode = ra.getNodeTemplateName(); + for (NodeTemplate rNode : resultList) { + if (rNode.getName().equals(reqNode)) { + if(!resultList.contains(nodeTemplate)) { + resultList.add(nodeTemplate); + } + if(nodes.contains(nodeTemplate)) { + nodes.remove(nodeTemplate); + } + break; + } + } + } + } + + if (!nodes.isEmpty()) { + getRequirementList(resultList, nodes, iSdcCsarHelper); + } + + return resultList; + } + + // This method retrieve resource sequence from csar file + void processResourceSequence(ToscaResourceStructure toscaResourceStructure, Service service) { + List<String> resouceSequence = new ArrayList<String>(); + List<NodeTemplate> resultList = new ArrayList<NodeTemplate>(); + + ISdcCsarHelper iSdcCsarHelper = toscaResourceStructure.getSdcCsarHelper(); + List<NodeTemplate> nodeTemplates = iSdcCsarHelper.getServiceNodeTemplates(); + List<NodeTemplate> nodes = new ArrayList<NodeTemplate>(); + nodes.addAll(nodeTemplates); + + for (NodeTemplate nodeTemplate : nodeTemplates) { + RequirementAssignments requirement = iSdcCsarHelper.getRequirementsOf(nodeTemplate); + + if (requirement == null || requirement.getAll() == null || requirement.getAll().isEmpty()) { + resultList.add(nodeTemplate); + nodes.remove(nodeTemplate); + } + } + + resultList = getRequirementList(resultList, nodes, iSdcCsarHelper); + + for (NodeTemplate node : resultList) { + String templateName = node.getMetaData().getValue("name"); + if (!resouceSequence.contains(templateName)) { + resouceSequence.add(templateName); + } + } + + String resourceSeqStr = resouceSequence.stream().collect(Collectors.joining(",")); + service.setResourceOrder(resourceSeqStr); + logger.debug(" resourceSeq for service uuid(" + service.getModelUUID() + ") : " + resourceSeqStr); + } + + private static String CUSTOMIZATION_UUID = "customizationUUID"; + + private static String getValue(Object value, List<Input> servInputs) { + String output = null; + if(value instanceof Map) { + // currently this logic handles only one level of nesting. + return ((LinkedHashMap) value).values().toArray()[0].toString(); + } else if(value instanceof GetInput) { + String inputName = ((GetInput)value).getInputName(); + + for(Input input : servInputs) { + if(input.getName().equals(inputName)) { + // keep both input name and default value + // if service input does not supplies value the use default value + String defaultValue = input.getDefault() != null ? (String) input.getDefault().toString() : ""; + output = inputName + "|" + defaultValue;// return default value + } + } + + } else { + output = value != null ? value.toString() : ""; + } + return output; // return property value + } + + String getResourceInput(ToscaResourceStructure toscaResourceStructure, String resourceCustomizationUuid) throws ArtifactInstallerException { + Map<String, String> resouceRequest = new HashMap<>(); + ISdcCsarHelper iSdcCsarHelper = toscaResourceStructure.getSdcCsarHelper(); + + List<Input> serInput = iSdcCsarHelper.getServiceInputs(); + Optional<NodeTemplate> nodeTemplateOpt = iSdcCsarHelper.getServiceNodeTemplates().stream() + .filter(e -> e.getMetaData().getValue(CUSTOMIZATION_UUID).equals(resourceCustomizationUuid)).findFirst(); + if(nodeTemplateOpt.isPresent()) { + NodeTemplate nodeTemplate = nodeTemplateOpt.get(); + LinkedHashMap<String, Property> resourceProperties = nodeTemplate.getProperties(); + + for(String key : resourceProperties.keySet()) { + Property property = resourceProperties.get(key); + + String value = getValue(property.getValue(), serInput); + resouceRequest.put(key, value); + } + } + + try { + ObjectMapper objectMapper = new ObjectMapper(); + String jsonStr = objectMapper.writeValueAsString(resouceRequest); + + jsonStr = jsonStr.replace("\"", "\\\""); + logger.debug("resource request for resource customization id (" + resourceCustomizationUuid + ") : " + jsonStr); + return jsonStr; + } catch (JsonProcessingException e) { + logger.error("resource input could not be deserialized for resource customization id (" + + resourceCustomizationUuid + ")"); + throw new ArtifactInstallerException("resource input could not be parsed", e); + } + } + protected void processNetworks (ToscaResourceStructure toscaResourceStruct, Service service) throws ArtifactInstallerException { List <NodeTemplate> nodeTemplatesVLList = toscaResourceStruct.getSdcCsarHelper ().getServiceVlList (); - if (nodeTemplatesVLList != null) { - for (NodeTemplate vlNode : nodeTemplatesVLList) { + if (nodeTemplatesVLList != null) { + for (NodeTemplate vlNode : nodeTemplatesVLList) { String networkResourceModelName = vlNode.getMetaData ().getValue (SdcPropertyNames.PROPERTY_NAME_NAME); TempNetworkHeatTemplateLookup tempNetworkLookUp = @@ -353,8 +504,8 @@ public class ToscaResourceInstaller { } else { throw new ArtifactInstallerException ("No HeatTemplate found for artifactUUID: " + tempNetworkLookUp.getHeatTemplateArtifactUuid ()); - } - } else { + } + } else { NetworkResourceCustomization networkCustomization = createNetwork (vlNode, toscaResourceStruct, null, @@ -363,16 +514,15 @@ public class ToscaResourceInstaller { service); service.getNetworkCustomizations().add (networkCustomization); logger.debug ("No NetworkResourceName found in TempNetworkHeatTemplateLookup for " - + networkResourceModelName); - } - - } - } + + networkResourceModelName); + } + + } + } } - protected void processAllottedResources(ToscaResourceStructure toscaResourceStruct, Service service) { - List<NodeTemplate> allottedResourceList = toscaResourceStruct.getSdcCsarHelper().getAllottedResources(); - + protected void processAllottedResources(ToscaResourceStructure toscaResourceStruct, Service service, + List<NodeTemplate> allottedResourceList) { if (allottedResourceList != null) { for (NodeTemplate allottedNode : allottedResourceList) { service.getAllottedCustomizations() @@ -395,11 +545,7 @@ public class ToscaResourceInstaller { if (serviceProxyResourceList != null) { for (NodeTemplate spNode : serviceProxyResourceList) { serviceProxy = createServiceProxy(spNode, service, toscaResourceStruct); - - ServiceProxyResourceCustomization serviceProxyResource = findExistingServiceProxyResource(serviceProxyList, serviceProxy.getModelCustomizationUUID()); - - if(serviceProxyResource == null){ - + serviceProxyList.add(serviceProxy); for (NodeTemplate configNode : configurationNodeTemplatesList) { @@ -408,14 +554,18 @@ public class ToscaResourceInstaller { for (RequirementAssignment requirement : requirementsList) { if (requirement.getNodeTemplateName().equals(spNode.getName())) { ConfigurationResourceCustomization configurationResource = createConfiguration(configNode, toscaResourceStruct, serviceProxy); - - configurationResourceList.add(configurationResource); + + Optional<ConfigurationResourceCustomization> matchingObject = configurationResourceList.stream() + .filter(configurationResourceCustomization -> configNode.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).equals(configurationResource.getModelCustomizationUUID())) + .findFirst(); + if(!matchingObject.isPresent()){ + configurationResourceList.add(configurationResource); + } + break; } } } - - } } } @@ -478,9 +628,9 @@ public class ToscaResourceInstaller { logger.debug("vfCustomizationUUID: " + vfCustomizationUUID + " matches vfNotificationResource CustomizationUUID"); - processVfModules(toscaResourceStruct, vfResourceStructure, service, nodeTemplate, vfCustomizationUUID); - } - else { + processVfModules(toscaResourceStruct, vfResourceStructure, service, nodeTemplate, metadata, + vfCustomizationCategory); + } else { logger.debug("Notification VF ResourceCustomizationUUID: " + vfNotificationResource.getResourceCustomizationUUID() + " doesn't match " + "Tosca VF Customization UUID: " + vfCustomizationUUID); @@ -490,44 +640,65 @@ public class ToscaResourceInstaller { protected void processVfModules(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStructure, - Service service, NodeTemplate nodeTemplate, String vfCustomizationUUID) - throws Exception { - logger.debug("processVfModules for vfCustomizationUUID: " + vfCustomizationUUID); + Service service, NodeTemplate nodeTemplate, Metadata metadata, String vfCustomizationCategory) throws Exception { - VnfResourceCustomization vnfResource = createVnfResource(nodeTemplate, toscaResourceStruct, service); + logger.debug("VF Category is : " + vfCustomizationCategory); - if (vfResourceStructure.getVfModuleStructure() != null && !vfResourceStructure.getVfModuleStructure().isEmpty()) { - Set<CvnfcCustomization> existingCvnfcSet = new HashSet<CvnfcCustomization>(); - Set<VnfcCustomization> existingVnfcSet = new HashSet<VnfcCustomization>(); - - for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) { - - logger.debug("vfModuleStructure:" + vfModuleStructure.toString()); - List<org.onap.sdc.toscaparser.api.Group> vfGroups = toscaResourceStruct.getSdcCsarHelper() - .getVfModulesByVf(vfCustomizationUUID); - IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata(); + if(vfResourceStructure.getVfModuleStructure() != null && !vfResourceStructure.getVfModuleStructure().isEmpty()) + { - logger.debug("Comparing Vf_Modules_Metadata CustomizationUUID : " + vfMetadata.getVfModuleModelCustomizationUUID()); - - Optional<org.onap.sdc.toscaparser.api.Group> matchingObject = vfGroups.stream() - .peek(group -> logger.debug("To Csar Group VFModuleModelCustomizationUUID " + group.getMetadata().getValue("vfModuleModelCustomizationUUID"))) - .filter(group -> group.getMetadata().getValue("vfModuleModelCustomizationUUID").equals(vfMetadata.getVfModuleModelCustomizationUUID())) - .findFirst(); - if (matchingObject.isPresent()) { - VfModuleCustomization vfModuleCustomization = createVFModuleResource(matchingObject.get(), nodeTemplate, toscaResourceStruct, - vfResourceStructure, vfMetadata, vnfResource,service, existingCvnfcSet, existingVnfcSet); - vfModuleCustomization.getVfModule().setVnfResources(vnfResource.getVnfResources()); - } else { - throw new Exception("Cannot find matching VFModule Customization in Csar for Vf_Modules_Metadata: " + vfMetadata.getVfModuleModelCustomizationUUID()); + String vfCustomizationUUID = toscaResourceStruct.getSdcCsarHelper() + .getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID); + logger.debug("VFCustomizationUUID=" + vfCustomizationUUID); + + IResourceInstance vfNotificationResource = vfResourceStructure.getResourceInstance(); + + // Make sure the VF ResourceCustomizationUUID from the notification and tosca customizations match before comparing their VF Modules UUID's + logger.debug("Checking if Notification VF ResourceCustomizationUUID: " + vfNotificationResource.getResourceCustomizationUUID() + + " matches Tosca VF Customization UUID: " + vfCustomizationUUID); + + if(vfCustomizationUUID.equals(vfNotificationResource.getResourceCustomizationUUID())){ + + logger.debug("vfCustomizationUUID: " + vfCustomizationUUID + " matches vfNotificationResource CustomizationUUID"); + + VnfResourceCustomization vnfResource = createVnfResource(nodeTemplate, toscaResourceStruct, service); + + Set<CvnfcCustomization> existingCvnfcSet = new HashSet<CvnfcCustomization>(); + Set<VnfcCustomization> existingVnfcSet = new HashSet<VnfcCustomization>(); + + for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) { + + logger.debug("vfModuleStructure:" + vfModuleStructure.toString()); + List<org.onap.sdc.toscaparser.api.Group> vfGroups = toscaResourceStruct + .getSdcCsarHelper().getVfModulesByVf(vfCustomizationUUID); + IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata(); + + logger.debug("Comparing Vf_Modules_Metadata CustomizationUUID : " + vfMetadata.getVfModuleModelCustomizationUUID()); + + Optional<org.onap.sdc.toscaparser.api.Group> matchingObject = vfGroups.stream() + .peek(group -> logger.debug("To Csar Group VFModuleModelCustomizationUUID " + group.getMetadata().getValue("vfModuleModelCustomizationUUID"))) + .filter(group -> group.getMetadata().getValue("vfModuleModelCustomizationUUID").equals(vfMetadata.getVfModuleModelCustomizationUUID())) + .findFirst(); + if(matchingObject.isPresent()){ + VfModuleCustomization vfModuleCustomization = createVFModuleResource(matchingObject.get(), nodeTemplate, toscaResourceStruct, + vfResourceStructure,vfMetadata, vnfResource, service, existingCvnfcSet, existingVnfcSet); + vfModuleCustomization.getVfModule().setVnfResources(vnfResource.getVnfResources()); + }else + throw new Exception("Cannot find matching VFModule Customization in Csar for Vf_Modules_Metadata: " + vfMetadata.getVfModuleModelCustomizationUUID()); + } + service.getVnfCustomizations().add(vnfResource); + } else{ + logger.debug("Notification VF ResourceCustomizationUUID: " + vfNotificationResource.getResourceCustomizationUUID() + " doesn't match " + + "Tosca VF Customization UUID: " + vfCustomizationUUID); } } - - service.getVnfCustomizations().add(vnfResource); } - public void processWatchdog(String distributionId, String servideUUID) { - WatchdogServiceModVerIdLookup modVerIdLookup = new WatchdogServiceModVerIdLookup(distributionId,servideUUID); + public void processWatchdog(String distributionId, String servideUUID, Optional<String> distributionNotification, + String consumerId) { + WatchdogServiceModVerIdLookup modVerIdLookup = new WatchdogServiceModVerIdLookup(distributionId, servideUUID, + distributionNotification, consumerId); watchdogModVerIdLookupRepository.saveAndFlush(modVerIdLookup); WatchdogDistributionStatus distributionStatus = new WatchdogDistributionStatus(distributionId); @@ -759,9 +930,15 @@ public class ToscaResourceInstaller { spCustomizationResource.setModelCustomizationUUID(spMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)); spCustomizationResource.setModelInstanceName(nodeTemplate.getName()); spCustomizationResource.setToscaNodeType(nodeTemplate.getType()); - spCustomizationResource.setSourceService(service); + + String sourceServiceUUID = spMetadata.getValue("sourceModelUuid"); + + Service sourceService = serviceRepo.findOneByModelUUID(sourceServiceUUID); + + spCustomizationResource.setSourceService(sourceService); spCustomizationResource.setToscaNodeType(nodeTemplate.getType()); serviceProxyCustomizationSet.add(spCustomizationResource); + toscaResourceStructure.setCatalogServiceProxyResourceCustomization(spCustomizationResource); @@ -885,7 +1062,21 @@ public class ToscaResourceInstaller { ToscaResourceStructure toscaResourceStructure, HeatTemplate heatTemplate, String aicMax, String aicMin,Service service) { NetworkResourceCustomization networkResourceCustomization=networkCustomizationRepo.findOneByModelCustomizationUUID(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)); - if(networkResourceCustomization==null){ + + boolean networkUUIDsMatch = true; + // Check to make sure the NetworkResourceUUID on the Customization record matches the NetworkResourceUUID from the distribution. + // If not we'll update the Customization record with latest from the distribution + if(networkResourceCustomization != null){ + String existingNetworkModelUUID = networkResourceCustomization.getNetworkResource().getModelUUID(); + String latestNetworkModelUUID = networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID); + + if(!existingNetworkModelUUID.equals(latestNetworkModelUUID)){ + networkUUIDsMatch = false; + } + + } + + if(networkResourceCustomization==null || !networkUUIDsMatch){ networkResourceCustomization = createNetworkResourceCustomization(networkNodeTemplate, toscaResourceStructure); @@ -897,7 +1088,8 @@ public class ToscaResourceInstaller { networkResource.addNetworkResourceCustomization(networkResourceCustomization); networkResourceCustomization.setNetworkResource(networkResource); - } + } + return networkResourceCustomization; } @@ -1376,21 +1568,7 @@ public class ToscaResourceInstaller { return configResource; } - - protected ServiceProxyResourceCustomization findExistingServiceProxyResource(List<ServiceProxyResourceCustomization> serviceProxyList, String modelCustomizationUUID) { - ServiceProxyResourceCustomization serviceProxyResourceCustomization = null; - for(ServiceProxyResourceCustomization serviceProxyResourceCustom : serviceProxyList){ - if (serviceProxyResourceCustom != null - && serviceProxyResourceCustom.getModelCustomizationUUID().equals(modelCustomizationUUID)) { - serviceProxyResourceCustomization = serviceProxyResourceCustom; - } - } - if(serviceProxyResourceCustomization==null) - serviceProxyResourceCustomization = serviceProxyCustomizationRepo.findResourceByModelCustomizationUUID(modelCustomizationUUID); - return serviceProxyResourceCustomization; - } - protected VfModuleCustomization findExistingVfModuleCustomization(VnfResourceCustomization vnfResource, String vfModuleModelCustomizationUUID) { VfModuleCustomization vfModuleCustomization = null; diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/util/ASDCNotificationLogging.java b/asdc-controller/src/main/java/org/onap/so/asdc/util/ASDCNotificationLogging.java index f7c761f017..24304ba28c 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/util/ASDCNotificationLogging.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/util/ASDCNotificationLogging.java @@ -28,8 +28,8 @@ import org.onap.sdc.api.notification.IArtifactInfo; import org.onap.sdc.api.notification.INotificationData; import org.onap.sdc.api.notification.IResourceInstance; import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.enums.SdcTypes; import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; -import org.onap.sdc.tosca.parser.impl.SdcTypes; import org.onap.sdc.toscaparser.api.Group; import org.onap.sdc.toscaparser.api.NodeTemplate; import org.onap.sdc.toscaparser.api.elements.Metadata; diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInputTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInputTest.java new file mode 100644 index 0000000000..bc9275bb51 --- /dev/null +++ b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInputTest.java @@ -0,0 +1,185 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 Huawei 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.so.asdc.installer.heat; + +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.Property; +import org.onap.sdc.toscaparser.api.elements.Metadata; +import org.onap.sdc.toscaparser.api.functions.GetInput; +import org.onap.sdc.toscaparser.api.parameters.Input; +import org.onap.so.asdc.client.exceptions.ArtifactInstallerException; +import org.onap.so.asdc.installer.ToscaResourceStructure; +import org.onap.so.db.catalog.beans.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + +public class ToscaResourceInputTest { + @Rule + public MockitoRule rule = MockitoJUnit.rule(); + + @Mock + ISdcCsarHelper sdcCsarHelper; + + @Mock + NodeTemplate nodeTemplate; + + @Mock + Property property; + + @Mock + GetInput getInput; + + @Mock + Input input; + + @Test + public void processResourceSequenceTest() { + ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller(); + ToscaResourceStructure toscaResourceStructure = new ToscaResourceStructure(); + toscaResourceStructure.setSdcCsarHelper(sdcCsarHelper); + ArrayList<Input> inputs = new ArrayList<>(); + Service service = new Service(); + + HashMap<String, Object> hashMap = new HashMap(); + hashMap.put("name", "node1"); + + Metadata metadata = new Metadata(hashMap); + when(nodeTemplate.getMetaData()).thenReturn(metadata); + when(sdcCsarHelper.getServiceInputs()).thenReturn(inputs); + when(sdcCsarHelper.getServiceNodeTemplates()).thenReturn(Arrays.asList(nodeTemplate)); + when(sdcCsarHelper.getRequirementsOf(any())).thenReturn(null); + + + toscaResourceInstaller.processResourceSequence(toscaResourceStructure, service); + assertEquals(service.getResourceOrder(), "node1"); + } + + @Test + public void resouceInputTest() throws ArtifactInstallerException { + ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller(); + ToscaResourceStructure toscaResourceStructure = new ToscaResourceStructure(); + + toscaResourceStructure.setSdcCsarHelper(sdcCsarHelper); + + HashMap hashMap = new HashMap(); + hashMap.put("customizationUUID", "id1"); + Metadata metadata = new Metadata(hashMap); + + LinkedHashMap propertyMap = new LinkedHashMap(); + propertyMap.put("prop1", property); + + when(sdcCsarHelper.getServiceNodeTemplates()).thenReturn(Arrays.asList(nodeTemplate)); + when(nodeTemplate.getMetaData()).thenReturn(metadata); + when(nodeTemplate.getProperties()).thenReturn(propertyMap); + when(property.getValue()).thenReturn("value1"); + + String resourceInput = toscaResourceInstaller.getResourceInput(toscaResourceStructure, "id1"); + assertEquals("{\\\"prop1\\\":\\\"value1\\\"}", resourceInput); + } + + @Test + public void resouceInputGetInputTest() throws ArtifactInstallerException { + ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller(); + ToscaResourceStructure toscaResourceStructure = new ToscaResourceStructure(); + + toscaResourceStructure.setSdcCsarHelper(sdcCsarHelper); + + HashMap hashMap = new HashMap(); + hashMap.put("customizationUUID", "id1"); + Metadata metadata = new Metadata(hashMap); + + LinkedHashMap propertyMap = new LinkedHashMap(); + propertyMap.put("prop1", property); + + when(sdcCsarHelper.getServiceNodeTemplates()).thenReturn(Arrays.asList(nodeTemplate)); + when(sdcCsarHelper.getServiceInputs()).thenReturn(Arrays.asList(input)); + when(nodeTemplate.getMetaData()).thenReturn(metadata); + when(nodeTemplate.getProperties()).thenReturn(propertyMap); + when(property.getValue()).thenReturn(getInput); + when(getInput.getInputName()).thenReturn("res_key"); + when(input.getName()).thenReturn("res_key"); + when(input.getDefault()).thenReturn("default_value"); + + String resourceInput = toscaResourceInstaller.getResourceInput(toscaResourceStructure, "id1"); + assertEquals("{\\\"prop1\\\":\\\"res_key|default_value\\\"}", resourceInput); + } + + @Test + public void resouceInputGetInputDefaultIntegerTest() throws ArtifactInstallerException { + ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller(); + ToscaResourceStructure toscaResourceStructure = new ToscaResourceStructure(); + + toscaResourceStructure.setSdcCsarHelper(sdcCsarHelper); + + HashMap hashMap = new HashMap(); + hashMap.put("customizationUUID", "id1"); + Metadata metadata = new Metadata(hashMap); + + LinkedHashMap propertyMap = new LinkedHashMap(); + propertyMap.put("prop1", property); + + when(sdcCsarHelper.getServiceNodeTemplates()).thenReturn(Arrays.asList(nodeTemplate)); + when(sdcCsarHelper.getServiceInputs()).thenReturn(Arrays.asList(input)); + when(nodeTemplate.getMetaData()).thenReturn(metadata); + when(nodeTemplate.getProperties()).thenReturn(propertyMap); + when(property.getValue()).thenReturn(getInput); + when(getInput.getInputName()).thenReturn("res_key"); + when(input.getName()).thenReturn("res_key"); + when(input.getDefault()).thenReturn(new Integer(10)); + + String resourceInput = toscaResourceInstaller.getResourceInput(toscaResourceStructure, "id1"); + assertEquals("{\\\"prop1\\\":\\\"res_key|10\\\"}", resourceInput); + } + + @Test + public void resouceInputGetInputNoPropertyTest() throws ArtifactInstallerException { + ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller(); + ToscaResourceStructure toscaResourceStructure = new ToscaResourceStructure(); + + toscaResourceStructure.setSdcCsarHelper(sdcCsarHelper); + + HashMap hashMap = new HashMap(); + hashMap.put("customizationUUID", "id1"); + Metadata metadata = new Metadata(hashMap); + + LinkedHashMap propertyMap = new LinkedHashMap(); + + when(sdcCsarHelper.getServiceNodeTemplates()).thenReturn(Arrays.asList(nodeTemplate)); + when(sdcCsarHelper.getServiceInputs()).thenReturn(Arrays.asList(input)); + when(nodeTemplate.getMetaData()).thenReturn(metadata); + when(nodeTemplate.getProperties()).thenReturn(propertyMap); + + String resourceInput = toscaResourceInstaller.getResourceInput(toscaResourceStructure, "id1"); + assertEquals("{}", resourceInput); + } +} diff --git a/asdc-controller/src/test/resources/data.sql b/asdc-controller/src/test/resources/data.sql index 681ee3bda7..70737abf5a 100644 --- a/asdc-controller/src/test/resources/data.sql +++ b/asdc-controller/src/test/resources/data.sql @@ -59,6 +59,6 @@ insert into requestdb.watchdog_per_component_distribution_status(DISTRIBUTION_ID ('testStatusExceptionTosca', 'AAI', 'COMPONENT_MALFORMED'), ('testStatusExceptionTosca', 'SDNC', 'COMPONENT_MALFORMED'); -insert into requestdb.watchdog_service_mod_ver_id_lookup(DISTRIBUTION_ID, SERVICE_MODEL_VERSION_ID) values -('watchdogTestStatusSuccess', '5df8b6de-2083-11e7-93ae-92361f002671'), -('watchdogTestStatusNull', '00000000-0000-0000-0000-000000000000'); +insert into requestdb.watchdog_service_mod_ver_id_lookup(DISTRIBUTION_ID, SERVICE_MODEL_VERSION_ID, DISTRIBUTION_NOTIFICATION, CONSUMER_ID) values +('watchdogTestStatusSuccess', '5df8b6de-2083-11e7-93ae-92361f002671', NULL, NULL), +('watchdogTestStatusNull', '00000000-0000-0000-0000-000000000000', NULL, NULL); diff --git a/asdc-controller/src/test/resources/schema.sql b/asdc-controller/src/test/resources/schema.sql index b17fb5d47c..010b36dcf1 100644 --- a/asdc-controller/src/test/resources/schema.sql +++ b/asdc-controller/src/test/resources/schema.sql @@ -31,6 +31,7 @@ create table `allotted_resource_customization` ( `min_instances` int(11) default null, `max_instances` int(11) default null, `ar_model_uuid` varchar(200) not null, + `resource_input` varchar(20000) default null, `creation_timestamp` datetime not null default current_timestamp, primary key (`model_customization_uuid`), key `fk_allotted_resource_customization__allotted_resource1_idx` (`ar_model_uuid`), @@ -141,11 +142,11 @@ create table `network_resource` ( `model_name` varchar(200) not null, `model_invariant_uuid` varchar(200) default null, `description` varchar(1200) default null, - `heat_template_artifact_uuid` varchar(200) not null, + `heat_template_artifact_uuid` varchar(200) null, `neutron_network_type` varchar(20) default null, `model_version` varchar(20) default null, `tosca_node_type` varchar(200) default null, - `aic_version_min` varchar(20) not null, + `aic_version_min` varchar(20) null, `aic_version_max` varchar(20) default null, `orchestration_mode` varchar(20) default 'heat', `resource_category` varchar(20) default null, @@ -154,8 +155,7 @@ create table `network_resource` ( primary key (`model_uuid`), key `fk_network_resource__temp_network_heat_template_lookup1_idx` (`model_name`), key `fk_network_resource__heat_template1_idx` (`heat_template_artifact_uuid`), - constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade, - constraint `fk_network_resource__temp_network_heat_template_lookup__mod_nm1` foreign key (`model_name`) references `temp_network_heat_template_lookup` (`network_resource_model_name`) on delete no action on update no action + constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade ) engine=innodb default charset=latin1; @@ -171,6 +171,7 @@ create table `network_resource_customization` ( `network_scope` varchar(45) default null, `creation_timestamp` datetime not null default current_timestamp, `network_resource_model_uuid` varchar(200) not null, + `resource_input` varchar(20000) default null, primary key (`model_customization_uuid`), key `fk_network_resource_customization__network_resource1_idx` (`network_resource_model_uuid`), constraint `fk_network_resource_customization__network_resource1` foreign key (`network_resource_model_uuid`) references `network_resource` (`model_uuid`) on delete cascade on update cascade @@ -207,6 +208,7 @@ create table `service` ( `environment_context` varchar(200) default null, `workload_context` varchar(200) default null, `service_category` varchar(200) default null, + `resource_order` varchar(200) default null, primary key (`model_uuid`), key `fk_service__tosca_csar1_idx` (`tosca_csar_artifact_uuid`), constraint `fk_service__tosca_csar1` foreign key (`tosca_csar_artifact_uuid`) references `tosca_csar` (`artifact_uuid`) on delete cascade on update cascade @@ -396,6 +398,7 @@ create table `vnf_resource_customization` ( `creation_timestamp` datetime not null default current_timestamp, `vnf_resource_model_uuid` varchar(200) not null, `multi_stage_design` varchar(20) default null, + `resource_input` varchar(20000) default null, primary key (`model_customization_uuid`), key `fk_vnf_resource_customization__vnf_resource1_idx` (`vnf_resource_model_uuid`), constraint `fk_vnf_resource_customization__vnf_resource1` foreign key (`vnf_resource_model_uuid`) references `vnf_resource` (`model_uuid`) on delete cascade on update cascade @@ -1005,6 +1008,8 @@ CREATE TABLE `watchdog_per_component_distribution_status` ( CREATE TABLE `watchdog_service_mod_ver_id_lookup` ( `DISTRIBUTION_ID` varchar(45) NOT NULL, `SERVICE_MODEL_VERSION_ID` varchar(45) NOT NULL, + `DISTRIBUTION_NOTIFICATION` LONGTEXT NULL, + `CONSUMER_ID` varchar(200) NULL, `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `MODIFY_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`DISTRIBUTION_ID`,`SERVICE_MODEL_VERSION_ID`) diff --git a/bpmn/MSOCommonBPMN/pom.xml b/bpmn/MSOCommonBPMN/pom.xml index abf53f96f5..b115d36a0a 100644 --- a/bpmn/MSOCommonBPMN/pom.xml +++ b/bpmn/MSOCommonBPMN/pom.xml @@ -363,12 +363,12 @@ <dependency> <groupId>org.onap.sdc.sdc-tosca</groupId> <artifactId>sdc-tosca</artifactId> - <version>1.4.1</version> + <version>1.4.4</version> </dependency> <dependency> <groupId>org.onap.sdc.jtosca</groupId> <artifactId>jtosca</artifactId> - <version>1.4.1</version> + <version>1.4.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/MsoUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/MsoUtils.groovy index 2f240fb70d..4f0b530a3b 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/MsoUtils.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/MsoUtils.groovy @@ -931,7 +931,8 @@ class MsoUtils { if (moduleIndexList == null || moduleIndexList.size() == 0) { return "0" } - def sortedModuleIndexList = moduleIndexList.sort { a, b -> a.compareTo b } + + def sortedModuleIndexList = moduleIndexList.sort{ a, b -> a as Integer <=> b as Integer} for (i in 0..sortedModuleIndexList.size()-1) { if (Integer.parseInt(sortedModuleIndexList[i]) != i) { diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy index 5659c7affa..5e949fd8d2 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy @@ -35,7 +35,7 @@ import org.onap.so.client.HttpClientFactory import org.onap.so.logger.MsoLogger import org.onap.so.db.catalog.beans.CloudIdentity import org.onap.so.db.catalog.beans.CloudSite - +import org.onap.so.db.catalog.beans.HomingInstance import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor import org.onap.so.utils.TargetEntity @@ -209,17 +209,12 @@ class OofHoming extends AbstractServiceTaskProcessor { for (int j = 0; j < arrSol.length(); j++) { JSONObject placement = arrSol.getJSONObject(j) utils.log("DEBUG", "****** Placement Solution is: " + placement + " *****", "true") - String jsonServiceResourceId = placement.getString("serviceResourceId") - String jsonResourceModuleName = placement.getString("resourceModuleName") + String jsonServiceResourceId = jsonUtil.getJsonValue( placement.toString(), "serviceResourceId") + utils.log("DEBUG", "****** homing serviceResourceId is: " + jsonServiceResourceId + " *****", "true") for (Resource resource : resourceList) { String serviceResourceId = resource.getResourceId() - String resourceModuleName = "" - if (resource.getResourceType() == ResourceType.ALLOTTED_RESOURCE || - resource.getResourceType() == ResourceType.VNF) { - resourceModuleName = resource.getNfFunction() - } - if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId) || - resourceModuleName.equalsIgnoreCase(jsonResourceModuleName)) { + utils.log("DEBUG", "****** decomp serviceResourceId is: " + serviceResourceId + " *****", "true") + if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId)) { JSONObject solution = placement.getJSONObject("solution") String solutionType = solution.getString("identifierType") String inventoryType = "" @@ -228,20 +223,26 @@ class OofHoming extends AbstractServiceTaskProcessor { } else { inventoryType = "cloud" } + utils.log("DEBUG", "****** homing inventoryType is: " + inventoryType + " *****", "true") resource.getHomingSolution().setInventoryType(InventoryType.valueOf(inventoryType)) JSONArray assignmentArr = placement.getJSONArray("assignmentInfo") + utils.log("DEBUG", "****** assignmentInfo is: " + assignmentArr.toString() + " *****", "true") + + Map<String, String> assignmentMap = jsonUtil.entryArrayToMap(execution, + assignmentArr.toString(), "key", "value") String oofDirectives = null - assignmentArr.each { element -> - JSONObject jsonObject = new JSONObject(element.toString()) - if (jsonUtil.getJsonRawValue(jsonObject.toString(), "key") == "oof_directives") { - oofDirectives = jsonUtil.getJsonRawValue(jsonObject.toString(), "value") + assignmentMap.each { key, value -> + utils.log("DEBUG", "****** element: " + key + " *****", "true") + if (key == "oof_directives") { + oofDirectives = value + utils.log("DEBUG", "****** homing oofDirectives: " + oofDirectives + " *****", "true") } } - Map<String, String> assignmentMap = jsonUtil.entryArrayToMap(execution, - assignmentArr.toString(), "key", "value") String cloudOwner = assignmentMap.get("cloudOwner") + utils.log("DEBUG", "****** homing cloudOwner: " + cloudOwner + " *****", "true") String cloudRegionId = assignmentMap.get("locationId") + utils.log("DEBUG", "****** homing cloudRegionId: " + cloudRegionId + " *****", "true") resource.getHomingSolution().setCloudOwner(cloudOwner) resource.getHomingSolution().setCloudRegionId(cloudRegionId) @@ -249,12 +250,26 @@ class OofHoming extends AbstractServiceTaskProcessor { cloudSite.setId(cloudRegionId) cloudSite.setRegionId(cloudRegionId) String orchestrator = execution.getVariable("orchestrator") - if ((orchestrator != null) || (orchestrator != "")) { + if ((orchestrator != null) && (orchestrator != "")) { cloudSite.setOrchestrator(orchestrator) + utils.log("DEBUG", "****** orchestrator: " + orchestrator + " *****", "true") + } else { + cloudSite.setOrchestrator("multicloud") } CloudIdentity cloudIdentity = new CloudIdentity() cloudIdentity.setId(cloudRegionId) + cloudIdentity.setIdentityServerType(ServerType."KEYSTONE") + cloudIdentity.setAdminTenant("service") + cloudIdentity.setIdentityAuthenticationType(AuthenticationType.USERNAME_PASSWORD) + String msoMulticloudUserName = UrnPropertiesReader + .getVariable("mso.multicloud.api.username", execution, + "apih") + String msoMulticloudPassword = UrnPropertiesReader + .getVariable("mso.multicloud.api.password", execution, + "abc123") + cloudIdentity.setMsoId(msoMulticloudUserName) + cloudIdentity.setMsoPass(msoMulticloudPassword) // Get MSB Url String msbHost = oofUtils.getMsbHost(execution) String multicloudApiEndpoint = UrnPropertiesReader @@ -263,19 +278,39 @@ class OofHoming extends AbstractServiceTaskProcessor { cloudIdentity.setIdentityUrl(msbHost + multicloudApiEndpoint + "/" + cloudOwner + "/" + cloudRegionId + "/infra_workload") - + utils.log("DEBUG", "****** Cloud IdentityUrl: " + msbHost + multicloudApiEndpoint + + "/" + cloudOwner + "/" + + cloudRegionId + "/infra_workload" + + " *****", "true") + utils.log("DEBUG", "****** CloudIdentity: " + cloudIdentity.toString() + + " *****", "true") cloudSite.setIdentityService(cloudIdentity) + utils.log("DEBUG", "****** CloudSite: " + cloudSite.toString() + + " *****", "true") // Set cloudsite in catalog DB here - oofUtils.createCloudSiteCatalogDb(cloudSite) + oofUtils.createCloudSite(cloudSite, execution) if (oofDirectives != null && oofDirectives != "") { resource.getHomingSolution().setOofDirectives(oofDirectives) execution.setVariable("oofDirectives", oofDirectives) - utils.log("DEBUG", "***** OofDirectives is: " + oofDirectives + + utils.log("DEBUG", "***** OofDirectives set to: " + oofDirectives + " *****", "true") } + // Set Homing Instance + String serviceInstanceId = decomposition.getServiceInstance().getInstanceId() + HomingInstance homingInstance = new HomingInstance() + homingInstance.setServiceInstanceId(serviceInstanceId) + homingInstance.setCloudOwner(cloudOwner) + homingInstance.setCloudRegionId(cloudRegionId) + if (oofDirectives != null && oofDirectives != "") { + homingInstance.setOofDirectives(oofDirectives)} + else { + homingInstance.setOofDirectives("{}") + } + oofUtils.createHomingInstance(homingInstance, execution) + if (inventoryType.equalsIgnoreCase("service")) { resource.getHomingSolution().setRehome(assignmentMap.get("isRehome").toBoolean()) VnfResource vnf = new VnfResource() @@ -283,6 +318,12 @@ class OofHoming extends AbstractServiceTaskProcessor { resource.getHomingSolution().setVnf(vnf) resource.getHomingSolution().setServiceInstanceId(solution.getJSONArray("identifiers")[0].toString()) } + } else { + utils.log("DEBUG", "ProcessHomingSolution Exception: no matching serviceResourceIds returned in " + + "homing solution", isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - " + + "Occurred in Homing ProcessHomingSolution: no matching serviceResourceIds returned") + } } } @@ -312,8 +353,10 @@ class OofHoming extends AbstractServiceTaskProcessor { utils.log("DEBUG", "*** Completed Homing Process Homing Solution ***", isDebugEnabled) } catch (BpmnError b) { + utils.log("DEBUG", "ProcessHomingSolution Error: " + b, isDebugEnabled) throw b } catch (Exception e) { + utils.log("DEBUG", "ProcessHomingSolution Exception: " + e, isDebugEnabled) msoLogger.error(e); exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occurred in Homing ProcessHomingSolution") } diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy index c0da8881fb..af33f38a64 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy @@ -36,6 +36,7 @@ import org.onap.so.bpmn.core.json.JsonUtils import org.onap.so.client.HttpClient import org.onap.so.client.HttpClientFactory import org.onap.so.db.catalog.beans.CloudSite +import org.onap.so.db.catalog.beans.HomingInstance import org.onap.so.utils.TargetEntity import org.springframework.http.HttpEntity import org.springframework.http.HttpHeaders @@ -495,6 +496,7 @@ class OofUtils { if (candidatesJson != "") {candidatesJson = candidatesJson.substring(0, candidatesJson.length() - 1)} return candidatesJson } + /** * This method creates a cloudsite in catalog database. * @@ -524,9 +526,19 @@ class OofUtils { exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from CatalogDB.") } } - + + /** + * This method creates a HomingInstance in catalog database. + * + * @param HomingInstance homingInstance + * + * @return void + */ + Void createHomingInstance(HomingInstance homingInstance, DelegateExecution execution) { + oofInfraUtils.createHomingInstance(homingInstance, execution) + } String getMsbHost(DelegateExecution execution) { - msbHost = UrnPropertiesReader.getVariable("mso.msb.host", execution, "msb-iag.onap") + String msbHost = UrnPropertiesReader.getVariable("mso.msb.host", execution, "msb-iag.onap") Integer msbPort = UrnPropertiesReader.getVariable("mso.msb.port", execution, "80").toInteger() diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java index 12a4b2a9c3..025b533dc0 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java @@ -20,29 +20,18 @@ package org.onap.so.bpmn.common.resource; -import java.io.File; import java.io.IOException; -import java.nio.file.Paths; +import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; import org.camunda.bpm.engine.runtime.Execution; -import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; -import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; -import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory; -import org.onap.sdc.toscaparser.api.NodeTemplate; -import org.onap.sdc.toscaparser.api.Property; -import org.onap.sdc.toscaparser.api.RequirementAssignment; -import org.onap.sdc.toscaparser.api.RequirementAssignments; -import org.onap.sdc.toscaparser.api.functions.GetInput; -import org.onap.sdc.toscaparser.api.parameters.Input; import org.onap.so.bpmn.core.UrnPropertiesReader; import org.onap.so.bpmn.core.json.JsonUtils; import org.onap.so.client.HttpClient; @@ -58,86 +47,34 @@ import com.google.gson.reflect.TypeToken; public class ResourceRequestBuilder { - private static String CUSTOMIZATION_UUID = "customizationUUID"; + private static String CUSTOMIZATION_UUID = "cuserviceResourcesstomizationUUID"; - private static String SERVICE_URL_TOSCA_CSAR = "/v3/serviceToscaCsar"; + private static String SERVICE_URL_SERVICE_INSTANCE = "/v2/serviceResources"; private static MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, ResourceRequestBuilder.class); static JsonUtils jsonUtil = new JsonUtils(); - public static List<String> getResourceSequence(Execution execution, String serviceUuid) { - List<String> resouceSequence = new ArrayList<String>(); - List<NodeTemplate> resultList = new ArrayList<NodeTemplate>(); - String csarpath = null; - try { - csarpath = getCsarFromUuid(serviceUuid); - - SdcToscaParserFactory toscaParser = SdcToscaParserFactory.getInstance(); - ISdcCsarHelper iSdcCsarHelper = toscaParser.getSdcCsarHelper(csarpath, false); - List<NodeTemplate> nodeTemplates = iSdcCsarHelper.getServiceNodeTemplates(); - List<NodeTemplate> nodes = new ArrayList<NodeTemplate>(); - nodes.addAll(nodeTemplates); - - for (NodeTemplate nodeTemplate : nodeTemplates) { - RequirementAssignments requirement = iSdcCsarHelper.getRequirementsOf(nodeTemplate); - - if (requirement == null || requirement.getAll() == null || requirement.getAll().isEmpty()) { - resultList.add(nodeTemplate); - nodes.remove(nodeTemplate); - } - } - - resultList = getRequirementList(resultList, nodes, iSdcCsarHelper); - - for (NodeTemplate node : resultList) { - String templateName = node.getMetaData().getValue("name"); - if (!resouceSequence.contains(templateName)) { - resouceSequence.add(templateName); - } - } - - } catch (SdcToscaParserException toscarParserE) { - LOGGER.debug("sdc tosca parser failed for csar: " + csarpath, toscarParserE); - return resouceSequence; - } catch (Exception e) { - LOGGER.debug("csar file is not available for service uuid:" + serviceUuid, e); - return resouceSequence; - } - - return resouceSequence; - } + public static List<String> getResourceSequence(String serviceUuid) { + + List<String> resourceSequence = new ArrayList(); + try { + Map<String, Object> serviceResponse = getServiceInstnace(serviceUuid); + + if (serviceResponse.containsKey("serviceResources")) { + Map<String, Object> serviceResources = (Map<String, Object>) serviceResponse.get("serviceResources"); - private static List<NodeTemplate> getRequirementList(List<NodeTemplate> resultList, List<NodeTemplate> nodeTemplates, - ISdcCsarHelper iSdcCsarHelper) { - - List<NodeTemplate> nodes = new ArrayList<NodeTemplate>(); - nodes.addAll(nodeTemplates); - - for (NodeTemplate nodeTemplate : nodeTemplates) { - RequirementAssignments requirement = iSdcCsarHelper.getRequirementsOf(nodeTemplate); - List<RequirementAssignment> reqAs = requirement.getAll(); - for (RequirementAssignment ra : reqAs) { - String reqNode = ra.getNodeTemplateName(); - for (NodeTemplate rNode : resultList) { - if (rNode.getName().equals(reqNode)) { - if(!resultList.contains(nodeTemplate)) { - resultList.add(nodeTemplate); - } - if(nodes.contains(nodeTemplate)) { - nodes.remove(nodeTemplate); - } - break; - } - } - } - } - - if (!nodes.isEmpty()) { - getRequirementList(resultList, nodes, iSdcCsarHelper); - } - - return resultList; + if (serviceResources.containsKey("resourceOrder")) { + String resourceOrder = (String) serviceResources.get("resourceOrder"); + if (resourceOrder!= null) { + resourceSequence.addAll(Arrays.asList(resourceOrder.split(","))); + } + } + } + } catch (Exception e) { + LOGGER.error("not able to retrieve service order."); + } + return resourceSequence; } /* build the resource Parameters detail. @@ -184,12 +121,8 @@ public class ResourceRequestBuilder { resourceInputsFromUuiMap = new HashMap(); } - try { - Map<String, Object> resourceInputsFromServiceDeclaredLevel = buildResouceRequest(serviceUuid, resourceCustomizationUuid, serviceInput); - resourceInputsFromUuiMap.putAll(resourceInputsFromServiceDeclaredLevel); - } catch(SdcToscaParserException e) { - LOGGER.error("SdcToscaParserException", e); - } + Map<String, Object> resourceInputsFromServiceDeclaredLevel = buildResouceRequest(serviceUuid, resourceCustomizationUuid, serviceInput); + resourceInputsFromUuiMap.putAll(resourceInputsFromServiceDeclaredLevel); String resourceInputsStr = getJsonString(resourceInputsFromUuiMap); String result = "{\n" + "\"locationConstraints\":" + locationConstraints +",\n" @@ -198,91 +131,95 @@ public class ResourceRequestBuilder { return result; } - public static Map<String, Object> buildResouceRequest(String serviceUuid, String resourceCustomizationUuid, Map<String, Object> serviceInputs) - throws SdcToscaParserException { - - Map<String, Object> resouceRequest = new HashMap<>(); - - String csarpath = null; + @SuppressWarnings("unchecked") + public static Map<String, Object> buildResouceRequest(String serviceUuid, String resourceCustomizationUuid, Map<String, Object> serviceInputs) { try { - csarpath = getCsarFromUuid(serviceUuid); - } catch(Exception e) { - LOGGER.debug("csar file is not available for service uuid:" + serviceUuid, e); - return resouceRequest; - } + Map<String, Object> serviceInstnace = getServiceInstnace(serviceUuid); - SdcToscaParserFactory toscaParser = SdcToscaParserFactory.getInstance(); - ISdcCsarHelper iSdcCsarHelper = toscaParser.getSdcCsarHelper(csarpath, false); + // find match of customization uuid in vnf + Map<String, Map<String, Object>> serviceResources = (Map<String, Map<String, Object>>) serviceInstnace.get("serviceResources"); - List<Input> serInput = iSdcCsarHelper.getServiceInputs(); - Optional<NodeTemplate> nodeTemplateOpt = iSdcCsarHelper.getServiceNodeTemplates().stream() - .filter(e -> e.getMetaData().getValue(CUSTOMIZATION_UUID).equals(resourceCustomizationUuid)).findFirst(); + List<Map<String, Object>> serviceVnfCust = (List<Map<String, Object>>) serviceResources.get("serviceVnfs"); + String resourceInputStr = getResourceInputStr(serviceVnfCust, resourceCustomizationUuid); - if(nodeTemplateOpt.isPresent()) { - NodeTemplate nodeTemplate = nodeTemplateOpt.get(); - LinkedHashMap<String, Property> resourceProperties = nodeTemplate.getProperties(); + // find match in network resource + if (resourceInputStr == null) { + List<Map<String, Object>> serviceNetworkCust = (List<Map<String, Object>>) serviceResources.get("serviceNetworks"); + resourceInputStr = getResourceInputStr(serviceNetworkCust, resourceCustomizationUuid); - for(String key : resourceProperties.keySet()) { - Property property = resourceProperties.get(key); - - Object value = getValue(property.getValue(), serviceInputs, serInput); - resouceRequest.put(key, value); + // find match in AR resource + if (resourceInputStr == null) { + List<Map<String, Object>> serviceArCust = (List<Map<String, Object>>) serviceResources.get("serviceAllottedResources"); + resourceInputStr = getResourceInputStr(serviceArCust, resourceCustomizationUuid); + } } + + if (resourceInputStr != null || !resourceInputStr.equals("")) { + return getResourceInput(resourceInputStr, serviceInputs); + } + + } catch (Exception e) { + LOGGER.error("not able to retrieve service instance"); } - return resouceRequest; + return new HashMap(); } - private static Object getValue(Object value, Map<String, Object> serviceInputs, List<Input> servInputs) { - if(value instanceof Map) { - Map<String, Object> valueMap = new HashMap<>(); + private static String getResourceInputStr(List<Map<String, Object>> resources, String resCustomizationUuid) { - Map<String, Object> propertyMap = (Map<String, Object>)value; + for (Map<String, Object> resource : resources) { + Map<String, String> modelInfo = (Map<String, String>) resource.get("modelInfo"); - for(String key : propertyMap.keySet()) { - valueMap.put(key, getValue(propertyMap.get(key), serviceInputs, servInputs)); + if (modelInfo.get("modelCustomizationUuid").equalsIgnoreCase(resCustomizationUuid)) { + return (String) resource.get("resourceInput"); } - return valueMap; // return if the value is nested hashmap - } else if(value instanceof GetInput) { - String inputName = ((GetInput)value).getInputName(); - - if(serviceInputs.get(inputName) != null) { - value = serviceInputs.get(inputName); - } else { - for(Input input : servInputs) { - if(input.getName().equals(inputName)) { - return input.getDefault(); // return default value - } + } + return null; + } + + // this method combines resource input with service input + private static Map<String, Object> getResourceInput(String resourceInputStr, Map<String, Object> serviceInputs) { + Gson gson = new Gson(); + Type type = new TypeToken<Map<String, String>>(){}.getType(); + Map<String, Object> resourceInput = gson.fromJson(resourceInputStr, type); + + // replace value if key is available in service input + for (String key: resourceInput.keySet()) { + String value = (String) resourceInput.get(key); + + if (value.contains("|")) { + // node it type of getinput + String[] split = value.split("\\|"); + String tmpKey = split[0]; + if (serviceInputs.containsKey(tmpKey)) { + value = (String) serviceInputs.get(tmpKey); + } else { + value = split[1]; } } + resourceInput.put(key,value); } - return value; // return property value + return resourceInput; } - private static String getCsarFromUuid(String uuid) throws Exception { - String catalogEndPoint = UrnPropertiesReader.getVariable("mso.catalog.db.endpoint"); - HttpClient client = new HttpClientFactory().newJsonClient( - UriBuilder.fromUri(catalogEndPoint).path(SERVICE_URL_TOSCA_CSAR).queryParam("serviceModelUuid", uuid).build().toURL(), - TargetEntity.CATALOG_DB); - - client.addAdditionalHeader("Accept", "application/json"); -// client.addBasicAuthHeader (UrnPropertiesReader.getVariable("mso.adapters.db.auth"), UrnPropertiesReader.getVariable("mso.msoKey")); - client.addAdditionalHeader("Authorization", UrnPropertiesReader.getVariable("mso.db.auth")); - Response response = client.get(); - String value = response.readEntity(String.class); + public static Map<String, Object> getServiceInstnace(String uuid) throws Exception { + String catalogEndPoint = UrnPropertiesReader.getVariable("mso.catalog.db.endpoint"); - HashMap<String, String> map = new Gson().fromJson(value, new TypeToken<HashMap<String, String>>() {}.getType()); + HttpClient client = new HttpClientFactory().newJsonClient( + UriBuilder.fromUri(catalogEndPoint).path(SERVICE_URL_SERVICE_INSTANCE).queryParam("serviceModelUuid", uuid).build().toURL(), + TargetEntity.CATALOG_DB); - String filePath = Paths.get(System.getProperty("mso.config.path"), "ASDC", map.get("version"), map.get("name")).normalize().toString(); + client.addAdditionalHeader("Accept", "application/json"); + client.addAdditionalHeader("Authorization", UrnPropertiesReader.getVariable("mso.db.auth")); - File csarFile = new File(filePath); + Response apiResponse = client.get(); - if(!csarFile.exists()) { - throw new Exception("csar file does not exist in filePath:" + csarFile.getAbsolutePath()); - } + String value = apiResponse.readEntity(String.class); - return csarFile.getAbsolutePath(); + ObjectMapper objectMapper = new ObjectMapper(); + HashMap<String, Object> map = objectMapper.readValue(value, HashMap.class); + return map; } - + public static <T> T getJsonObject(String jsonstr, Class<T> type) { ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/util/OofInfraUtils.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/util/OofInfraUtils.java new file mode 100644 index 0000000000..df7b57f3a3 --- /dev/null +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/util/OofInfraUtils.java @@ -0,0 +1,112 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2018. Intel Corp. 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.so.bpmn.common.util; + +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.onap.so.bpmn.core.UrnPropertiesReader; +import org.onap.so.db.catalog.beans.CloudSite; +import org.onap.so.db.catalog.beans.HomingInstance; +import org.onap.so.db.catalog.client.CatalogDbClient; +import org.onap.so.logger.MsoLogger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.Optional; + +public class OofInfraUtils { + + private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, OofInfraUtils.class); + + /** + * This method creates a cloudsite in catalog database. + * + * @param cloudSite + * + * @return void + */ + public void createCloudSite(CloudSite cloudSite, DelegateExecution execution) { + String endpoint = UrnPropertiesReader.getVariable("mso.catalog.db.spring.endpoint", execution); + String auth = UrnPropertiesReader.getVariable("mso.db.auth", execution); + try { + CloudSite getCloudsite; + + CatalogDbClient client = new CatalogDbClient(endpoint, auth); + + getCloudsite = Optional.ofNullable(client.getCloudSite(cloudSite.getId(), endpoint + "/cloudSite/")).orElse(new CloudSite()); + if (!cloudSite.getId().equals(getCloudsite.getId())) { + client.postCloudSite(cloudSite); + LOGGER.debug("Did not findd cloudsite : " + cloudSite.getId()); + LOGGER.debug("Will create cloudSite: " + cloudSite.toString()); + } + else { + LOGGER.debug("Found cloudsite : " + cloudSite.getId()); + LOGGER.debug("Will not create cloudSite: " + cloudSite.toString()); + } + } catch (Exception e) { + LOGGER.debug("Error looking up or creating cloudsite : " + cloudSite.getId()); + LOGGER.debug("CloudSite Lookup/Creation Error: " + e); + } + + + } + + /** + * This method creates a HomingInstance in catalog database. + * + * @param homingInstance + * + * @return void + */ + public void createHomingInstance(HomingInstance homingInstance, DelegateExecution execution) { + String endpoint = UrnPropertiesReader.getVariable("mso.catalog.db.spring.endpoint", execution); + String auth = UrnPropertiesReader.getVariable("mso.db.auth", execution); + + CatalogDbClient client = new CatalogDbClient(endpoint, auth); + try { + client.postHomingInstance(homingInstance); + } catch (Exception exception) { + LOGGER.debug("Could not create HomingInstance : " + homingInstance.getServiceInstanceId()); + LOGGER.debug("HomingInstance Creation Error: " + exception); + } + + } + + /** + * This method gets a HomingInstance in catalog database. + * + * @param serviceInstanceId + * + * @return HomingInstance + */ + public HomingInstance getHomingInstance(String serviceInstanceId, DelegateExecution execution) { + String endpoint = UrnPropertiesReader.getVariable("mso.catalog.db.spring.endpoint", execution); + String auth = UrnPropertiesReader.getVariable("mso.db.auth", execution); + + CatalogDbClient client = new CatalogDbClient(endpoint, auth); + try { + return client.getHomingInstance(serviceInstanceId, endpoint + "/homingInstance/"); + } catch (Exception exception) { + LOGGER.debug("Could not get HomingInstance for serviceInstanceId : " + serviceInstanceId); + LOGGER.debug("Get HomingInstance Error: " + exception); + } + return null; + } +} diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/homingobjects/Candidate.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/homingobjects/Candidate.java index 91cd2ad791..a727162415 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/homingobjects/Candidate.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/homingobjects/Candidate.java @@ -31,10 +31,10 @@ public class Candidate implements Serializable { private static final long serialVersionUID = -3959572501582849328L; - @JsonProperty("candidateType") - private CandidateType candidateType; - @JsonProperty("candidates") - private List<String> candidates; + @JsonProperty("identifierType") + private CandidateType identifierType; + @JsonProperty("identifiers") + private List<String> identifiers; @JsonProperty("cloudOwner") private String cloudOwner; @@ -42,32 +42,32 @@ public class Candidate implements Serializable { * list of candidates * i.e. actual serviceInstanceId, actual vnfName, actual cloudRegionId, etc. */ - public List<String> getCandidates() { - return candidates; + public List<String> getIdentifiers() { + return identifiers; } /** * list of candidates * i.e. actual serviceInstanceId, actual vnfName, actual cloudRegionId, etc. */ - public void setCandidates(List<String> candidates) { - this.candidates = candidates; + public void setIdentifiers(List<String> identifiers) { + this.identifiers = identifiers; } /** * Way to identify the type of candidate * i.e. "serviceInstanceId", "vnfName", "cloudRegionId", etc. */ - public CandidateType getCandidateType(){ - return candidateType; + public CandidateType getIdentifierType(){ + return identifierType; } /** * Way to identify the type of candidate * i.e. "serviceInstanceId", "vnfName", "cloudRegionId", etc. */ - public void setCandidateType(CandidateType candidateType){ - this.candidateType = candidateType; + public void setIdentifierType(CandidateType identifierType){ + this.identifierType = identifierType; } /** diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java index 63f832d706..fbff0620a3 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java @@ -107,6 +107,7 @@ public class BBInputSetup implements JavaDelegate { private static final String NETWORK = "Network"; private static final String VNF = "Vnf"; private static final String NETWORK_COLLECTION = "NetworkCollection"; + private static final String PREPROV = "PREPROV"; @Autowired private BBInputSetupUtils bbInputSetupUtils; @@ -273,10 +274,11 @@ public class BBInputSetup implements JavaDelegate { throws Exception { ModelInfo modelInfo = requestDetails.getModelInfo(); String instanceName = requestDetails.getRequestInfo().getInstanceName(); + String productFamilyId = requestDetails.getRequestInfo().getProductFamilyId(); ModelType modelType = modelInfo.getModelType(); RelatedInstanceList[] relatedInstanceList = requestDetails.getRelatedInstanceList(); - org.onap.so.serviceinstancebeans.Platform platform = requestDetails.getPlatform(); + org.onap.so.serviceinstancebeans.Platform platform = requestDetails.getPlatform(); org.onap.so.serviceinstancebeans.LineOfBusiness lineOfBusiness = requestDetails.getLineOfBusiness(); if (modelType.equals(ModelType.network)) { @@ -285,7 +287,7 @@ public class BBInputSetup implements JavaDelegate { } else if (modelType.equals(ModelType.vnf)) { lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, resourceId); this.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName, serviceInstance, - lookupKeyMap, relatedInstanceList, resourceId, vnfType, null); + lookupKeyMap, relatedInstanceList, resourceId, vnfType, null, productFamilyId); } else if (modelType.equals(ModelType.volumeGroup)) { lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, resourceId); this.populateVolumeGroup(modelInfo, service, bbName, serviceInstance, lookupKeyMap, resourceId, @@ -404,17 +406,16 @@ public class BBInputSetup implements JavaDelegate { if (lookupKeyMap.get(ResourceKey.VF_MODULE_ID) != null && vfModuleTemp.getVfModuleId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.VF_MODULE_ID))) { vfModule = vfModuleTemp; - String vfModuleCustId = bbInputSetupUtils.getAAIVfModule(vnf.getVnfId(), vfModule.getVfModuleId()).getModelCustomizationId(); - modelInfo.setModelCustomizationId(vfModuleCustId); - break; } + String vfModuleCustId = bbInputSetupUtils.getAAIVfModule(vnf.getVnfId(), vfModuleTemp.getVfModuleId()).getModelCustomizationId(); + ModelInfo modelInfoVfModule = new ModelInfo(); + modelInfoVfModule.setModelCustomizationId(vfModuleCustId); + mapCatalogVfModule(vfModuleTemp, modelInfoVfModule, service, vnfModelCustomizationUUID); } if (vfModule == null && bbName.equalsIgnoreCase(AssignFlows.VF_MODULE.toString())) { vfModule = createVfModule(lookupKeyMap, resourceId, instanceName, instanceParams); vnf.getVfModules().add(vfModule); - } - if(vfModule != null) { mapCatalogVfModule(vfModule, modelInfo, service, vnfModelCustomizationUUID); } } else { @@ -579,7 +580,8 @@ public class BBInputSetup implements JavaDelegate { org.onap.so.serviceinstancebeans.Platform platform, org.onap.so.serviceinstancebeans.LineOfBusiness lineOfBusiness, Service service, String bbName, ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, - RelatedInstanceList[] relatedInstanceList, String resourceId, String vnfType, List<Map<String, String>> instanceParams) { + RelatedInstanceList[] relatedInstanceList, String resourceId, String vnfType, List<Map<String, String>> instanceParams, + String productFamilyId) { GenericVnf vnf = null; ModelInfo instanceGroupModelInfo = null; String instanceGroupId = null; @@ -607,7 +609,7 @@ public class BBInputSetup implements JavaDelegate { } if (vnf == null && bbName.equalsIgnoreCase(AssignFlows.VNF.toString())) { vnf = createGenericVnf(lookupKeyMap, instanceName, platform, lineOfBusiness, - resourceId, generatedVnfType, instanceParams); + resourceId, generatedVnfType, instanceParams, productFamilyId); serviceInstance.getVnfs().add(vnf); mapVnfcCollectionInstanceGroup(vnf, modelInfo, service); } @@ -658,13 +660,16 @@ public class BBInputSetup implements JavaDelegate { protected GenericVnf createGenericVnf(Map<ResourceKey, String> lookupKeyMap, String instanceName, org.onap.so.serviceinstancebeans.Platform platform, - org.onap.so.serviceinstancebeans.LineOfBusiness lineOfBusiness, String vnfId, String vnfType, List<Map<String, String>> instanceParams) { + org.onap.so.serviceinstancebeans.LineOfBusiness lineOfBusiness, String vnfId, String vnfType, List<Map<String, String>> instanceParams, + String productFamilyId) { lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, vnfId); GenericVnf genericVnf = new GenericVnf(); genericVnf.setVnfId(vnfId); genericVnf.setVnfName(instanceName); genericVnf.setOrchestrationStatus(OrchestrationStatus.PRECREATED); genericVnf.setVnfType(vnfType); + genericVnf.setProvStatus(PREPROV); + genericVnf.setServiceId(productFamilyId); if (platform != null) { genericVnf.setPlatform(this.mapperLayer.mapRequestPlatform(platform)); } @@ -1169,8 +1174,10 @@ public class BBInputSetup implements JavaDelegate { if (request != null) { this.bbInputSetupUtils.updateInfraActiveRequestVnfId(request, vnfId); } + String productFamilyId = requestDetails.getRequestInfo().getProductFamilyId(); this.populateGenericVnf(vnfs.getModelInfo(), vnfs.getInstanceName(), vnfs.getPlatform(), - vnfs.getLineOfBusiness(), service, bbName, serviceInstance, lookupKeyMap, null, vnfId, vnfType, vnfs.getInstanceParams()); + vnfs.getLineOfBusiness(), service, bbName, serviceInstance, lookupKeyMap, null, vnfId, vnfType, vnfs.getInstanceParams(), + productFamilyId); } else if (bbName.contains(VF_MODULE) || bbName.contains(VOLUME_GROUP)) { Pair<Vnfs, VfModules> vnfsAndVfModules = getVfModulesAndItsVnfsByKey(key, resources); vfModules = vnfsAndVfModules.getValue1(); diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java index d2e0b07dd1..ee7999f995 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildingBlockRainyDay.java @@ -40,20 +40,22 @@ import org.springframework.stereotype.Component; @Component public class ExecuteBuildingBlockRainyDay { - - private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, ExecuteBuildingBlockRainyDay.class); + + private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, + ExecuteBuildingBlockRainyDay.class); public static final String HANDLING_CODE = "handlingCode"; - + @Autowired private CatalogDbClient catalogDbClient; @Autowired private RequestsDbClient requestDbclient; private static final String ASTERISK = "*"; - + @Autowired - private Environment environment; + private Environment environment; protected String retryDurationPath = "mso.rainyDay.retryDurationMultiplier"; protected String defaultCode = "mso.rainyDay.defaultCode"; + protected String maxRetries = "mso.rainyDay.maxRetries"; public void setRetryTimer(DelegateExecution execution) { try { @@ -67,7 +69,7 @@ public class ExecuteBuildingBlockRainyDay { throw new BpmnError("Unknown error incrementing retry counter"); } } - + public void queryRainyDayTable(DelegateExecution execution, boolean primaryPolicy) { try { ExecuteBuildingBlock ebb = (ExecuteBuildingBlock) execution.getVariable("buildingBlock"); @@ -79,18 +81,20 @@ public class ExecuteBuildingBlockRainyDay { boolean aLaCarte = (boolean) execution.getVariable("aLaCarte"); boolean suppressRollback = (boolean) execution.getVariable("suppressRollback"); String handlingCode = ""; - if(suppressRollback){ + if (suppressRollback) { handlingCode = "Abort"; - }else{ + } else { try { - serviceType = gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0).getModelInfoServiceInstance().getServiceType(); + serviceType = gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0) + .getModelInfoServiceInstance().getServiceType(); } catch (Exception ex) { // keep default serviceType value } String vnfType = ASTERISK; try { - for(GenericVnf vnf : gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0).getVnfs()) { - if(vnf.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) { + for (GenericVnf vnf : gBBInput.getCustomer().getServiceSubscription().getServiceInstances().get(0) + .getVnfs()) { + if (vnf.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) { vnfType = vnf.getVnfType(); } } @@ -104,58 +108,85 @@ public class ExecuteBuildingBlockRainyDay { } catch (Exception ex) { // keep default errorCode value } + try { + errorCode = "" + (String) execution.getVariable("WorkflowExceptionCode"); + } catch (Exception ex) { + // keep default errorCode value + } + String workStep = ASTERISK; try { workStep = workflowException.getWorkStep(); } catch (Exception ex) { // keep default workStep value } - //Extract error data to be returned to WorkflowAction - execution.setVariable("WorkflowExceptionErrorMessage", workflowException.getErrorMessage()); + + try { + // Extract error data to be returned to WorkflowAction + execution.setVariable("WorkflowExceptionErrorMessage", workflowException.getErrorMessage()); + } catch (Exception e) { + msoLogger.error("No WorkflowException Found",e); + } RainyDayHandlerStatus rainyDayHandlerStatus; - rainyDayHandlerStatus = catalogDbClient.getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName,serviceType,vnfType,errorCode,workStep); - if(rainyDayHandlerStatus==null){ - rainyDayHandlerStatus = catalogDbClient.getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName,ASTERISK,ASTERISK,ASTERISK,ASTERISK); - if(rainyDayHandlerStatus==null){ + rainyDayHandlerStatus = catalogDbClient + .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName, + serviceType, vnfType, errorCode, workStep); + if (rainyDayHandlerStatus == null) { + rainyDayHandlerStatus = catalogDbClient + .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName, + ASTERISK, ASTERISK, errorCode, ASTERISK); + } + + if (rainyDayHandlerStatus == null) { + rainyDayHandlerStatus = catalogDbClient + .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(bbName, + ASTERISK, ASTERISK, ASTERISK, ASTERISK); + if (rainyDayHandlerStatus == null) { handlingCode = "Abort"; - }else{ - if(primaryPolicy){ + } else { + if (primaryPolicy) { handlingCode = rainyDayHandlerStatus.getPolicy(); - }else{ + } else { handlingCode = rainyDayHandlerStatus.getSecondaryPolicy(); } } - }else{ - if(primaryPolicy){ + } else { + if (primaryPolicy) { handlingCode = rainyDayHandlerStatus.getPolicy(); - }else{ + } else { handlingCode = rainyDayHandlerStatus.getSecondaryPolicy(); } } - if(!primaryPolicy){ - try{ + if (!primaryPolicy) { + try { InfraActiveRequests request = requestDbclient.getInfraActiveRequestbyRequestId(requestId); request.setRetryStatusMessage("Retries have been exhausted."); requestDbclient.updateInfraActiveRequests(request); - } catch(Exception ex){ - msoLogger.debug(ex.toString()); - msoLogger.error("Failed to update Request Db Infra Active Requests with Retry Status"); + } catch (Exception ex) { + msoLogger.error("Failed to update Request Db Infra Active Requests with Retry Status",ex); } } - if(handlingCode.equals("RollbackToAssigned")&&!aLaCarte){ + if (handlingCode.equals("RollbackToAssigned") && !aLaCarte) { handlingCode = "Rollback"; } } msoLogger.debug("RainyDayHandler Status Code is: " + handlingCode); execution.setVariable(HANDLING_CODE, handlingCode); } catch (Exception e) { - msoLogger.error("Failed to determine RainyDayHandler Status. Seting handlingCode = Abort"); String code = this.environment.getProperty(defaultCode); + msoLogger.error("Failed to determine RainyDayHandler Status. Seting handlingCode = "+ code, e); execution.setVariable(HANDLING_CODE, code); } + try{ + int envMaxRetries = Integer.parseInt(this.environment.getProperty(maxRetries)); + execution.setVariable("maxRetries", envMaxRetries); + } catch (Exception ex) { + msoLogger.error("Could not read maxRetries from config file. Setting max to 5 retries"); + execution.setVariable("maxRetries", 5); + } } - - public void setHandlingStatusSuccess(DelegateExecution execution){ + + public void setHandlingStatusSuccess(DelegateExecution execution) { execution.setVariable(HANDLING_CODE, "Success"); } } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java index 42da72528f..459ef66e5b 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java @@ -61,6 +61,34 @@ public class ExceptionBuilder { msg = msg.concat(exception.getMessage()); buildAndThrowWorkflowException(execution, errorCode, msg); } + + public void buildAndThrowWorkflowException(DelegateExecution execution, int errorCode, Exception exception) { + String msg = "Exception in %s.%s "; + try{ + msoLogger.error(exception); + + String errorVariable = "Error%s%s"; + + StackTraceElement[] trace = Thread.currentThread().getStackTrace(); + for (StackTraceElement traceElement : trace) { + if (!traceElement.getClassName().equals(this.getClass().getName()) && !traceElement.getClassName().equals(Thread.class.getName())) { + msg = String.format(msg, traceElement.getClassName(), traceElement.getMethodName()); + String shortClassName = traceElement.getClassName().substring(traceElement.getClassName().lastIndexOf(".") + 1); + errorVariable = String.format(errorVariable, shortClassName, traceElement.getMethodName()); + break; + } + } + msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, msg, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, msg.toString()); + execution.setVariable(errorVariable, exception.getMessage()); + } catch (Exception ex){ + //log trace, allow process to complete gracefully + msoLogger.error(ex); + } + + if (exception.getMessage() != null) + msg = msg.concat(exception.getMessage()); + buildAndThrowWorkflowException(execution, errorCode, msg); + } public void buildAndThrowWorkflowException(BuildingBlockExecution execution, int errorCode, String errorMessage) { if (execution instanceof DelegateExecutionImpl) { @@ -74,10 +102,16 @@ public class ExceptionBuilder { WorkflowException exception = new WorkflowException(processKey, errorCode, errorMessage); execution.setVariable("WorkflowException", exception); + execution.setVariable("WorkflowExceptionErrorMessage", errorMessage); msoLogger.info("Outgoing WorkflowException is " + exception); msoLogger.info("Throwing MSOWorkflowException"); throw new BpmnError("MSOWorkflowException"); } + + public void buildAndThrowWorkflowException(DelegateExecution execution, String errorCode, String errorMessage) { + execution.setVariable("WorkflowExceptionErrorMessage", errorMessage); + throw new BpmnError(errorCode,errorMessage); + } public String getProcessKey(DelegateExecution execution) { String testKey = (String) execution.getVariable("testProcessKey"); diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtilsTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtilsTest.groovy index 3da126f7a9..97db9775c9 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtilsTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtilsTest.groovy @@ -34,9 +34,9 @@ import org.onap.so.client.aai.entities.uri.AAIUriFactory import javax.ws.rs.core.UriBuilder import static org.junit.Assert.assertEquals import static org.junit.Assert.assertTrue -import static org.mockito.Matchers.any -import static org.mockito.Matchers.anyObject -import static org.mockito.Matchers.isA +import static org.mockito.ArgumentMatchers.any +import static org.mockito.ArgumentMatchers.anyObject +import static org.mockito.ArgumentMatchers.isA import static org.mockito.Mockito.atLeastOnce import static org.mockito.Mockito.doNothing import static org.mockito.Mockito.doThrow diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CompleteMsoProcessTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CompleteMsoProcessTest.groovy index 70068c849b..99c351c465 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CompleteMsoProcessTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CompleteMsoProcessTest.groovy @@ -33,7 +33,7 @@ import org.onap.so.bpmn.core.WorkflowException import static org.assertj.core.api.Assertions.assertThat import static org.assertj.core.api.Assertions.assertThatThrownBy -import static org.mockito.Matchers.eq +import static org.mockito.ArgumentMatchers.eq import static org.mockito.Mockito.* @RunWith(MockitoJUnitRunner.class) diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModuleTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModuleTest.groovy index 55f68f665e..dac038fab3 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModuleTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/CreateAAIVfModuleTest.groovy @@ -97,7 +97,7 @@ class CreateAAIVfModuleTest extends MsoGroovyTest{ @Test void testCreateGenericVnf(){ when(mockExecution.getVariable("CAAIVfMod_vnfName")).thenReturn("vnfName") - Mockito.doNothing().when(client).create(any(AAIResourceUri.class),anyObject()) + Mockito.doNothing().when(client).create(any(AAIResourceUri.class) as AAIResourceUri,anyObject()) createAAIVfModule.createGenericVnf(mockExecution) Mockito.verify(mockExecution).setVariable("CAAIVfMod_createGenericVnfResponseCode", 201) Mockito.verify(mockExecution).setVariable("CAAIVfMod_createGenericVnfResponse","Vnf Created") @@ -112,7 +112,7 @@ class CreateAAIVfModuleTest extends MsoGroovyTest{ when(mockExecution.getVariable("CAAIVfMod_personaId")).thenReturn("model1") when(mockExecution.getVariable("CAAIVfMod_moduleName")).thenReturn("vfModuleName") - Mockito.doNothing().when(client).create(any(AAIResourceUri.class),anyObject()) + Mockito.doNothing().when(client).create(any(AAIResourceUri.class) as AAIResourceUri,anyObject()) createAAIVfModule.createVfModule(mockExecution,false) Mockito.verify(mockExecution).setVariable("CAAIVfMod_createVfModuleResponseCode", 201) Mockito.verify(mockExecution).setVariable("CAAIVfMod_createVfModuleResponse","Vf Module Created") @@ -173,7 +173,7 @@ class CreateAAIVfModuleTest extends MsoGroovyTest{ Optional<GenericVnf> genericVnf = getAAIObjectFromJson(GenericVnf.class,"__files/aai/GenericVnfVfModule.json"); when(mockExecution.getVariable("CAAIVfMod_queryGenericVnfResponse")).thenReturn(genericVnf.get()) when(mockExecution.getVariable("CAAIVfMod_moduleName")).thenReturn("vfModuleName") - Mockito.doNothing().when(client).create(any(AAIResourceUri.class),anyObject()) + Mockito.doNothing().when(client).create(any(AAIResourceUri.class) as AAIResourceUri,anyObject()) createAAIVfModule.createVfModule(mockExecution,true) Mockito.verify(mockExecution).setVariable("CAAIVfMod_createVfModuleResponseCode", 201) Mockito.verify(mockExecution).setVariable("CAAIVfMod_createVfModuleResponse","Vf Module Created") diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/DeleteAAIVfModuleTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/DeleteAAIVfModuleTest.groovy index 4b6f8aa918..2a872511e7 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/DeleteAAIVfModuleTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/DeleteAAIVfModuleTest.groovy @@ -92,7 +92,7 @@ class DeleteAAIVfModuleTest extends MsoGroovyTest{ void testDeleteGenericVnf() { ExecutionEntity mockExecution = setupMock() when(mockExecution.getVariable("DAAIVfMod_vnfId")).thenReturn("vnfId1") - doNothing().when(client).delete(isA(AAIResourceUri.class)) + doNothing().when(client).delete(isA(AAIResourceUri.class) as AAIResourceUri) deleteAAIVfModule.deleteGenericVnf(mockExecution) Mockito.verify(mockExecution).setVariable(prefix + "deleteGenericVnfResponseCode", 200) } @@ -169,7 +169,7 @@ class DeleteAAIVfModuleTest extends MsoGroovyTest{ ExecutionEntity mockExecution = setupMock() when(mockExecution.getVariable("DAAIVfMod_vnfId")).thenReturn("vnfId1") try { - doThrow(new NotFoundException("Vnf Not Found")).when(client).delete(isA(AAIResourceUri.class)) + doThrow(new NotFoundException("Vnf Not Found")).when(client).delete(isA(AAIResourceUri.class) as AAIResourceUri) deleteAAIVfModule.deleteGenericVnf(mockExecution) } catch (Exception ex) { println " Test End - Handle catch-throw BpmnError()! " @@ -186,7 +186,7 @@ class DeleteAAIVfModuleTest extends MsoGroovyTest{ ExecutionEntity mockExecution = setupMock() when(mockExecution.getVariable("DAAIVfMod_vnfId")).thenReturn("vnfId1") when(mockExecution.getVariable("DAAIVfMod_vfModuleId")).thenReturn("vfModuleId1") - doNothing().when(client).delete(isA(AAIResourceUri.class)) + doNothing().when(client).delete(isA(AAIResourceUri.class) as AAIResourceUri) deleteAAIVfModule.deleteVfModule(mockExecution) Mockito.verify(mockExecution).setVariable(prefix + "deleteVfModuleResponseCode", 200) } @@ -197,7 +197,7 @@ class DeleteAAIVfModuleTest extends MsoGroovyTest{ when(mockExecution.getVariable("DAAIVfMod_vnfId")).thenReturn("vnfId1") when(mockExecution.getVariable("DAAIVfMod_vfModuleId")).thenReturn("vfModuleId1") try { - doThrow(new NotFoundException("Vnf Not Found")).when(client).delete(isA(AAIResourceUri.class)) + doThrow(new NotFoundException("Vnf Not Found")).when(client).delete(isA(AAIResourceUri.class) as AAIResourceUri) deleteAAIVfModule.deleteVfModule(mockExecution) } catch (Exception ex) { println " Test End - Handle catch-throw BpmnError()! " diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/MsoUtilsTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/MsoUtilsTest.groovy index dfaf5d2140..c6a68c0e7a 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/MsoUtilsTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/MsoUtilsTest.groovy @@ -277,5 +277,13 @@ class MsoUtilsTest { } } - + @Test + public void testGetLowestUnusedIndex() { + def responseAsString = getFile("vfModuleCount.xml") + def index = utils.getLowestUnusedIndex(responseAsString) + println " lowest module count test: " + println " actual - " + index + println " expected - " + "14" + assertEquals("expected vs actual", "14", index) + } }
\ No newline at end of file diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/UpdateAAIGenericVnfTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/UpdateAAIGenericVnfTest.groovy index 5641c5e12f..2bd5181c31 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/UpdateAAIGenericVnfTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/UpdateAAIGenericVnfTest.groovy @@ -40,8 +40,8 @@ import org.onap.so.bpmn.mock.FileUtil import org.onap.so.bpmn.mock.StubResponseAAI import static com.github.tomakehurst.wiremock.client.WireMock.* -import static org.mockito.Matchers.any -import static org.mockito.Matchers.refEq +import static org.mockito.ArgumentMatchers.any +import static org.mockito.ArgumentMatchers.refEq import static org.mockito.Mockito.* @RunWith(MockitoJUnitRunner.class) diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/UpdateAAIVfModuleTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/UpdateAAIVfModuleTest.groovy index 2d2f58b415..72bcfcf359 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/UpdateAAIVfModuleTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/UpdateAAIVfModuleTest.groovy @@ -111,7 +111,7 @@ class UpdateAAIVfModuleTest extends MsoGroovyTest { vfModule.setVfModuleId("supercool") vfModule.setResourceVersion("12345") when(mockExecution.getVariable(prefix + "getVfModuleResponse")).thenReturn(vfModule) - doNothing().when(client).update(isA(AAIResourceUri.class), anyObject()) + doNothing().when(client).update(isA(AAIResourceUri.class) as AAIResourceUri, anyObject()) updateAAIVfModule.updateVfModule(mockExecution) verify(mockExecution).setVariable("UAAIVfMod_updateVfModuleResponseCode", 200) } @@ -126,7 +126,7 @@ class UpdateAAIVfModuleTest extends MsoGroovyTest { vfModule.setVfModuleId("supercool") vfModule.setResourceVersion("12345") when(mockExecution.getVariable(prefix + "getVfModuleResponse")).thenReturn(vfModule) - doThrow(new NotFoundException("Vf Module not found")).when(client).update(isA(AAIResourceUri.class), anyObject()) + doThrow(new NotFoundException("Vf Module not found")).when(client).update(isA(AAIResourceUri.class) as AAIResourceUri, anyObject()) thrown.expect(BpmnError.class) updateAAIVfModule.updateVfModule(mockExecution) verify(mockExecution).setVariable("UAAIVfMod_updateVfModuleResponseCode", 404) @@ -143,7 +143,7 @@ class UpdateAAIVfModuleTest extends MsoGroovyTest { vfModule.setVfModuleId("supercool") vfModule.setResourceVersion("12345") when(mockExecution.getVariable(prefix + "getVfModuleResponse")).thenReturn(vfModule) - doThrow(new IllegalStateException("Error in AAI client")).when(client).update(isA(AAIResourceUri.class), anyObject()) + doThrow(new IllegalStateException("Error in AAI client")).when(client).update(isA(AAIResourceUri.class) as AAIResourceUri, anyObject()) thrown.expect(BpmnError.class) updateAAIVfModule.updateVfModule(mockExecution) verify(mockExecution).setVariable("UAAIVfMod_updateVfModuleResponseCode", 500) diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/DelegateExecutionImplTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/DelegateExecutionImplTest.java index cf74356fa2..32a18d5a7a 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/DelegateExecutionImplTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/DelegateExecutionImplTest.java @@ -25,7 +25,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; -import static org.mockito.Matchers.contains; +import static org.mockito.ArgumentMatchers.contains; import static org.mockito.Mockito.mock; import java.io.Serializable; diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilderTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilderTest.java index 5598e3d2e4..e5e13268b2 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilderTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilderTest.java @@ -19,24 +19,390 @@ */ package org.onap.so.bpmn.common.resource; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.onap.so.BaseTest; +import org.onap.so.bpmn.core.UrnPropertiesReader; +import org.springframework.core.env.Environment; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; + -public class ResourceRequestBuilderTest { +public class ResourceRequestBuilderTest extends BaseTest { @Test - public void buildResouceRequestTest() throws Exception { + public void getResourceInputTest() throws Exception { - ResourceRequestBuilder.buildResouceRequest("xxxxxx", - "a1074969-944f-4ddc-b687-9550b0c8cd57", new HashMap<>()); + + + stubFor(get(urlEqualTo("/ecomp/mso/catalog/v2/serviceResources?serviceModelUuid=c3954379-4efe-431c-8258-f84905b158e5")) + .willReturn(ok("{ \"serviceResources\" : {\n" + + "\t\"modelInfo\" : {\n" + + "\t\t\"modelName\" : \"demoVFWCL\",\n" + + "\t\t\"modelUuid\" : \"c3954379-4efe-431c-8258-f84905b158e5\",\n" + + "\t\t\"modelInvariantUuid\" : \"0cbff61e-3b0a-4eed-97ce-b1b4faa03493\",\n" + + "\t\t\"modelVersion\" : \"1.0\"\n" + + "\t},\n" + + "\t\"serviceType\" : \"\",\n" + + "\t\"serviceRole\" : \"\",\n" + + "\t\"environmentContext\" : null,\n" + + "\t\"resourceOrder\" : \"res1,res2\",\n" + + "\t\"workloadContext\" : \"Production\",\n" + + "\t\"serviceVnfs\": [\n" + + "\t\n" + + "\t\t{ \"modelInfo\" : {\n" + + "\t\t\t\"modelName\" : \"15968a6e-2fe5-41bf-a481\",\n" + + "\t\t\t\"modelUuid\" : \"808abda3-2023-4105-92d2-e62644b61d53\",\n" + + "\t\t\t\"modelInvariantUuid\" : \"6e4ffc7c-497e-4a77-970d-af966e642d31\",\n" + + "\t\t\t\"modelVersion\" : \"1.0\",\n" + + "\t\t\t\"modelCustomizationUuid\" : \"a00404d5-d7eb-4c46-b6b6-9cf2d087e545\",\n" + + "\t\t\t\"modelInstanceName\" : \"15968a6e-2fe5-41bf-a481 0\"\n" + + "\t\t\t},\n" + + "\t\t\"toscaNodeType\" : \"org.openecomp.resource.vf.15968a6e2fe541bfA481\",\n" + + "\t\t\"nfFunction\" \t: null,\n" + + "\"resourceInput\":\"{\\\"a\\\":\\\"b\\\"}\"," + + "\t\t\"nfType\" \t\t: null,\n" + + "\t\t\"nfRole\" \t\t: null,\n" + + "\t\t\"nfNamingCode\" \t: null,\n" + + "\t\t\"multiStageDesign\" : \"false\",\n" + + "\t\t\t\"vfModules\": [\n" + + "\t\t\t\t{\n" + + "\t\t\t\t\t\"modelInfo\" : { \n" + + "\t\t\t\t\t\t\"modelName\" : \"15968a6e2fe541bfA481..base_vfw..module-0\",\n" + + "\t\t\t\t\t\t\"modelUuid\" : \"ec7fadde-1e5a-42f7-8255-cb19e475ff45\",\n" + + "\t\t\t\t\t\t\"modelInvariantUuid\" : \"61ab8b64-a014-4cf3-8a5a-b5ef388f8819\",\n" + + "\t\t\t\t\t\t\"modelVersion\" : \"1\",\n" + + "\t\t\t\t\t\t\"modelCustomizationUuid\" : \"123aff6b-854f-4026-ae1e-cc74a3924576\"\n" + + "\t\t\t\t\t},\t\t\"isBase\" : true,\n" + + "\t\t\t\t\t\"vfModuleLabel\" : \"base_vfw\",\n" + + "\t\t\t\t\t\"initialCount\" : 1,\n" + + "\t\t\t\t\t\"hasVolumeGroup\" : true\n" + + "\t\t\t\t}\n" + + "\t\t\t]\n" + + "\t\t},\n" + + "\t\n" + + "\t\t{ \"modelInfo\" : {\n" + + "\t\t\t\"modelName\" : \"f971106a-248f-4202-9d1f\",\n" + + "\t\t\t\"modelUuid\" : \"4fbc08a4-35ed-4a59-9e47-79975e4add7e\",\n" + + "\t\t\t\"modelInvariantUuid\" : \"c669799e-adf1-46ae-8c70-48b326fe89f3\",\n" + + "\t\t\t\"modelVersion\" : \"1.0\",\n" + + "\t\t\t\"modelCustomizationUuid\" : \"e776449e-2b10-45c5-9217-2775c88ca1a0\",\n" + + "\t\t\t\"modelInstanceName\" : \"f971106a-248f-4202-9d1f 0\"\n" + + "\t\t\t},\n" + + "\t\t\"toscaNodeType\" : \"org.openecomp.resource.vf.F971106a248f42029d1f\",\n" + + "\t\t\"nfFunction\" \t: null,\n" + + "\t\t\"nfType\" \t\t: null,\n" + + "\t\t\"nfRole\" \t\t: null,\n" + + "\"resourceInput\":\"{\\\"a\\\":\\\"key|default_value\\\"}\"," + + "\t\t\"nfNamingCode\" \t: null,\n" + + "\t\t\"multiStageDesign\" : \"false\",\n" + + "\t\t\t\"vfModules\": [\n" + + "\t\t\t\t{\n" + + "\t\t\t\t\t\"modelInfo\" : { \n" + + "\t\t\t\t\t\t\"modelName\" : \"F971106a248f42029d1f..base_vpkg..module-0\",\n" + + "\t\t\t\t\t\t\"modelUuid\" : \"47d5273a-7456-4786-9035-b3911944cc35\",\n" + + "\t\t\t\t\t\t\"modelInvariantUuid\" : \"0ea3e57e-ac7a-425a-928b-b4aee8806c15\",\n" + + "\t\t\t\t\t\t\"modelVersion\" : \"1\",\n" + + "\t\t\t\t\t\t\"modelCustomizationUuid\" : \"9ed9fef6-d3f8-4433-9807-7e23393a16bc\"\n" + + "\t\t\t\t\t},\t\t\"isBase\" : true,\n" + + "\t\t\t\t\t\"vfModuleLabel\" : \"base_vpkg\",\n" + + "\t\t\t\t\t\"initialCount\" : 1,\n" + + "\t\t\t\t\t\"hasVolumeGroup\" : true\n" + + "\t\t\t\t}\n" + + "\t\t\t]\n" + + "\t\t}\n" + + "\t],\n" + + "\t\"serviceNetworks\": [],\n" + + "\t\"serviceAllottedResources\": []\n" + + "\t}}"))); + +// when(UrnPropertiesReader.getVariable(anyString())).thenReturn("http://localhost:8080"); + HashMap serviceInput = new HashMap(); + serviceInput.put("key", "value"); + Map<String, Object> stringObjectMap = ResourceRequestBuilder.buildResouceRequest("c3954379-4efe-431c-8258-f84905b158e5", + "e776449e-2b10-45c5-9217-2775c88ca1a0", serviceInput); + assertEquals(stringObjectMap.get("a"), "value"); } @Test - public void buildResouceRequestParametersTest() throws Exception { + public void getResourceInputDefaultValueTest() throws Exception { + + stubFor(get(urlEqualTo("/ecomp/mso/catalog/v2/serviceResources?serviceModelUuid=c3954379-4efe-431c-8258-f84905b158e5")) + .willReturn(ok("{ \"serviceResources\" : {\n" + + "\t\"modelInfo\" : {\n" + + "\t\t\"modelName\" : \"demoVFWCL\",\n" + + "\t\t\"modelUuid\" : \"c3954379-4efe-431c-8258-f84905b158e5\",\n" + + "\t\t\"modelInvariantUuid\" : \"0cbff61e-3b0a-4eed-97ce-b1b4faa03493\",\n" + + "\t\t\"modelVersion\" : \"1.0\"\n" + + "\t},\n" + + "\t\"serviceType\" : \"\",\n" + + "\t\"serviceRole\" : \"\",\n" + + "\t\"environmentContext\" : null,\n" + + "\t\"workloadContext\" : \"Production\",\n" + + "\t\"serviceVnfs\": [\n" + + "\t\n" + + "\t\t{ \"modelInfo\" : {\n" + + "\t\t\t\"modelName\" : \"15968a6e-2fe5-41bf-a481\",\n" + + "\t\t\t\"modelUuid\" : \"808abda3-2023-4105-92d2-e62644b61d53\",\n" + + "\t\t\t\"modelInvariantUuid\" : \"6e4ffc7c-497e-4a77-970d-af966e642d31\",\n" + + "\t\t\t\"modelVersion\" : \"1.0\",\n" + + "\t\t\t\"modelCustomizationUuid\" : \"a00404d5-d7eb-4c46-b6b6-9cf2d087e545\",\n" + + "\t\t\t\"modelInstanceName\" : \"15968a6e-2fe5-41bf-a481 0\"\n" + + "\t\t\t},\n" + + "\t\t\"toscaNodeType\" : \"org.openecomp.resource.vf.15968a6e2fe541bfA481\",\n" + + "\t\t\"nfFunction\" \t: null,\n" + + "\"resourceInput\":\"{\\\"a\\\":\\\"b\\\"}\"," + + "\t\t\"nfType\" \t\t: null,\n" + + "\t\t\"nfRole\" \t\t: null,\n" + + "\t\t\"nfNamingCode\" \t: null,\n" + + "\t\t\"multiStageDesign\" : \"false\",\n" + + "\t\t\t\"vfModules\": [\n" + + "\t\t\t\t{\n" + + "\t\t\t\t\t\"modelInfo\" : { \n" + + "\t\t\t\t\t\t\"modelName\" : \"15968a6e2fe541bfA481..base_vfw..module-0\",\n" + + "\t\t\t\t\t\t\"modelUuid\" : \"ec7fadde-1e5a-42f7-8255-cb19e475ff45\",\n" + + "\t\t\t\t\t\t\"modelInvariantUuid\" : \"61ab8b64-a014-4cf3-8a5a-b5ef388f8819\",\n" + + "\t\t\t\t\t\t\"modelVersion\" : \"1\",\n" + + "\t\t\t\t\t\t\"modelCustomizationUuid\" : \"123aff6b-854f-4026-ae1e-cc74a3924576\"\n" + + "\t\t\t\t\t},\t\t\"isBase\" : true,\n" + + "\t\t\t\t\t\"vfModuleLabel\" : \"base_vfw\",\n" + + "\t\t\t\t\t\"initialCount\" : 1,\n" + + "\t\t\t\t\t\"hasVolumeGroup\" : true\n" + + "\t\t\t\t}\n" + + "\t\t\t]\n" + + "\t\t},\n" + + "\t\n" + + "\t\t{ \"modelInfo\" : {\n" + + "\t\t\t\"modelName\" : \"f971106a-248f-4202-9d1f\",\n" + + "\t\t\t\"modelUuid\" : \"4fbc08a4-35ed-4a59-9e47-79975e4add7e\",\n" + + "\t\t\t\"modelInvariantUuid\" : \"c669799e-adf1-46ae-8c70-48b326fe89f3\",\n" + + "\t\t\t\"modelVersion\" : \"1.0\",\n" + + "\t\t\t\"modelCustomizationUuid\" : \"e776449e-2b10-45c5-9217-2775c88ca1a0\",\n" + + "\t\t\t\"modelInstanceName\" : \"f971106a-248f-4202-9d1f 0\"\n" + + "\t\t\t},\n" + + "\t\t\"toscaNodeType\" : \"org.openecomp.resource.vf.F971106a248f42029d1f\",\n" + + "\t\t\"nfFunction\" \t: null,\n" + + "\t\t\"nfType\" \t\t: null,\n" + + "\t\t\"nfRole\" \t\t: null,\n" + + "\"resourceInput\":\"{\\\"a\\\":\\\"key|default_value\\\"}\"," + + "\t\t\"nfNamingCode\" \t: null,\n" + + "\t\t\"multiStageDesign\" : \"false\",\n" + + "\t\t\t\"vfModules\": [\n" + + "\t\t\t\t{\n" + + "\t\t\t\t\t\"modelInfo\" : { \n" + + "\t\t\t\t\t\t\"modelName\" : \"F971106a248f42029d1f..base_vpkg..module-0\",\n" + + "\t\t\t\t\t\t\"modelUuid\" : \"47d5273a-7456-4786-9035-b3911944cc35\",\n" + + "\t\t\t\t\t\t\"modelInvariantUuid\" : \"0ea3e57e-ac7a-425a-928b-b4aee8806c15\",\n" + + "\t\t\t\t\t\t\"modelVersion\" : \"1\",\n" + + "\t\t\t\t\t\t\"modelCustomizationUuid\" : \"9ed9fef6-d3f8-4433-9807-7e23393a16bc\"\n" + + "\t\t\t\t\t},\t\t\"isBase\" : true,\n" + + "\t\t\t\t\t\"vfModuleLabel\" : \"base_vpkg\",\n" + + "\t\t\t\t\t\"initialCount\" : 1,\n" + + "\t\t\t\t\t\"hasVolumeGroup\" : true\n" + + "\t\t\t\t}\n" + + "\t\t\t]\n" + + "\t\t}\n" + + "\t],\n" + + "\t\"serviceNetworks\": [],\n" + + "\t\"serviceAllottedResources\": []\n" + + "\t}}"))); + +// when(UrnPropertiesReader.getVariable(anyString())).thenReturn("http://localhost:8080"); + HashMap serviceInput = new HashMap(); + serviceInput.put("key1", "value"); + Map<String, Object> stringObjectMap = ResourceRequestBuilder.buildResouceRequest("c3954379-4efe-431c-8258-f84905b158e5", + "e776449e-2b10-45c5-9217-2775c88ca1a0", serviceInput); + assertEquals(stringObjectMap.get("a"), "default_value"); + } + + @Test + public void getResourceInputValueNoDefaultTest() throws Exception { + + stubFor(get(urlEqualTo("/ecomp/mso/catalog/v2/serviceResources?serviceModelUuid=c3954379-4efe-431c-8258-f84905b158e5")) + .willReturn(ok("{ \"serviceResources\" : {\n" + + "\t\"modelInfo\" : {\n" + + "\t\t\"modelName\" : \"demoVFWCL\",\n" + + "\t\t\"modelUuid\" : \"c3954379-4efe-431c-8258-f84905b158e5\",\n" + + "\t\t\"modelInvariantUuid\" : \"0cbff61e-3b0a-4eed-97ce-b1b4faa03493\",\n" + + "\t\t\"modelVersion\" : \"1.0\"\n" + + "\t},\n" + + "\t\"serviceType\" : \"\",\n" + + "\t\"serviceRole\" : \"\",\n" + + "\t\"environmentContext\" : null,\n" + + "\t\"workloadContext\" : \"Production\",\n" + + "\t\"serviceVnfs\": [\n" + + "\t\n" + + "\t\t{ \"modelInfo\" : {\n" + + "\t\t\t\"modelName\" : \"15968a6e-2fe5-41bf-a481\",\n" + + "\t\t\t\"modelUuid\" : \"808abda3-2023-4105-92d2-e62644b61d53\",\n" + + "\t\t\t\"modelInvariantUuid\" : \"6e4ffc7c-497e-4a77-970d-af966e642d31\",\n" + + "\t\t\t\"modelVersion\" : \"1.0\",\n" + + "\t\t\t\"modelCustomizationUuid\" : \"a00404d5-d7eb-4c46-b6b6-9cf2d087e545\",\n" + + "\t\t\t\"modelInstanceName\" : \"15968a6e-2fe5-41bf-a481 0\"\n" + + "\t\t\t},\n" + + "\t\t\"toscaNodeType\" : \"org.openecomp.resource.vf.15968a6e2fe541bfA481\",\n" + + "\t\t\"nfFunction\" \t: null,\n" + + "\"resourceInput\":\"{\\\"a\\\":\\\"b\\\"}\"," + + "\t\t\"nfType\" \t\t: null,\n" + + "\t\t\"nfRole\" \t\t: null,\n" + + "\t\t\"nfNamingCode\" \t: null,\n" + + "\t\t\"multiStageDesign\" : \"false\",\n" + + "\t\t\t\"vfModules\": [\n" + + "\t\t\t\t{\n" + + "\t\t\t\t\t\"modelInfo\" : { \n" + + "\t\t\t\t\t\t\"modelName\" : \"15968a6e2fe541bfA481..base_vfw..module-0\",\n" + + "\t\t\t\t\t\t\"modelUuid\" : \"ec7fadde-1e5a-42f7-8255-cb19e475ff45\",\n" + + "\t\t\t\t\t\t\"modelInvariantUuid\" : \"61ab8b64-a014-4cf3-8a5a-b5ef388f8819\",\n" + + "\t\t\t\t\t\t\"modelVersion\" : \"1\",\n" + + "\t\t\t\t\t\t\"modelCustomizationUuid\" : \"123aff6b-854f-4026-ae1e-cc74a3924576\"\n" + + "\t\t\t\t\t},\t\t\"isBase\" : true,\n" + + "\t\t\t\t\t\"vfModuleLabel\" : \"base_vfw\",\n" + + "\t\t\t\t\t\"initialCount\" : 1,\n" + + "\t\t\t\t\t\"hasVolumeGroup\" : true\n" + + "\t\t\t\t}\n" + + "\t\t\t]\n" + + "\t\t},\n" + + "\t\n" + + "\t\t{ \"modelInfo\" : {\n" + + "\t\t\t\"modelName\" : \"f971106a-248f-4202-9d1f\",\n" + + "\t\t\t\"modelUuid\" : \"4fbc08a4-35ed-4a59-9e47-79975e4add7e\",\n" + + "\t\t\t\"modelInvariantUuid\" : \"c669799e-adf1-46ae-8c70-48b326fe89f3\",\n" + + "\t\t\t\"modelVersion\" : \"1.0\",\n" + + "\t\t\t\"modelCustomizationUuid\" : \"e776449e-2b10-45c5-9217-2775c88ca1a0\",\n" + + "\t\t\t\"modelInstanceName\" : \"f971106a-248f-4202-9d1f 0\"\n" + + "\t\t\t},\n" + + "\t\t\"toscaNodeType\" : \"org.openecomp.resource.vf.F971106a248f42029d1f\",\n" + + "\t\t\"nfFunction\" \t: null,\n" + + "\t\t\"nfType\" \t\t: null,\n" + + "\t\t\"nfRole\" \t\t: null,\n" + + "\"resourceInput\":\"{\\\"a\\\":\\\"value\\\"}\"," + + "\t\t\"nfNamingCode\" \t: null,\n" + + "\t\t\"multiStageDesign\" : \"false\",\n" + + "\t\t\t\"vfModules\": [\n" + + "\t\t\t\t{\n" + + "\t\t\t\t\t\"modelInfo\" : { \n" + + "\t\t\t\t\t\t\"modelName\" : \"F971106a248f42029d1f..base_vpkg..module-0\",\n" + + "\t\t\t\t\t\t\"modelUuid\" : \"47d5273a-7456-4786-9035-b3911944cc35\",\n" + + "\t\t\t\t\t\t\"modelInvariantUuid\" : \"0ea3e57e-ac7a-425a-928b-b4aee8806c15\",\n" + + "\t\t\t\t\t\t\"modelVersion\" : \"1\",\n" + + "\t\t\t\t\t\t\"modelCustomizationUuid\" : \"9ed9fef6-d3f8-4433-9807-7e23393a16bc\"\n" + + "\t\t\t\t\t},\t\t\"isBase\" : true,\n" + + "\t\t\t\t\t\"vfModuleLabel\" : \"base_vpkg\",\n" + + "\t\t\t\t\t\"initialCount\" : 1,\n" + + "\t\t\t\t\t\"hasVolumeGroup\" : true\n" + + "\t\t\t\t}\n" + + "\t\t\t]\n" + + "\t\t}\n" + + "\t],\n" + + "\t\"serviceNetworks\": [],\n" + + "\t\"serviceAllottedResources\": []\n" + + "\t}}"))); + +// when(UrnPropertiesReader.getVariable(anyString())).thenReturn("http://localhost:8080"); + HashMap serviceInput = new HashMap(); + serviceInput.put("key1", "value"); + Map<String, Object> stringObjectMap = ResourceRequestBuilder.buildResouceRequest("c3954379-4efe-431c-8258-f84905b158e5", + "e776449e-2b10-45c5-9217-2775c88ca1a0", serviceInput); + assertEquals(stringObjectMap.get("a"), "value"); + } + + @Test + public void getResourceSequenceTest() throws Exception { + + stubFor(get(urlEqualTo("/ecomp/mso/catalog/v2/serviceResources?serviceModelUuid=c3954379-4efe-431c-8258-f84905b158e5")) + .willReturn(ok("{ \"serviceResources\" : {\n" + + "\t\"modelInfo\" : {\n" + + "\t\t\"modelName\" : \"demoVFWCL\",\n" + + "\t\t\"modelUuid\" : \"c3954379-4efe-431c-8258-f84905b158e5\",\n" + + "\t\t\"modelInvariantUuid\" : \"0cbff61e-3b0a-4eed-97ce-b1b4faa03493\",\n" + + "\t\t\"modelVersion\" : \"1.0\"\n" + + "\t},\n" + + "\t\"serviceType\" : \"\",\n" + + "\t\"serviceRole\" : \"\",\n" + + "\t\"environmentContext\" : null,\n" + + "\t\"resourceOrder\" : \"res1,res2\",\n" + + "\t\"workloadContext\" : \"Production\",\n" + + "\t\"serviceVnfs\": [\n" + + "\t\n" + + "\t\t{ \"modelInfo\" : {\n" + + "\t\t\t\"modelName\" : \"15968a6e-2fe5-41bf-a481\",\n" + + "\t\t\t\"modelUuid\" : \"808abda3-2023-4105-92d2-e62644b61d53\",\n" + + "\t\t\t\"modelInvariantUuid\" : \"6e4ffc7c-497e-4a77-970d-af966e642d31\",\n" + + "\t\t\t\"modelVersion\" : \"1.0\",\n" + + "\t\t\t\"modelCustomizationUuid\" : \"a00404d5-d7eb-4c46-b6b6-9cf2d087e545\",\n" + + "\t\t\t\"modelInstanceName\" : \"15968a6e-2fe5-41bf-a481 0\"\n" + + "\t\t\t},\n" + + "\t\t\"toscaNodeType\" : \"org.openecomp.resource.vf.15968a6e2fe541bfA481\",\n" + + "\t\t\"nfFunction\" \t: null,\n" + + "\"resourceInput\":\"{\\\"a\\\":\\\"b\\\"}\"," + + "\t\t\"nfType\" \t\t: null,\n" + + "\t\t\"nfRole\" \t\t: null,\n" + + "\t\t\"nfNamingCode\" \t: null,\n" + + "\t\t\"multiStageDesign\" : \"false\",\n" + + "\t\t\t\"vfModules\": [\n" + + "\t\t\t\t{\n" + + "\t\t\t\t\t\"modelInfo\" : { \n" + + "\t\t\t\t\t\t\"modelName\" : \"15968a6e2fe541bfA481..base_vfw..module-0\",\n" + + "\t\t\t\t\t\t\"modelUuid\" : \"ec7fadde-1e5a-42f7-8255-cb19e475ff45\",\n" + + "\t\t\t\t\t\t\"modelInvariantUuid\" : \"61ab8b64-a014-4cf3-8a5a-b5ef388f8819\",\n" + + "\t\t\t\t\t\t\"modelVersion\" : \"1\",\n" + + "\t\t\t\t\t\t\"modelCustomizationUuid\" : \"123aff6b-854f-4026-ae1e-cc74a3924576\"\n" + + "\t\t\t\t\t},\t\t\"isBase\" : true,\n" + + "\t\t\t\t\t\"vfModuleLabel\" : \"base_vfw\",\n" + + "\t\t\t\t\t\"initialCount\" : 1,\n" + + "\t\t\t\t\t\"hasVolumeGroup\" : true\n" + + "\t\t\t\t}\n" + + "\t\t\t]\n" + + "\t\t},\n" + + "\t\n" + + "\t\t{ \"modelInfo\" : {\n" + + "\t\t\t\"modelName\" : \"f971106a-248f-4202-9d1f\",\n" + + "\t\t\t\"modelUuid\" : \"4fbc08a4-35ed-4a59-9e47-79975e4add7e\",\n" + + "\t\t\t\"modelInvariantUuid\" : \"c669799e-adf1-46ae-8c70-48b326fe89f3\",\n" + + "\t\t\t\"modelVersion\" : \"1.0\",\n" + + "\t\t\t\"modelCustomizationUuid\" : \"e776449e-2b10-45c5-9217-2775c88ca1a0\",\n" + + "\t\t\t\"modelInstanceName\" : \"f971106a-248f-4202-9d1f 0\"\n" + + "\t\t\t},\n" + + "\t\t\"toscaNodeType\" : \"org.openecomp.resource.vf.F971106a248f42029d1f\",\n" + + "\t\t\"nfFunction\" \t: null,\n" + + "\t\t\"nfType\" \t\t: null,\n" + + "\t\t\"nfRole\" \t\t: null,\n" + + "\"resourceInput\":\"{\\\"a\\\":\\\"key|default_value\\\"}\"," + + "\t\t\"nfNamingCode\" \t: null,\n" + + "\t\t\"multiStageDesign\" : \"false\",\n" + + "\t\t\t\"vfModules\": [\n" + + "\t\t\t\t{\n" + + "\t\t\t\t\t\"modelInfo\" : { \n" + + "\t\t\t\t\t\t\"modelName\" : \"F971106a248f42029d1f..base_vpkg..module-0\",\n" + + "\t\t\t\t\t\t\"modelUuid\" : \"47d5273a-7456-4786-9035-b3911944cc35\",\n" + + "\t\t\t\t\t\t\"modelInvariantUuid\" : \"0ea3e57e-ac7a-425a-928b-b4aee8806c15\",\n" + + "\t\t\t\t\t\t\"modelVersion\" : \"1\",\n" + + "\t\t\t\t\t\t\"modelCustomizationUuid\" : \"9ed9fef6-d3f8-4433-9807-7e23393a16bc\"\n" + + "\t\t\t\t\t},\t\t\"isBase\" : true,\n" + + "\t\t\t\t\t\"vfModuleLabel\" : \"base_vpkg\",\n" + + "\t\t\t\t\t\"initialCount\" : 1,\n" + + "\t\t\t\t\t\"hasVolumeGroup\" : true\n" + + "\t\t\t\t}\n" + + "\t\t\t]\n" + + "\t\t}\n" + + "\t],\n" + + "\t\"serviceNetworks\": [],\n" + + "\t\"serviceAllottedResources\": []\n" + + "\t}}"))); - String parameters = - "{ \"locationConstraints\":[ ], \"resources\":[ { \"resourceName\":\"vEPC_ONAP01\", \"resourceInvariantUuid\":\"36ebe421-283a-4ee8-92f1-d09e7c44b911\", \"resourceUuid\":\"27a0e235-b67a-4ea4-a0cf-25761afed111\", \"resourceCustomizationUuid\":\"27a0e235-b67a-4ea4-a0cf-25761afed231\", \"parameters\":{ \"locationConstraints\":[ { \"vnfProfileId\":\"b244d433-8c9c-49ad-9c70-8e34b8dc8328\", \"locationConstraints\":{ \"vimId\":\"vmware_vio\" } }, { \"vnfProfileId\":\"8a9f7c48-21ce-41b7-95b8-a8ac61ccb1ff\", \"locationConstraints\":{ \"vimId\":\"core-dc_RegionOne\" } } ], \"resources\":[ ], \"requestInputs\":{ \"sdncontroller\":\"\" } } }, { \"resourceName\":\"VL OVERLAYTUNNEL\", \"resourceInvariantUuid\":\"184494cf-472f-436f-82e2-d83dddde21cb\", \"resourceUuid\":\"95bc3e59-c9c5-458f-ad6e-78874ab4b3cc\", \"resourceCustomizationUuid\":\"27a0e235-b67a-4ea4-a0cf-25761afed232\", \"parameters\":{ \"locationConstraints\":[ ], \"resources\":[ ], \"requestInputs\":{ } } } ], \"requestInputs\":{ \"vlunderlayvpn0_name\":\"l3connect\", \"vlunderlayvpn0_site1_id\":\"IP-WAN-Controller-1\", \"vlunderlayvpn0_site2_id\":\"SPTNController\", \"vlunderlayvpn0_site1_networkName\":\"network1,network2\", \"vlunderlayvpn0_site2_networkName\":\"network3,network4\", \"vlunderlayvpn0_site1_routerId\":\"a8098c1a-f86e-11da-bd1a-00112444be1a\", \"vlunderlayvpn0_site2_routerId\":\"a8098c1a-f86e-11da-bd1a-00112444be1e\", \"vlunderlayvpn0_site2_importRT1\":\"200:1,200:2\", \"vlunderlayvpn0_site1_exportRT1\":\"300:1,300:2\", \"vlunderlayvpn0_site2_exportRT1\":\"400:1,400:2\", \"vlunderlayvpn0_site1_vni\":\"2000\", \"vlunderlayvpn0_site2_vni\":\"3000\", \"vlunderlayvpn0_tunnelType\":\"L3-DCI\" } }"; - ResourceRequestBuilder.buildResourceRequestParameters(null, "1bd0eae6-2dcc-4461-9ae6-56d641f369d6", "27a0e235-b67a-4ea4-a0cf-25761afed231", parameters); + List<String> resourceSequence = ResourceRequestBuilder.getResourceSequence("c3954379-4efe-431c-8258-f84905b158e5"); + assertEquals(resourceSequence.size(), 2); + assertEquals(resourceSequence.get(0), "res1"); + assertEquals(resourceSequence.get(1), "res2"); } }
\ No newline at end of file diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java index 78238f0271..56875d315b 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java @@ -26,7 +26,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -47,7 +47,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatchers; -import org.mockito.Matchers; +import org.mockito.ArgumentMatchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.Spy; @@ -711,11 +711,12 @@ public class BBInputSetupTest { String instanceName = "instanceName"; String vnfType = "vnfType"; String resourceId = "networkId"; + String productFamilyId = "productFamilyId"; Service service = Mockito.mock(Service.class); ServiceInstance serviceInstance = Mockito.mock(ServiceInstance.class); RequestDetails requestDetails = Mockito.mock(RequestDetails.class); ModelInfo modelInfo = Mockito.mock(ModelInfo.class); - RequestInfo requestInfo = Mockito.mock(RequestInfo.class); + RequestInfo requestInfo = Mockito.mock(RequestInfo.class); RelatedInstanceList[] relatedInstanceList = new RelatedInstanceList[] {}; CloudConfiguration cloudConfiguration = new CloudConfiguration(); org.onap.so.serviceinstancebeans.Platform platform = Mockito @@ -727,13 +728,14 @@ public class BBInputSetupTest { doNothing().when(SPY_bbInputSetup).populateL3Network(instanceName, modelInfo, service, bbName, serviceInstance, lookupKeyMap, resourceId, null); doReturn(modelInfo).when(requestDetails).getModelInfo(); + doReturn(productFamilyId).when(requestInfo).getProductFamilyId(); doReturn(requestInfo).when(requestDetails).getRequestInfo(); doReturn(instanceName).when(requestInfo).getInstanceName(); doReturn(platform).when(requestDetails).getPlatform(); doReturn(lineOfBusiness).when(requestDetails).getLineOfBusiness(); doReturn(relatedInstanceList).when(requestDetails).getRelatedInstanceList(); doReturn(cloudConfiguration).when(requestDetails).getCloudConfiguration(); - + doReturn(ModelType.network).when(modelInfo).getModelType(); SPY_bbInputSetup.populateObjectsOnAssignAndCreateFlows(requestDetails, service, bbName, serviceInstance, lookupKeyMap, resourceId, vnfType); @@ -744,11 +746,11 @@ public class BBInputSetupTest { doReturn(ModelType.vnf).when(modelInfo).getModelType(); resourceId = "vnfId"; doNothing().when(SPY_bbInputSetup).populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, - service, bbName, serviceInstance, lookupKeyMap, relatedInstanceList, resourceId, vnfType, null); + service, bbName, serviceInstance, lookupKeyMap, relatedInstanceList, resourceId, vnfType, null, productFamilyId); SPY_bbInputSetup.populateObjectsOnAssignAndCreateFlows(requestDetails, service, bbName, serviceInstance, lookupKeyMap, resourceId, vnfType); verify(SPY_bbInputSetup, times(1)).populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, - service, bbName, serviceInstance, lookupKeyMap, relatedInstanceList, resourceId, vnfType, null); + service, bbName, serviceInstance, lookupKeyMap, relatedInstanceList, resourceId, vnfType, null, productFamilyId); assertEquals("VnfId populated", true, lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID).equalsIgnoreCase(resourceId)); doReturn(ModelType.volumeGroup).when(modelInfo).getModelType(); @@ -1208,26 +1210,29 @@ public class BBInputSetupTest { doReturn(catalogInstanceGroup).when(SPY_bbInputSetupUtils).getCatalogInstanceGroup(any()); SPY_bbInputSetup.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName, - serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null); + serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null, + requestDetails.getRequestInfo().getProductFamilyId()); lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, null); SPY_bbInputSetup.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName, - serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null); + serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null, + requestDetails.getRequestInfo().getProductFamilyId()); verify(SPY_bbInputSetup, times(1)).mapCatalogVnf(vnf, modelInfo, service); instanceName = "vnfName2"; GenericVnf vnf2 = SPY_bbInputSetup.createGenericVnf(lookupKeyMap, instanceName, platform, lineOfBusiness, - resourceId, vnfType, null); + resourceId, vnfType, null, requestDetails.getRequestInfo().getProductFamilyId()); doReturn(vnf2).when(SPY_bbInputSetup).createGenericVnf(lookupKeyMap, instanceName, platform, lineOfBusiness, - resourceId, vnfType, null); + resourceId, vnfType, null, requestDetails.getRequestInfo().getProductFamilyId()); doNothing().when(SPY_bbInputSetup).mapNetworkCollectionInstanceGroup(vnf2, "{instanceGroupId}"); doNothing().when(SPY_bbInputSetup).mapVnfcCollectionInstanceGroup(vnf2, modelInfo, service); lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, "genericVnfId2"); SPY_bbInputSetup.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName, - serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null); + serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null, + requestDetails.getRequestInfo().getProductFamilyId()); verify(SPY_bbInputSetup, times(2)).mapCatalogVnf(vnf2, modelInfo, service); verify(SPY_bbInputSetup, times(2)).mapNetworkCollectionInstanceGroup(vnf2, "{instanceGroupId}"); verify(SPY_bbInputSetup, times(2)).mapVnfcCollectionInstanceGroup(vnf2, modelInfo, service); @@ -1297,17 +1302,19 @@ public class BBInputSetupTest { doReturn(catalogInstanceGroup).when(SPY_bbInputSetupUtils).getCatalogInstanceGroup(any()); SPY_bbInputSetup.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName, - serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null); + serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null, + requestDetails.getRequestInfo().getProductFamilyId()); lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, null); SPY_bbInputSetup.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName, - serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null); + serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null, + requestDetails.getRequestInfo().getProductFamilyId()); verify(SPY_bbInputSetup, times(1)).mapCatalogVnf(vnf, modelInfo, service); instanceName = "vnfName2"; GenericVnf vnf2 = SPY_bbInputSetup.createGenericVnf(lookupKeyMap, instanceName, platform, lineOfBusiness, - resourceId, vnfType, null); + resourceId, vnfType, null, requestDetails.getRequestInfo().getProductFamilyId()); org.onap.aai.domain.yang.GenericVnf vnf2AAI = new org.onap.aai.domain.yang.GenericVnf(); vnfAAI.setModelCustomizationId("modelCustId2"); @@ -1315,7 +1322,8 @@ public class BBInputSetupTest { doNothing().when(SPY_bbInputSetup).mapCatalogVnf(vnf2, modelInfo, service); doNothing().when(SPY_bbInputSetup).mapNetworkCollectionInstanceGroup(vnf2, "{instanceGroupId}"); SPY_bbInputSetup.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName, - serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null); + serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null, + requestDetails.getRequestInfo().getProductFamilyId()); verify(SPY_bbInputSetup, times(2)).mapCatalogVnf(vnf2, modelInfo, service); verify(SPY_bbInputSetup, times(2)).mapNetworkCollectionInstanceGroup(vnf2, "{instanceGroupId}"); verify(SPY_bbInputSetup, times(1)).mapVnfcCollectionInstanceGroup(vnf2, modelInfo, service); @@ -1768,7 +1776,7 @@ public class BBInputSetupTest { verify(SPY_bbInputSetup, times(1)).populateGenericVnf(isA(ModelInfo.class), any(String.class), isA(org.onap.so.serviceinstancebeans.Platform.class), isA(org.onap.so.serviceinstancebeans.LineOfBusiness.class), isA(Service.class), any(String.class), - isA(ServiceInstance.class), any(), any(), any(String.class), any(String.class), any()); + isA(ServiceInstance.class), any(), any(), any(String.class), any(String.class), any(), any(String.class)); lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, null); executeBB.getBuildingBlock().setBpmnFlowName(AssignFlows.VF_MODULE.toString()); @@ -1943,7 +1951,7 @@ public class BBInputSetupTest { verify(SPY_bbInputSetup, times(1)).populateGenericVnf(isA(ModelInfo.class), any(String.class), isA(org.onap.so.serviceinstancebeans.Platform.class), isA(org.onap.so.serviceinstancebeans.LineOfBusiness.class), isA(Service.class), any(String.class), - isA(ServiceInstance.class), any(),ArgumentMatchers.isNull(), any(String.class), ArgumentMatchers.isNull(), any()); + isA(ServiceInstance.class), any(),ArgumentMatchers.isNull(), any(String.class), ArgumentMatchers.isNull(), any(), any(String.class)); lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, null); executeBB.getBuildingBlock().setBpmnFlowName(AssignFlows.VF_MODULE.toString()); @@ -2006,7 +2014,8 @@ public class BBInputSetupTest { verify(SPY_bbInputSetup, times(1)).populateGenericVnf(isA(ModelInfo.class), any(String.class), isA(org.onap.so.serviceinstancebeans.Platform.class), isA(org.onap.so.serviceinstancebeans.LineOfBusiness.class), isA(Service.class), any(String.class), - isA(ServiceInstance.class), any(), any(), any(String.class), any(String.class), any()); + isA(ServiceInstance.class), any(), any(), any(String.class), any(String.class), any(), + any(String.class)); lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, null); executeBB.getBuildingBlock().setBpmnFlowName(AssignFlows.VF_MODULE.toString()); @@ -2456,6 +2465,7 @@ public class BBInputSetupTest { String vnfType = "vnfType"; String platformName = "platformName"; String lineOfBusinessName = "lineOfBusinessName"; + String productFamilyId = "productFamilyId"; Platform platform = new Platform(); platform.setPlatformName(platformName); LineOfBusiness lineOfBusiness = new LineOfBusiness(); @@ -2470,6 +2480,8 @@ public class BBInputSetupTest { expected.setOrchestrationStatus(OrchestrationStatus.PRECREATED); expected.setPlatform(platform); expected.setLineOfBusiness(lineOfBusiness); + expected.setProvStatus("PREPROV"); + expected.setServiceId(productFamilyId); Map<ResourceKey, String> lookupKeyMap = new HashMap<>(); List<Map<String, String>> instanceParams = new ArrayList<>(); instanceParams.add(cloudParams); @@ -2481,13 +2493,14 @@ public class BBInputSetupTest { doReturn(platform).when(bbInputSetupMapperLayer).mapRequestPlatform(requestPlatform); doReturn(lineOfBusiness).when(bbInputSetupMapperLayer).mapRequestLineOfBusiness(requestLineOfBusiness); - GenericVnf actual = SPY_bbInputSetup.createGenericVnf(lookupKeyMap, instanceName, requestPlatform, requestLineOfBusiness, vnfId, vnfType, instanceParams); + GenericVnf actual = SPY_bbInputSetup.createGenericVnf(lookupKeyMap, instanceName, requestPlatform, requestLineOfBusiness, vnfId, vnfType, instanceParams, + productFamilyId); assertThat(actual, sameBeanAs(expected)); assertEquals("LookupKeyMap is populated", vnfId, lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID)); expected.getCloudParams().clear(); - actual = SPY_bbInputSetup.createGenericVnf(lookupKeyMap, instanceName, requestPlatform, requestLineOfBusiness, vnfId, vnfType, null); + actual = SPY_bbInputSetup.createGenericVnf(lookupKeyMap, instanceName, requestPlatform, requestLineOfBusiness, vnfId, vnfType, null, productFamilyId); assertThat(actual, sameBeanAs(expected)); } @@ -2538,6 +2551,12 @@ public class BBInputSetupTest { volumeGroup.setVolumeGroupId(volumeGroupId); vnf.getVolumeGroups().add(volumeGroup); serviceInstance.getVnfs().add(vnf); + VfModule vfModule1 = new VfModule(); + vfModule1.setVfModuleId("vfModuleId1"); + VfModule vfModule2 = new VfModule(); + vfModule2.setVfModuleId("vfModuleId2"); + vnf.getVfModules().add(vfModule1); + vnf.getVfModules().add(vfModule2); Map<ResourceKey, String> lookupKeyMap = new HashMap<>(); lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, vnfId); String resourceId = vfModuleId; @@ -2550,16 +2569,20 @@ public class BBInputSetupTest { vnfAAI.setModelCustomizationId("vnfModelCustId"); org.onap.aai.domain.yang.VolumeGroup volumeGroupAAI = new org.onap.aai.domain.yang.VolumeGroup(); volumeGroupAAI.setModelCustomizationId(vfModuleCustomizationId); + org.onap.aai.domain.yang.VfModule vfModuleAAI = new org.onap.aai.domain.yang.VfModule(); + vfModuleAAI.setModelCustomizationId(vfModuleCustomizationId); doReturn(vnfAAI).when(SPY_bbInputSetupUtils).getAAIGenericVnf(vnf.getVnfId()); doReturn(volumeGroupAAI).when(SPY_bbInputSetupUtils).getAAIVolumeGroup(CLOUD_OWNER, cloudConfiguration.getLcpCloudRegionId(), volumeGroup.getVolumeGroupId()); + doReturn(vfModuleAAI).when(SPY_bbInputSetupUtils).getAAIVfModule(isA(String.class), isA(String.class)); doNothing().when(SPY_bbInputSetup).mapCatalogVnf(isA(GenericVnf.class), isA(ModelInfo.class), isA(Service.class)); doNothing().when(SPY_bbInputSetup).mapCatalogVfModule(isA(VfModule.class), isA(ModelInfo.class), isA(Service.class), isA(String.class)); SPY_bbInputSetup.populateVfModule(modelInfo, service, bbName, serviceInstance, lookupKeyMap, resourceId, relatedInstanceList, instanceName, instanceParams, cloudConfiguration); + verify(SPY_bbInputSetup, times(3)).mapCatalogVfModule(isA(VfModule.class), isA(ModelInfo.class), isA(Service.class), isA(String.class)); assertEquals("Lookup Key Map populated with VfModule Id", vfModuleId, lookupKeyMap.get(ResourceKey.VF_MODULE_ID)); assertEquals("Lookup Key Map populated with VolumeGroup Id", volumeGroupId, lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID)); } diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java index f70912f725..ae1af8f960 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java @@ -25,7 +25,7 @@ import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/CloudInfoFromAAITest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/CloudInfoFromAAITest.java index d53b2ae713..af7dc582e0 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/CloudInfoFromAAITest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/CloudInfoFromAAITest.java @@ -24,7 +24,7 @@ import static com.shazam.shazamcrest.MatcherAssert.assertThat; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -import static org.mockito.Matchers.isA; +import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doReturn; import java.io.File; diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildlingBlockRainyDayTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildlingBlockRainyDayTest.java index cb5683dcc8..6344a3f1a6 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildlingBlockRainyDayTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/ExecuteBuildlingBlockRainyDayTest.java @@ -93,7 +93,7 @@ public class ExecuteBuildlingBlockRainyDayTest extends BaseTest { vnf.setVnfType("vnft1"); delegateExecution.setVariable("aLaCarte", true); delegateExecution.setVariable("suppressRollback", false); - + delegateExecution.setVariable("WorkflowExceptionCode", "7000"); RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus(); rainyDayHandlerStatus.setErrorCode("7000"); rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB"); @@ -116,7 +116,7 @@ public class ExecuteBuildlingBlockRainyDayTest extends BaseTest { vnf.setVnfType("vnft1"); delegateExecution.setVariable("aLaCarte", true); delegateExecution.setVariable("suppressRollback", false); - + delegateExecution.setVariable("WorkflowExceptionCode", ASTERISK); RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus(); rainyDayHandlerStatus.setErrorCode(ASTERISK); rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB"); @@ -131,6 +131,7 @@ public class ExecuteBuildlingBlockRainyDayTest extends BaseTest { executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution,true); assertEquals("Rollback", delegateExecution.getVariable("handlingCode")); + assertEquals(5,delegateExecution.getVariable("maxRetries")); } @Test @@ -164,7 +165,7 @@ public class ExecuteBuildlingBlockRainyDayTest extends BaseTest { vnf.setVnfType("vnft1"); delegateExecution.setVariable("aLaCarte", true); delegateExecution.setVariable("suppressRollback", false); - + delegateExecution.setVariable("WorkflowExceptionCode", "7000"); RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus(); rainyDayHandlerStatus.setErrorCode("7000"); rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB"); @@ -188,7 +189,7 @@ public class ExecuteBuildlingBlockRainyDayTest extends BaseTest { vnf.setVnfType("vnft1"); delegateExecution.setVariable("aLaCarte", false); delegateExecution.setVariable("suppressRollback", false); - + delegateExecution.setVariable("WorkflowExceptionCode", "7000"); RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus(); rainyDayHandlerStatus.setErrorCode("7000"); rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB"); @@ -212,7 +213,7 @@ public class ExecuteBuildlingBlockRainyDayTest extends BaseTest { vnf.setVnfType("vnft1"); delegateExecution.setVariable("aLaCarte", true); delegateExecution.setVariable("suppressRollback", false); - + delegateExecution.setVariable("WorkflowExceptionCode", "7000"); RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus(); rainyDayHandlerStatus.setErrorCode("7000"); rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB"); diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/DmaapPropertiesClientTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/DmaapPropertiesClientTest.java index dbf2eb75fd..c50a6db178 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/DmaapPropertiesClientTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/DmaapPropertiesClientTest.java @@ -26,6 +26,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; @@ -46,6 +47,7 @@ public class DmaapPropertiesClientTest extends BaseTest{ @Autowired private DmaapPropertiesClient dmaapPropertiesClient; + private final String file = "src/test/resources/org/onap/so/client/avpn/dmaap/avpnDmaapAsyncRequestStatus.json"; private String requestId = "rq1234d1-5a33-55df-13ab-12abad84e331"; private String clientSource = "SPP"; @@ -73,7 +75,7 @@ public class DmaapPropertiesClientTest extends BaseTest{ @Test public void testDmaapPublishRequest() throws JsonProcessingException, MapperException { - stubFor(post(urlEqualTo("/events/com.att.mso.asyncStatusUpdate?timeout=20000")) + stubFor(post(urlEqualTo("/events/com.att.mso.asyncStatusUpdate?timeout=60000")) .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED))); dmaapPropertiesClient.dmaapPublishRequest(requestId, clientSource, correlator, serviceInstanceId, startTime, finishTime, requestScope, diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/GlobalDmaapPublisherTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/GlobalDmaapPublisherTest.java index d380536a48..fc69f812be 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/GlobalDmaapPublisherTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/GlobalDmaapPublisherTest.java @@ -21,6 +21,7 @@ package org.onap.so.client.dmaapproperties; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; import org.onap.so.BaseTest; @@ -30,7 +31,8 @@ public class GlobalDmaapPublisherTest extends BaseTest{ @Autowired private GlobalDmaapPublisher globalDmaapPublisher; - + + @Test public void testGetters() { assertEquals("81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54", globalDmaapPublisher.getAuth()); diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderTest.java index d1013e7541..2e25449937 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/exception/ExceptionBuilderTest.java @@ -21,7 +21,7 @@ package org.onap.so.client.exception; import static org.junit.Assert.assertEquals; - +import static org.junit.Assert.assertTrue; import org.camunda.bpm.engine.delegate.BpmnError; import org.junit.Test; import org.onap.so.bpmn.mock.FileUtil; @@ -32,6 +32,7 @@ public class ExceptionBuilderTest extends BaseTest { private static final String RESOURCE_PATH = "__files/"; private static final String VALID_ERROR_MESSAGE = "{test error message}"; + @Test public void buildAndThrowWorkflowExceptionTest() { try { diff --git a/bpmn/MSOCommonBPMN/src/test/resources/application-test.yaml b/bpmn/MSOCommonBPMN/src/test/resources/application-test.yaml index b229fbd26a..afdb800ffe 100644 --- a/bpmn/MSOCommonBPMN/src/test/resources/application-test.yaml +++ b/bpmn/MSOCommonBPMN/src/test/resources/application-test.yaml @@ -84,7 +84,7 @@ mso: callbackRetryAttempts: '5' catalog: db: - endpoint: http://localhost:${wiremock.server.port}/ + endpoint: http://localhost:${wiremock.server.port}/ecomp/mso/catalog spring: endpoint: http://localhost:${wiremock.server.port} correlation: diff --git a/bpmn/MSOCommonBPMN/src/test/resources/vfModuleCount.xml b/bpmn/MSOCommonBPMN/src/test/resources/vfModuleCount.xml new file mode 100644 index 0000000000..b7dee68a77 --- /dev/null +++ b/bpmn/MSOCommonBPMN/src/test/resources/vfModuleCount.xml @@ -0,0 +1,44 @@ +<vfModules> + <vf-module> + <module-index>0</module-index> + </vf-module> + <vf-module> + <module-index>1</module-index> + </vf-module> + <vf-module> + <module-index>2</module-index> + </vf-module> + <vf-module> + <module-index>3</module-index> + </vf-module> + <vf-module> + <module-index>4</module-index> + </vf-module> + <vf-module> + <module-index>5</module-index> + </vf-module> + <vf-module> + <module-index>6</module-index> + </vf-module> + <vf-module> + <module-index>7</module-index> + </vf-module> + <vf-module> + <module-index>8</module-index> + </vf-module> + <vf-module> + <module-index>9</module-index> + </vf-module> + <vf-module> + <module-index>10</module-index> + </vf-module> + <vf-module> + <module-index>11</module-index> + </vf-module> + <vf-module> + <module-index>12</module-index> + </vf-module> + <vf-module> + <module-index>13</module-index> + </vf-module> +</vfModules>
\ No newline at end of file diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/RollbackData.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/RollbackData.java index 9c80548490..52207f2156 100644 --- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/RollbackData.java +++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/RollbackData.java @@ -25,24 +25,26 @@ import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; +import com.fasterxml.jackson.annotation.JsonProperty; + /** - * An object that stores data for rollbacks. Data is organized by type. A - * type is simply a string identifier. Multiple types of data may be stored - * in the same object for separate rollback operations. + * An object that stores data for rollbacks. Data is organized by type. A type is simply a string + * identifier. Multiple types of data may be stored in the same object for separate rollback + * operations. */ public class RollbackData implements Serializable { private static final long serialVersionUID = 1L; - private Map<String, Map<String, Serializable>> dictionary = - new HashMap<>(); + @JsonProperty + private final Map<String, Map<String, Serializable>> dictionary = new HashMap<>(); /** * Returns true if the specified type is stored in this object. * * @param type the data type */ - public boolean hasType(String type) { + public boolean hasType(final String type) { return dictionary.containsKey(type); } @@ -53,9 +55,8 @@ public class RollbackData implements Serializable { * @param key the key * @param value the value */ - public void put(String type, String key, String value) { - Map<String, Serializable> mapForType = dictionary - .computeIfAbsent(type, k -> new HashMap<>()); + public void put(final String type, final String key, final String value) { + final Map<String, Serializable> mapForType = dictionary.computeIfAbsent(type, k -> new HashMap<>()); mapForType.put(key, value); } @@ -67,8 +68,8 @@ public class RollbackData implements Serializable { * @param key the key * @return the item or null if there is no item for the specified type and key */ - public Serializable get(String type, String key) { - Map<String, Serializable> mapForType = dictionary.get(type); + public Serializable get(final String type, final String key) { + final Map<String, Serializable> mapForType = dictionary.get(type); if (mapForType == null) { return null; @@ -83,7 +84,7 @@ public class RollbackData implements Serializable { * @param type the data type * @return a map, or null if there are no items associated with the specified data type */ - public Map<String, Serializable> get(String type) { + public Map<String, Serializable> get(final String type) { return dictionary.get(type); } diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/AllottedResource.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/AllottedResource.java index f143346cae..c7c7bba20c 100644 --- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/AllottedResource.java +++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/AllottedResource.java @@ -22,6 +22,8 @@ package org.onap.so.bpmn.core.domain; import java.util.UUID; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonRootName; /** @@ -55,6 +57,9 @@ public class AllottedResource extends Resource { private String nfNamingCode; private String orchestrationStatus; + @JsonIgnore + private String resourceInput; + /* * GET and SET */ @@ -119,4 +124,13 @@ public class AllottedResource extends Resource { public void setOrchestrationStatus(String orchestrationStatus) { this.orchestrationStatus = orchestrationStatus; } + + + public String getResourceInput() { + return resourceInput; + } + + public void setResourceInput(String resourceInput) { + this.resourceInput = resourceInput; + } }
\ No newline at end of file diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/NetworkResource.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/NetworkResource.java index 20ab3ecc84..f0e97f15ef 100644 --- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/NetworkResource.java +++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/NetworkResource.java @@ -22,6 +22,8 @@ package org.onap.so.bpmn.core.domain; import java.util.UUID; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonRootName; @@ -47,7 +49,10 @@ public class NetworkResource extends Resource { private String networkRole; private String networkTechnology; private String networkScope; - + + @JsonIgnore + private String resourceInput; + /* * GET and SET */ @@ -75,4 +80,12 @@ public class NetworkResource extends Resource { public void setNetworkScope(String networkScope) { this.networkScope = networkScope; } + + public String getResourceInput() { + return resourceInput; + } + + public void setResourceInput(String resourceInput) { + this.resourceInput = resourceInput; + } }
\ No newline at end of file diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/ServiceInstance.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/ServiceInstance.java index 4295f50a3c..5cdbbcb7c9 100644 --- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/ServiceInstance.java +++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/ServiceInstance.java @@ -23,6 +23,8 @@ package org.onap.so.bpmn.core.domain; import java.io.Serializable; import java.util.Map; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonRootName; /** @@ -32,6 +34,7 @@ import com.fasterxml.jackson.annotation.JsonRootName; * @author cb645j * */ +@JsonIgnoreProperties(ignoreUnknown = true) public class ServiceInstance extends JsonWrapper implements Serializable { private static final long serialVersionUID = 1L; diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/VnfResource.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/VnfResource.java index dc76ab0bc7..a7e5389583 100644 --- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/VnfResource.java +++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/VnfResource.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.UUID; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonRootName; @@ -59,6 +60,9 @@ public class VnfResource extends Resource { private String multiStageDesign; private String orchestrationStatus; + @JsonIgnore + private String resourceInput; + /* * GET and SET */ @@ -123,6 +127,15 @@ public class VnfResource extends Resource { public void setOrchestrationStatus(String orchestrationStatus){ this.orchestrationStatus = orchestrationStatus; } + + public String getResourceInput() { + return resourceInput; + } + + public void setResourceInput(String resourceInput) { + this.resourceInput = resourceInput; + } + /** * Returns a list of all VfModule objects. * Base module is first entry in the list diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/json/JsonUtils.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/json/JsonUtils.java index ee53148e44..35f76908e3 100644 --- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/json/JsonUtils.java +++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/json/JsonUtils.java @@ -927,7 +927,7 @@ public class JsonUtils { for (int i = 0; i < arr.length(); i++){ JSONObject jo = arr.getJSONObject(i); String key = jo.getString(keyNode); - String value = jo.getString(valueNode); + String value = jo.get(valueNode).toString(); map.put(key, value); } msoLogger.debug("Completed Entry Array To Map Util Method"); @@ -954,7 +954,7 @@ public class JsonUtils { for(int i = 0; i < arr.length(); i++){ JSONObject jo = arr.getJSONObject(i); String key = jo.getString(keyNode); - String value = jo.getString(valueNode); + String value = jo.get(valueNode).toString(); map.put(key, value); } msoLogger.debug("Completed Entry Array To Map Util Method"); diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/AllottedResourceTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/AllottedResourceTest.java index b1dd8659cd..cca28d411f 100644 --- a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/AllottedResourceTest.java +++ b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/AllottedResourceTest.java @@ -21,8 +21,11 @@ package org.onap.so.bpmn.core.domain; import static org.junit.Assert.*; +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; +import java.io.IOException; + public class AllottedResourceTest { private AllottedResource ar = new AllottedResource(); @@ -51,4 +54,13 @@ public class AllottedResourceTest { } + @Test + public void allottedResourceMapperTest() throws IOException { + String jsonStr = "{\"allottedResourceType\": \"code123\", \"resourceInput\": \"sample\"}"; + ObjectMapper objectMapper = new ObjectMapper(); + AllottedResource vnfResource = objectMapper.readValue(jsonStr, AllottedResource.class); + + assertTrue(vnfResource != null); + } + } diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/NetworkResourceTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/NetworkResourceTest.java index 6ca9cef8d2..ee23ebd438 100644 --- a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/NetworkResourceTest.java +++ b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/NetworkResourceTest.java @@ -21,8 +21,11 @@ package org.onap.so.bpmn.core.domain; import static org.junit.Assert.*; +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; +import java.io.IOException; + public class NetworkResourceTest { private NetworkResource nr = new NetworkResource(); @@ -39,4 +42,13 @@ public class NetworkResourceTest { } + @Test + public void networkResourceMapperTest() throws IOException { + String jsonStr = "{\"networkScope\": \"code123\", \"resourceInput\": \"sample\"}"; + ObjectMapper objectMapper = new ObjectMapper(); + NetworkResource networkResource = objectMapper.readValue(jsonStr, NetworkResource.class); + + assertTrue(networkResource != null); + } + } diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/ServiceInstanceTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/ServiceInstanceTest.java index 7cacc9da88..c04dc9d601 100644 --- a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/ServiceInstanceTest.java +++ b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/ServiceInstanceTest.java @@ -21,8 +21,10 @@ package org.onap.so.bpmn.core.domain; import static org.junit.Assert.*; +import java.io.IOException; import java.util.Map; +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; public class ServiceInstanceTest { @@ -58,4 +60,12 @@ public class ServiceInstanceTest { } + @Test + public void serviceInstanceMapperTest() throws IOException { + String jsonStr = "{\"workloadContext\": \"code123\", \"resourceOrder\": \"sample\"}"; + ObjectMapper objectMapper = new ObjectMapper(); + ServiceInstance serviceInstance = objectMapper.readValue(jsonStr, ServiceInstance.class); + assertTrue(serviceInstance != null); + } + } diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/VnfResourceTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/VnfResourceTest.java index 24947e9a8d..a83337fc5b 100644 --- a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/VnfResourceTest.java +++ b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/domain/VnfResourceTest.java @@ -21,8 +21,10 @@ package org.onap.so.bpmn.core.domain; import static org.junit.Assert.*; +import java.io.IOException; import java.util.List; +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; public class VnfResourceTest { @@ -52,4 +54,13 @@ public class VnfResourceTest { } + @Test + public void vnfResourceMapperTest() throws IOException { + String jsonStr = "{\"vnfHostname\": \"home\", \"resourceInput\": \"sample\"}"; + ObjectMapper objectMapper = new ObjectMapper(); + VnfResource vnfResource = objectMapper.readValue(jsonStr, VnfResource.class); + + assertTrue(vnfResource != null); + } + } diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/internal/VariableNameExtractorTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/internal/VariableNameExtractorTest.java index e32bc88b7c..14b8c49655 100644 --- a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/internal/VariableNameExtractorTest.java +++ b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/internal/VariableNameExtractorTest.java @@ -21,7 +21,7 @@ package org.onap.so.bpmn.core.internal; import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.*; -import static org.mockito.Matchers.contains; +import static org.mockito.ArgumentMatchers.contains; import java.util.Optional; import org.junit.Test; diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/json/JsonUtilsTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/json/JsonUtilsTest.java index 6748128f05..067ae9806d 100644 --- a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/json/JsonUtilsTest.java +++ b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/json/JsonUtilsTest.java @@ -81,7 +81,19 @@ public class JsonUtilsTest { JSONArray assignmentInfo = homingDataJson.getJSONArray("assignmentInfo"); Map<String, String> map = utils.entryArrayToMap(assignmentInfo.toString(), "variableName", "variableValue"); assertEquals(map.get("cloudOwner"), "CloudOwner"); - } + } + @Test + public void entryArrayToMapStringTestOof() throws IOException { + JsonUtils utils = new JsonUtils(); + String response = this.getJson("OofExample.json"); + String entry = JsonUtils.getJsonValue(response, "solutions.placementSolutions"); + JSONArray arr = new JSONArray(entry); + JSONArray arr2 = arr.getJSONArray(0); + JSONObject homingDataJson = arr2.getJSONObject(0); + JSONArray assignmentInfo = homingDataJson.getJSONArray("assignmentInfo"); + Map<String, String> map = utils.entryArrayToMap(assignmentInfo.toString(), "key", "value"); + assertEquals(map.get("cloudOwner"), "HPA-cloud"); + } @Test public void getJsonRootPropertyTest() throws IOException { String response = this.getJson("SDNCServiceResponseExample.json"); diff --git a/bpmn/MSOCoreBPMN/src/test/resources/json-examples/OofExample.json b/bpmn/MSOCoreBPMN/src/test/resources/json-examples/OofExample.json new file mode 100644 index 0000000000..127748a5e8 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/resources/json-examples/OofExample.json @@ -0,0 +1,110 @@ +{ + "requestStatus":"completed", + "statusMessage":"", + "solutions":{ + "placementSolutions":[ + [ + { + "serviceResourceId":"78976677-bca7-446a-8b31-52b83e9aa925", + "resourceModuleName":"7400fd06C75f4a44A68f", + "solution":{ + "identifierType":"cloudRegionId", + "cloudOwner":"HPA-cloud", + "identifiers":[ + "Cloud-region3" + ] + }, + "assignmentInfo":[ + { + "value":"false", + "key":"isRehome" + }, + { + "value":"att_aic", + "key":"locationType" + }, + { + "value":"Cloud-region3", + "key":"locationId" + }, + { + "value":{ + "directives":[ + { + "directives":[ + { + "attributes":[ + { + "attribute_value":"Flavor31", + "attribute_name":"label_1" + } + ], + "type":"flavor_directives" + }, + { + "attributes":[ + { + "attribute_value":"direct", + "attribute_name":"oof_returned_vnic_type_for_firewall_protected" + } + ], + "type":"sriovNICNetwork_directives" + } + ], + "type":"vnfc", + "id":"vfw_1" + }, + { + "directives":[ + { + "attributes":[ + { + "attribute_value":"Flavor32", + "attribute_name":"label_2" + } + ], + "type":"flavor_directives" + } + ], + "type":"vnfc", + "id":"vfw_2" + }, + { + "directives":[ + { + "attributes":[ + { + "attribute_value":"Flavor32", + "attribute_name":"label_3" + } + ], + "type":"flavor_directives" + } + ], + "type":"vnfc", + "id":"vfw_3" + } + ] + }, + "key":"oof_directives" + }, + { + "value":"DLLSTX233", + "key":"cloudClli" + }, + { + "value":"75919", + "key":"aic_version" + }, + { + "value":"HPA-cloud", + "key":"cloudOwner" + } + ] + } + ] + ] + }, + "transactionId":"", + "requestId":"05da4f90-15f7-4128-8ac4-e06dc3cc06f9" +}
\ No newline at end of file diff --git a/bpmn/mso-infrastructure-bpmn/pom.xml b/bpmn/mso-infrastructure-bpmn/pom.xml index fb5d0108ba..5d0d05df92 100644 --- a/bpmn/mso-infrastructure-bpmn/pom.xml +++ b/bpmn/mso-infrastructure-bpmn/pom.xml @@ -164,6 +164,11 @@ <version>${camunda.springboot.version}</version> </dependency> <dependency> + <groupId>org.camunda.bpm.springboot</groupId> + <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId> + <version>2.3.0</version> + </dependency> + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> diff --git a/bpmn/mso-infrastructure-bpmn/src/main/resources/application.yaml b/bpmn/mso-infrastructure-bpmn/src/main/resources/application.yaml index 203988a1a3..829fc12474 100644 --- a/bpmn/mso-infrastructure-bpmn/src/main/resources/application.yaml +++ b/bpmn/mso-infrastructure-bpmn/src/main/resources/application.yaml @@ -2,7 +2,9 @@ server: port: 8080 tomcat: max-threads: 50 - +mso: + infra: + auditInventory: true spring: datasource: driver-class-name: org.mariadb.jdbc.Driver diff --git a/bpmn/so-bpmn-building-blocks/pom.xml b/bpmn/so-bpmn-building-blocks/pom.xml index 4fe02ee3ac..0971a9d54e 100644 --- a/bpmn/so-bpmn-building-blocks/pom.xml +++ b/bpmn/so-bpmn-building-blocks/pom.xml @@ -147,6 +147,7 @@ <artifactId>mariaDB4j</artifactId> <version>2.2.3</version> <scope>test</scope> - </dependency> + </dependency> + </dependencies> </project> diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ActivateVfModuleBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ActivateVfModuleBB.bpmn index ef19e6e35b..fd24be100b 100644 --- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ActivateVfModuleBB.bpmn +++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ActivateVfModuleBB.bpmn @@ -1,15 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> -<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.8.2"> +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.7.1"> <bpmn:process id="ActivateVfModuleBB" name="ActivateVfModuleBB" isExecutable="true"> <bpmn:startEvent id="ActivateVfModuleBB_Start"> <bpmn:outgoing>SequenceFlow_0ieafii</bpmn:outgoing> </bpmn:startEvent> - <bpmn:sequenceFlow id="SequenceFlow_0ieafii" sourceRef="ActivateVfModuleBB_Start" targetRef="ActivateVfModule" /> + <bpmn:sequenceFlow id="SequenceFlow_0ieafii" sourceRef="ActivateVfModuleBB_Start" targetRef="CheckAuditVariable" /> <bpmn:endEvent id="ActivateVfModuleBB_End"> <bpmn:incoming>SequenceFlow_0xsp0pv</bpmn:incoming> </bpmn:endEvent> <bpmn:serviceTask id="ActivateVfModule" name=" SDNC Activate (vf module) " camunda:expression="${SDNCActivateTasks.activateVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> - <bpmn:incoming>SequenceFlow_0ieafii</bpmn:incoming> + <bpmn:incoming>SequenceFlow_07ybdik</bpmn:incoming> + <bpmn:incoming>SequenceFlow_0ee42yq</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1a495wm</bpmn:outgoing> </bpmn:serviceTask> <bpmn:serviceTask id="UpdateVfModuleActiveStatus" name=" AAI Update (vf module) " camunda:expression="${AAIUpdateTasks.updateOrchestrationStatusActivateVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> @@ -29,57 +30,161 @@ </bpmn:callActivity> <bpmn:sequenceFlow id="SequenceFlow_1a495wm" sourceRef="ActivateVfModule" targetRef="CallActivity_sdncHandler" /> <bpmn:sequenceFlow id="SequenceFlow_1j4x1ej" sourceRef="CallActivity_sdncHandler" targetRef="UpdateVfModuleActiveStatus" /> + <bpmn:sequenceFlow id="SequenceFlow_0xndboi" sourceRef="Setup_AAI_Inventory_Audit" targetRef="Audit_AAI_Inventory" /> + <bpmn:serviceTask id="Setup_AAI_Inventory_Audit" name="Setup Inventory Audit Variable" camunda:expression="${AuditTasks.setupAuditVariable(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0ghzwlo</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0xndboi</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:serviceTask id="Audit_AAI_Inventory" name="Validate A&AI Inventory" camunda:type="external" camunda:topic="InventoryAudit"> + <bpmn:incoming>SequenceFlow_0xndboi</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0ee42yq</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:boundaryEvent id="BoundaryEvent_1nb1hw4" attachedToRef="Audit_AAI_Inventory"> + <bpmn:outgoing>SequenceFlow_1t99ceh</bpmn:outgoing> + <bpmn:errorEventDefinition /> + </bpmn:boundaryEvent> + <bpmn:sequenceFlow id="SequenceFlow_1t99ceh" sourceRef="BoundaryEvent_1nb1hw4" targetRef="Task_0swpw3v" /> + <bpmn:serviceTask id="Task_0swpw3v" name="Throw Exception" camunda:expression="${ExceptionBuilder.buildAndThrowWorkflowException(execution, "AuditAAIInventoryFailure", "Error Auditing Cloud Inventory in A&AI")}" camunda:resultVariable="ExceptionBuilder"> + <bpmn:incoming>SequenceFlow_1t99ceh</bpmn:incoming> + </bpmn:serviceTask> + <bpmn:exclusiveGateway id="ExclusiveGateway_1v8bmbu" default="SequenceFlow_07ybdik"> + <bpmn:incoming>SequenceFlow_1xqyur9</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_07ybdik</bpmn:outgoing> + <bpmn:outgoing>SequenceFlow_0ghzwlo</bpmn:outgoing> + </bpmn:exclusiveGateway> + <bpmn:sequenceFlow id="SequenceFlow_07ybdik" sourceRef="ExclusiveGateway_1v8bmbu" targetRef="ActivateVfModule" /> + <bpmn:sequenceFlow id="SequenceFlow_0ghzwlo" sourceRef="ExclusiveGateway_1v8bmbu" targetRef="Setup_AAI_Inventory_Audit"> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditInventoryNeeded").equals("true")}]]></bpmn:conditionExpression> + </bpmn:sequenceFlow> + <bpmn:sequenceFlow id="SequenceFlow_0ee42yq" sourceRef="Audit_AAI_Inventory" targetRef="ActivateVfModule" /> + <bpmn:serviceTask id="CheckAuditVariable" name="Check Audit Variable" camunda:expression="${AuditTasks.isAuditNeeded(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0ieafii</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_1xqyur9</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:sequenceFlow id="SequenceFlow_1xqyur9" sourceRef="CheckAuditVariable" targetRef="ExclusiveGateway_1v8bmbu" /> </bpmn:process> - <bpmn:error id="Error_0q258vt" name="gDelegateError" errorCode="7000" /> + <bpmn:error id="Error_0q258vt" errorCode="7000" /> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="ActivateVfModuleBB"> <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="ActivateVfModuleBB_Start"> - <dc:Bounds x="173" y="102" width="36" height="36" /> + <dc:Bounds x="73" y="102" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="179" y="138" width="24" height="12" /> + <dc:Bounds x="46" y="138" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0ieafii_di" bpmnElement="SequenceFlow_0ieafii"> - <di:waypoint xsi:type="dc:Point" x="209" y="120" /> - <di:waypoint xsi:type="dc:Point" x="262" y="120" /> + <di:waypoint xsi:type="dc:Point" x="109" y="120" /> + <di:waypoint xsi:type="dc:Point" x="161" y="120" /> <bpmndi:BPMNLabel> - <dc:Bounds x="190.5" y="99" width="90" height="12" /> + <dc:Bounds x="90" y="99" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="EndEvent_1v967li_di" bpmnElement="ActivateVfModuleBB_End"> - <dc:Bounds x="736" y="102" width="36" height="36" /> + <dc:Bounds x="1104" y="102" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="710" y="142" width="90" height="12" /> + <dc:Bounds x="935" y="142" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ServiceTask_0hawa84_di" bpmnElement="ActivateVfModule"> - <dc:Bounds x="262" y="80" width="100" height="80" /> + <dc:Bounds x="539" y="80" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ServiceTask_175e9ul_di" bpmnElement="UpdateVfModuleActiveStatus"> - <dc:Bounds x="600" y="80" width="100" height="80" /> + <dc:Bounds x="952" y="80" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0xsp0pv_di" bpmnElement="SequenceFlow_0xsp0pv"> - <di:waypoint xsi:type="dc:Point" x="700" y="120" /> - <di:waypoint xsi:type="dc:Point" x="736" y="120" /> + <di:waypoint xsi:type="dc:Point" x="1052" y="120" /> + <di:waypoint xsi:type="dc:Point" x="1104" y="120" /> <bpmndi:BPMNLabel> - <dc:Bounds x="673" y="99" width="90" height="12" /> + <dc:Bounds x="1033" y="99" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="CallActivity_03jkesd_di" bpmnElement="CallActivity_sdncHandler"> - <dc:Bounds x="420" y="80" width="100" height="80" /> + <dc:Bounds x="794" y="80" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1a495wm_di" bpmnElement="SequenceFlow_1a495wm"> - <di:waypoint xsi:type="dc:Point" x="362" y="120" /> - <di:waypoint xsi:type="dc:Point" x="420" y="120" /> + <di:waypoint xsi:type="dc:Point" x="639" y="120" /> + <di:waypoint xsi:type="dc:Point" x="794" y="120" /> <bpmndi:BPMNLabel> - <dc:Bounds x="391" y="99" width="0" height="12" /> + <dc:Bounds x="671.5" y="99" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1j4x1ej_di" bpmnElement="SequenceFlow_1j4x1ej"> - <di:waypoint xsi:type="dc:Point" x="520" y="120" /> - <di:waypoint xsi:type="dc:Point" x="600" y="120" /> + <di:waypoint xsi:type="dc:Point" x="894" y="120" /> + <di:waypoint xsi:type="dc:Point" x="952" y="120" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="878" y="99" width="90" height="12" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0xndboi_di" bpmnElement="SequenceFlow_0xndboi"> + <di:waypoint xsi:type="dc:Point" x="365" y="256" /> + <di:waypoint xsi:type="dc:Point" x="452" y="256" /> + <di:waypoint xsi:type="dc:Point" x="452" y="256" /> + <di:waypoint xsi:type="dc:Point" x="539" y="256" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="422" y="249.5" width="90" height="13" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_0krf1ur_di" bpmnElement="Setup_AAI_Inventory_Audit"> + <dc:Bounds x="265" y="216" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ServiceTask_08rxjeb_di" bpmnElement="Audit_AAI_Inventory"> + <dc:Bounds x="539" y="216" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="BoundaryEvent_0s7rszu_di" bpmnElement="BoundaryEvent_1nb1hw4"> + <dc:Bounds x="575" y="278" width="36" height="36" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="548" y="317" width="90" height="13" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_1t99ceh_di" bpmnElement="SequenceFlow_1t99ceh"> + <di:waypoint xsi:type="dc:Point" x="593" y="314" /> + <di:waypoint xsi:type="dc:Point" x="593" y="348" /> + <di:waypoint xsi:type="dc:Point" x="593" y="348" /> + <di:waypoint xsi:type="dc:Point" x="593" y="371" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="563" y="341.5" width="90" height="13" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_0eujimg_di" bpmnElement="Task_0swpw3v"> + <dc:Bounds x="543" y="371" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ExclusiveGateway_1v8bmbu_di" bpmnElement="ExclusiveGateway_1v8bmbu" isMarkerVisible="true"> + <dc:Bounds x="290" y="95" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="315" y="148" width="0" height="13" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_07ybdik_di" bpmnElement="SequenceFlow_07ybdik"> + <di:waypoint xsi:type="dc:Point" x="340" y="120" /> + <di:waypoint xsi:type="dc:Point" x="539" y="120" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="439.5" y="98.5" width="0" height="13" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0ghzwlo_di" bpmnElement="SequenceFlow_0ghzwlo"> + <di:waypoint xsi:type="dc:Point" x="315" y="145" /> + <di:waypoint xsi:type="dc:Point" x="315" y="216" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="330" y="174" width="0" height="13" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0ee42yq_di" bpmnElement="SequenceFlow_0ee42yq"> + <di:waypoint xsi:type="dc:Point" x="589" y="216" /> + <di:waypoint xsi:type="dc:Point" x="589" y="193" /> + <di:waypoint xsi:type="dc:Point" x="589" y="193" /> + <di:waypoint xsi:type="dc:Point" x="589" y="160" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="604" y="186.5" width="0" height="13" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_1eg5ryx_di" bpmnElement="CheckAuditVariable"> + <dc:Bounds x="161" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_1xqyur9_di" bpmnElement="SequenceFlow_1xqyur9"> + <di:waypoint xsi:type="dc:Point" x="261" y="120" /> + <di:waypoint xsi:type="dc:Point" x="290" y="120" /> <bpmndi:BPMNLabel> - <dc:Bounds x="560" y="99" width="0" height="12" /> + <dc:Bounds x="275.5" y="98.5" width="0" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn index bd126de24e..97fad57e7d 100644 --- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn +++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0"> +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0"> <bpmn:process id="CreateVfModuleBB" name="CreateVfModuleBB" isExecutable="true"> <bpmn:startEvent id="CreateVfModuleBB_Start"> <bpmn:outgoing>SequenceFlow_1xr6chl</bpmn:outgoing> @@ -10,7 +10,7 @@ </bpmn:serviceTask> <bpmn:sequenceFlow id="SequenceFlow_1xr6chl" sourceRef="CreateVfModuleBB_Start" targetRef="QueryVnf" /> <bpmn:endEvent id="CreateVfModuleBB_End"> - <bpmn:incoming>SequenceFlow_1stomxq</bpmn:incoming> + <bpmn:incoming>SequenceFlow_1vbwdaw</bpmn:incoming> </bpmn:endEvent> <bpmn:serviceTask id="CreateVfModule" name="Create VF Module (VNF)" camunda:expression="${VnfAdapterCreateTasks.createVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> <bpmn:incoming>SequenceFlow_15hn8si</bpmn:incoming> @@ -23,26 +23,28 @@ <bpmn:outgoing>SequenceFlow_1s4rpyp</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="SequenceFlow_16g4dz0" sourceRef="CreateVfModule" targetRef="VnfAdapter" /> - <bpmn:sequenceFlow id="SequenceFlow_0ecr393" sourceRef="VnfAdapter" targetRef="UpdateVfModuleHeatStackId" /> + <bpmn:sequenceFlow id="SequenceFlow_0ecr393" sourceRef="VnfAdapter" targetRef="CreateNetworkPolicies" /> <bpmn:callActivity id="VnfAdapter" name="Vnf Adapter" calledElement="VnfAdapter"> <bpmn:extensionElements> <camunda:in source="gBuildingBlockExecution" target="gBuildingBlockExecution" /> <camunda:out source="WorkflowException" target="WorkflowException" /> <camunda:in source="VNFREST_Request" target="VNFREST_Request" /> <camunda:out source="heatStackId" target="heatStackId" /> + <camunda:out source="contrailServiceInstanceFqdn" target="contrailServiceInstanceFqdn" /> + <camunda:out source="oamManagementV4Address" target="oamManagementV4Address" /> + <camunda:out source="oamManagementV6Address" target="oamManagementV6Address" /> + <camunda:out source="contrailNetworkPolicyFqdnList" target="contrailNetworkPolicyFqdnList" /> </bpmn:extensionElements> <bpmn:incoming>SequenceFlow_16g4dz0</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0ecr393</bpmn:outgoing> </bpmn:callActivity> - <bpmn:sequenceFlow id="SequenceFlow_1stomxq" sourceRef="UpdateVfModuleStatus" targetRef="CreateVfModuleBB_End" /> <bpmn:serviceTask id="UpdateVfModuleStatus" name=" AAI Update (vf module) " camunda:expression="${AAIUpdateTasks.updateOrchestrationStatusCreatedVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> - <bpmn:incoming>SequenceFlow_0qqsilv</bpmn:incoming> - <bpmn:outgoing>SequenceFlow_1stomxq</bpmn:outgoing> + <bpmn:incoming>SequenceFlow_0rds4rj</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_1vbwdaw</bpmn:outgoing> </bpmn:serviceTask> - <bpmn:sequenceFlow id="SequenceFlow_0qqsilv" sourceRef="UpdateVfModuleHeatStackId" targetRef="UpdateVfModuleStatus" /> <bpmn:serviceTask id="UpdateVfModuleHeatStackId" name=" AAI Update (vf module) " camunda:expression="${AAIUpdateTasks.updateHeatStackIdVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> - <bpmn:incoming>SequenceFlow_0ecr393</bpmn:incoming> - <bpmn:outgoing>SequenceFlow_0qqsilv</bpmn:outgoing> + <bpmn:incoming>SequenceFlow_15do1tu</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0rds4rj</bpmn:outgoing> </bpmn:serviceTask> <bpmn:subProcess id="SubProcess_1getwnf" name="Error Handling " triggeredByEvent="true"> <bpmn:startEvent id="StartEvent_1c8o652"> @@ -55,29 +57,51 @@ </bpmn:endEvent> <bpmn:sequenceFlow id="SequenceFlow_0gcots6" sourceRef="StartEvent_1c8o652" targetRef="EndEvent_1emam1w" /> </bpmn:subProcess> + <bpmn:sequenceFlow id="SequenceFlow_0rds4rj" sourceRef="UpdateVfModuleHeatStackId" targetRef="UpdateVfModuleStatus" /> + <bpmn:sequenceFlow id="SequenceFlow_1vbwdaw" sourceRef="UpdateVfModuleStatus" targetRef="CreateVfModuleBB_End" /> + <bpmn:serviceTask id="CreateNetworkPolicies" name="AAI Create (network policies)" camunda:expression="${AAICreateTasks.createNetworkPolicies(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0ecr393</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0xqhep5</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:sequenceFlow id="SequenceFlow_0xqhep5" sourceRef="CreateNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" /> + <bpmn:serviceTask id="UpdateVnfIpv4OamAddress" name="AAI Update (VNF) " camunda:expression="${AAIUpdateTasks.updateIpv4OamAddressVnf(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0xqhep5</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_1yo6mvv</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:sequenceFlow id="SequenceFlow_1yo6mvv" sourceRef="UpdateVnfIpv4OamAddress" targetRef="UpdateVnfManagementV6Address" /> + <bpmn:serviceTask id="UpdateVnfManagementV6Address" name="AAI Update (VNF)" camunda:expression="${AAIUpdateTasks.updateManagementV6AddressVnf(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_1yo6mvv</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_1i03uy2</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:sequenceFlow id="SequenceFlow_1i03uy2" sourceRef="UpdateVnfManagementV6Address" targetRef="UpdateVfModuleContrailServiceInstanceFqdn" /> + <bpmn:serviceTask id="UpdateVfModuleContrailServiceInstanceFqdn" name="AAI Update (vf module) " camunda:expression="${AAIUpdateTasks.updateContrailServiceInstanceFqdnVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_1i03uy2</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_15do1tu</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:sequenceFlow id="SequenceFlow_15do1tu" sourceRef="UpdateVfModuleContrailServiceInstanceFqdn" targetRef="UpdateVfModuleHeatStackId" /> </bpmn:process> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateVfModuleBB"> <bpmndi:BPMNShape id="StartEvent_0kxwniy_di" bpmnElement="CreateVfModuleBB_Start"> - <dc:Bounds x="100" y="88" width="36" height="36" /> + <dc:Bounds x="59" y="88" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="106" y="124" width="24" height="12" /> + <dc:Bounds x="77" y="124" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ServiceTask_13t22km_di" bpmnElement="QueryVfModule"> <dc:Bounds x="416" y="66" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1xr6chl_di" bpmnElement="SequenceFlow_1xr6chl"> - <di:waypoint xsi:type="dc:Point" x="136" y="106" /> + <di:waypoint xsi:type="dc:Point" x="95" y="106" /> <di:waypoint xsi:type="dc:Point" x="216" y="106" /> <bpmndi:BPMNLabel> - <dc:Bounds x="131" y="91" width="90" height="0" /> + <dc:Bounds x="156" y="91" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="EndEvent_0qdq7wj_di" bpmnElement="CreateVfModuleBB_End"> - <dc:Bounds x="1278" y="88" width="36" height="36" /> + <dc:Bounds x="1118" y="293" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="1286" y="128" width="19" height="12" /> + <dc:Bounds x="1136" y="333" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ServiceTask_1dgenhy_di" bpmnElement="CreateVfModule"> @@ -102,61 +126,107 @@ </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_16g4dz0_di" bpmnElement="SequenceFlow_16g4dz0"> <di:waypoint xsi:type="dc:Point" x="712" y="106" /> - <di:waypoint xsi:type="dc:Point" x="777" y="106" /> + <di:waypoint xsi:type="dc:Point" x="790" y="106" /> <bpmndi:BPMNLabel> - <dc:Bounds x="700" y="85" width="90" height="12" /> + <dc:Bounds x="751" y="91" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0ecr393_di" bpmnElement="SequenceFlow_0ecr393"> - <di:waypoint xsi:type="dc:Point" x="877" y="106" /> - <di:waypoint xsi:type="dc:Point" x="950" y="106" /> + <di:waypoint xsi:type="dc:Point" x="890" y="107" /> + <di:waypoint xsi:type="dc:Point" x="994" y="107" /> + <di:waypoint xsi:type="dc:Point" x="994" y="209" /> + <di:waypoint xsi:type="dc:Point" x="73" y="209" /> + <di:waypoint xsi:type="dc:Point" x="73" y="306" /> + <di:waypoint xsi:type="dc:Point" x="142" y="306" /> <bpmndi:BPMNLabel> - <dc:Bounds x="869" y="91" width="90" height="0" /> + <dc:Bounds x="534" y="194" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="CallActivity_1i1pfzb_di" bpmnElement="VnfAdapter"> - <dc:Bounds x="777" y="66" width="100" height="80" /> + <dc:Bounds x="790" y="66" width="100" height="80" /> </bpmndi:BPMNShape> - <bpmndi:BPMNEdge id="SequenceFlow_1stomxq_di" bpmnElement="SequenceFlow_1stomxq"> - <di:waypoint xsi:type="dc:Point" x="1214" y="106" /> - <di:waypoint xsi:type="dc:Point" x="1278" y="106" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="1201" y="91" width="90" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ServiceTask_0fpfn71_di" bpmnElement="UpdateVfModuleStatus"> - <dc:Bounds x="1114" y="66" width="100" height="80" /> + <dc:Bounds x="942" y="271" width="100" height="80" /> </bpmndi:BPMNShape> - <bpmndi:BPMNEdge id="SequenceFlow_0qqsilv_di" bpmnElement="SequenceFlow_0qqsilv"> - <di:waypoint xsi:type="dc:Point" x="1050" y="106" /> - <di:waypoint xsi:type="dc:Point" x="1114" y="106" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="1037" y="91" width="90" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ServiceTask_04k1b85_di" bpmnElement="UpdateVfModuleHeatStackId"> - <dc:Bounds x="950" y="66" width="100" height="80" /> + <dc:Bounds x="777" y="271" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="SubProcess_1getwnf_di" bpmnElement="SubProcess_1getwnf" isExpanded="true"> - <dc:Bounds x="172" y="276" width="231" height="135" /> + <dc:Bounds x="136" y="439" width="231" height="135" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="StartEvent_1c8o652_di" bpmnElement="StartEvent_1c8o652"> - <dc:Bounds x="211" y="334" width="36" height="36" /> + <dc:Bounds x="175" y="497" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="184" y="370" width="0" height="12" /> + <dc:Bounds x="148" y="533" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="EndEvent_1emam1w_di" bpmnElement="EndEvent_1emam1w"> - <dc:Bounds x="348" y="334" width="36" height="36" /> + <dc:Bounds x="312" y="497" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="321" y="370" width="0" height="12" /> + <dc:Bounds x="285" y="533" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0gcots6_di" bpmnElement="SequenceFlow_0gcots6"> - <di:waypoint xsi:type="dc:Point" x="247" y="352" /> - <di:waypoint xsi:type="dc:Point" x="348" y="352" /> + <di:waypoint xsi:type="dc:Point" x="211" y="515" /> + <di:waypoint xsi:type="dc:Point" x="312" y="515" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="262" y="494" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0rds4rj_di" bpmnElement="SequenceFlow_0rds4rj"> + <di:waypoint xsi:type="dc:Point" x="877" y="311" /> + <di:waypoint xsi:type="dc:Point" x="942" y="311" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="910" y="296" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_1vbwdaw_di" bpmnElement="SequenceFlow_1vbwdaw"> + <di:waypoint xsi:type="dc:Point" x="1042" y="311" /> + <di:waypoint xsi:type="dc:Point" x="1083" y="311" /> + <di:waypoint xsi:type="dc:Point" x="1083" y="311" /> + <di:waypoint xsi:type="dc:Point" x="1118" y="311" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1098" y="311" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_1v8zx4s_di" bpmnElement="CreateNetworkPolicies"> + <dc:Bounds x="142" y="271" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_0xqhep5_di" bpmnElement="SequenceFlow_0xqhep5"> + <di:waypoint xsi:type="dc:Point" x="242" y="311" /> + <di:waypoint xsi:type="dc:Point" x="295" y="311" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="269" y="296" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_015ayw5_di" bpmnElement="UpdateVnfIpv4OamAddress"> + <dc:Bounds x="295" y="271" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_1yo6mvv_di" bpmnElement="SequenceFlow_1yo6mvv"> + <di:waypoint xsi:type="dc:Point" x="395" y="311" /> + <di:waypoint xsi:type="dc:Point" x="464" y="311" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="430" y="296" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_0mlfsc9_di" bpmnElement="UpdateVnfManagementV6Address"> + <dc:Bounds x="464" y="271" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_1i03uy2_di" bpmnElement="SequenceFlow_1i03uy2"> + <di:waypoint xsi:type="dc:Point" x="564" y="311" /> + <di:waypoint xsi:type="dc:Point" x="612" y="311" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="588" y="296" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_0wctnhw_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn"> + <dc:Bounds x="612" y="271" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_15do1tu_di" bpmnElement="SequenceFlow_15do1tu"> + <di:waypoint xsi:type="dc:Point" x="712" y="311" /> + <di:waypoint xsi:type="dc:Point" x="777" y="311" /> <bpmndi:BPMNLabel> - <dc:Bounds x="297.5" y="331" width="0" height="12" /> + <dc:Bounds x="745" y="286" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn index 5cf41b655b..804ae70c58 100644 --- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn +++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn @@ -24,11 +24,15 @@ <camunda:in source="deleteVfModuleRequest" target="deleteVfModuleRequest" /> <camunda:in source="VNFREST_Request" target="VNFREST_Request" /> <camunda:out source="heatStackId" target="heatStackId" /> + <camunda:out source="oamManagementV4Address" target="oamManagementV4Address" /> + <camunda:out source="oamManagementV6Address" target="oamManagementV6Address" /> + <camunda:out source="contrailNetworkPolicyFqdnList" target="contrailNetworkPolicyFqdnList" /> + <camunda:out source="contrailServiceInstanceFqdn" target="contrailServiceInstanceFqdn" /> </bpmn:extensionElements> <bpmn:incoming>SequenceFlow_08tvhtf</bpmn:incoming> <bpmn:outgoing>SequenceFlow_02lpx87</bpmn:outgoing> </bpmn:callActivity> - <bpmn:sequenceFlow id="SequenceFlow_02lpx87" sourceRef="VnfAdapter" targetRef="UpdateVfModuleHeatStackId" /> + <bpmn:sequenceFlow id="SequenceFlow_02lpx87" sourceRef="VnfAdapter" targetRef="DeleteNetworkPolicies" /> <bpmn:subProcess id="SubProcess_11p7mrh" name="Error Handling " triggeredByEvent="true"> <bpmn:startEvent id="StartEvent_1xp6ewt"> <bpmn:outgoing>SequenceFlow_0h607z0</bpmn:outgoing> @@ -41,11 +45,31 @@ <bpmn:sequenceFlow id="SequenceFlow_0h607z0" sourceRef="StartEvent_1xp6ewt" targetRef="EndEvent_0guhjau" /> </bpmn:subProcess> <bpmn:serviceTask id="UpdateVfModuleHeatStackId" name=" AAI Update (vf module) " camunda:expression="${AAIUpdateTasks.updateHeatStackIdVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> - <bpmn:incoming>SequenceFlow_02lpx87</bpmn:incoming> + <bpmn:incoming>SequenceFlow_0yuz21z</bpmn:incoming> <bpmn:outgoing>SequenceFlow_01vfwtp</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="SequenceFlow_01vfwtp" sourceRef="UpdateVfModuleHeatStackId" targetRef="UpdateVfModuleDeleteStatus" /> <bpmn:sequenceFlow id="SequenceFlow_09l7pcg" sourceRef="UpdateVfModuleDeleteStatus" targetRef="DeleteVfModuleBB_End" /> + <bpmn:sequenceFlow id="SequenceFlow_0xyu3pk" sourceRef="DeleteNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" /> + <bpmn:serviceTask id="DeleteNetworkPolicies" name="AAI Delete (network policies)" camunda:expression="${AAIDeleteTasks.deleteNetworkPolicies(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_02lpx87</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0xyu3pk</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:serviceTask id="UpdateVnfManagementV6Address" name="AAI Update (VNF)" camunda:expression="${AAIUpdateTasks.updateManagementV6AddressVnf(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0jtem3b</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0khqfnc</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:sequenceFlow id="SequenceFlow_0jtem3b" sourceRef="UpdateVnfIpv4OamAddress" targetRef="UpdateVnfManagementV6Address" /> + <bpmn:serviceTask id="UpdateVnfIpv4OamAddress" name="AAI Update (VNF)" camunda:expression="${AAIUpdateTasks.updateIpv4OamAddressVnf(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0xyu3pk</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0jtem3b</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:sequenceFlow id="SequenceFlow_0khqfnc" sourceRef="UpdateVnfManagementV6Address" targetRef="UpdateVfModuleContrailServiceInstanceFqdn" /> + <bpmn:sequenceFlow id="SequenceFlow_0yuz21z" sourceRef="UpdateVfModuleContrailServiceInstanceFqdn" targetRef="UpdateVfModuleHeatStackId" /> + <bpmn:serviceTask id="UpdateVfModuleContrailServiceInstanceFqdn" name="AAI Update (vf module) " camunda:expression="${AAIUpdateTasks.updateContrailServiceInstanceFqdnVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0khqfnc</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0yuz21z</bpmn:outgoing> + </bpmn:serviceTask> </bpmn:process> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DeleteVfModuleBB"> @@ -66,7 +90,7 @@ </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ServiceTask_0pbhsub_di" bpmnElement="UpdateVfModuleDeleteStatus"> - <dc:Bounds x="762" y="80" width="100" height="80" /> + <dc:Bounds x="758" y="243" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_08tvhtf_di" bpmnElement="SequenceFlow_08tvhtf"> <di:waypoint xsi:type="dc:Point" x="361" y="120" /> @@ -76,9 +100,9 @@ </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="EndEvent_1rn6yvh_di" bpmnElement="DeleteVfModuleBB_End"> - <dc:Bounds x="922" y="102" width="36" height="36" /> + <dc:Bounds x="918" y="265" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="940" y="142" width="0" height="0" /> + <dc:Bounds x="936" y="305" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="CallActivity_0whogn3_di" bpmnElement="VnfAdapter"> @@ -86,50 +110,94 @@ </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_02lpx87_di" bpmnElement="SequenceFlow_02lpx87"> <di:waypoint xsi:type="dc:Point" x="527" y="120" /> - <di:waypoint xsi:type="dc:Point" x="604" y="120" /> + <di:waypoint xsi:type="dc:Point" x="591" y="120" /> <bpmndi:BPMNLabel> - <dc:Bounds x="566" y="105" width="0" height="0" /> + <dc:Bounds x="559" y="105" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="SubProcess_11p7mrh_di" bpmnElement="SubProcess_11p7mrh" isExpanded="true"> - <dc:Bounds x="261" y="276" width="231" height="135" /> + <dc:Bounds x="295" y="412" width="231" height="135" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="StartEvent_1xp6ewt_di" bpmnElement="StartEvent_1xp6ewt"> - <dc:Bounds x="304" y="338" width="36" height="36" /> + <dc:Bounds x="338" y="474" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="277" y="374" width="0" height="12" /> + <dc:Bounds x="311" y="510" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="EndEvent_0guhjau_di" bpmnElement="EndEvent_0guhjau"> - <dc:Bounds x="433" y="338" width="36" height="36" /> + <dc:Bounds x="467" y="474" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="406" y="374" width="0" height="12" /> + <dc:Bounds x="440" y="510" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0h607z0_di" bpmnElement="SequenceFlow_0h607z0"> - <di:waypoint xsi:type="dc:Point" x="340" y="356" /> - <di:waypoint xsi:type="dc:Point" x="433" y="356" /> + <di:waypoint xsi:type="dc:Point" x="374" y="492" /> + <di:waypoint xsi:type="dc:Point" x="467" y="492" /> <bpmndi:BPMNLabel> - <dc:Bounds x="386.5" y="335" width="0" height="12" /> + <dc:Bounds x="421" y="471" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ServiceTask_0vlgqod_di" bpmnElement="UpdateVfModuleHeatStackId"> - <dc:Bounds x="604" y="80" width="100" height="80" /> + <dc:Bounds x="591" y="243" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_01vfwtp_di" bpmnElement="SequenceFlow_01vfwtp"> - <di:waypoint xsi:type="dc:Point" x="704" y="120" /> - <di:waypoint xsi:type="dc:Point" x="762" y="120" /> + <di:waypoint xsi:type="dc:Point" x="691" y="283" /> + <di:waypoint xsi:type="dc:Point" x="758" y="283" /> <bpmndi:BPMNLabel> - <dc:Bounds x="733" y="95" width="0" height="0" /> + <dc:Bounds x="725" y="268" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_09l7pcg_di" bpmnElement="SequenceFlow_09l7pcg"> - <di:waypoint xsi:type="dc:Point" x="862" y="120" /> - <di:waypoint xsi:type="dc:Point" x="922" y="120" /> + <di:waypoint xsi:type="dc:Point" x="858" y="283" /> + <di:waypoint xsi:type="dc:Point" x="918" y="283" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="888" y="258" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0xyu3pk_di" bpmnElement="SequenceFlow_0xyu3pk"> + <di:waypoint xsi:type="dc:Point" x="691" y="120" /> + <di:waypoint xsi:type="dc:Point" x="751" y="120" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="721" y="105" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_0tty0ac_di" bpmnElement="DeleteNetworkPolicies"> + <dc:Bounds x="591" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ServiceTask_0lrrd16_di" bpmnElement="UpdateVnfManagementV6Address"> + <dc:Bounds x="261" y="243" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_0jtem3b_di" bpmnElement="SequenceFlow_0jtem3b"> + <di:waypoint xsi:type="dc:Point" x="851" y="120" /> + <di:waypoint xsi:type="dc:Point" x="941" y="120" /> + <di:waypoint xsi:type="dc:Point" x="941" y="205" /> + <di:waypoint xsi:type="dc:Point" x="182" y="205" /> + <di:waypoint xsi:type="dc:Point" x="182" y="283" /> + <di:waypoint xsi:type="dc:Point" x="261" y="283" /> <bpmndi:BPMNLabel> - <dc:Bounds x="892" y="95" width="0" height="0" /> + <dc:Bounds x="562" y="190" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_0w9805b_di" bpmnElement="UpdateVnfIpv4OamAddress"> + <dc:Bounds x="751" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_0khqfnc_di" bpmnElement="SequenceFlow_0khqfnc"> + <di:waypoint xsi:type="dc:Point" x="361" y="283" /> + <di:waypoint xsi:type="dc:Point" x="427" y="283" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="394" y="268" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0yuz21z_di" bpmnElement="SequenceFlow_0yuz21z"> + <di:waypoint xsi:type="dc:Point" x="527" y="283" /> + <di:waypoint xsi:type="dc:Point" x="591" y="283" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="559" y="268" width="0" height="0" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ServiceTask_0v8naz9_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn"> + <dc:Bounds x="427" y="243" width="100" height="80" /> + </bpmndi:BPMNShape> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </bpmn:definitions> diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ExecuteBuildingBlock.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ExecuteBuildingBlock.bpmn index 9be4cd0473..5189f8b48a 100644 --- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ExecuteBuildingBlock.bpmn +++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/ExecuteBuildingBlock.bpmn @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0"> +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.8.2"> <bpmn:process id="ExecuteBuildingBlock" name="ExecuteBuildingBlock" isExecutable="true"> <bpmn:startEvent id="Start_ExecuteBuildingBlock" name="start"> <bpmn:outgoing>SequenceFlow_0rq4c5r</bpmn:outgoing> @@ -37,7 +37,7 @@ <bpmn:subProcess id="SubProcess_0tv8zda" name="Error Handling " triggeredByEvent="true"> <bpmn:startEvent id="StartEvent_0tmcs9g"> <bpmn:outgoing>SequenceFlow_09synl9</bpmn:outgoing> - <bpmn:errorEventDefinition /> + <bpmn:errorEventDefinition camunda:errorCodeVariable="WorkflowExceptionCode" camunda:errorMessageVariable="WorkflowExceptionMessage" /> </bpmn:startEvent> <bpmn:sequenceFlow id="SequenceFlow_09synl9" sourceRef="StartEvent_0tmcs9g" targetRef="Task_QueryRainyDayTable" /> <bpmn:serviceTask id="Task_QueryRainyDayTable" name="QueryRainyDayTable" camunda:expression="${ExecuteBuildingBlockRainyDay.queryRainyDayTable(execution,true)}"> @@ -73,7 +73,7 @@ <bpmn:sequenceFlow id="SequenceFlow_0ndt8ft" sourceRef="Task_SetRetryTimer" targetRef="IntermediateCatchEvent_RetryTimer" /> <bpmn:sequenceFlow id="SequenceFlow_07a1ytc" sourceRef="IntermediateCatchEvent_RetryTimer" targetRef="EndEvent_1sez2lh" /> <bpmn:sequenceFlow id="SequenceFlow_1wbevp0" name="yes" sourceRef="ExclusiveGateway_0ey4zpt" targetRef="Task_SetRetryTimer"> - <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("retryCount")<5}]]></bpmn:conditionExpression> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("retryCount")<execution.getVariable("maxRetries")}]]></bpmn:conditionExpression> </bpmn:sequenceFlow> <bpmn:endEvent id="EndEvent_0mvmk3i"> <bpmn:incoming>SequenceFlow_0h8v45y</bpmn:incoming> @@ -114,6 +114,11 @@ </bpmn:process> <bpmn:error id="Error_0tnktdw" name="Error" errorCode="java.lang.Exception" /> <bpmn:error id="Error_17zcdbk" name="Bpmn Error" /> + <bpmn:error id="Error_123q3fr" name="Error_1h13m8l" /> + <bpmn:error id="Error_1ivyybb" name="Error_1e4p3cf" /> + <bpmn:error id="Error_1c60d7i" name="Error_0qrs661" /> + <bpmn:error id="Error_1owi18u" name="Error_2eiqdl7" /> + <bpmn:error id="Error_0snha16" /> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="ExecuteBuildingBlock"> <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="Start_ExecuteBuildingBlock"> @@ -156,63 +161,63 @@ </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ExclusiveGateway_0ey4zpt_di" bpmnElement="ExclusiveGateway_0ey4zpt" isMarkerVisible="true"> - <dc:Bounds x="724" y="367" width="50" height="50" /> + <dc:Bounds x="721" y="385" width="50" height="50" /> <bpmndi:BPMNLabel> - <dc:Bounds x="719" y="342" width="62" height="12" /> + <dc:Bounds x="716" y="360" width="63" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="IntermediateCatchEvent_0qjyidb_di" bpmnElement="IntermediateCatchEvent_RetryTimer"> - <dc:Bounds x="968" y="374" width="36" height="36" /> + <dc:Bounds x="965" y="392" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="959" y="349" width="55" height="12" /> + <dc:Bounds x="956" y="367" width="55" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ExclusiveGateway_1aonzik_di" bpmnElement="ExclusiveGateway_1aonzik" isMarkerVisible="true"> - <dc:Bounds x="571" y="367" width="50" height="50" /> + <dc:Bounds x="568" y="385" width="50" height="50" /> <bpmndi:BPMNLabel> - <dc:Bounds x="562" y="329" width="68" height="24" /> + <dc:Bounds x="558" y="347" width="70" height="25" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1wbevp0_di" bpmnElement="SequenceFlow_1wbevp0"> - <di:waypoint xsi:type="dc:Point" x="774" y="392" /> - <di:waypoint xsi:type="dc:Point" x="839" y="392" /> + <di:waypoint xsi:type="dc:Point" x="771" y="410" /> + <di:waypoint xsi:type="dc:Point" x="836" y="410" /> <bpmndi:BPMNLabel> - <dc:Bounds x="790.2777777777778" y="367" width="18" height="12" /> + <dc:Bounds x="788" y="385" width="18" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0fwsjva_di" bpmnElement="SequenceFlow_0fwsjva"> - <di:waypoint xsi:type="dc:Point" x="621" y="392" /> - <di:waypoint xsi:type="dc:Point" x="724" y="392" /> + <di:waypoint xsi:type="dc:Point" x="618" y="410" /> + <di:waypoint xsi:type="dc:Point" x="721" y="410" /> <bpmndi:BPMNLabel> - <dc:Bounds x="659" y="400" width="27" height="12" /> + <dc:Bounds x="656" y="418" width="27" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0h8v45y_di" bpmnElement="SequenceFlow_0h8v45y"> - <di:waypoint xsi:type="dc:Point" x="596" y="417" /> - <di:waypoint xsi:type="dc:Point" x="596" y="473" /> + <di:waypoint xsi:type="dc:Point" x="593" y="435" /> + <di:waypoint xsi:type="dc:Point" x="593" y="491" /> <bpmndi:BPMNLabel> - <dc:Bounds x="603" y="438" width="84" height="12" /> + <dc:Bounds x="600" y="456" width="85" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ServiceTask_1tifgqh_di" bpmnElement="Task_QueryRainyDayTable"> - <dc:Bounds x="428" y="352" width="100" height="80" /> + <dc:Bounds x="425" y="370" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0ndt8ft_di" bpmnElement="SequenceFlow_0ndt8ft"> - <di:waypoint xsi:type="dc:Point" x="939" y="392" /> - <di:waypoint xsi:type="dc:Point" x="968" y="392" /> + <di:waypoint xsi:type="dc:Point" x="936" y="410" /> + <di:waypoint xsi:type="dc:Point" x="965" y="410" /> <bpmndi:BPMNLabel> - <dc:Bounds x="908.5" y="371" width="90" height="12" /> + <dc:Bounds x="906" y="389" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_07a1ytc_di" bpmnElement="SequenceFlow_07a1ytc"> - <di:waypoint xsi:type="dc:Point" x="1004" y="392" /> - <di:waypoint xsi:type="dc:Point" x="1042" y="392" /> + <di:waypoint xsi:type="dc:Point" x="1001" y="410" /> + <di:waypoint xsi:type="dc:Point" x="1039" y="410" /> <bpmndi:BPMNLabel> - <dc:Bounds x="978" y="371" width="90" height="12" /> + <dc:Bounds x="975" y="389" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ServiceTask_1obvxht_di" bpmnElement="Task_SetRetryTimer"> - <dc:Bounds x="839" y="352" width="100" height="80" /> + <dc:Bounds x="836" y="370" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0kdjsnx_di" bpmnElement="Continue"> <di:waypoint xsi:type="dc:Point" x="508" y="180" /> @@ -238,38 +243,38 @@ </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0a62t4c_di" bpmnElement="SequenceFlow_0a62t4c"> - <di:waypoint xsi:type="dc:Point" x="528" y="392" /> - <di:waypoint xsi:type="dc:Point" x="571" y="392" /> + <di:waypoint xsi:type="dc:Point" x="525" y="410" /> + <di:waypoint xsi:type="dc:Point" x="568" y="410" /> <bpmndi:BPMNLabel> - <dc:Bounds x="505" y="371" width="90" height="13" /> + <dc:Bounds x="502" y="389" width="90" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="SubProcess_0tv8zda_di" bpmnElement="SubProcess_0tv8zda" isExpanded="true"> - <dc:Bounds x="323" y="276" width="802" height="290" /> + <dc:Bounds x="320" y="294" width="802" height="290" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="StartEvent_0tmcs9g_di" bpmnElement="StartEvent_0tmcs9g"> - <dc:Bounds x="343" y="374" width="36" height="36" /> + <dc:Bounds x="340" y="392" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="226" y="410" width="90" height="12" /> + <dc:Bounds x="223" y="428" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_09synl9_di" bpmnElement="SequenceFlow_09synl9"> - <di:waypoint xsi:type="dc:Point" x="379" y="392" /> - <di:waypoint xsi:type="dc:Point" x="428" y="392" /> + <di:waypoint xsi:type="dc:Point" x="376" y="410" /> + <di:waypoint xsi:type="dc:Point" x="425" y="410" /> <bpmndi:BPMNLabel> - <dc:Bounds x="359" y="371" width="90" height="12" /> + <dc:Bounds x="356" y="389" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="EndEvent_0mvmk3i_di" bpmnElement="EndEvent_0mvmk3i"> - <dc:Bounds x="578" y="473" width="36" height="36" /> + <dc:Bounds x="575" y="491" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="551" y="513" width="90" height="12" /> + <dc:Bounds x="548" y="531" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="EndEvent_1aww7yx_di" bpmnElement="EndEvent_1sez2lh"> - <dc:Bounds x="1042" y="374" width="36" height="36" /> + <dc:Bounds x="1039" y="392" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="1052" y="414" width="18" height="12" /> + <dc:Bounds x="1049" y="432" width="19" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_16lmcxp_di" bpmnElement="SequenceFlow_16lmcxp"> @@ -312,27 +317,27 @@ <dc:Bounds x="906" y="140" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0541bid_di" bpmnElement="SequenceFlow_0541bid"> - <di:waypoint xsi:type="dc:Point" x="749" y="417" /> - <di:waypoint xsi:type="dc:Point" x="749" y="441" /> + <di:waypoint xsi:type="dc:Point" x="746" y="435" /> + <di:waypoint xsi:type="dc:Point" x="746" y="459" /> <bpmndi:BPMNLabel> - <dc:Bounds x="760" y="418" width="12" height="12" /> + <dc:Bounds x="757" y="436" width="13" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_12ps9at_di" bpmnElement="SequenceFlow_12ps9at"> - <di:waypoint xsi:type="dc:Point" x="799" y="481" /> - <di:waypoint xsi:type="dc:Point" x="871" y="481" /> + <di:waypoint xsi:type="dc:Point" x="796" y="499" /> + <di:waypoint xsi:type="dc:Point" x="868" y="499" /> <bpmndi:BPMNLabel> - <dc:Bounds x="835" y="460" width="0" height="12" /> + <dc:Bounds x="787" y="478" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="EndEvent_05vw85n_di" bpmnElement="EndEvent_0ex9298"> - <dc:Bounds x="871" y="463" width="36" height="36" /> + <dc:Bounds x="868" y="481" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="880" y="503" width="18" height="12" /> + <dc:Bounds x="877" y="521" width="19" height="13" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ServiceTask_11f2c91_di" bpmnElement="Task_QuerySecondaryPolicy"> - <dc:Bounds x="699" y="441" width="100" height="80" /> + <dc:Bounds x="696" y="459" width="100" height="80" /> </bpmndi:BPMNShape> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn index 70ae02b0fe..81d3226037 100644 --- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn +++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn @@ -22,7 +22,6 @@ <camunda:out source="orchestrationStatusValidationResult" target="orchestrationStatusValidationResult" /> <camunda:out source="RetryDuration" target="RetryDuration" /> <camunda:in source="suppressRollback" target="suppressRollback" /> - <camunda:out source="WorkflowException" target="WorkflowException" /> </bpmn:extensionElements> <bpmn:incoming>SequenceFlow_0mew9im</bpmn:incoming> <bpmn:outgoing>SequenceFlow_07h9d4y</bpmn:outgoing> diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java index 1e3f175cf1..79bade3cf3 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java +++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/BaseBPMNTest.java @@ -23,7 +23,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - +import org.camunda.bpm.engine.ExternalTaskService; import org.camunda.bpm.engine.RepositoryService; import org.camunda.bpm.engine.RuntimeService; import org.camunda.bpm.extension.mockito.mock.FluentJavaDelegateMock; @@ -50,6 +50,8 @@ import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterCreateTasks; import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterDeleteTasks; import org.onap.so.bpmn.infrastructure.adapter.vnf.tasks.VnfAdapterImpl; import org.onap.so.bpmn.infrastructure.appc.tasks.AppcRunTasks; +import org.onap.so.bpmn.infrastructure.audit.AuditTasks; +import org.onap.so.bpmn.infrastructure.flowspecific.tasks.ActivateVfModule; import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetwork; import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetworkBBUtils; import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignVnf; @@ -93,6 +95,9 @@ public abstract class BaseBPMNTest { protected RuntimeService runtimeService; @Autowired + protected ExternalTaskService externalTaskService; + + @Autowired private RepositoryService repositoryService; protected Map<String, Object> variables = new HashMap<>(); @@ -171,6 +176,9 @@ public abstract class BaseBPMNTest { protected AAICommonTasks aaiCommonTasks; @MockBean + protected ActivateVfModule activateVfModule; + + @MockBean protected AssignVnf assignVnf; @MockBean @@ -223,6 +231,9 @@ public abstract class BaseBPMNTest { @MockBean protected WorkflowActionBBFailure workflowActionBBFailure; + + @MockBean + protected AuditTasks auditTasks; @LocalServerPort protected int port; diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVfModuleBBTest.java index 2c2777154d..9ffcd9d77a 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVfModuleBBTest.java +++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/ActivateVfModuleBBTest.java @@ -21,23 +21,43 @@ package org.onap.so.bpmn.infrastructure.bpmn.subprocess; import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareAssertions.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; - import java.io.IOException; +import java.util.List; import org.camunda.bpm.engine.delegate.BpmnError; +import org.camunda.bpm.engine.externaltask.LockedExternalTask; import org.camunda.bpm.engine.runtime.ProcessInstance; +import org.junit.Before; import org.junit.Test; import org.onap.so.bpmn.BaseBPMNTest; import org.onap.so.bpmn.common.BuildingBlockExecution; public class ActivateVfModuleBBTest extends BaseBPMNTest{ + + @Before + public void before() { + variables.put("vfModuleActivateTimerDuration", "PT2S"); + variables.put("auditInventoryNeeded", "true"); + } + @Test public void sunnyDay() throws InterruptedException, IOException { mockSubprocess("SDNCHandler", "My Mock Process Name", "GenericStub"); ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVfModuleBB", variables); + List<LockedExternalTask> tasks = externalTaskService.fetchAndLock(100, "externalWorkerId") + .topic("InventoryAudit", 60L * 1000L).execute(); + while (!tasks.isEmpty()) { + for (LockedExternalTask task : tasks) { + externalTaskService.complete(task.getId(), "externalWorkerId"); + } + tasks = externalTaskService.fetchAndLock(100, "externalWorkerId") + .topic("InventoryAudit", 60L * 1000L).execute(); + } + assertThat(pi).isNotNull(); - assertThat(pi).isStarted().hasPassedInOrder("ActivateVfModuleBB_Start", "ActivateVfModule", "CallActivity_sdncHandler", + assertThat(pi).isStarted().hasPassedInOrder("ActivateVfModuleBB_Start","ExclusiveGateway_1v8bmbu","Setup_AAI_Inventory_Audit", "Audit_AAI_Inventory", "ActivateVfModule", "CallActivity_sdncHandler", "UpdateVfModuleActiveStatus", "ActivateVfModuleBB_End"); assertThat(pi).isEnded(); } @@ -47,8 +67,18 @@ public class ActivateVfModuleBBTest extends BaseBPMNTest{ mockSubprocess("SDNCHandler", "My Mock Process Name", "GenericStub"); doThrow(BpmnError.class).when(aaiUpdateTasks).updateOrchestrationStatusActivateVfModule(any(BuildingBlockExecution.class)); ProcessInstance pi = runtimeService.startProcessInstanceByKey("ActivateVfModuleBB", variables); + List<LockedExternalTask> tasks = externalTaskService.fetchAndLock(100, "externalWorkerId") + .topic("InventoryAudit", 60L * 1000L).execute(); + while (!tasks.isEmpty()) { + for (LockedExternalTask task : tasks) { + externalTaskService.complete(task.getId(), "externalWorkerId"); + } + tasks = externalTaskService.fetchAndLock(100, "externalWorkerId") + .topic("InventoryAudit", 60L * 1000L).execute(); + } + assertThat(pi).isNotNull().isStarted() - .hasPassedInOrder("ActivateVfModuleBB_Start", "ActivateVfModule", "UpdateVfModuleActiveStatus") + .hasPassedInOrder("ActivateVfModuleBB_Start","ExclusiveGateway_1v8bmbu","Setup_AAI_Inventory_Audit", "Audit_AAI_Inventory", "ActivateVfModule", "UpdateVfModuleActiveStatus") .hasNotPassed("ActivateVfModuleBB_End"); } } diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVfModuleBBTest.java index 0e4bb5a194..8c44309cca 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVfModuleBBTest.java +++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVfModuleBBTest.java @@ -40,6 +40,10 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{ "QueryVfModule", "CreateVfModule", "VnfAdapter", + "CreateNetworkPolicies", + "UpdateVnfIpv4OamAddress", + "UpdateVnfManagementV6Address", + "UpdateVfModuleContrailServiceInstanceFqdn", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End"); @@ -53,7 +57,9 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{ assertThat(pi).isNotNull(); assertThat(pi).isStarted() .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf") - .hasNotPassed("QueryVfModule", "CreateVfModule", "VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End"); + .hasNotPassed("QueryVfModule", "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress", + "UpdateVnfManagementV6Address","UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", + "UpdateVfModuleStatus", "CreateVfModuleBB_End"); assertThat(pi).isEnded(); } @@ -64,7 +70,8 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{ assertThat(pi).isNotNull(); assertThat(pi).isStarted() .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule") - .hasNotPassed("CreateVfModule", "VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End"); + .hasNotPassed("CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", + "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End"); assertThat(pi).isEnded(); } @@ -75,7 +82,8 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{ assertThat(pi).isNotNull(); assertThat(pi).isStarted() .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule") - .hasNotPassed("VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End"); + .hasNotPassed("VnfAdapter", "CreateNetworkPolicies","UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", + "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End"); assertThat(pi).isEnded(); } @@ -87,7 +95,8 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{ ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables); assertThat(pi).isNotNull(); assertThat(pi).isStarted() - .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "UpdateVfModuleHeatStackId") + .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", + "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId") .hasNotPassed("UpdateVfModuleStatus", "CreateVfModuleBB_End"); assertThat(pi).isEnded(); @@ -100,7 +109,9 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{ ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables); assertThat(pi).isNotNull(); assertThat(pi).isStarted() - .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus") + .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", + "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", + "UpdateVfModuleStatus") .hasNotPassed("CreateVfModuleBB_End"); assertThat(pi).isEnded(); } diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java index d9190b5e12..cedffb77d4 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java +++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java @@ -38,6 +38,8 @@ public class DeleteVfModuleBBTest extends BaseBPMNTest{ ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVfModuleBB", variables); assertThat(pi).isNotNull(); assertThat(pi).isStarted().hasPassedInOrder("DeleteVfModuleBB_Start", "DeleteVfModuleVnfAdapter", "VnfAdapter", + "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", + "UpdateVfModuleContrailServiceInstanceFqdn", "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End"); assertThat(pi).isEnded(); } @@ -49,7 +51,9 @@ public class DeleteVfModuleBBTest extends BaseBPMNTest{ assertThat(pi).isNotNull(); assertThat(pi).isStarted() .hasPassedInOrder("DeleteVfModuleBB_Start", "DeleteVfModuleVnfAdapter") - .hasNotPassed("VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End"); + .hasNotPassed("VnfAdapter", "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", + "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", + "DeleteVfModuleBB_End"); assertThat(pi).isEnded(); } } diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/FlowCompleteActivity.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/FlowCompleteActivity.java index 1ad2197a51..26e8fcb5b9 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/FlowCompleteActivity.java +++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/FlowCompleteActivity.java @@ -20,7 +20,7 @@ package org.onap.so.bpmn.infrastructure.bpmn.subprocess; import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doThrow; import org.camunda.bpm.engine.delegate.BpmnError; diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetworkBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetworkBBTest.java index 442d7b72c4..b65f30fa9a 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetworkBBTest.java +++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/UnassignNetworkBBTest.java @@ -21,7 +21,7 @@ package org.onap.so.bpmn.infrastructure.bpmn.subprocess; import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doThrow; import org.camunda.bpm.engine.delegate.BpmnError; diff --git a/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml b/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml index 1090ab7be4..c36172c3bf 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml +++ b/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml @@ -31,6 +31,10 @@ log: vnfAdapterCreateV1: 'true' vnfAdapterRestV1: 'true' mso: + infra: + auditInventory: true + customer: + id: testCustIdInfra adapters: completemsoprocess: endpoint: http://localhost:28090/CompleteMsoProcess @@ -96,9 +100,6 @@ mso: healthcheck: log: debug: 'false' - infra: - customer: - id: testCustIdInfra logPath: logs msoKey: 07a7159d3bf51a0e53be7a8f89699be7 po: diff --git a/bpmn/so-bpmn-building-blocks/src/test/resources/logback-test.xml b/bpmn/so-bpmn-building-blocks/src/test/resources/logback-test.xml index 64b6bfc81b..d8f6ba3930 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/resources/logback-test.xml +++ b/bpmn/so-bpmn-building-blocks/src/test/resources/logback-test.xml @@ -26,5 +26,5 @@ </root> <logger name="wiremock.org" level="DEBUG" /> -<logger name="org.camunda" level="DEBUG" /> + </configuration>
\ No newline at end of file diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ActivateSDNCNetworkResource.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ActivateSDNCNetworkResource.groovy index b912b64145..a8da95aa7c 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ActivateSDNCNetworkResource.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/ActivateSDNCNetworkResource.groovy @@ -53,7 +53,6 @@ public class ActivateSDNCNetworkResource extends AbstractServiceTaskProcessor { MsoUtils msoUtils = new MsoUtils() public void preProcessRequest(DelegateExecution execution) { - def isDebugEnabled = execution.getVariable("isDebugLogEnabled") msoLogger.info(" ***** Started preProcessRequest *****") try { @@ -64,7 +63,7 @@ public class ActivateSDNCNetworkResource extends AbstractServiceTaskProcessor { String resourceInput = execution.getVariable("resourceInput") //Get ResourceInput Object ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class) - execution.setVariable(Prefix + "resourceInput", resourceInputObj) + execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString()) //Deal with recipeParams String recipeParamsFromWf = execution.getVariable("recipeParamXsd") @@ -125,8 +124,8 @@ public class ActivateSDNCNetworkResource extends AbstractServiceTaskProcessor { } catch (BpmnError e) { throw e; } catch (Exception ex){ - msg = "Exception in preProcessRequest " + ex.getMessage() - msoLogger.debug( msg) + String msg = "Exception in preProcessRequest " + ex.getMessage() + msoLogger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } } @@ -398,7 +397,7 @@ public class ActivateSDNCNetworkResource extends AbstractServiceTaskProcessor { } catch (Exception ex) { String exceptionMessage = " Bpmn error encountered in CreateSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage() - msoLogger.debug( exceptionMessage) + msoLogger.debug(exceptionMessage) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } @@ -415,21 +414,21 @@ public class ActivateSDNCNetworkResource extends AbstractServiceTaskProcessor { } public void sendSyncResponse(DelegateExecution execution) { - msoLogger.dubug(" *** sendSyncResponse *** ") + msoLogger.info("started sendsyncResp") try { String operationStatus = "finished" // RESTResponse for main flow String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim() - msoLogger.dubug(" sendSyncResponse to APIH:" + "\n" + resourceOperationResp) + msoLogger.debug(" sendSyncResponse to APIH:" + "\n" + resourceOperationResp) sendWorkflowResponse(execution, 202, resourceOperationResp) execution.setVariable("sentSyncResponse", true) } catch (Exception ex) { String msg = "Exception in sendSyncResponse:" + ex.getMessage() - msoLogger.debug( msg) + msoLogger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } - msoLogger.dubug(" ***** Exit sendSyncResponse *****") + msoLogger.info("exited send sync Resp") } }
\ No newline at end of file diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCustomE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCustomE2EServiceInstance.groovy index 6ef446b490..02ae6a6f48 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCustomE2EServiceInstance.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCustomE2EServiceInstance.groovy @@ -302,7 +302,7 @@ public class CreateCustomE2EServiceInstance extends AbstractServiceTaskProcessor xmlns:ns="http://org.onap.so/requestsdb"> <soapenv:Header/> <soapenv:Body> - <ns:updateServiceOperationStatus xmlns:ns="http://org.onap.so/requestsdb"> + <ns:initServiceOperationStatus xmlns:ns="http://org.onap.so/requestsdb"> <serviceId>${MsoUtils.xmlEscape(serviceId)}</serviceId> <operationId>${MsoUtils.xmlEscape(operationId)}</operationId> <operationType>${MsoUtils.xmlEscape(operationType)}</operationType> @@ -311,7 +311,7 @@ public class CreateCustomE2EServiceInstance extends AbstractServiceTaskProcessor <operationContent>${MsoUtils.xmlEscape(operationContent)}</operationContent> <progress>${MsoUtils.xmlEscape(progress)}</progress> <reason>${MsoUtils.xmlEscape(reason)}</reason> - </ns:updateServiceOperationStatus> + </ns:initServiceOperationStatus> </soapenv:Body> </soapenv:Envelope>""" diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy index 9763960bfd..848785e5f3 100755 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy @@ -165,6 +165,10 @@ public class CreateGenericALaCarteServiceInstance extends AbstractServiceTaskPro msoLogger.debug("User Input Parameter " + userParam.name + ": " + userParam.value.toString()) inputMap.put(userParam.name, userParam.value) } + if ("Orchestrator".equalsIgnoreCase(userParam?.name)) { + execution.setVariable("orchestrator", userParam.value) + inputMap.put("orchestrator", userParam.value) + } } } @@ -344,6 +348,10 @@ public class CreateGenericALaCarteServiceInstance extends AbstractServiceTaskPro msoLogger.debug("User Input Parameter " + userParam.name + ": " + userParam.value.toString()) inputMap.put(userParam.name, userParam.value) } + if ("Orchestrator".equalsIgnoreCase(userParam?.name)) { + execution.setVariable("orchestrator", userParam.value) + inputMap.put("orchestrator", userParam.value) + } } } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy index b2c278b64c..9301f3d508 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy @@ -203,7 +203,7 @@ public class CreateSDNCNetworkResource extends AbstractServiceTaskProcessor { uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-ltp-id", inputParameters.get("local-access-ltp-id")) uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-node-id", inputParameters.get("local-access-node-id")) resourceInputObj.setResourceParameters(uResourceInput) - execution.setVariable(Prefix + "resourceInput", resourceInputObj) + execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString()) } break @@ -539,10 +539,7 @@ public class CreateSDNCNetworkResource extends AbstractServiceTaskProcessor { private def getInstnaceId(DelegateExecution execution) { def response = new XmlSlurper().parseText(execution.getVariable("CRENWKI_createSDNCResponse")) - def data = response.toString() - data = data.substring(data.indexOf("<")) - def resp = new XmlSlurper().parseText(data) ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class) String modelName = resourceInputObj.getResourceModelInfo().getModelName() def val = "" @@ -551,17 +548,17 @@ public class CreateSDNCNetworkResource extends AbstractServiceTaskProcessor { case ~/[\w\s\W]*deviceVF[\w\s\W]*/ : case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ : case ~/[\w\s\W]*Site[\w\s\W]*/: - val = resp."vnf-response-information"."instance-id" + val = response."response-data"."RequestData"."output"."vnf-response-information"."instance-id" break case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ : case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/: - val = resp."connection-attachment-response-information"."instance-id" + val = response."response-data"."RequestData"."output"."connection-attachment-response-information"."instance-id" break // for SDWANConnectivity and SOTNConnectivity and default: default: - val = resp."network-response-information"."instance-id" + val = response."response-data"."RequestData"."output"."network-response-information"."instance-id" break } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy index aa1eed95bb..6096f16b18 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy @@ -104,7 +104,7 @@ public class DoCreateResources extends AbstractServiceTaskProcessor{ // get Sequence from csar(model) if(resourceSequence == null) { - resourceSequence = ResourceRequestBuilder.getResourceSequence(execution, serviceModelUuid) + resourceSequence = ResourceRequestBuilder.getResourceSequence(serviceModelUuid) msoLogger.info("Get Sequence from csar : " + resourceSequence) } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModule.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModule.groovy index 1d3d3331ef..53e3525036 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModule.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModule.groovy @@ -41,10 +41,12 @@ import org.onap.so.bpmn.common.scripts.MsoUtils import org.onap.so.bpmn.common.scripts.NetworkUtils import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils import org.onap.so.bpmn.common.scripts.VfModuleBase +import org.onap.so.bpmn.common.util.OofInfraUtils import org.onap.so.bpmn.core.RollbackData import org.onap.so.bpmn.core.UrnPropertiesReader import org.onap.so.bpmn.core.WorkflowException import org.onap.so.bpmn.core.domain.VnfResource +import org.onap.so.bpmn.core.json.DecomposeJsonUtil import org.onap.so.bpmn.core.json.JsonUtils import org.onap.so.client.HttpClient import org.onap.so.client.aai.AAIObjectPlurals @@ -56,6 +58,7 @@ import org.onap.so.client.aai.entities.uri.AAIUri import org.onap.so.client.aai.entities.uri.AAIUriFactory; import org.onap.so.client.graphinventory.entities.uri.Depth import org.onap.so.constants.Defaults +import org.onap.so.db.catalog.beans.HomingInstance import org.onap.so.logger.MessageEnum import org.onap.so.logger.MsoLogger @@ -78,7 +81,9 @@ public class DoCreateVfModule extends VfModuleBase { ExceptionUtil exceptionUtil = new ExceptionUtil() JsonUtils jsonUtil = new JsonUtils() SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this) + OofInfraUtils oofInfraUtils = new OofInfraUtils() CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create() + DecomposeJsonUtil decomposeJsonUtils = new DecomposeJsonUtil() private final HttpClientFactory httpClientFactory = new HttpClientFactory() /** @@ -235,12 +240,37 @@ public class DoCreateVfModule extends VfModuleBase { String globalSubscriberId = execution.getVariable("globalSubscriberId") execution.setVariable("DCVFM_globalSubscriberId", globalSubscriberId) msoLogger.debug("globalSubsrciberId: " + globalSubscriberId) - //OofDirectives - String oofDirectives = execution.getVariable("oofDirectives") + + // Set Homing Info + String oofDirectives = null + try { + HomingInstance homingInstance = oofInfraUtils.getHomingInstance(serviceInstanceId, execution) + if (homingInstance != null) { + execution.setVariable("DCVFM_cloudSiteId", homingInstance.getCloudRegionId()) + rollbackData.put("VFMODULE", "aiccloudregion", homingInstance.getCloudRegionId()) + msoLogger.debug("Overwriting cloudSiteId with homing cloudSiteId: " + + homingInstance.getCloudRegionId()) + execution.setVariable("DCVFM_cloudOwner", homingInstance.getCloudOwner()) + rollbackData.put("VFMODULE", "cloudOwner", homingInstance.getCloudOwner()) + msoLogger.debug("Overwriting cloudOwner with homing cloudOwner: " + + homingInstance.getCloudOwner()) + oofDirectives = homingInstance.getOofDirectives() + execution.setVariable("DCVFM_oofDirectives", oofDirectives) + } + } catch (Exception exception) { + msoLogger.debug("Could not find homing information for service instance: " + serviceInstanceId + + "... continuing") + msoLogger.debug("Could not find homing information for service instance error: " + exception) + } + //OofDirectives to Input Params Map<String,String> vfModuleInputParams = execution.getVariable("vfModuleInputParams") - if (oofDirectives != null) { - vfModuleInputParams.put("oofDirectives", oofDirectives) - logDebug("OofDirectives are: " + oofDirectives, isDebugLogEnabled) + if (oofDirectives != null && vfModuleInputParams != null) { + vfModuleInputParams.put("oof_directives", oofDirectives) + vfModuleInputParams.put("sdnc_directives", "{}") + msoLogger.debug("OofDirectives are: " + oofDirectives) + } else if (vfModuleInputParams != null) { + vfModuleInputParams.put("oof_directives", "{}") + vfModuleInputParams.put("sdnc_directives", "{}") } if (vfModuleInputParams != null) { execution.setVariable("DCVFM_vnfParamsMap", vfModuleInputParams) @@ -467,11 +497,30 @@ public class DoCreateVfModule extends VfModuleBase { } //OofDirectives - String oofDirectives = execution.getVariable("oofDirectives") + String oofDirectives = null + try { + HomingInstance homingInstance = oofInfraUtils.getHomingInstance(serviceInstanceId, execution) + if (homingInstance != null) { + execution.setVariable("DCVFM_cloudSiteId", homingInstance.getCloudRegionId()) + rollbackData.put("VFMODULE", "aiccloudregion", homingInstance.getCloudRegionId()) + msoLogger.debug("Overwriting cloudSiteId with homing cloudSiteId: " + + homingInstance.getCloudRegionId()) + execution.setVariable("DCVFM_cloudOwner", homingInstance.getCloudOwner()) + rollbackData.put("VFMODULE", "cloudOwner", homingInstance.getCloudOwner()) + msoLogger.debug("Overwriting cloudOwner with homing cloudOwner: " + + homingInstance.getCloudOwner()) + oofDirectives = homingInstance.getOofDirectives() + execution.setVariable("DCVFM_oofDirectives", oofDirectives) + } + } catch (Exception exception) { + msoLogger.debug("Could not find homing information for service instance: " + serviceInstanceId + + "... continuing") + msoLogger.debug("Could not find homing information for service instance error: " + exception) + } if (oofDirectives != null) { Map<String, String> paramsMap = execution.getVariable("DCVFM_vnfParamsMap") paramsMap.put("oofDirectives", oofDirectives) - logDebug("OofDirectives are: " + oofDirectives, isDebugLogEnabled) + msoLogger.debug("OofDirectives are: " + oofDirectives) execution.setVariable("DCVFM_vnfParamsMap", paramsMap) } } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnf.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnf.groovy index b35aab1176..deb0bffaf9 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnf.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnf.groovy @@ -20,6 +20,8 @@ package org.onap.so.bpmn.infrastructure.scripts +import org.onap.so.db.catalog.beans.HomingInstance + import static org.apache.commons.lang3.StringUtils.* import org.camunda.bpm.engine.delegate.BpmnError @@ -31,6 +33,7 @@ import org.onap.so.bpmn.common.scripts.ExceptionUtil import org.onap.so.bpmn.common.scripts.MsoUtils import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils import org.onap.so.bpmn.common.scripts.VidUtils +import org.onap.so.bpmn.common.util.OofInfraUtils import org.onap.so.bpmn.core.RollbackData import org.onap.so.bpmn.core.UrnPropertiesReader import org.onap.so.bpmn.core.WorkflowException @@ -61,6 +64,7 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { JsonUtils jsonUtil = new JsonUtils() VidUtils vidUtils = new VidUtils(this) SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this) + OofInfraUtils oofInfraUtils = new OofInfraUtils() /** * This method gets and validates the incoming @@ -238,6 +242,21 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { execution.setVariable("DoCVNF_nfFunction", nfFunction) msoLogger.debug("NF Function is: " + nfFunction) + // Set Homing Info + try { + HomingInstance homingInstance = oofInfraUtils.getHomingInstance(serviceInstanceId, execution) + if (homingInstance != null) { + execution.setVariable("DoCVNF_cloudSiteId", homingInstance.getCloudRegionId()) + rollbackData.put("VNF", "cloudSiteId", homingInstance.getCloudRegionId()) + msoLogger.debug("Overwriting cloudSiteId with homing cloudSiteId: " + + homingInstance.getCloudRegionId()) + } + } catch (Exception exception) { + msoLogger.debug("Could not find homing information for service instance: " + serviceInstanceId + + "... continuing") + msoLogger.debug("Could not find homing information for service instance error: " + exception) + } + rollbackData.put("VNF", "rollbackSDNCAssign", "false") rollbackData.put("VNF", "rollbackSDNCActivate", "false") rollbackData.put("VNF", "rollbackVnfCreate", "false") diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy index 232336b0ee..88e7b34dcd 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy @@ -118,7 +118,10 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { } } execution.setVariable("vnfId", vnfId) - + + Map<String,String> vfModuleNames = execution.getVariable("vfModuleNames") + msoLogger.debug("Incoming vfModuleNames: " + vfModuleNames) + // Set aLaCarte to false execution.setVariable("aLaCarte", false) @@ -137,9 +140,17 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { rollbackData.put("VNFANDMODULES", "numOfCreatedAddOnModules", "0") execution.setVariable("rollbackData", rollbackData) - sleep (20000) + String delayMS = execution.getVariable("delayMS") + long longDelayMS = 20000; + if (delayMS != null && !delayMS.isEmpty()) { + longDelayMS = Long.parseLong(delayMS); + } + if (longDelayMS > 0) { + msoLogger.debug("Delaying workflow " + longDelayMS + "ms"); + sleep(longDelayMS) + } }catch(BpmnError b){ msoLogger.debug("Rethrowing MSOWorkflowException") throw b @@ -151,7 +162,6 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { msoLogger.trace("COMPLETED DoCreateVnfAndModules PreProcessRequest Process") } - public void queryCatalogDB (DelegateExecution execution) { execution.setVariable("prefix",Prefix) @@ -159,8 +169,8 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { msoLogger.trace("STARTED DoCreateVnfAndModules QueryCatalogDB Process") try { VnfResource vnf = null - ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition") // if serviceDecomposition is specified, get info from serviceDecomposition + ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition") if (serviceDecomposition != null) { msoLogger.debug("Getting Catalog DB data from ServiceDecomposition object: " + serviceDecomposition.toJsonString()) List<VnfResource> vnfs = serviceDecomposition.getVnfResources() @@ -208,6 +218,7 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { } ModuleResource baseVfModule = null + Map<String,String> vfModuleNames = execution.getVariable("vfModuleNames") for (int i = 0; i < vfModules.size; i++) { msoLogger.debug("handling VF Module ") @@ -222,6 +233,8 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { execution.setVariable("baseVfModuleLabel", baseVfModuleLabel) String basePersonaModelId = baseVfModuleModelInfoObject.getModelInvariantUuid() execution.setVariable("basePersonaModelId", basePersonaModelId) + String baseVfModuleName = getPredefinedVfModuleName(execution, basePersonaModelId) + execution.setVariable("baseVfModuleName", baseVfModuleName) baseVfModule = vfModule break } @@ -284,6 +297,8 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { execution.setVariable("addOnVfModuleLabel", addOnVfModuleLabel) String addOnPersonaModelId = addOnVfModuleModelInfoObject.getModelInvariantUuid() execution.setVariable("addOnPersonaModelId", addOnPersonaModelId) + String addOnVfModuleName = getPredefinedVfModuleName(execution, addOnPersonaModelId) + execution.setVariable("addOnVfModuleName", addOnVfModuleName) int addOnInitialCount = addOnModule.getInitialCount() execution.setVariable("initialCount", addOnInitialCount) @@ -460,5 +475,19 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { msoLogger.trace("Exit createLineOfBusiness") } + public String getPredefinedVfModuleName(DelegateExecution execution, String vfModuleModelInvariantUuid) { + Map<String,String> vfModuleNames = execution.getVariable("vfModuleNames") + + if (vfModuleNames == null) { + return null + } + + String vfModuleName = vfModuleNames.get(vfModuleModelInvariantUuid) -}
\ No newline at end of file + if (vfModuleName != null) { + msoLogger.debug("Using vfModuleName='" + vfModuleName + "' for vfModuleModelInvariantUuid=" + vfModuleModelInvariantUuid) + } + + return vfModuleName + } +} diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstance.groovy index 6109d8631f..7c8a1d70e1 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstance.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstance.groovy @@ -149,7 +149,7 @@ public class DoDeleteVFCNetworkServiceInstance extends AbstractServiceTaskProces } /** - * instantiate NS task + * terminate NS task */ public void terminateNetworkService(DelegateExecution execution) { @@ -247,19 +247,19 @@ public class DoDeleteVFCNetworkServiceInstance extends AbstractServiceTaskProces msoLogger.trace("Started Execute VFC adapter Delete Process ") msoLogger.info("url:"+url +"\nrequestBody:"+ requestBody) - Response r + Response r try{ - URL Url = new URL(url) + URL Url = new URL(url) // Get the Basic Auth credentials for the VFCAdapter, username is 'bpel', auth is '07a7159d3bf51a0e53be7a8f89699be7' // user 'bepl' authHeader is the same with mso.db.auth String basicAuthValuedb = UrnPropertiesReader.getVariable("mso.db.auth", execution) HttpClient httpClient = httpClientFactory.newJsonClient(url, TargetEntity.VNF_ADAPTER) httpClient.addAdditionalHeader("Accept", "application/json") httpClient.addAdditionalHeader("Authorization", basicAuthValuedb) - - r = httpClient.delete(requestBody) - + httpClient.addAdditionalHeader("Content-Type", "application/json") + r = httpClient.delete(requestBody) + msoLogger.trace("Completed Execute VF-C adapter Delete Process ") }catch(Exception e){ msoLogger.error("Exception occured while executing VF-C Post Call. Exception is: \n" + e.getMessage()); diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy index a8e3b2040b..13d5aad2b0 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy @@ -97,7 +97,7 @@ public class CreateVcpeResCustService extends AbstractServiceTaskProcessor { InitializeProcessVariables(execution) //Config Inputs - String aaiDistDelay = UrnPropertiesReader.getVariable("aai.workflowAaiDistributionDelay") + String aaiDistDelay = UrnPropertiesReader.getVariable("aai.workflowAaiDistributionDelay", execution) if (isBlank(aaiDistDelay)) { String msg = "workflowAaiDistributionDelay is null" msoLogger.debug(msg) @@ -209,14 +209,13 @@ public class CreateVcpeResCustService extends AbstractServiceTaskProcessor { def userParams = reqMap.requestDetails?.requestParameters?.userParams Map<String, String> inputMap = [:] - if (userParams) { + if (userParams) { userParams.each { - userParam -> + userParam -> if ("Customer_Location".equals(userParam?.name)) { Map<String, String> customerMap = [:] userParam.value.each { param -> - inputMap.put(param.key, param.value) customerMap.put(param.key, param.value) } @@ -238,7 +237,7 @@ public class CreateVcpeResCustService extends AbstractServiceTaskProcessor { param.getClass() , isDebugEnabled) } execution.setVariable("homingModelIds", modelIdLst) - } + } if ("BRG_WAN_MAC_Address".equals(userParam?.name)) { execution.setVariable("brgWanMacAddress", userParam.value) inputMap.put("BRG_WAN_MAC_Address", userParam.value) @@ -247,7 +246,34 @@ public class CreateVcpeResCustService extends AbstractServiceTaskProcessor { execution.setVariable("homingService", userParam.value) execution.setVariable("callHoming", true) inputMap.put("Homing_Solution", userParam.value) - } + } + if ("Orchestrator".equalsIgnoreCase(userParam?.name)) { + execution.setVariable("orchestrator", userParam.value) + inputMap.put("orchestrator", userParam.value) + } + if ("VfModuleNames".equals(userParam?.name)) { + utils.log("DEBUG", "VfModuleNames: " + userParam.value.toString(), isDebugEnabled) + def vfModuleNames = [:] + userParam.value.each { + entry -> + String vfModuleModelInvariantUuid = null; + String vfModuleName = null; + entry.each { + param -> + if ("VfModuleModelInvariantUuid".equals(param.key)) { + vfModuleModelInvariantUuid = param.value; + } else if ("VfModuleName".equals(param.key)) { + vfModuleName = param.value; + } + } + + if (vfModuleModelInvariantUuid != null && !vfModuleModelInvariantUuid.isEmpty() && vfModuleName != null && !vfModuleName.isEmpty()) { + vfModuleNames.put(vfModuleModelInvariantUuid, vfModuleName) + utils.log("DEBUG", "VfModuleModelInvariantUuid: " + vfModuleModelInvariantUuid + " VfModuleName: " + vfModuleName, isDebugEnabled) + } + } + execution.setVariable("vfModuleNames", vfModuleNames) + } } } @@ -257,7 +283,7 @@ public class CreateVcpeResCustService extends AbstractServiceTaskProcessor { } msoLogger.debug("User Input Parameters map: " + userParams.toString()) - execution.setVariable("serviceInputParams", inputMap) + execution.setVariable("serviceInputParams", inputMap) // DOES NOT SEEM TO BE USED msoLogger.debug("Incoming brgWanMacAddress is: " + execution.getVariable('brgWanMacAddress')) diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/delegate/PnfCheckInputs.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/delegate/PnfCheckInputs.java index e9b0bc77b2..c1ddf2e04e 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/delegate/PnfCheckInputs.java +++ b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/delegate/PnfCheckInputs.java @@ -27,7 +27,6 @@ import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableName import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableNames.TIMEOUT_FOR_NOTIFICATION; import com.google.common.base.Strings; -import java.util.regex.Pattern; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.camunda.bpm.engine.delegate.JavaDelegate; import org.onap.so.bpmn.common.scripts.ExceptionUtil; @@ -39,8 +38,7 @@ import org.springframework.stereotype.Component; @Component public class PnfCheckInputs implements JavaDelegate { - private static final Pattern UUID_PATTERN = Pattern - .compile("(?i)^[0-9a-f]{8}-[0-9a-f]{4}-[1-5]{1}[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}$"); + public static final String UUID_REGEX = "(?i)^[0-9a-f]{8}-[0-9a-f]{4}-[1-5]{1}[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}$"; private static MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.GENERAL, PnfCheckInputs.class); private String defaultTimeout; @@ -69,7 +67,7 @@ public class PnfCheckInputs implements JavaDelegate { if (Strings.isNullOrEmpty(pnfUuid)) { new ExceptionUtil().buildAndThrowWorkflowException(execution, 9999, "pnfUuid variable not defined"); } - if (!UUID_PATTERN.matcher(pnfUuid).matches()) { + if (!pnfUuid.matches(UUID_REGEX)) { new ExceptionUtil().buildAndThrowWorkflowException(execution, 9999, "pnfUuid is not a valid UUID"); } } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/properties/BPMNProperties.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/properties/BPMNProperties.java index 60f109a81f..0d7c4abeee 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/properties/BPMNProperties.java +++ b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/properties/BPMNProperties.java @@ -21,6 +21,7 @@ package org.onap.so.bpmn.infrastructure.properties; import java.util.Arrays; import java.util.List; +import org.onap.so.bpmn.core.UrnPropertiesReader; import org.onap.so.bpmn.core.UrnPropertiesReader; import org.onap.so.logger.MsoLogger; @@ -37,7 +38,7 @@ public class BPMNProperties { } public static List<String> getResourceSequenceProp(String input) { - String resourceSequence = getProperty("mso.workflow.custom." + input + ".resource.sequence", null); + String resourceSequence = UrnPropertiesReader.getVariable("mso.workflow.custom."+ input + ".resource.sequence"); if (resourceSequence != null) { return Arrays.asList(resourceSequence.split(",")); } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactory.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactory.java index ac341886ba..48c78632dd 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactory.java +++ b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/service/ServicePluginFactory.java @@ -430,14 +430,19 @@ public class ServicePluginFactory { Map<String, String> keys = uri.getURIKeys(); String uriString = uri.build().toString(); - AAIResourceUri parent = AAIUriFactory.createResourceUri(AAIObjectType.PNF, keys.get("pnf-name")); - - AAIResultWrapper wrapper = client.get(parent); - Optional<Relationships> optRelationships = wrapper.getRelationships(); - if (optRelationships.isPresent()) { - Relationships relationships = optRelationships.get(); - - return !relationships.getRelatedAAIUris(AAIObjectType.EXT_AAI_NETWORK).isEmpty(); + + if (uriString != null) { + // get the pnfname + String[] token = uriString.split("/"); + AAIResourceUri parent = AAIUriFactory.createResourceUri(AAIObjectType.PNF, token[4]); + + AAIResultWrapper wrapper = client.get(parent); + Optional<Relationships> optRelationships = wrapper.getRelationships(); + if (optRelationships.isPresent()) { + Relationships relationships = optRelationships.get(); + + return !relationships.getRelatedAAIUris(AAIObjectType.EXT_AAI_NETWORK).isEmpty(); + } } return false; diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java index 3c4a35737b..3108adaa53 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java +++ b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java @@ -93,7 +93,7 @@ public abstract class AbstractSdncOperationTask extends BaseTask { logger.info("AbstractSdncOperationTask.updateResOperStatus begin!"); String requestsdbEndPoint = env.getProperty("mso.adapters.openecomp.db.endpoint"); HttpPost httpPost = new HttpPost(requestsdbEndPoint); - httpPost.addHeader("Authorization", "Basic QlBFTENsaWVudDpwYXNzd29yZDEk"); + httpPost.addHeader("Authorization", "Basic YnBlbDpwYXNzd29yZDEk"); httpPost.addHeader("Content-type", "application/soap+xml"); String postBody = getPostStringBody(resourceOperationStatus); httpPost.setEntity(new StringEntity(postBody, ContentType.APPLICATION_XML)); @@ -174,7 +174,7 @@ public abstract class AbstractSdncOperationTask extends BaseTask { logger.info("AbstractSdncOperationTask.getResourceOperationStatus begin!"); String requestsdbEndPoint = env.getProperty("mso.adapters.openecomp.db.endpoint"); HttpPost httpPost = new HttpPost(requestsdbEndPoint); - httpPost.addHeader("Authorization", "Basic QlBFTENsaWVudDpwYXNzd29yZDEk"); + httpPost.addHeader("Authorization", "Basic YnBlbDpwYXNzd29yZDEk"); httpPost.addHeader("Content-type", "application/soap+xml"); String getBody = getGetStringBody(serviceId, operationId, resourceTemplateUUID); httpPost.setEntity(new StringEntity(getBody, ContentType.APPLICATION_XML)); @@ -289,9 +289,8 @@ public abstract class AbstractSdncOperationTask extends BaseTask { protected boolean isSend2SdncDirectly() { logger.info("AbstractSdncOperationTask.isSend2SdncDirectly begin!"); - String sdncIp = UrnPropertiesReader.getVariable("sdnc-ip"); - String sdncPort = UrnPropertiesReader.getVariable("sdnc-port"); - if (!StringUtils.isBlank(sdncIp) && isIp(sdncIp) && !StringUtils.isBlank(sdncPort)) { + String sdncHost = UrnPropertiesReader.getVariable("sdnc.host"); + if (!StringUtils.isBlank(sdncHost)) { logger.info("AbstractSdncOperationTask.isSend2SdncDirectly = true."); return true; } @@ -317,6 +316,12 @@ public abstract class AbstractSdncOperationTask extends BaseTask { return returnPort; } + protected String getSdncHost() { + String sdncHost = UrnPropertiesReader.getVariable("sdnc.host"); + logger.info("AbstractSdncOperationTask.getSdncPort: returnPort = {}", sdncHost); + return sdncHost; + } + private GenericResourceApi getGenericResourceApiClient() { logger.info("AbstractSdncOperationTask.getGenericResourceApiClient begin!"); String msbIp = System.getenv().get(ONAP_IP); diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java index 8e41d0d88e..dc625d35c3 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java +++ b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java @@ -72,7 +72,7 @@ public class SdncServiceTopologyOperationTask extends AbstractSdncOperationTask private void send2SdncDirectly(String defaulAuth, RpcServiceTopologyOperationInputEntity inputEntity) throws RouteException { sdncLogger.info("SdncServiceTopologyOperationTask.send2SdncDirectly begin!"); - String url = "http://" + getSdncIp() + ":" + getSdncPort() + URL; + String url = getSdncHost() + URL; HttpPost httpPost = new HttpPost(url); httpPost.addHeader("Authorization", defaulAuth); httpPost.addHeader("Content-type", "application/json"); diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResourceTest.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResourceTest.groovy index 820c14eb94..8dde45be81 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResourceTest.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSDNCNetworkResourceTest.groovy @@ -129,10 +129,7 @@ class CreateSDNCNetworkResourceTest extends GroovyTestCase { private getInstanceId() { def response = new XmlSlurper().parseText(sdncAdapterWorkflowResponse) - def data = response.toString() - data = data.substring(data.indexOf("<")) - def resp = new XmlSlurper().parseText(data) - def instanceId = resp."network-response-information"."instance-id" + def instanceId = response."response-data"."RequestData"."output"."network-response-information"."instance-id" return instanceId } } diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateVFCNSResourceTest.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateVFCNSResourceTest.groovy index 2eb4c9c408..d4857503b5 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateVFCNSResourceTest.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateVFCNSResourceTest.groovy @@ -34,7 +34,7 @@ import org.onap.so.client.aai.entities.uri.AAIUriFactory import javax.ws.rs.NotFoundException import static org.junit.Assert.assertEquals -import static org.mockito.Matchers.isA +import static org.mockito.ArgumentMatchers.isA import static org.mockito.Mockito.doNothing import static org.mockito.Mockito.doThrow import static org.mockito.Mockito.when diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1Test.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1Test.groovy index 0e7114dd03..50d5506c23 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1Test.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1Test.groovy @@ -43,7 +43,7 @@ import org.onap.so.client.graphinventory.exceptions.GraphInventoryUriComputation import javax.ws.rs.NotFoundException -import static org.mockito.Matchers.eq +import static org.mockito.ArgumentMatchers.eq import static org.mockito.Mockito.doNothing import static org.mockito.Mockito.doThrow import static org.mockito.Mockito.times diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstanceTest.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstanceTest.groovy index 52b54a48e8..c359f74d7f 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstanceTest.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstanceTest.groovy @@ -37,7 +37,7 @@ import org.onap.so.client.aai.entities.uri.AAIResourceUri import org.onap.so.client.aai.entities.uri.AAIUriFactory import javax.ws.rs.NotFoundException import static org.junit.Assert.assertEquals -import static org.mockito.Matchers.isA +import static org.mockito.ArgumentMatchers.isA import static org.mockito.Mockito.doNothing import static org.mockito.Mockito.doThrow import static org.mockito.Mockito.when diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2Test.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2Test.groovy index 606efa8b73..ddb1fbade4 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2Test.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2Test.groovy @@ -46,7 +46,7 @@ import org.onap.so.constants.Defaults import static org.junit.Assert.assertEquals import static org.junit.Assert.assertNotNull -import static org.mockito.Matchers.anyObject +import static org.mockito.ArgumentMatchers.anyObject import static org.mockito.Mockito.spy import static org.mockito.Mockito.times import static org.mockito.Mockito.verify diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnfAndModulesTest.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnfAndModulesTest.groovy new file mode 100644 index 0000000000..47db6b3b7b --- /dev/null +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVnfAndModulesTest.groovy @@ -0,0 +1,452 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2018 AT&T 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.so.bpmn.infrastructure.scripts + +import com.github.tomakehurst.wiremock.junit.WireMockRule +import org.camunda.bpm.engine.ProcessEngineServices +import org.camunda.bpm.engine.RepositoryService +import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity +import org.camunda.bpm.engine.repository.ProcessDefinition +import org.junit.Assert +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentCaptor +import org.mockito.Captor +import org.mockito.Mockito +import org.mockito.MockitoAnnotations +import org.mockito.runners.MockitoJUnitRunner +import org.onap.so.bpmn.core.WorkflowException +import org.onap.so.bpmn.core.domain.AllottedResource +import org.onap.so.bpmn.core.domain.HomingSolution +import org.onap.so.bpmn.core.domain.InventoryType +import org.onap.so.bpmn.core.domain.License +import org.onap.so.bpmn.core.domain.ModelInfo +import org.onap.so.bpmn.core.domain.ModuleResource +import org.onap.so.bpmn.core.domain.NetworkResource +import org.onap.so.bpmn.core.domain.ResourceInstance +import org.onap.so.bpmn.core.domain.ResourceType +import org.onap.so.bpmn.core.domain.ServiceDecomposition +import org.onap.so.bpmn.core.domain.ServiceInstance +import org.onap.so.bpmn.core.domain.VnfResource + +import static org.mockito.Mockito.* + +@RunWith(MockitoJUnitRunner.class) +class DoCreateVnfAndModulesTest { + + @Rule + public WireMockRule wireMockRule = new WireMockRule(28090) + + @Captor + static ArgumentCaptor<ExecutionEntity> captor = ArgumentCaptor.forClass(ExecutionEntity.class) + + @Before + void init() throws IOException { + MockitoAnnotations.initMocks(this); + } + + @Test + void testPreProcessRequest() { + ExecutionEntity mockExecution = setupMock() + setupBasicProcessInputs(mockExecution) + + ServiceDecomposition serviceDecomposition = createServiceDecomposition() + when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition) + + Map<String,String> vfModuleNames = new HashMap<String,String>() + vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%") + vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%") + when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames) + + DoCreateVnfAndModules obj = new DoCreateVnfAndModules() + obj.preProcessRequest(mockExecution) + + Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture()) + + List list = captor.getAllValues() + for (int i = 0; i < list.size(); i+=2) { + System.out.println("captor[" + i/2 + "]: " + list.get(i) + + (i+1 < list.size() ? ("=" + list.get(i+1)) : "")) + } + + String someKey = list.get(18) + Assert.assertEquals("numOfCreatedAddOnModules", someKey) + Integer someValue = list.get(19) + Assert.assertEquals(0, someValue) + + String lastKey = list.get(20) + Assert.assertEquals("rollbackData", lastKey) + } + + @Test + void testQueryCatalogDB() { + ExecutionEntity mockExecution = setupMock() + setupBasicProcessInputs(mockExecution) + + ServiceDecomposition serviceDecomposition = createServiceDecomposition() + when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition) + + DoCreateVnfAndModules obj = new DoCreateVnfAndModules() + obj.queryCatalogDB(mockExecution) + + Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture()) + + List list = captor.getAllValues() + for (int i = 0; i < list.size(); i+=2) { + System.out.println("captor[" + i/2 + "]: " + list.get(i) + + (i+1 < list.size() ? ("=" + list.get(i+1)) : "")) + } + + String vfModuleNameKey = list.get(12) + Assert.assertEquals("baseVfModuleName", vfModuleNameKey) + String vfModuleNameValue = list.get(13) + Assert.assertEquals(null, vfModuleNameValue) + + String lastKey = list.get(20) + Assert.assertEquals("baseVfModuleId", lastKey) + } + + @Test + void testQueryCatalogDBWithVfModuleNames() { + ExecutionEntity mockExecution = setupMock() + setupBasicProcessInputs(mockExecution) + + ServiceDecomposition serviceDecomposition = createServiceDecomposition() + when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition) + + Map<String,String> vfModuleNames = new HashMap<String,String>() + vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%") + vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%") + when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames) + + DoCreateVnfAndModules obj = new DoCreateVnfAndModules() + obj.queryCatalogDB(mockExecution) + + Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture()) + + List list = captor.getAllValues() + for (int i = 0; i < list.size(); i+=2) { + System.out.println("captor[" + i/2 + "]: " + list.get(i) + + (i+1 < list.size() ? ("=" + list.get(i+1)) : "")) + } + + String vfModuleNameKey = list.get(12) + Assert.assertEquals("baseVfModuleName", vfModuleNameKey) + String vfModuleNameValue = list.get(13) + Assert.assertEquals("VGWA:e2:25:25:25:%", vfModuleNameValue) + + String lastKey = list.get(20) + Assert.assertEquals("baseVfModuleId", lastKey) + } + + @Test + void testPreProcessAddonModule() { + ExecutionEntity mockExecution = setupMock() + setupBasicProcessInputs(mockExecution) + + ServiceDecomposition serviceDecomposition = createServiceDecomposition() + when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition) + + VnfResource vnf = serviceDecomposition.getVnfResources().get(0); + List<ModuleResource> vfModules = vnf.getAllVfModuleObjects() + + for (int i = vfModules.size()-1; i >= 0; i--) { + if (vfModules.get(i).getIsBase()) { + vfModules.remove(i); + } + } + + when(mockExecution.getVariable("addOnModules")).thenReturn(vfModules) + when(mockExecution.getVariable("addOnModulesDeployed")).thenReturn(0) + + DoCreateVnfAndModules obj = new DoCreateVnfAndModules() + obj.preProcessAddOnModule(mockExecution) + + Mockito.verify(mockExecution, times(9)).setVariable(captor.capture(), captor.capture()) + + List list = captor.getAllValues() + for (int i = 0; i < list.size(); i+=2) { + System.out.println("captor[" + i/2 + "]: " + list.get(i) + + (i+1 < list.size() ? ("=" + list.get(i+1)) : "")) + } + + String vfModuleNameKey = list.get(14) + Assert.assertEquals("addOnVfModuleName", vfModuleNameKey) + String vfModuleNameValue = list.get(15) + Assert.assertEquals(null, vfModuleNameValue) + + String lastKey = list.get(16) + Assert.assertEquals("initialCount", lastKey) + } + + @Test + void testPreProcessAddonModuleWithVfModuleNames() { + ExecutionEntity mockExecution = setupMock() + setupBasicProcessInputs(mockExecution) + + ServiceDecomposition serviceDecomposition = createServiceDecomposition() + when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition) + + Map<String,String> vfModuleNames = new HashMap<String,String>() + vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%") + vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%") + when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames) + + VnfResource vnf = serviceDecomposition.getVnfResources().get(0); + List<ModuleResource> vfModules = vnf.getAllVfModuleObjects() + + for (int i = vfModules.size()-1; i >= 0; i--) { + if (vfModules.get(i).getIsBase()) { + vfModules.remove(i); + } + } + + when(mockExecution.getVariable("addOnModules")).thenReturn(vfModules) + when(mockExecution.getVariable("addOnModulesDeployed")).thenReturn(0) + + DoCreateVnfAndModules obj = new DoCreateVnfAndModules() + obj.preProcessAddOnModule(mockExecution) + + Mockito.verify(mockExecution, times(9)).setVariable(captor.capture(), captor.capture()) + + List list = captor.getAllValues() + for (int i = 0; i < list.size(); i+=2) { + System.out.println("captor[" + i/2 + "]: " + list.get(i) + + (i+1 < list.size() ? ("=" + list.get(i+1)) : "")) + } + + String vfModuleNameKey = list.get(14) + Assert.assertEquals("addOnVfModuleName", vfModuleNameKey) + String vfModuleNameValue = list.get(15) + Assert.assertEquals("VGWB:f9:32:32:32:%", vfModuleNameValue) + + String lastKey = list.get(16) + Assert.assertEquals("initialCount", lastKey) + } + + private static setupBasicProcessInputs(ExecutionEntity mockExecution) { + when(mockExecution.getVariable("prefix")).thenReturn("DCVAM_") + when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true") + when(mockExecution.getVariable("msoRequestId")).thenReturn("28a7f01e-a6aa-44fd-b25e-e06e14873cd7") + when(mockExecution.getVariable("serviceInstanceId")).thenReturn("7d34a7df-d6c3-4f1c-8710-576412134a5a") + when(mockExecution.getVariable("productFamilyId")).thenReturn("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb") + when(mockExecution.getVariable("lcpCloudRegionId")).thenReturn("RegionOne") + when(mockExecution.getVariable("tenantId")).thenReturn("b8ad3842ab3642f7bf3fbe4e4d3b9f86") + when(mockExecution.getVariable("disableRollback")).thenReturn("true") + when(mockExecution.getVariable("delayMS")).thenReturn("0") + + } + + private static ExecutionEntity setupMock() { + ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class) + when(mockProcessDefinition.getKey()).thenReturn("DoCreateVnfAndModules") + RepositoryService mockRepositoryService = mock(RepositoryService.class) + when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition) + when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoCreateVnfAndModules") + when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100") + ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class) + when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService) + + ExecutionEntity mockExecution = mock(ExecutionEntity.class) + // Initialize prerequisite variables + when(mockExecution.getId()).thenReturn("100") + when(mockExecution.getProcessDefinitionId()).thenReturn("DoCreateVnfAndModules") + when(mockExecution.getProcessInstanceId()).thenReturn("DoCreateVnfAndModules") + when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices) + when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition) + + return mockExecution + } + + public static ServiceDecomposition createServiceDecomposition() { + ServiceDecomposition serviceDecomposition = new ServiceDecomposition() + + ServiceInstance serviceInstance = new ServiceInstance() + serviceInstance.setInstanceId("7d34a7df-d6c3-4f1c-8710-576412134a5a") + serviceDecomposition.setServiceInstance(serviceInstance) + serviceDecomposition.setServiceType("") + serviceDecomposition.setServiceRole("") + + ModelInfo serviceModelInfo = new ModelInfo() + serviceDecomposition.setModelInfo(serviceModelInfo) + serviceModelInfo.setModelName("vcpesvc_rescust_1111") + serviceModelInfo.setModelUuid("1dffd5f9-bb29-4a47-8073-9b9b07f4943a") + serviceModelInfo.setModelVersion("1.0") + serviceModelInfo.setModelCustomizationUuid("") + serviceModelInfo.setModelCustomizationName("") + serviceModelInfo.setModelInstanceName("") + serviceModelInfo.setModelType("") + + List<VnfResource> vnfResources = new ArrayList<VnfResource>() + serviceDecomposition.setVnfResources(vnfResources) + + VnfResource vnfResource = new VnfResource() + vnfResources.add(vnfResource) + vnfResource.setResourceId("9504b6b3-d346-4387-952c-8f9b7570b055") + vnfResource.setResourceType(ResourceType.VNF) + ModelInfo vnfModelInfo = new ModelInfo() + vnfResource.setModelInfo(vnfModelInfo) + vnfModelInfo.setModelName("vcpevsp_vgw_1111") + vnfModelInfo.setModelUuid("289e96fd-a679-4286-a8a2-d76f930d650b") + vnfModelInfo.setModelInvariantUuid("0327af89-f836-4086-aadb-17d5c9bd8a83"); + vnfModelInfo.setModelVersion("1.0"); + vnfModelInfo.setModelCustomizationUuid("cf151beb-9510-44a1-a165-c783e673baa1"); + vnfModelInfo.setModelCustomizationName(""); + vnfModelInfo.setModelInstanceName("vcpevsp_vgw_1111 0") + vnfModelInfo.setModelType("") + vnfResource.setResourceInstance(new ResourceInstance()) + vnfResource.setHomingSolution(new HomingSolution()) + vnfResource.setToscaNodeType("org.openecomp.resource.vf.VcpevspVgw1111") + vnfResource.setMultiStageDesign("false") + vnfResource.setMultiStageDesign("false") + + List<ModuleResource> moduleResources = new ArrayList<ModuleResource>() + vnfResource.setModules(moduleResources) + + ModuleResource moduleResource = new ModuleResource() + moduleResources.add(moduleResource) + moduleResource.setResourceType(ResourceType.MODULE) + ModelInfo moduleModelInfo = new ModelInfo() + moduleResource.setModelInfo(moduleModelInfo); + moduleModelInfo.setModelName("VcpevspVgw1111..base_vcpe_vgw..module-0") + moduleModelInfo.setModelUuid("cf35b6b8-1f31-4efc-87a7-d53f840b8fdf") + moduleModelInfo.setModelInvariantUuid("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45") + moduleModelInfo.setModelVersion("1") + moduleModelInfo.setModelCustomizationUuid("281085b3-4598-4c94-811d-58cc685763e7") + moduleModelInfo.setModelCustomizationName("") + moduleModelInfo.setModelInstanceName("") + moduleModelInfo.setModelType("") + moduleResource.setResourceInstance(new ResourceInstance()) + moduleResource.setHomingSolution(new HomingSolution()) + moduleResource.setHasVolumeGroup(false) + moduleResource.setIsBase(true) + moduleResource.setVfModuleLabel("base_vcpe_vgw") + moduleResource.setInitialCount(1) + + // For testing an add-on module; not in the actual vCPE model + moduleResource = new ModuleResource() + moduleResources.add(moduleResource) + moduleResource.setResourceType(ResourceType.MODULE) + moduleModelInfo = new ModelInfo() + moduleResource.setModelInfo(moduleModelInfo); + moduleModelInfo.setModelName("VcpevspVgw1111..addon_vcpe_vgw..module-1") + moduleModelInfo.setModelUuid("8c8b41b2-8466-41b4-ae8d-5924830c40e8") + moduleModelInfo.setModelInvariantUuid("cc250e7e-746b-4d84-8064-df20c74213a6") + moduleModelInfo.setModelVersion("1") + moduleModelInfo.setModelCustomizationUuid("99424afc-1fb4-4598-a99b-3e0690b4cb03") + moduleModelInfo.setModelCustomizationName("") + moduleModelInfo.setModelInstanceName("") + moduleModelInfo.setModelType("") + moduleResource.setResourceInstance(new ResourceInstance()) + moduleResource.setHomingSolution(new HomingSolution()) + moduleResource.setHasVolumeGroup(false) + moduleResource.setIsBase(false) + moduleResource.setVfModuleLabel("addon_vcpe_vgw") + moduleResource.setInitialCount(1) + + serviceDecomposition.setNetworkResources(new ArrayList<NetworkResource>()) + + List<AllottedResource> allottedResources = new ArrayList<AllottedResource>() + serviceDecomposition.setAllottedResources(allottedResources) + + AllottedResource ar = new AllottedResource() + allottedResources.add(ar) + ar.setResourceId("ed4a3a9a-1411-4924-a9ee-61a41871a040") + ar.setResourceType(ResourceType.ALLOTTED_RESOURCE) + ModelInfo arModelInfo = new ModelInfo() + ar.setModelInfo(arModelInfo) + arModelInfo.setModelName("vcpear_tunnelxconn_1111") + arModelInfo.setModelUuid("d99e5442-c5e4-4197-ad8d-54f7ad43dd83") + arModelInfo.setModelInvariantUuid("61c17371-e824-4587-a9bb-21782aa28391") + arModelInfo.setModelVersion("1.0") + arModelInfo.setModelCustomizationUuid("506bb474-b8c2-41fd-aeec-4371c3ef58a4") + arModelInfo.setModelCustomizationName("") + arModelInfo.setModelInstanceName("vcpear_tunnelxconn_1111 0") + arModelInfo.setModelType("") + ar.setResourceInstance(new ResourceInstance()) + HomingSolution homingSolution = new HomingSolution() + ar.setHomingSolution(homingSolution) + homingSolution.setInventoryType(InventoryType.service) + homingSolution.setServiceInstanceId("d600c1c0-ff45-40e4-bf29-45a95fa64556") + homingSolution.setCloudOwner("CloudOwner") + homingSolution.setCloudRegionId("RegionOne") + VnfResource vnf = new VnfResource() + homingSolution.setVnf(vnf) + vnf.setResourceId("cea5e96e-9c67-437c-bf94-2329d277be09") + vnf.setResourceType(ResourceType.VNF) + vnf.setResourceInstance(new ResourceInstance()) + vnf.setHomingSolution(new HomingSolution()) + vnf.setVnfHostname("vnfHostName") + homingSolution.setLicense(new License()) + homingSolution.setRehome(false) + ar.setToscaNodeType("org.openecomp.resource.vf.VcpearTunnelxconn1111") + ar.setAllottedResourceType("TunnelXConnect") + ar.setAllottedResourceRole("TunnelXConn") + ar.setProvidingServiceModelName("org.openecomp.service.VcpesvcVgmux1111") + ar.setProvidingServiceModelInvariantUuid("d5751cb3-b9e9-470b-9c29-76a5e3ea12d0") + ar.setProvidingServiceModelUuid("61b6e96a-f0c6-4f34-a91c-dab3574dd025") + ar.setNfType("TunnelXConn") + ar.setNfRole("TunnelXConn") + + ar = new AllottedResource() + allottedResources.add(ar) + ar.setResourceId("3b1b3686-ccfe-4e7c-9d6b-76419db398f9") + ar.setResourceType(ResourceType.ALLOTTED_RESOURCE) + arModelInfo = new ModelInfo() + ar.setModelInfo(arModelInfo) + arModelInfo.setModelName("vcpear_brg_1111") + arModelInfo.setModelUuid("6b0a5aa5-98d8-455c-8cd1-618a3f1ac859") + arModelInfo.setModelInvariantUuid("531f9aa5-dea4-4958-89ad-ef03f77cbf07") + arModelInfo.setModelVersion("1.0") + arModelInfo.setModelCustomizationUuid("d23ac3fe-ea54-4060-a7c1-ec9178c79620") + arModelInfo.setModelCustomizationName("") + arModelInfo.setModelInstanceName("vcpear_brg_1111 0") + arModelInfo.setModelType("") + ar.setResourceInstance(new ResourceInstance()) + homingSolution = new HomingSolution() + ar.setHomingSolution(homingSolution) + homingSolution.setInventoryType(InventoryType.service) + homingSolution.setServiceInstanceId("bc28ebca-0cc3-4bf8-9ce9-d1524e4bec79") + homingSolution.setCloudOwner("CloudOwner") + homingSolution.setCloudRegionId("RegionOne") + vnf = new VnfResource() + homingSolution.setVnf(vnf) + vnf.setResourceId("65183e95-e6f1-46cb-9315-2da27a24c2b9") + vnf.setResourceType(ResourceType.VNF) + vnf.setResourceInstance(new ResourceInstance()) + vnf.setHomingSolution(new HomingSolution()) + vnf.setVnfHostname("vnfHostName") + homingSolution.setLicense(new License()) + homingSolution.setRehome(false) + ar.setToscaNodeType("org.openecomp.resource.vf.VcpearBrg1111") + ar.setAllottedResourceType("BRG") + ar.setAllottedResourceRole("BRG") + ar.setProvidingServiceModelName("org.openecomp.service.VcpesvcVbrg1111") + ar.setProvidingServiceModelInvariantUuid("6eff53bf-0045-41b0-bd48-b4e1284e5b7a") + ar.setProvidingServiceModelUuid("0e500bca-15ac-42eb-a2f1-4bfd3b2828ff") + ar.setNfType("BRG") + ar.setNfRole("BRG") + + return serviceDecomposition + } +} diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCustomDeleteE2EServiceInstanceTest.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCustomDeleteE2EServiceInstanceTest.groovy index bbbb82b5aa..4cb21181ec 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCustomDeleteE2EServiceInstanceTest.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCustomDeleteE2EServiceInstanceTest.groovy @@ -34,7 +34,7 @@ import org.onap.so.bpmn.mock.FileUtil import org.onap.so.bpmn.vcpe.scripts.GroovyTestBase import static org.assertj.core.api.Assertions.assertThatThrownBy -import static org.mockito.Matchers.anyString +import static org.mockito.ArgumentMatchers.anyString import static org.mockito.Mockito.verify import static org.mockito.Mockito.when import static org.mockito.Mockito.eq diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstanceTest.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstanceTest.groovy index 764ceb256a..c2113e2f28 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstanceTest.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstanceTest.groovy @@ -34,7 +34,7 @@ import org.onap.so.client.aai.entities.uri.AAIResourceUri import org.onap.so.client.aai.entities.uri.AAIUriFactory import org.onap.so.constants.Defaults -import static org.mockito.Matchers.isA +import static org.mockito.ArgumentMatchers.isA import static org.mockito.Mockito.doThrow import static org.mockito.Mockito.spy import static org.mockito.Mockito.when diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy index d0ded39146..160eee2337 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy @@ -85,10 +85,10 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase { // ***** preProcessRequest ***** @Test - @Ignore // 1802 merge public void preProcessRequest() { ExecutionEntity mex = setupMock() def map = setupMap(mex) + initPreProcess(mex) CreateVcpeResCustService CreateVcpeResCustService = new CreateVcpeResCustService() @@ -96,7 +96,6 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase { verify(mex).getVariable(DBGFLAG) verify(mex).setVariable("prefix", Prefix) - verify(mex).setVariable("aaiDistDelay", "aaidelay") verify(mex).setVariable("createVcpeServiceRequest", request) verify(mex).setVariable("msoRequestId", "mri") assertEquals("sii", map.get("serviceInstanceId")) @@ -118,6 +117,8 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase { def reqinfo = map.get(Prefix+"requestInfo") assertTrue(reqinfo.indexOf("<request-id>mri</") >= 0) assertTrue(reqinfo.indexOf("<source>VID</") >= 0) + + assertTrue(map.containsKey("vfModuleNames")) } @Test @@ -127,7 +128,7 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase { def map = setupMap(mex) initPreProcess(mex) - when(mex.getVariable("URN_mso_workflow_aai_distribution_delay")).thenReturn(null) + when(mex.getVariable("aai.workflowAaiDistributionDelay")).thenReturn(null) CreateVcpeResCustService CreateVcpeResCustService = new CreateVcpeResCustService() @@ -209,7 +210,6 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase { .replace('"mdt1"', '"CloudOwner_CloudRegion1"') when(mex.getVariable("bpmnRequest")).thenReturn(req) - when(mex.getVariable("URN_mso_workflow_aai_distribution_delay")).thenReturn("PT5S") when(mex.getVariable("aai.workflowAaiDistributionDelay")).thenReturn("PT5S") CreateVcpeResCustService CreateVcpeResCustService = new CreateVcpeResCustService() @@ -230,8 +230,6 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase { .replace('"mdt1"', '"CloudRegion1_"') when(mex.getVariable("bpmnRequest")).thenReturn(req) - when(mex.getVariable("URN_mso_workflow_aai_distribution_delay")).thenReturn(60) - when(mex.getVariable("URN_mso_workflow_aai_distribution_delay")).thenReturn("PT5S") when(mex.getVariable("aai.workflowAaiDistributionDelay")).thenReturn("PT5S") CreateVcpeResCustService CreateVcpeResCustService = new CreateVcpeResCustService() @@ -1122,7 +1120,7 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase { private void initPreProcess(ExecutionEntity mex) { when(mex.getVariable(DBGFLAG)).thenReturn("true") when(mex.getVariable("bpmnRequest")).thenReturn(request) - when(mex.getVariable("URN_mso_workflow_aai_distribution_delay")).thenReturn("aaidelay") + when(mex.getVariable("aai.workflowAaiDistributionDelay")).thenReturn("PT5S") when(mex.getVariable("mso-request-id")).thenReturn("mri") when(mex.getVariable("serviceInstanceId")).thenReturn("sii") when(mex.getVariable("requestAction")).thenReturn("ra") diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java index 4282b0f2bb..8507d9c092 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java +++ b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java @@ -24,7 +24,7 @@ import org.camunda.bpm.engine.delegate.DelegateExecution; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreatePnfEntryInAaiDelegateTest.java b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreatePnfEntryInAaiDelegateTest.java index 0872060d55..c487125ea6 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreatePnfEntryInAaiDelegateTest.java +++ b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreatePnfEntryInAaiDelegateTest.java @@ -23,7 +23,7 @@ package org.onap.so.bpmn.infrastructure.pnf.delegate; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableNames.CORRELATION_ID; import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableNames.PNF_UUID; @@ -53,4 +53,4 @@ public class CreatePnfEntryInAaiDelegateTest { assertThat(createdEntry.getPnfName()).isEqualTo("testCorrelationId"); assertThat(createdEntry.isInMaint()).isNull(); } -}
\ No newline at end of file +} diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/GeneratePnfUuidDelegateTest.java b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/GeneratePnfUuidDelegateTest.java index 763a4546e8..8a1cdfa4c0 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/GeneratePnfUuidDelegateTest.java +++ b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/GeneratePnfUuidDelegateTest.java @@ -28,8 +28,6 @@ import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake; import org.junit.Test; public class GeneratePnfUuidDelegateTest { - private static final String UUID_REGEX = "(?i)^[0-9a-f]{8}-[0-9a-f]{4}-[1-5]{1}[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}$"; - @Test public void execute_shouldSetValidUuidAsPnfUuid() { // given @@ -38,6 +36,6 @@ public class GeneratePnfUuidDelegateTest { // when delegate.execute(execution); // then - assertThat((String) execution.getVariable(PNF_UUID)).matches(UUID_REGEX); + assertThat((String) execution.getVariable(PNF_UUID)).matches(PnfCheckInputs.UUID_REGEX); } -}
\ No newline at end of file +} diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/InformDmaapClientTest.java b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/InformDmaapClientTest.java index 7a31ae1a67..23c82229fe 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/InformDmaapClientTest.java +++ b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/InformDmaapClientTest.java @@ -30,7 +30,7 @@ import org.mockito.InOrder; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; public class InformDmaapClientTest { diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/PnfCheckInputsTest.java b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/PnfCheckInputsTest.java index d670305a9a..1888831e2e 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/PnfCheckInputsTest.java +++ b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/PnfCheckInputsTest.java @@ -4,8 +4,6 @@ * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ - * Modifications Copyright 2018 Nokia - * ================================================================================ * 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 @@ -23,7 +21,7 @@ package org.onap.so.bpmn.infrastructure.pnf.delegate; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableNames.CORRELATION_ID; import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableNames.PNF_UUID; import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableNames.TIMEOUT_FOR_NOTIFICATION; @@ -56,18 +54,6 @@ public class PnfCheckInputsTest { } @Test - public void shouldThrowException_whenCorrelationIdIsEmptyString() { - PnfCheckInputs testedObject = prepareExecutionForCorrelationId(""); - assertThatThrownBy(() -> testedObject.execute(delegateExecution)).isInstanceOf(BpmnError.class); - } - - @Test - public void shouldThrowException_whenTimeoutIsNotSetAndDefaultIsNotDefined() { - PnfCheckInputs testedObject = prepareExecutionForTimeout(null, null); - assertThatThrownBy(() -> testedObject.execute(delegateExecution)).isInstanceOf(BpmnError.class); - } - - @Test public void shouldThrowException_whenTimeoutIsEmptyStringAndDefaultIsNotDefined() { PnfCheckInputs testedObject = prepareExecutionForTimeout(null, ""); assertThatThrownBy(() -> testedObject.execute(delegateExecution)).isInstanceOf(BpmnError.class); diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/dmaap/PnfEventReadyDmaapClientTest.java b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/dmaap/PnfEventReadyDmaapClientTest.java index 33b4689629..b30239d9c0 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/dmaap/PnfEventReadyDmaapClientTest.java +++ b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/dmaap/PnfEventReadyDmaapClientTest.java @@ -25,7 +25,7 @@ package org.onap.so.bpmn.infrastructure.pnf.dmaap; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/resources/__files/VCPE/CreateVcpeResCustService/request.json b/bpmn/so-bpmn-infrastructure-common/src/test/resources/__files/VCPE/CreateVcpeResCustService/request.json index dc4669e8d9..766d27a26d 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/test/resources/__files/VCPE/CreateVcpeResCustService/request.json +++ b/bpmn/so-bpmn-infrastructure-common/src/test/resources/__files/VCPE/CreateVcpeResCustService/request.json @@ -23,6 +23,7 @@ }, "cloudConfiguration": { + "cloudOwner":"CloudOwner", "lcpCloudRegionId":"mdt1", "tenantId":"8b1df54faa3b49078e3416e21370a3ba" }, @@ -30,11 +31,37 @@ { "subscriptionServiceType":"123456789", "aLaCarte":"false", - "userParams": + "userParams":[ { - "BRG_WAN_MAC_Address" : "brgmac" + "name":"BRG_WAN_MAC_Address", + "value":"brgmac" + }, + { + "name":"Customer_Location", + "value":{ + "customerLatitude":"32.897480", + "customerLongitude":"-97.040443", + "customerName":"some_company" + } + }, + { + "name":"Homing_Solution", + "value":"sniro" + }, + { + "name":"VfModuleNames", + "value":[ + { + "VfModuleModelInvariantUuid":"c0e70c86-9813-4441-93c7-ad356a9a8d3b", + "VfModuleName":"VGWA:f4:56:56:56:%" + }, + { + "VfModuleModelInvariantUuid":"5366deab-be06-44c7-b4f7-77e657b78b25", + "VfModuleName":"VGWB:a9:18:18:18:%" + } + ] } + ] } - } } diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ActivateSDNCNetworkResource.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ActivateSDNCNetworkResource.bpmn index fe2c8928d8..8cde4f6c56 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ActivateSDNCNetworkResource.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/ActivateSDNCNetworkResource.bpmn @@ -38,7 +38,7 @@ dcsi.prepareUpdateAfterActivateSDNCResource(execution)</bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Create3rdONAPE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Create3rdONAPE2EServiceInstance.bpmn index 6a7cf8160a..6be6cc9899 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Create3rdONAPE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Create3rdONAPE2EServiceInstance.bpmn @@ -46,7 +46,7 @@ dcsi.prepareUpdateProgress(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -82,7 +82,7 @@ dcsi.doCreateE2ESIin3rdONAP(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -199,7 +199,7 @@ dcsi.prepareUpdateProgress(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -311,7 +311,7 @@ dcsi.prepareUpdateProgress(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateActivateSDNCResource.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateActivateSDNCResource.bpmn index 29d7a11175..5f4f964008 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateActivateSDNCResource.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateActivateSDNCResource.bpmn @@ -79,7 +79,7 @@ dcsi.prepareUpdateAfterCreateSDNCResource(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -101,7 +101,7 @@ dcsi.prepareUpdateAfterCreateSDNCResource(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -147,7 +147,7 @@ dcsi.prepareUpdateAfterActivateSDNCResource(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateCustomE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateCustomE2EServiceInstance.bpmn index 6f73b46e2e..04ff48d4ed 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateCustomE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateCustomE2EServiceInstance.bpmn @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0"> +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.16.2"> <bpmn:process id="CreateCustomE2EServiceInstance" name="CreateCustomE2EServiceInstance" isExecutable="true"> <bpmn:startEvent id="StartEvent_00qj6ro" name="Create SI Start Flow"> <bpmn:outgoing>SequenceFlow_0s2spoq</bpmn:outgoing> @@ -8,9 +8,9 @@ <bpmn:scriptTask id="ScriptTask_0u3lw39" name="Handle Unexpected Error" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_1dsbjjb</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1yay321</bpmn:outgoing> - <bpmn:script><![CDATA[import org.onap.so.bpmn.common.scripts.* + <bpmn:script>import org.onap.so.bpmn.common.scripts.* ExceptionUtil ex = new ExceptionUtil() -ex.processJavaException(execution)]]></bpmn:script> +ex.processJavaException(execution)</bpmn:script> </bpmn:scriptTask> <bpmn:startEvent id="StartEvent_0v1ffn4"> <bpmn:outgoing>SequenceFlow_1dsbjjb</bpmn:outgoing> @@ -54,16 +54,16 @@ ex.processJavaException(execution)]]></bpmn:script> <bpmn:scriptTask id="ScriptTask_1s09c7d" name="Pre Process Incoming Request" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_0s2spoq</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0z4faf9</bpmn:outgoing> - <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.* + <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def csi= new CreateCustomE2EServiceInstance() -csi.preProcessRequest(execution)]]></bpmn:script> +csi.preProcessRequest(execution)</bpmn:script> </bpmn:scriptTask> <bpmn:scriptTask id="ScriptTask_0ttvn8r" name="Prepare Completion Request" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_14zu6wr</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0je30si</bpmn:outgoing> - <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.* + <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def csi = new CreateCustomE2EServiceInstance() -csi.prepareCompletionRequest(execution)]]></bpmn:script> +csi.prepareCompletionRequest(execution)</bpmn:script> </bpmn:scriptTask> <bpmn:callActivity id="CallActivity_02fyxz0" name="Call CompleteMsoProcess" calledElement="CompleteMsoProcess"> <bpmn:extensionElements> @@ -88,9 +88,9 @@ csi.prepareCompletionRequest(execution)]]></bpmn:script> <bpmn:scriptTask id="ScriptTask_0u8o9p2" name="Prepare Fallout Request" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_0n9pexp</bpmn:incoming> <bpmn:outgoing>SequenceFlow_01umodj</bpmn:outgoing> - <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.* + <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def csi = new CreateCustomE2EServiceInstance() -csi.prepareFalloutRequest(execution)]]></bpmn:script> +csi.prepareFalloutRequest(execution)</bpmn:script> </bpmn:scriptTask> <bpmn:callActivity id="CallActivity_1ang7q8" name="Call FalloutHandler" calledElement="FalloutHandler"> <bpmn:extensionElements> @@ -107,9 +107,9 @@ csi.prepareFalloutRequest(execution)]]></bpmn:script> <bpmn:scriptTask id="ScriptTask_1rn6nqi" name="Send Error Response"> <bpmn:incoming>SequenceFlow_0e1r62n</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0n9pexp</bpmn:outgoing> - <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.* + <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def csi = new CreateCustomE2EServiceInstance() -csi.sendSyncError(execution)]]></bpmn:script> +csi.sendSyncError(execution)</bpmn:script> </bpmn:scriptTask> <bpmn:sequenceFlow id="SequenceFlow_0e1r62n" sourceRef="StartEvent_0dug28e" targetRef="ScriptTask_1rn6nqi" /> <bpmn:sequenceFlow id="SequenceFlow_1ysapam" sourceRef="CallActivity_1ang7q8" targetRef="EndEvent_03wysuk" /> @@ -119,9 +119,9 @@ csi.sendSyncError(execution)]]></bpmn:script> <bpmn:scriptTask id="ScriptTask_0xupxj9" name="Send Sync Ack Response" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_081z8l2</bpmn:incoming> <bpmn:outgoing>SequenceFlow_19eilro</bpmn:outgoing> - <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.* + <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def csi = new CreateCustomE2EServiceInstance() -csi.sendSyncResponse(execution)]]></bpmn:script> +csi.sendSyncResponse(execution)</bpmn:script> </bpmn:scriptTask> <bpmn:exclusiveGateway id="ExclusiveGateway_0aqn64l" name="Success?"> <bpmn:incoming>SequenceFlow_0klbpxx</bpmn:incoming> @@ -138,19 +138,19 @@ csi.sendSyncResponse(execution)]]></bpmn:script> <bpmn:sequenceFlow id="SequenceFlow_0yayvrf" sourceRef="CallActivity_02fyxz0" targetRef="EndEvent_0bpd6c0" /> <bpmn:sequenceFlow id="SequenceFlow_0z4faf9" sourceRef="ScriptTask_1s09c7d" targetRef="Task_1tqjch6" /> <bpmn:sequenceFlow id="SequenceFlow_14zu6wr" name="yes" sourceRef="ExclusiveGateway_0aqn64l" targetRef="ScriptTask_0ttvn8r"> - <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{execution.getVariable("WorkflowException") == null}]]></bpmn:conditionExpression> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("WorkflowException") == null}</bpmn:conditionExpression> </bpmn:sequenceFlow> <bpmn:sequenceFlow id="SequenceFlow_0je30si" sourceRef="ScriptTask_0ttvn8r" targetRef="CallActivity_02fyxz0" /> <bpmn:sequenceFlow id="SequenceFlow_1fueo69" name="no" sourceRef="ExclusiveGateway_0aqn64l" targetRef="EndEvent_07uk5iy"> - <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{execution.getVariable("WorkflowException") != null}]]></bpmn:conditionExpression> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("WorkflowException") != null}</bpmn:conditionExpression> </bpmn:sequenceFlow> <bpmn:sequenceFlow id="SequenceFlow_1euqjsp" sourceRef="Task_1tqjch6" targetRef="Task_19mxcw3" /> <bpmn:scriptTask id="Task_1tqjch6" name="Init Service Operation Status" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_0z4faf9</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1euqjsp</bpmn:outgoing> - <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.* + <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def csi= new CreateCustomE2EServiceInstance() -csi.prepareInitServiceOperationStatus(execution)]]></bpmn:script> +csi.prepareInitServiceOperationStatus(execution)</bpmn:script> </bpmn:scriptTask> <bpmn:serviceTask id="Task_19mxcw3" name="Update Service Operation Status"> <bpmn:extensionElements> @@ -160,7 +160,7 @@ csi.prepareInitServiceOperationStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -225,61 +225,61 @@ csi.prepareInitServiceOperationStatus(execution)]]></bpmn:script> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0s2spoq_di" bpmnElement="SequenceFlow_0s2spoq"> - <di:waypoint xsi:type="dc:Point" x="30" y="198" /> - <di:waypoint xsi:type="dc:Point" x="115" y="198" /> + <di:waypoint x="30" y="198" /> + <di:waypoint x="115" y="198" /> <bpmndi:BPMNLabel> <dc:Bounds x="27.5" y="177" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_19eilro_di" bpmnElement="SequenceFlow_19eilro"> - <di:waypoint xsi:type="dc:Point" x="710" y="198" /> - <di:waypoint xsi:type="dc:Point" x="751" y="198" /> + <di:waypoint x="710" y="198" /> + <di:waypoint x="751" y="198" /> <bpmndi:BPMNLabel> <dc:Bounds x="685.5" y="177" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0klbpxx_di" bpmnElement="SequenceFlow_0klbpxx"> - <di:waypoint xsi:type="dc:Point" x="851" y="198" /> - <di:waypoint xsi:type="dc:Point" x="903" y="198" /> + <di:waypoint x="851" y="198" /> + <di:waypoint x="903" y="198" /> <bpmndi:BPMNLabel> <dc:Bounds x="832" y="177" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0yayvrf_di" bpmnElement="SequenceFlow_0yayvrf"> - <di:waypoint xsi:type="dc:Point" x="1276" y="238" /> - <di:waypoint xsi:type="dc:Point" x="1276" y="286" /> + <di:waypoint x="1276" y="238" /> + <di:waypoint x="1276" y="286" /> <bpmndi:BPMNLabel> <dc:Bounds x="1246" y="262" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0z4faf9_di" bpmnElement="SequenceFlow_0z4faf9"> - <di:waypoint xsi:type="dc:Point" x="215" y="198" /> - <di:waypoint xsi:type="dc:Point" x="273" y="198" /> + <di:waypoint x="215" y="198" /> + <di:waypoint x="273" y="198" /> <bpmndi:BPMNLabel> <dc:Bounds x="199" y="177" width="90" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_14zu6wr_di" bpmnElement="SequenceFlow_14zu6wr"> - <di:waypoint xsi:type="dc:Point" x="953" y="198" /> - <di:waypoint xsi:type="dc:Point" x="990" y="198" /> - <di:waypoint xsi:type="dc:Point" x="990" y="198" /> - <di:waypoint xsi:type="dc:Point" x="1038" y="198" /> + <di:waypoint x="953" y="198" /> + <di:waypoint x="990" y="198" /> + <di:waypoint x="990" y="198" /> + <di:waypoint x="1038" y="198" /> <bpmndi:BPMNLabel> <dc:Bounds x="987" y="195" width="20" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0je30si_di" bpmnElement="SequenceFlow_0je30si"> - <di:waypoint xsi:type="dc:Point" x="1138" y="198" /> - <di:waypoint xsi:type="dc:Point" x="1226" y="198" /> + <di:waypoint x="1138" y="198" /> + <di:waypoint x="1226" y="198" /> <bpmndi:BPMNLabel> <dc:Bounds x="1137" y="183" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1fueo69_di" bpmnElement="SequenceFlow_1fueo69"> - <di:waypoint xsi:type="dc:Point" x="928" y="223" /> - <di:waypoint xsi:type="dc:Point" x="928" y="250" /> - <di:waypoint xsi:type="dc:Point" x="928" y="250" /> - <di:waypoint xsi:type="dc:Point" x="928" y="286" /> + <di:waypoint x="928" y="223" /> + <di:waypoint x="928" y="250" /> + <di:waypoint x="928" y="250" /> + <di:waypoint x="928" y="286" /> <bpmndi:BPMNLabel> <dc:Bounds x="901" y="228" width="15" height="12" /> </bpmndi:BPMNLabel> @@ -321,54 +321,54 @@ csi.prepareInitServiceOperationStatus(execution)]]></bpmn:script> <dc:Bounds x="443" y="434" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1dsbjjb_di" bpmnElement="SequenceFlow_1dsbjjb"> - <di:waypoint xsi:type="dc:Point" x="532" y="727" /> - <di:waypoint xsi:type="dc:Point" x="611" y="727" /> + <di:waypoint x="532" y="727" /> + <di:waypoint x="611" y="727" /> <bpmndi:BPMNLabel> <dc:Bounds x="529.5" y="727" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1yay321_di" bpmnElement="SequenceFlow_1yay321"> - <di:waypoint xsi:type="dc:Point" x="711" y="727" /> - <di:waypoint xsi:type="dc:Point" x="772" y="727" /> + <di:waypoint x="711" y="727" /> + <di:waypoint x="772" y="727" /> <bpmndi:BPMNLabel> <dc:Bounds x="701.5" y="727" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0e1r62n_di" bpmnElement="SequenceFlow_0e1r62n"> - <di:waypoint xsi:type="dc:Point" x="399" y="474" /> - <di:waypoint xsi:type="dc:Point" x="421" y="474" /> - <di:waypoint xsi:type="dc:Point" x="421" y="474" /> - <di:waypoint xsi:type="dc:Point" x="442" y="474" /> + <di:waypoint x="399" y="474" /> + <di:waypoint x="421" y="474" /> + <di:waypoint x="421" y="474" /> + <di:waypoint x="442" y="474" /> <bpmndi:BPMNLabel> <dc:Bounds x="391" y="474" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1ysapam_di" bpmnElement="SequenceFlow_1ysapam"> - <di:waypoint xsi:type="dc:Point" x="898" y="474" /> - <di:waypoint xsi:type="dc:Point" x="942" y="474" /> + <di:waypoint x="898" y="474" /> + <di:waypoint x="942" y="474" /> <bpmndi:BPMNLabel> <dc:Bounds x="875" y="459" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0n9pexp_di" bpmnElement="SequenceFlow_0n9pexp"> - <di:waypoint xsi:type="dc:Point" x="543" y="474" /> - <di:waypoint xsi:type="dc:Point" x="570" y="474" /> - <di:waypoint xsi:type="dc:Point" x="570" y="474" /> - <di:waypoint xsi:type="dc:Point" x="621" y="474" /> + <di:waypoint x="543" y="474" /> + <di:waypoint x="570" y="474" /> + <di:waypoint x="570" y="474" /> + <di:waypoint x="621" y="474" /> <bpmndi:BPMNLabel> <dc:Bounds x="540" y="474" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_01umodj_di" bpmnElement="SequenceFlow_01umodj"> - <di:waypoint xsi:type="dc:Point" x="721" y="474" /> - <di:waypoint xsi:type="dc:Point" x="798" y="474" /> + <di:waypoint x="721" y="474" /> + <di:waypoint x="798" y="474" /> <bpmndi:BPMNLabel> <dc:Bounds x="715.5" y="459" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1euqjsp_di" bpmnElement="SequenceFlow_1euqjsp"> - <di:waypoint xsi:type="dc:Point" x="373" y="198" /> - <di:waypoint xsi:type="dc:Point" x="446" y="198" /> + <di:waypoint x="373" y="198" /> + <di:waypoint x="446" y="198" /> <bpmndi:BPMNLabel> <dc:Bounds x="364.5" y="177" width="90" height="12" /> </bpmndi:BPMNLabel> @@ -380,8 +380,8 @@ csi.prepareInitServiceOperationStatus(execution)]]></bpmn:script> <dc:Bounds x="446" y="158" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_081z8l2_di" bpmnElement="SequenceFlow_081z8l2"> - <di:waypoint xsi:type="dc:Point" x="546" y="198" /> - <di:waypoint xsi:type="dc:Point" x="610" y="198" /> + <di:waypoint x="546" y="198" /> + <di:waypoint x="610" y="198" /> <bpmndi:BPMNLabel> <dc:Bounds x="533" y="177" width="90" height="12" /> </bpmndi:BPMNLabel> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateDeviceResource.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateDeviceResource.bpmn index 5fd2c69608..29cec8ed1e 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateDeviceResource.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateDeviceResource.bpmn @@ -93,7 +93,7 @@ dcsi.prepareUpdateProgress(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSDNCNetworkResource.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSDNCNetworkResource.bpmn index a94569c29b..0bdc6dc0bd 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSDNCNetworkResource.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSDNCNetworkResource.bpmn @@ -62,7 +62,7 @@ dcsi.prepareUpdateBeforeCreateSDNCResource(execution)</bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -84,7 +84,7 @@ dcsi.prepareUpdateBeforeCreateSDNCResource(execution)</bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateVcpeResCustService.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateVcpeResCustService.bpmn index 7413e6df83..54f0947d29 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateVcpeResCustService.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateVcpeResCustService.bpmn @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"> +<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"> <bpmn2:process id="CreateVcpeResCustService" name="CreateVcpeResCustService" isExecutable="true"> <bpmn2:scriptTask id="sendSyncAckResponse_ScriptTask" name="Send Sync Ack Response" scriptFormat="groovy"> <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming> @@ -518,6 +518,7 @@ CreateVcpeResCustService.prepareCreateAllottedResourceBRG(execution)]]></bpmn2:s <camunda:in source="serviceModelInfo" target="serviceModelInfo" /> <camunda:in source="globalSubscriberId" target="globalSubscriberId" /> <camunda:in source="serviceDecomposition" target="serviceDecomposition" /> + <camunda:in source="vfModuleNames" target="vfModuleNames" /> </bpmn2:extensionElements> <bpmn2:incoming>SequenceFlow_0ws7fjn</bpmn2:incoming> <bpmn2:outgoing>SequenceFlow_1mkdhw9</bpmn2:outgoing> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateVcpeResCustServiceV2.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateVcpeResCustServiceV2.bpmn index bfbdc25f18..2dbf12717c 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateVcpeResCustServiceV2.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateVcpeResCustServiceV2.bpmn @@ -488,6 +488,7 @@ CreateVcpeResCustService.prepareCreateAllottedResourceTXC(execution)]]></bpmn2:s <camunda:in source="serviceModelInfo" target="serviceModelInfo" /> <camunda:in source="globalSubscriberId" target="globalSubscriberId" /> <camunda:in source="serviceDecomposition" target="serviceDecomposition" /> + <camunda:in source="vfModuleNames" target="vfModuleNames" /> </bpmn2:extensionElements> <bpmn2:incoming>SequenceFlow_0ws7fjn</bpmn2:incoming> <bpmn2:outgoing>SequenceFlow_1mkdhw9</bpmn2:outgoing> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeActivateSDNCNetworkResource.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeActivateSDNCNetworkResource.bpmn index eaf37191d5..cfcd259d7c 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeActivateSDNCNetworkResource.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeActivateSDNCNetworkResource.bpmn @@ -62,7 +62,7 @@ csi.sendSyncResponse(execution)</bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Delete3rdONAPE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Delete3rdONAPE2EServiceInstance.bpmn index 25fd6af574..f6dcff4435 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Delete3rdONAPE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Delete3rdONAPE2EServiceInstance.bpmn @@ -46,7 +46,7 @@ dcsi.prepareUpdateProgress(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -82,7 +82,7 @@ dcsi.doDeleteE2ESIin3rdONAP(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -192,7 +192,7 @@ dcsi.prepareUpdateProgress(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -303,7 +303,7 @@ dcsi.prepareUpdateProgress(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn index 2d68d650c5..7010442b5d 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn @@ -152,7 +152,7 @@ csi.prepareInitServiceOperationStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteDeviceResource.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteDeviceResource.bpmn index 73d38b383c..7d9a9e2b5d 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteDeviceResource.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteDeviceResource.bpmn @@ -92,7 +92,7 @@ dcsi.prepareUpdateProgress(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteSDNCNetworkResource.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteSDNCNetworkResource.bpmn index 80fcc1762e..c2d4de3973 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteSDNCNetworkResource.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/DeleteSDNCNetworkResource.bpmn @@ -58,7 +58,7 @@ dcsi.prepareUpdateBeforeDeleteSDNCResource(execution)</bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> @@ -80,7 +80,7 @@ dcsi.prepareUpdateBeforeDeleteSDNCResource(execution)</bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/UpdateCustomE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/UpdateCustomE2EServiceInstance.bpmn index 1be30d62e4..e2488fda6a 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/UpdateCustomE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/UpdateCustomE2EServiceInstance.bpmn @@ -136,7 +136,7 @@ csi.sendSyncError(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -246,7 +246,7 @@ csi.prepareInitServiceOperationStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -270,7 +270,7 @@ csi.prepareInitServiceOperationStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn index 01040ba914..eccb9486dd 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstance.bpmn @@ -123,7 +123,7 @@ ddsi.preInitResourcesOperStatus(execution)]]></bpmn2:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstanceV2.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstanceV2.bpmn index c699f911d0..31174a0b3e 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstanceV2.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateE2EServiceInstanceV2.bpmn @@ -284,7 +284,7 @@ ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn2:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -317,7 +317,7 @@ ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn2:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -350,7 +350,7 @@ ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn2:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -381,7 +381,7 @@ ddsi.preInitResourcesOperStatus(execution)]]></bpmn2:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter> @@ -404,7 +404,7 @@ ddsi.preInitResourcesOperStatus(execution)]]></bpmn2:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVnfAndModules.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVnfAndModules.bpmn index b5988538e3..016aaa20d2 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVnfAndModules.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateVnfAndModules.bpmn @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0"> +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0"> <bpmn:process id="DoCreateVnfAndModules" name="DoCreateVnfAndModules" isExecutable="true"> <bpmn:startEvent id="StartEvent_1"> <bpmn:outgoing>SequenceFlow_0o4vuzt</bpmn:outgoing> @@ -42,7 +42,8 @@ doCreateVnfAndModules.preProcessRequest(execution)]]></bpmn:script> <camunda:in source="false" target="usePreload" /> <camunda:in source="aLaCarte" target="aLaCarte" /> </bpmn:extensionElements> - <bpmn:incoming>SequenceFlow_1hf7k7q</bpmn:incoming> + <bpmn:incoming>SequenceFlow_0tbhtk8</bpmn:incoming> + <bpmn:incoming>SequenceFlow_10nwzbe</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1ixcnb6</bpmn:outgoing> </bpmn:callActivity> <bpmn:sequenceFlow id="SequenceFlow_0o4vuzt" sourceRef="StartEvent_1" targetRef="PreProcessRequest" /> @@ -79,6 +80,7 @@ doCreateVnfAndModules.preProcessRequest(execution)]]></bpmn:script> <camunda:in source="aLaCarte" target="aLaCarte" /> </bpmn:extensionElements> <bpmn:incoming>SequenceFlow_1lh21yl</bpmn:incoming> + <bpmn:incoming>SequenceFlow_12ffqm1</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1llbx0k</bpmn:outgoing> </bpmn:callActivity> <bpmn:scriptTask id="Task_1lfmdks" name="Validate Create Add-On VF Module Response" scriptFormat="groovy"> @@ -132,7 +134,7 @@ doCreateVnfAndModules.validateAddOnModule(execution)]]></bpmn:script> <camunda:in source="vnfResourceDecomposition" target="vnfResourceDecomposition" /> </bpmn:extensionElements> <bpmn:incoming>SequenceFlow_19ohb1a</bpmn:incoming> - <bpmn:outgoing>SequenceFlow_07u8e3l</bpmn:outgoing> + <bpmn:outgoing>SequenceFlow_0oxfrrr</bpmn:outgoing> </bpmn:callActivity> <bpmn:scriptTask id="PreProcessAddOnModule" name="PreProcess Add-On Module" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_0jz6bqn</bpmn:incoming> @@ -157,12 +159,11 @@ doCreateVnfAndModules.queryCatalogDB(execution)]]></bpmn:script> <bpmn:sequenceFlow id="SequenceFlow_0jz6bqn" name="yes" sourceRef="ExclusiveGateway_1vyqr5o" targetRef="PreProcessAddOnModule"> <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{execution.getVariable("addOnModulesDeployed") < execution.getVariable("addOnModulesToDeploy")}]]></bpmn:conditionExpression> </bpmn:sequenceFlow> - <bpmn:sequenceFlow id="SequenceFlow_0kld3qt" name="yes" sourceRef="ExclusiveGateway_1hx9s0y" targetRef="GenerateAddOnModuleName"> + <bpmn:sequenceFlow id="SequenceFlow_0kld3qt" name="yes" sourceRef="ExclusiveGateway_1hx9s0y" targetRef="ExclusiveGateway_03anzqd"> <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{execution.getVariable("instancesOfThisModuleDeployed") < execution.getVariable("initialCount")}]]></bpmn:conditionExpression> </bpmn:sequenceFlow> <bpmn:sequenceFlow id="SequenceFlow_1mguf2m" sourceRef="Task_1lfmdks" targetRef="ExclusiveGateway_1hx9s0y" /> <bpmn:sequenceFlow id="SequenceFlow_1vrogpr" name="no" sourceRef="ExclusiveGateway_1hx9s0y" targetRef="PostProcessAddOnModule" /> - <bpmn:sequenceFlow id="SequenceFlow_1hf7k7q" sourceRef="GenerateBaseModuleName" targetRef="CreateBaseVfModule" /> <bpmn:callActivity id="GenerateBaseModuleName" name="Generate Base Module Name" calledElement="GenerateVfModuleName"> <bpmn:extensionElements> <camunda:in source="vnfId" target="vnfId" /> @@ -173,8 +174,8 @@ doCreateVnfAndModules.queryCatalogDB(execution)]]></bpmn:script> <camunda:out source="WorkflowException" target="WorkflowException" /> <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" /> </bpmn:extensionElements> - <bpmn:incoming>SequenceFlow_07u8e3l</bpmn:incoming> - <bpmn:outgoing>SequenceFlow_1hf7k7q</bpmn:outgoing> + <bpmn:incoming>SequenceFlow_19ecf9p</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0tbhtk8</bpmn:outgoing> </bpmn:callActivity> <bpmn:callActivity id="GenerateAddOnModuleName" name="Generate Add-On Module Name" calledElement="GenerateVfModuleName"> <bpmn:extensionElements> @@ -186,7 +187,7 @@ doCreateVnfAndModules.queryCatalogDB(execution)]]></bpmn:script> <camunda:out source="WorkflowException" target="WorkflowException" /> <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" /> </bpmn:extensionElements> - <bpmn:incoming>SequenceFlow_0kld3qt</bpmn:incoming> + <bpmn:incoming>SequenceFlow_0ulldxo</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1lh21yl</bpmn:outgoing> </bpmn:callActivity> <bpmn:sequenceFlow id="SequenceFlow_1lh21yl" sourceRef="GenerateAddOnModuleName" targetRef="CreateAddOnVfModule" /> @@ -240,7 +241,6 @@ dcvam.postProcessRollback(execution)]]></bpmn:script> </bpmn:startEvent> </bpmn:subProcess> <bpmn:sequenceFlow id="SequenceFlow_19ohb1a" sourceRef="QueryCatalogDB" targetRef="CreateVNF" /> - <bpmn:sequenceFlow id="SequenceFlow_07u8e3l" sourceRef="CreateVNF" targetRef="GenerateBaseModuleName" /> <bpmn:sequenceFlow id="SequenceFlow_0j52dxv" sourceRef="PostProcessAddOnModule" targetRef="ExclusiveGateway_1vyqr5o" /> <bpmn:scriptTask id="PostProcessAddOnModule" name="PostProcess Add-On Module" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_1vrogpr</bpmn:incoming> @@ -250,9 +250,9 @@ def doCreateVnfAndModules = new DoCreateVnfAndModules() doCreateVnfAndModules.postProcessAddOnModule(execution)]]></bpmn:script> </bpmn:scriptTask> <bpmn:sequenceFlow id="SequenceFlow_1t407j7" sourceRef="Task_1mrb29r" targetRef="Task_0qrf3e8" /> - <bpmn:sequenceFlow id="SequenceFlow_0baw1tl" sourceRef="Task_0qrf3e8" targetRef="GenerateBaseModuleName" /> + <bpmn:sequenceFlow id="SequenceFlow_0baw1tl" sourceRef="Task_0qrf3e8" targetRef="ExclusiveGateway_06ccv8x" /> <bpmn:scriptTask id="Task_1mrb29r" name="Create Platform" scriptFormat="groovy"> - <bpmn:incoming>SequenceFlow_07u8e3l</bpmn:incoming> + <bpmn:incoming>SequenceFlow_0oxfrrr</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1t407j7</bpmn:outgoing> <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.* def doCreateVnfAndModules = new DoCreateVnfAndModules() @@ -265,6 +265,26 @@ doCreateVnfAndModules.createPlatform(execution)]]></bpmn:script> def doCreateVnfAndModules = new DoCreateVnfAndModules() doCreateVnfAndModules.createLineOfBusiness(execution)]]></bpmn:script> </bpmn:scriptTask> + <bpmn:exclusiveGateway id="ExclusiveGateway_06ccv8x" name="Need to Generate Name?" default="SequenceFlow_10nwzbe"> + <bpmn:incoming>SequenceFlow_0baw1tl</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_19ecf9p</bpmn:outgoing> + <bpmn:outgoing>SequenceFlow_10nwzbe</bpmn:outgoing> + </bpmn:exclusiveGateway> + <bpmn:sequenceFlow id="SequenceFlow_19ecf9p" name="yes" sourceRef="ExclusiveGateway_06ccv8x" targetRef="GenerateBaseModuleName"> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{execution.getVariable("baseVfModuleName") == null}]]></bpmn:conditionExpression> + </bpmn:sequenceFlow> + <bpmn:sequenceFlow id="SequenceFlow_0tbhtk8" sourceRef="GenerateBaseModuleName" targetRef="CreateBaseVfModule" /> + <bpmn:sequenceFlow id="SequenceFlow_10nwzbe" name="no" sourceRef="ExclusiveGateway_06ccv8x" targetRef="CreateBaseVfModule" /> + <bpmn:exclusiveGateway id="ExclusiveGateway_03anzqd" name="Need to Generate Name?" default="SequenceFlow_12ffqm1"> + <bpmn:incoming>SequenceFlow_0kld3qt</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0ulldxo</bpmn:outgoing> + <bpmn:outgoing>SequenceFlow_12ffqm1</bpmn:outgoing> + </bpmn:exclusiveGateway> + <bpmn:sequenceFlow id="SequenceFlow_0ulldxo" name="yes" sourceRef="ExclusiveGateway_03anzqd" targetRef="GenerateAddOnModuleName"> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{execution.getVariable("addOnVfModuleName") == null}]]></bpmn:conditionExpression> + </bpmn:sequenceFlow> + <bpmn:sequenceFlow id="SequenceFlow_12ffqm1" name="no" sourceRef="ExclusiveGateway_03anzqd" targetRef="CreateAddOnVfModule" /> + <bpmn:sequenceFlow id="SequenceFlow_0oxfrrr" sourceRef="CreateVNF" targetRef="Task_1mrb29r" /> </bpmn:process> <bpmn:error id="Error_1" name="Java Lang Exception" errorCode="java.lang.Exception" /> <bpmn:error id="Error_2" name="MSO Workflow Exception" errorCode="MSOWorkflowException" /> @@ -303,16 +323,16 @@ doCreateVnfAndModules.createLineOfBusiness(execution)]]></bpmn:script> <dc:Bounds x="2239" y="57" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="EndEvent_1h41bs7_di" bpmnElement="EndEvent_0v6povc"> - <dc:Bounds x="2362" y="147" width="36" height="36" /> + <dc:Bounds x="1524" y="37" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="2380" y="183" width="0" height="0" /> + <dc:Bounds x="1497" y="73" width="90" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1llbx0k_di" bpmnElement="SequenceFlow_1llbx0k"> <di:waypoint xsi:type="dc:Point" x="2200" y="97" /> <di:waypoint xsi:type="dc:Point" x="2239" y="97" /> <bpmndi:BPMNLabel> - <dc:Bounds x="2220" y="82" width="0" height="0" /> + <dc:Bounds x="2175" y="82" width="90" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ExclusiveGateway_1vyqr5o_di" bpmnElement="ExclusiveGateway_1vyqr5o" isMarkerVisible="true"> @@ -323,11 +343,9 @@ doCreateVnfAndModules.createLineOfBusiness(execution)]]></bpmn:script> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_132bohl_di" bpmnElement="SequenceFlow_132bohl"> <di:waypoint xsi:type="dc:Point" x="1542" y="140" /> - <di:waypoint xsi:type="dc:Point" x="1542" y="36" /> - <di:waypoint xsi:type="dc:Point" x="2380" y="36" /> - <di:waypoint xsi:type="dc:Point" x="2380" y="147" /> + <di:waypoint xsi:type="dc:Point" x="1542" y="73" /> <bpmndi:BPMNLabel> - <dc:Bounds x="1962" y="21" width="16" height="12" /> + <dc:Bounds x="1548" y="98.99999999999997" width="16" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="CallActivity_0zr4ioh_di" bpmnElement="CreateVNF"> @@ -356,10 +374,10 @@ doCreateVnfAndModules.createLineOfBusiness(execution)]]></bpmn:script> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0kld3qt_di" bpmnElement="SequenceFlow_0kld3qt"> <di:waypoint xsi:type="dc:Point" x="1869" y="140" /> - <di:waypoint xsi:type="dc:Point" x="1869" y="89" /> - <di:waypoint xsi:type="dc:Point" x="1952" y="89" /> + <di:waypoint xsi:type="dc:Point" x="1869" y="97" /> + <di:waypoint xsi:type="dc:Point" x="1974" y="97" /> <bpmndi:BPMNLabel> - <dc:Bounds x="1886" y="96" width="16" height="12" /> + <dc:Bounds x="1890.6265060240964" y="103.99999999999983" width="20" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1mguf2m_di" bpmnElement="SequenceFlow_1mguf2m"> @@ -377,27 +395,21 @@ doCreateVnfAndModules.createLineOfBusiness(execution)]]></bpmn:script> <di:waypoint xsi:type="dc:Point" x="1869" y="301" /> <di:waypoint xsi:type="dc:Point" x="1751" y="301" /> <bpmndi:BPMNLabel> - <dc:Bounds x="1878" y="247" width="14" height="12" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge id="SequenceFlow_1hf7k7q_di" bpmnElement="SequenceFlow_1hf7k7q"> - <di:waypoint xsi:type="dc:Point" x="1191" y="165" /> - <di:waypoint xsi:type="dc:Point" x="1239" y="165" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="1215" y="150" width="0" height="0" /> + <dc:Bounds x="1878" y="247" width="15" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="CallActivity_0rz8zl9_di" bpmnElement="GenerateBaseModuleName"> - <dc:Bounds x="1091" y="125" width="100" height="80" /> + <dc:Bounds x="1077" y="245" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="CallActivity_0otq8mo_di" bpmnElement="GenerateAddOnModuleName"> - <dc:Bounds x="1952" y="57" width="100" height="80" /> + <dc:Bounds x="1949" y="-53" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1lh21yl_di" bpmnElement="SequenceFlow_1lh21yl"> - <di:waypoint xsi:type="dc:Point" x="2052" y="97" /> - <di:waypoint xsi:type="dc:Point" x="2100" y="97" /> + <di:waypoint xsi:type="dc:Point" x="2049" y="-13" /> + <di:waypoint xsi:type="dc:Point" x="2150" y="-13" /> + <di:waypoint xsi:type="dc:Point" x="2150" y="57" /> <bpmndi:BPMNLabel> - <dc:Bounds x="2076" y="82" width="0" height="0" /> + <dc:Bounds x="2054.5" y="-28" width="90" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_12x4dvf_di" bpmnElement="SequenceFlow_12x4dvf"> @@ -485,13 +497,6 @@ doCreateVnfAndModules.createLineOfBusiness(execution)]]></bpmn:script> <dc:Bounds x="546" y="140" width="0" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge id="SequenceFlow_07u8e3l_di" bpmnElement="SequenceFlow_07u8e3l"> - <di:waypoint xsi:type="dc:Point" x="674" y="165" /> - <di:waypoint xsi:type="dc:Point" x="742" y="165" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="708" y="150" width="0" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0j52dxv_di" bpmnElement="SequenceFlow_0j52dxv"> <di:waypoint xsi:type="dc:Point" x="1651" y="301" /> <di:waypoint xsi:type="dc:Point" x="1543" y="301" /> @@ -512,9 +517,9 @@ doCreateVnfAndModules.createLineOfBusiness(execution)]]></bpmn:script> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0baw1tl_di" bpmnElement="SequenceFlow_0baw1tl"> <di:waypoint xsi:type="dc:Point" x="1016" y="165" /> - <di:waypoint xsi:type="dc:Point" x="1091" y="165" /> + <di:waypoint xsi:type="dc:Point" x="1100" y="165" /> <bpmndi:BPMNLabel> - <dc:Bounds x="1054" y="150" width="0" height="0" /> + <dc:Bounds x="1013" y="150" width="90" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ScriptTask_0i9vj5o_di" bpmnElement="Task_1mrb29r"> @@ -523,6 +528,63 @@ doCreateVnfAndModules.createLineOfBusiness(execution)]]></bpmn:script> <bpmndi:BPMNShape id="ScriptTask_0stghuy_di" bpmnElement="Task_0qrf3e8"> <dc:Bounds x="916" y="125" width="100" height="80" /> </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ExclusiveGateway_06ccv8x_di" bpmnElement="ExclusiveGateway_06ccv8x" isMarkerVisible="true"> + <dc:Bounds x="1102" y="140" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1083" y="102" width="87" height="24" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_19ecf9p_di" bpmnElement="SequenceFlow_19ecf9p"> + <di:waypoint xsi:type="dc:Point" x="1127" y="190" /> + <di:waypoint xsi:type="dc:Point" x="1127" y="215" /> + <di:waypoint xsi:type="dc:Point" x="1127" y="215" /> + <di:waypoint xsi:type="dc:Point" x="1127" y="245" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1132" y="209" width="20" height="12" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0tbhtk8_di" bpmnElement="SequenceFlow_0tbhtk8"> + <di:waypoint xsi:type="dc:Point" x="1177" y="285" /> + <di:waypoint xsi:type="dc:Point" x="1289" y="285" /> + <di:waypoint xsi:type="dc:Point" x="1289" y="205" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1233" y="264" width="0" height="12" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_10nwzbe_di" bpmnElement="SequenceFlow_10nwzbe"> + <di:waypoint xsi:type="dc:Point" x="1152" y="165" /> + <di:waypoint xsi:type="dc:Point" x="1239" y="165" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1188" y="144" width="15" height="12" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="ExclusiveGateway_03anzqd_di" bpmnElement="ExclusiveGateway_03anzqd" isMarkerVisible="true"> + <dc:Bounds x="1973.884115884116" y="71.89710289710288" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1957" y="126" width="87" height="24" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_0ulldxo_di" bpmnElement="SequenceFlow_0ulldxo"> + <di:waypoint xsi:type="dc:Point" x="1999" y="72" /> + <di:waypoint xsi:type="dc:Point" x="1999" y="27" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="2004" y="44" width="20" height="12" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_12ffqm1_di" bpmnElement="SequenceFlow_12ffqm1"> + <di:waypoint xsi:type="dc:Point" x="2024" y="97" /> + <di:waypoint xsi:type="dc:Point" x="2100" y="97" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="2055" y="76" width="15" height="12" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0oxfrrr_di" bpmnElement="SequenceFlow_0oxfrrr"> + <di:waypoint xsi:type="dc:Point" x="674" y="165" /> + <di:waypoint xsi:type="dc:Point" x="742" y="165" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="708" y="144" width="0" height="12" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </bpmn:definitions> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstance.bpmn index 2e12dd3b96..1b02fd772d 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstance.bpmn @@ -99,7 +99,7 @@ ddsi.preInitResourcesOperStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstanceV2.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstanceV2.bpmn index 2df19abf68..cc927b240b 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstanceV2.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCustomDeleteE2EServiceInstanceV2.bpmn @@ -245,7 +245,7 @@ ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -278,7 +278,7 @@ ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -310,7 +310,7 @@ ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -349,7 +349,7 @@ ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter> @@ -380,7 +380,7 @@ ddsi.preInitResourcesOperStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteE2EServiceInstance.bpmn index 6084f570ce..9f9d58fa19 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteE2EServiceInstance.bpmn @@ -66,7 +66,7 @@ ddsi.preInitResourcesOperStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter> @@ -206,12 +206,12 @@ dcsi.postDecomposeService(execution)]]></bpmn:script> <bpmn:scriptTask id="ScriptTask_0f3tjbn" name="prepare update service operation status" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_0h5c1bd</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1ab3vex</bpmn:outgoing> - <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* + <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.* execution.setVariable("progress", "100") execution.setVariable("result", "finished") execution.setVariable("operationContent", "No actual resoure in service instance") def csi= new DoDeleteE2EServiceInstance() -csi.prepareUpdateServiceOperationStatus(execution)</bpmn:script> +csi.prepareUpdateServiceOperationStatus(execution)]]></bpmn:script> </bpmn:scriptTask> <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_0hrkmxb" name="End Delete Process"> <bpmn:outgoing>SequenceFlow_0h5c1bd</bpmn:outgoing> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteResourcesV1.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteResourcesV1.bpmn index fe5e93cbec..16acb0d7e1 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteResourcesV1.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeleteResourcesV1.bpmn @@ -119,7 +119,7 @@ ddrs.preProcessRequest(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoScaleE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoScaleE2EServiceInstance.bpmn index fa8a2213b0..dddbe18ba5 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoScaleE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoScaleE2EServiceInstance.bpmn @@ -30,7 +30,7 @@ ddsi.preInitResourcesOperStatus(execution)]]></bpmn:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn index 8383ccbd1f..785db75fa1 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn @@ -67,7 +67,7 @@ ddsi.preInitResourcesOperStatus(execution)]]></bpmn2:script> <camunda:inputParameter name="headers"> <camunda:map> <camunda:entry key="content-type">application/soap+xml</camunda:entry> - <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry> + <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry> </camunda:map> </camunda:inputParameter> <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter> diff --git a/bpmn/so-bpmn-tasks/pom.xml b/bpmn/so-bpmn-tasks/pom.xml index becb66a6dc..0243ce8ae6 100644 --- a/bpmn/so-bpmn-tasks/pom.xml +++ b/bpmn/so-bpmn-tasks/pom.xml @@ -121,6 +121,11 @@ <version>${project.version}</version> </dependency> <dependency> + <groupId>org.onap.so.adapters</groupId> + <artifactId>mso-adapter-utils</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> <groupId>org.onap.sdnc.northbound</groupId> <artifactId>generic-resource-api-client</artifactId> <version>1.5.0-SNAPSHOT</version> diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java index e83c27c400..92b4e211d5 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/SniroHomingV2.java @@ -404,9 +404,9 @@ public class SniroHomingV2 { for(Candidate c:required){ org.onap.so.client.sniro.beans.Candidate can = new org.onap.so.client.sniro.beans.Candidate(); org.onap.so.client.sniro.beans.CandidateType type = new org.onap.so.client.sniro.beans.CandidateType(); - type.setName(c.getCandidateType().getName()); - can.setCandidateType(type); - can.setCandidates(c.getCandidates()); + type.setName(c.getIdentifierType().getName()); + can.setIdentifierType(type); + can.setIdentifiers(c.getIdentifiers()); can.setCloudOwner(c.getCloudOwner()); cans.add(can); } @@ -417,9 +417,9 @@ public class SniroHomingV2 { for(Candidate c:excluded){ org.onap.so.client.sniro.beans.Candidate can = new org.onap.so.client.sniro.beans.Candidate(); org.onap.so.client.sniro.beans.CandidateType type = new org.onap.so.client.sniro.beans.CandidateType(); - type.setName(c.getCandidateType().getName()); - can.setCandidateType(type); - can.setCandidates(c.getCandidates()); + type.setName(c.getIdentifierType().getName()); + can.setIdentifierType(type); + can.setIdentifiers(c.getIdentifiers()); can.setCloudOwner(c.getCloudOwner()); cans.add(can); } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java index 4a3cb01b74..f47781082d 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java @@ -22,11 +22,13 @@ package org.onap.so.bpmn.infrastructure.aai.tasks; import java.util.Arrays; import java.util.List; +import java.util.Optional; +import java.util.TreeSet; +import java.util.UUID; import java.util.stream.Collectors; import org.camunda.bpm.engine.delegate.BpmnError; import org.onap.so.bpmn.common.BuildingBlockExecution; -import org.onap.so.bpmn.core.UrnPropertiesReader; import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection; import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration; @@ -35,6 +37,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup; import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network; import org.onap.so.bpmn.servicedecomposition.bbobjects.LineOfBusiness; +import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy; import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity; import org.onap.so.bpmn.servicedecomposition.bbobjects.Platform; import org.onap.so.bpmn.servicedecomposition.bbobjects.Project; @@ -44,6 +47,9 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup; import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock; import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB; +import org.onap.so.client.aai.AAIObjectPlurals; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; +import org.onap.so.client.aai.entities.uri.AAIUriFactory; import org.onap.so.client.exception.BBObjectNotFoundException; import org.onap.so.client.exception.ExceptionBuilder; import org.onap.so.client.orchestration.AAIConfigurationResources; @@ -53,9 +59,10 @@ import org.onap.so.client.orchestration.AAIVfModuleResources; import org.onap.so.client.orchestration.AAIVnfResources; import org.onap.so.client.orchestration.AAIVolumeGroupResources; import org.onap.so.client.orchestration.AAIVpnBindingResources; -import org.onap.so.db.catalog.beans.OrchestrationStatus; import org.onap.so.logger.MessageEnum; import org.onap.so.logger.MsoLogger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @@ -64,8 +71,13 @@ import org.springframework.stereotype.Component; public class AAICreateTasks { private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, AAICreateTasks.class); + private static final Logger logger = LoggerFactory.getLogger(AAICreateTasks.class.getName()); + private static final String networkTypeProvider = "PROVIDER"; private static String NETWORK_COLLECTION_NAME = "networkCollectionName"; + private static String CONTRAIL_NETWORK_POLICY_FQDN_LIST = "contrailNetworkPolicyFqdnList"; + private static String HEAT_STACK_ID = "heatStackId"; + private static String NETWORK_POLICY_FQDN_PARAM = "network-policy-fqdn"; @Autowired private AAIServiceInstanceResources aaiSIResources; @Autowired @@ -233,6 +245,11 @@ public class AAICreateTasks { try { GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID)); VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID)); + int moduleIndex = 0; + if (vfModule.getModelInfoVfModule() != null && !Boolean.TRUE.equals(vfModule.getModelInfoVfModule().getIsBaseBoolean())) { + moduleIndex = this.getLowestUnusedVfModuleIndexFromAAIVnfResponse(vnf, vfModule); + } + vfModule.setModuleIndex(moduleIndex); aaiVfModuleResources.createVfModule(vfModule, vnf); } catch (Exception ex) { exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); @@ -432,4 +449,95 @@ public class AAICreateTasks { exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); } } + + public void createNetworkPolicies(BuildingBlockExecution execution) { + try{ + String fqdns = execution.getVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST); + if (fqdns != null && !fqdns.isEmpty()) { + String fqdnList[] = fqdns.split(","); + int fqdnCount = fqdnList.length; + if (fqdnCount > 0) { + for (int i=0; i < fqdnCount; i++) { + String fqdn = fqdnList[i]; + AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.NETWORK_POLICY); + uri.queryParam(NETWORK_POLICY_FQDN_PARAM, fqdn); + Optional<org.onap.aai.domain.yang.NetworkPolicy> oNetPolicy = aaiNetworkResources.getNetworkPolicy(uri); + if(!oNetPolicy.isPresent()) { + msoLogger.debug("This network policy FQDN is not in AAI yet: " + fqdn); + String networkPolicyId = UUID.randomUUID().toString(); + msoLogger.debug("Adding network-policy with network-policy-id " + networkPolicyId); + NetworkPolicy networkPolicy = new NetworkPolicy(); + networkPolicy.setNetworkPolicyId(networkPolicyId); + networkPolicy.setNetworkPolicyFqdn(fqdn); + networkPolicy.setHeatStackId(execution.getVariable(HEAT_STACK_ID)); + + aaiNetworkResources.createNetworkPolicy(networkPolicy); + } + } + } + } + } catch (Exception ex) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + } + } + + /** + * Groups existing vf modules by the model uuid of our new vf module and returns the lowest unused index + * + * if we have a module type A, and there are 3 instances of those, + * and then module type B has 2 instances, if we are adding a new module type A, + * the vf-module-index should be 3 assuming contiguous indices (not 5, or 2) + * + */ + protected int getLowestUnusedVfModuleIndexFromAAIVnfResponse(GenericVnf genericVnf, VfModule newVfModule) { + + String newVfModuleModelInvariantUUID = null; + if (newVfModule.getModelInfoVfModule() != null) { + newVfModuleModelInvariantUUID = newVfModule.getModelInfoVfModule().getModelInvariantUUID(); + } + + + if (genericVnf != null && genericVnf.getVfModules() != null && !genericVnf.getVfModules().isEmpty()) { + List<VfModule> modules = genericVnf.getVfModules().stream().filter(item -> !item.getVfModuleId().equals(newVfModule.getVfModuleId())).collect(Collectors.toList()); + TreeSet<Integer> moduleIndices = new TreeSet<>(); + int nullIndexFound = 0; + for (VfModule vfModule : modules) { + if (vfModule.getModelInfoVfModule() != null) { + if (vfModule.getModelInfoVfModule().getModelInvariantUUID().equals(newVfModuleModelInvariantUUID)) { + if (vfModule.getModuleIndex() != null) { + moduleIndices.add(vfModule.getModuleIndex()); + } else { + nullIndexFound++; + logger.warn("Found null index for vf-module-id {} and model-invariant-uuid {}", vfModule.getVfModuleId(), vfModule.getModelInfoVfModule().getModelInvariantUUID()); + } + } + } + } + + return calculateUnusedIndex(moduleIndices, nullIndexFound); + } else { + return 0; + } + } + + protected int calculateUnusedIndex(TreeSet<Integer> moduleIndices, int nullIndexFound) { + //pad array with nulls + Integer[] temp = new Integer[moduleIndices.size() + nullIndexFound]; + Integer[] array = moduleIndices.toArray(temp); + int result = 0; + //when a null is found skip that potential value + //effectively creates something like, [0,1,3,null,null] -> [0,1,null(2),3,null(4)] + for (int i=0; i < array.length; i++, result++) { + if (Integer.valueOf(result) != array[i]) { + if (nullIndexFound > 0) { + nullIndexFound--; + i--; + } else { + break; + } + } + } + + return result; + } } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasks.java index a00806a19c..8f0334e462 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasks.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasks.java @@ -21,16 +21,23 @@ package org.onap.so.bpmn.infrastructure.aai.tasks; +import java.util.Optional; +import java.util.UUID; + import org.onap.so.bpmn.common.BuildingBlockExecution; import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration; import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network; +import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy; import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule; import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup; import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB; +import org.onap.so.client.aai.AAIObjectPlurals; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; +import org.onap.so.client.aai.entities.uri.AAIUriFactory; import org.onap.so.client.exception.ExceptionBuilder; import org.onap.so.client.orchestration.AAIConfigurationResources; import org.onap.so.client.orchestration.AAINetworkResources; @@ -38,11 +45,16 @@ import org.onap.so.client.orchestration.AAIServiceInstanceResources; import org.onap.so.client.orchestration.AAIVfModuleResources; import org.onap.so.client.orchestration.AAIVnfResources; import org.onap.so.client.orchestration.AAIVolumeGroupResources; +import org.onap.so.logger.MsoLogger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class AAIDeleteTasks { + private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, AAIDeleteTasks.class); + + private static String CONTRAIL_NETWORK_POLICY_FQDN_LIST = "contrailNetworkPolicyFqdnList"; + private static String NETWORK_POLICY_FQDN_PARAM = "network-policy-fqdn"; @Autowired private ExceptionBuilder exceptionUtil; @@ -145,4 +157,30 @@ public class AAIDeleteTasks { exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); } } + + public void deleteNetworkPolicies(BuildingBlockExecution execution) { + try{ + String fqdns = execution.getVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST); + if (fqdns != null && !fqdns.isEmpty()) { + String fqdnList[] = fqdns.split(","); + int fqdnCount = fqdnList.length; + if (fqdnCount > 0) { + for (int i=0; i < fqdnCount; i++) { + String fqdn = fqdnList[i]; + AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.NETWORK_POLICY); + uri.queryParam(NETWORK_POLICY_FQDN_PARAM, fqdn); + Optional<org.onap.aai.domain.yang.NetworkPolicy> oNetPolicy = aaiNetworkResources.getNetworkPolicy(uri); + if(oNetPolicy.isPresent()) { + String networkPolicyId = oNetPolicy.get().getNetworkPolicyId(); + msoLogger.debug("Deleting network-policy with network-policy-id " + networkPolicyId); + + aaiNetworkResources.deleteNetworkPolicy(networkPolicyId); + } + } + } + } + } catch (Exception ex) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + } + } } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java index ed6379a6a4..5176bee0d6 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java @@ -449,4 +449,53 @@ public class AAIUpdateTasks { exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); } } + + public void updateIpv4OamAddressVnf(BuildingBlockExecution execution) { + try { + String ipv4OamAddress = execution.getVariable("oamManagementV4Address"); + if (ipv4OamAddress != null) { + GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID)); + GenericVnf copiedGenericVnf = genericVnf.shallowCopyId(); + + genericVnf.setIpv4OamAddress(ipv4OamAddress); + copiedGenericVnf.setIpv4OamAddress(ipv4OamAddress); + + aaiVnfResources.updateObjectVnf(copiedGenericVnf); + } + } catch(Exception ex) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + } + } + + public void updateManagementV6AddressVnf(BuildingBlockExecution execution) { + try { + String managementV6Address = execution.getVariable("oamManagementV6Address"); + if (managementV6Address != null) { + GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID)); + GenericVnf copiedGenericVnf = genericVnf.shallowCopyId(); + + genericVnf.setManagementV6Address(managementV6Address); + copiedGenericVnf.setManagementV6Address(managementV6Address); + + aaiVnfResources.updateObjectVnf(copiedGenericVnf); + } + } catch(Exception ex) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + } + } + + public void updateContrailServiceInstanceFqdnVfModule(BuildingBlockExecution execution) { + try { + String contrailServiceInstanceFqdn = execution.getVariable("contrailServiceInstanceFqdn"); + if (contrailServiceInstanceFqdn != null) { + VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID)); + GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID)); + vfModule.setContrailServiceInstanceFqdn(contrailServiceInstanceFqdn); + aaiVfModuleResources.updateContrailServiceInstanceFqdnVfModule(vfModule, vnf); + } + } catch (Exception ex) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + } + } + }
\ No newline at end of file diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/activity/ExecuteActivity.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/activity/ExecuteActivity.java index 94eead2d05..acef0cb354 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/activity/ExecuteActivity.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/activity/ExecuteActivity.java @@ -84,6 +84,7 @@ public class ExecuteActivity implements JavaDelegate { variables.put("buildingBlock", executeBuildingBlock); variables.put("mso-request-id", requestId); variables.put("retryCount", 1); + variables.put("aLaCarte", true); ProcessInstanceWithVariables buildingBlockResult = runtimeService.createProcessInstanceByKey("ExecuteBuildingBlock").setVariables(variables).executeWithVariablesInReturn(); VariableMap variableMap = buildingBlockResult.getVariables(); diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java index d821223507..fec7e8456f 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1.java @@ -1,3 +1,23 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.bpmn.infrastructure.adapter.network.tasks; import java.io.StringReader; @@ -15,6 +35,9 @@ import org.onap.so.adapters.nwrest.CreateNetworkResponse; import org.onap.so.adapters.nwrest.DeleteNetworkError; import org.onap.so.adapters.nwrest.DeleteNetworkRequest; import org.onap.so.adapters.nwrest.DeleteNetworkResponse; +import org.onap.so.adapters.nwrest.UpdateNetworkError; +import org.onap.so.adapters.nwrest.UpdateNetworkRequest; +import org.onap.so.adapters.nwrest.UpdateNetworkResponse; import org.onap.so.client.exception.ExceptionBuilder; import org.onap.so.client.orchestration.NetworkAdapterResources; import org.slf4j.Logger; @@ -68,8 +91,8 @@ public class NetworkAdapterRestV1 { throw new Exception("No Network Request was created. networkAdapterRequest was null."); } } catch (Exception ex) { - exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex.getStackTrace().toString()); - } + exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex); + } } public void processCallback (DelegateExecution execution) { @@ -95,6 +118,14 @@ public class NetworkAdapterRestV1 { DeleteNetworkResponse deleteNetworkResponse = (DeleteNetworkResponse) unmarshalXml(callback, DeleteNetworkResponse.class); execution.setVariable("deleteNetworkResponse", deleteNetworkResponse); } + } else if (networkAdapterRequest instanceof UpdateNetworkRequest) { + if (callback.contains("updateNetworkError")) { + UpdateNetworkError updateNetworkError = (UpdateNetworkError) unmarshalXml(callback, UpdateNetworkError.class); + throw new Exception(updateNetworkError.getMessage()); + } else { + UpdateNetworkResponse updateNetworkResponse = (UpdateNetworkResponse) unmarshalXml(callback, UpdateNetworkResponse.class); + execution.setVariable("updateNetworkResponse", updateNetworkResponse); + } } } } catch (Exception e) { diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImpl.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImpl.java index f1a9e955b6..0851dc9d95 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImpl.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImpl.java @@ -26,6 +26,7 @@ import org.onap.so.adapters.vnfrest.CreateVolumeGroupResponse; import org.onap.so.adapters.vnfrest.DeleteVfModuleResponse; import org.onap.so.adapters.vnfrest.DeleteVolumeGroupResponse; import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule; import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup; @@ -47,10 +48,18 @@ import javax.xml.bind.Unmarshaller; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.sax.SAXSource; import java.io.StringReader; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; @Component public class VnfAdapterImpl { - private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, VnfAdapterCreateTasks.class); + private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, VnfAdapterImpl.class); + private static final String CONTRAIL_SERVICE_INSTANCE_FQDN = "contrailServiceInstanceFqdn"; + private static final String OAM_MANAGEMENT_V4_ADDRESS = "oamManagementV4Address"; + private static final String OAM_MANAGEMENT_V6_ADDRESS = "oamManagementV6Address"; + private static final String CONTRAIL_NETWORK_POLICY_FQDN_LIST = "contrailNetworkPolicyFqdnList"; @Autowired private ExtractPojosForBB extractPojosForBB; @@ -65,6 +74,10 @@ public class VnfAdapterImpl { execution.setVariable("mso-request-id", gBBInput.getRequestContext().getMsoRequestId()); execution.setVariable("mso-service-instance-id", serviceInstance.getServiceInstanceId()); execution.setVariable("heatStackId", null); + execution.setVariable(CONTRAIL_SERVICE_INSTANCE_FQDN, null); + execution.setVariable(OAM_MANAGEMENT_V4_ADDRESS, null); + execution.setVariable(OAM_MANAGEMENT_V6_ADDRESS, null); + execution.setVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST, null); } catch (Exception ex) { exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); } @@ -79,15 +92,36 @@ public class VnfAdapterImpl { VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID)); String heatStackId = ((CreateVfModuleResponse) vnfRestResponse).getVfModuleStackId(); if(!StringUtils.isEmpty(heatStackId)) { - vfModule.setHeatStackId(heatStackId); + vfModule.setHeatStackId(heatStackId); execution.setVariable("heatStackId", heatStackId); } + Map<String,String> vfModuleOutputs = ((CreateVfModuleResponse) vnfRestResponse).getVfModuleOutputs(); + if (vfModuleOutputs != null) { + processVfModuleOutputs(execution, vfModuleOutputs); + } } else if(vnfRestResponse instanceof DeleteVfModuleResponse) { VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID)); + GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID)); Boolean vfModuleDelete = ((DeleteVfModuleResponse) vnfRestResponse).getVfModuleDeleted(); if(null!= vfModuleDelete && vfModuleDelete) { vfModule.setHeatStackId(null); execution.setVariable("heatStackId", null); + Map<String,String> vfModuleOutputs = ((DeleteVfModuleResponse) vnfRestResponse).getVfModuleOutputs(); + if (vfModuleOutputs != null) { + processVfModuleOutputs(execution, vfModuleOutputs); + if (execution.getVariable(OAM_MANAGEMENT_V4_ADDRESS) != null) { + genericVnf.setIpv4OamAddress(""); + execution.setVariable(OAM_MANAGEMENT_V4_ADDRESS, ""); + } + if (execution.getVariable(OAM_MANAGEMENT_V6_ADDRESS) != null) { + genericVnf.setManagementV6Address(""); + execution.setVariable(OAM_MANAGEMENT_V6_ADDRESS, ""); + } + if (execution.getVariable(CONTRAIL_SERVICE_INSTANCE_FQDN) != null) { + vfModule.setContrailServiceInstanceFqdn(""); + execution.setVariable(CONTRAIL_SERVICE_INSTANCE_FQDN, ""); + } + } } } else if(vnfRestResponse instanceof CreateVolumeGroupResponse) { VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID)); @@ -108,7 +142,7 @@ public class VnfAdapterImpl { } } } catch (Exception ex) { - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); } } @@ -133,4 +167,49 @@ public class VnfAdapterImpl { throw new MarshallerException("Error parsing VNF Adapter response. " + e.getMessage(), MsoLogger.ErrorCode.SchemaError.getValue(), e); } } + + private void processVfModuleOutputs(BuildingBlockExecution execution, Map<String,String> vfModuleOutputs) { + if (vfModuleOutputs == null) { + return; + } + try { + VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID)); + GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID)); + List<String> contrailNetworkPolicyFqdnList = new ArrayList<String>(); + Iterator<String> keys = vfModuleOutputs.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + if (key.equals("contrail-service-instance-fqdn")) { + String contrailServiceInstanceFqdn = vfModuleOutputs.get(key); + msoLogger.debug("Obtained contrailServiceInstanceFqdn: " + contrailServiceInstanceFqdn); + vfModule.setContrailServiceInstanceFqdn(contrailServiceInstanceFqdn); + execution.setVariable(CONTRAIL_SERVICE_INSTANCE_FQDN, contrailServiceInstanceFqdn); + } + else if (key.endsWith("contrail_network_policy_fqdn")) { + String contrailNetworkPolicyFqdn = vfModuleOutputs.get(key); + msoLogger.debug("Obtained contrailNetworkPolicyFqdn: " + contrailNetworkPolicyFqdn); + contrailNetworkPolicyFqdnList.add(contrailNetworkPolicyFqdn); + } + else if (key.equals("oam_management_v4_address")) { + String oamManagementV4Address = vfModuleOutputs.get(key); + msoLogger.debug("Obtained oamManagementV4Address: " + oamManagementV4Address); + genericVnf.setIpv4OamAddress(oamManagementV4Address); + execution.setVariable(OAM_MANAGEMENT_V4_ADDRESS, oamManagementV4Address); + } + else if (key.equals("oam_management_v6_address")) { + String oamManagementV6Address = vfModuleOutputs.get(key); + msoLogger.debug("Obtained oamManagementV6Address: " + oamManagementV6Address); + genericVnf.setManagementV6Address(oamManagementV6Address); + execution.setVariable(OAM_MANAGEMENT_V6_ADDRESS, oamManagementV6Address); + } + + if (!contrailNetworkPolicyFqdnList.isEmpty()) { + execution.setVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST, String.join(",", contrailNetworkPolicyFqdnList)); + } + } + } catch (Exception ex) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + } + + } } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/audit/AuditTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/audit/AuditTasks.java new file mode 100644 index 0000000000..aaa9e51d15 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/audit/AuditTasks.java @@ -0,0 +1,83 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T 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.so.bpmn.infrastructure.audit; + + +import org.onap.so.audit.beans.AuditInventory; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; +import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule; +import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock; +import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; +import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB; +import org.onap.so.client.exception.BBObjectNotFoundException; +import org.onap.so.client.exception.ExceptionBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +public class AuditTasks { + + private static final Logger logger = LoggerFactory.getLogger(AuditTasks.class); + + @Autowired + private ExceptionBuilder exceptionUtil; + + @Autowired + private ExtractPojosForBB extractPojosForBB; + + @Autowired + private Environment env; + + public void isAuditNeeded(BuildingBlockExecution execution) { + try { + logger.debug("auditInventoryNeeded Value: {}", env.getProperty("mso.infra.auditInventory")); + execution.setVariable("auditInventoryNeeded",env.getProperty("mso.infra.auditInventory")); + } catch (Exception ex) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + } + } + + public void setupAuditVariable(BuildingBlockExecution execution) { + try { + execution.setVariable("auditInventory",createAuditInventory(execution)); + } catch (Exception ex) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex); + } + } + + private AuditInventory createAuditInventory(BuildingBlockExecution execution) throws BBObjectNotFoundException { + AuditInventory auditInventory = new AuditInventory(); + + GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock(); + VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID)); + CloudRegion cloudRegion = gBBInput.getCloudRegion(); + + auditInventory.setCloudOwner(cloudRegion.getCloudOwner()); + auditInventory.setCloudRegion(cloudRegion.getLcpCloudRegionId()); + auditInventory.setTenantId(cloudRegion.getTenantId()); + auditInventory.setHeatStackName(vfModule.getVfModuleName()); + return auditInventory; + } +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModule.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModule.java new file mode 100644 index 0000000000..f2fb37e182 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModule.java @@ -0,0 +1,55 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.bpmn.infrastructure.flowspecific.tasks; + +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.client.exception.ExceptionBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +public class ActivateVfModule { + + private static final Logger logger = LoggerFactory.getLogger(ActivateVfModule.class); + + protected static final String VF_MODULE_TIMER_DURATION_PATH = "mso.workflow.vfModuleActivate.timer.duration"; + protected static final String DEFAULT_TIMER_DURATION = "PT180S"; + + @Autowired + private ExceptionBuilder exceptionUtil; + + @Autowired + private Environment environment; + + + public void setTimerDuration(BuildingBlockExecution execution) { + try { + String waitDuration = this.environment.getProperty(VF_MODULE_TIMER_DURATION_PATH, DEFAULT_TIMER_DURATION); + logger.debug("Sleeping before proceeding with SDNC activate. Timer duration: {}", waitDuration); + execution.setVariable("vfModuleActivateTimerDuration", waitDuration); + } catch (Exception e) { + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e); + } + } +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheck.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheck.java index 2dae820e95..4f2e2c98d2 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheck.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheck.java @@ -21,7 +21,10 @@ package org.onap.so.bpmn.infrastructure.flowspecific.tasks; import java.util.HashMap; import java.util.Optional; - +import java.net.HttpURLConnection; +import java.net.SocketTimeoutException; +import org.apache.http.conn.ConnectTimeoutException; +import org.camunda.bpm.engine.delegate.BpmnError; import org.onap.appc.client.lcm.model.Action; import org.onap.so.bpmn.common.BuildingBlockExecution; import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; @@ -105,10 +108,22 @@ public class GenericVnfHealthCheck { appCClient.runAppCCommand(action, msoRequestId, vnfId, payload, payloadInfo, controllerType); appcCode = appCClient.getErrorCode(); appcMessage = appCClient.getErrorMessage(); - + } catch (BpmnError ex) { + msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, "Caught exception in GenericVnfHealthCheck", "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex); + appcMessage = ex.getMessage(); + exceptionUtil.buildAndThrowWorkflowException(execution, Integer.parseInt(appcCode), appcMessage); } catch (Exception e) { - msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION, "Caught exception in runAppcCommand in GenericVnfHealthCheck", "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "APPC Error", e); - appcMessage = e.getMessage(); + if (e instanceof java.util.concurrent.TimeoutException ) + { + appcMessage = "Request to APPC timed out. "; + msoLogger.error(MessageEnum.RA_CONNECTION_EXCEPTION, "Caught timedOut exception in runAppcCommand in GenericVnfHealthCheck", "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "APPC Error", e); + throw e; + } + else { + msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION, "Caught exception in runAppcCommand in GenericVnfHealthCheck", "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "APPC Error", e); + appcMessage = e.getMessage(); + exceptionUtil.buildAndThrowWorkflowException(execution, Integer.parseInt(appcCode), appcMessage); + } } msoLogger.error("Error Message: " + appcMessage); msoLogger.error("ERROR CODE: " + appcCode); diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java index b0063c1da1..2065dfb71e 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java @@ -105,6 +105,10 @@ public class OrchestrationStatusValidator { org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID, execution.getLookupMap().get(ResourceKey.CONFIGURATION_ID)); orchestrationStatus = configuration.getOrchestrationStatus(); break; + case NO_VALIDATE: + //short circuit and exit method + execution.setVariable(ORCHESTRATION_STATUS_VALIDATION_RESULT, OrchestrationStatusValidationDirective.VALIDATION_SKIPPED); + return; default: // can't currently get here, so not tested. Added in case enum is expanded without a change to this code throw new OrchestrationStatusValidationException(String.format(UNKNOWN_RESOURCE_TYPE, buildingBlockFlowName, buildingBlockDetail.getResourceType(), buildingBlockDetail.getTargetAction())); diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java index d18fd006f4..0082545fa1 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java @@ -68,6 +68,8 @@ import org.onap.so.logger.MsoLogger; import org.onap.so.serviceinstancebeans.ModelInfo; import org.onap.so.serviceinstancebeans.ModelType; import org.onap.so.serviceinstancebeans.Networks; +import org.onap.so.serviceinstancebeans.RelatedInstance; +import org.onap.so.serviceinstancebeans.RelatedInstanceList; import org.onap.so.serviceinstancebeans.RequestDetails; import org.onap.so.serviceinstancebeans.Service; import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; @@ -198,7 +200,7 @@ public class WorkflowAction { if (orchFlows == null || orchFlows.isEmpty()) { orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, aLaCarte, cloudOwner, serviceType); } - orchFlows = filterOrchFlows(orchFlows, resourceType, execution); + orchFlows = filterOrchFlows(sIRequest, orchFlows, resourceType, execution); String key = ""; ModelInfo modelInfo = sIRequest.getRequestDetails().getModelInfo(); if(modelInfo.getModelType().equals(ModelType.service)) { @@ -303,8 +305,9 @@ public class WorkflowAction { } } - // If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is specified, enable it. - if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) { + // If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is specified, enable it. + if (sIRequest.getRequestDetails().getRequestParameters() != null && + sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) { List<Map<String, Object>> userParams = sIRequest.getRequestDetails().getRequestParameters().getUserParams(); for (Map<String, Object> params : userParams) { if (params.containsKey(HOMINGSOLUTION)) { @@ -320,12 +323,13 @@ public class WorkflowAction { if (flowsToExecute.isEmpty()) { throw new IllegalStateException("Macro did not come up with a valid execution path."); } - + List<String> flowNames = new ArrayList<>(); logger.info("List of BuildingBlocks to execute:"); for (ExecuteBuildingBlock ebb : flowsToExecute) { logger.info(ebb.getBuildingBlock().getBpmnFlowName()); + flowNames.add(ebb.getBuildingBlock().getBpmnFlowName()); } - + execution.setVariable("flowNames", flowNames); execution.setVariable(G_CURRENT_SEQUENCE, 0); execution.setVariable("retryCount", 0); execution.setVariable("isRollback", false); @@ -1101,10 +1105,22 @@ public class WorkflowAction { return listToExecute; } - protected List<OrchestrationFlow> filterOrchFlows(List<OrchestrationFlow> orchFlows, WorkflowType resourceType, DelegateExecution execution) { + protected List<OrchestrationFlow> filterOrchFlows(ServiceInstancesRequest sIRequest, List<OrchestrationFlow> orchFlows, WorkflowType resourceType, DelegateExecution execution) { List<OrchestrationFlow> result = new ArrayList<>(orchFlows); + String vnfCustomizationUUID = ""; + String vfModuleCustomizationUUID = sIRequest.getRequestDetails().getModelInfo().getModelCustomizationUuid(); + RelatedInstanceList[] relatedInstanceList = sIRequest.getRequestDetails().getRelatedInstanceList(); + if (relatedInstanceList != null) { + for (RelatedInstanceList relatedInstList : relatedInstanceList) { + RelatedInstance relatedInstance = relatedInstList.getRelatedInstance(); + if (relatedInstance.getModelInfo().getModelType().equals(ModelType.vnf)) { + vnfCustomizationUUID = relatedInstance.getModelInfo().getModelCustomizationUuid(); + } + } + } + if (resourceType.equals(WorkflowType.VFMODULE)) { - List<String> fabricCustomizations = traverseCatalogDbForConfiguration((String)execution.getVariable("vnfId"), (String)execution.getVariable("vfModuleId")); + List<String> fabricCustomizations = traverseCatalogDbForConfiguration(vnfCustomizationUUID, vfModuleCustomizationUUID); if (fabricCustomizations.isEmpty()) { result = orchFlows.stream().filter(item -> !item.getFlowName().contains(FABRIC_CONFIGURATION)).collect(Collectors.toList()); } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java index c895566ca5..c8eeaa7a2b 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java @@ -302,4 +302,8 @@ public class AAIObjectMapper { public org.onap.aai.domain.yang.Subnet mapSubnet (Subnet subnet){ return modelMapper.map(subnet,org.onap.aai.domain.yang.Subnet.class); } + + public org.onap.aai.domain.yang.NetworkPolicy mapNetworkPolicy (NetworkPolicy networkPolicy){ + return modelMapper.map(networkPolicy,org.onap.aai.domain.yang.NetworkPolicy.class); + } } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java index 794314bf8c..f917aed39e 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java @@ -22,6 +22,7 @@ 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; @@ -92,14 +93,19 @@ public class NetworkAdapterObjectMapper { networkTechnology = l3Network.getNetworkTechnology(); logger.warn("NetworkTechnology was null in CatalogDB. Using field from AAI: " + networkTechnology); } - createNetworkRequest.setNetworkTechnology(setNetworkTechnology(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); @@ -112,16 +118,6 @@ public class NetworkAdapterObjectMapper { return createNetworkRequest; } - protected NetworkTechnology setNetworkTechnology(String networkTechnology) { - if(networkTechnology.equalsIgnoreCase("Contrail")) { - return NetworkTechnology.CONTRAIL; - } else if(networkTechnology.equalsIgnoreCase("Neutron")){ - return NetworkTechnology.NEUTRON; - } else { - return NetworkTechnology.VMWARE; - } - } - public DeleteNetworkRequest deleteNetworkRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, ServiceInstance serviceInstance, L3Network l3Network) throws UnsupportedEncodingException { DeleteNetworkRequest deleteNetworkRequest = new DeleteNetworkRequest(); @@ -182,7 +178,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); @@ -287,6 +283,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); @@ -371,4 +375,16 @@ public class NetworkAdapterObjectMapper { updateNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled())); //NetworkTechnology(NetworkTechnology.NEUTRON); NOOP - default } -}
\ No newline at end of file + + 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; + } +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterObjectMapper.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterObjectMapper.java index 93e588f2e1..701817ab58 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterObjectMapper.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterObjectMapper.java @@ -29,6 +29,7 @@ import java.util.UUID; import javax.annotation.PostConstruct; +import org.apache.commons.lang3.StringUtils; import org.onap.sdnc.northbound.client.model.GenericResourceApiParam; import org.onap.sdnc.northbound.client.model.GenericResourceApiParamParam; import org.onap.sdnc.northbound.client.model.GenericResourceApiVfModuleTopology; @@ -92,7 +93,12 @@ public class VnfAdapterObjectMapper { deleteVolumeGroupRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId()); deleteVolumeGroupRequest.setTenantId(cloudRegion.getTenantId()); deleteVolumeGroupRequest.setVolumeGroupId(volumeGroup.getVolumeGroupId()); - deleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getHeatStackId()); + if (!StringUtils.isEmpty(volumeGroup.getHeatStackId())){ + deleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getHeatStackId()); + } else + { + deleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getVolumeGroupName()); + } deleteVolumeGroupRequest.setSkipAAI(true); deleteVolumeGroupRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance)); diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java index 3ace03ee0a..352d4ec7d1 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java @@ -23,6 +23,7 @@ package org.onap.so.client.adapter.vnf.mapper; import static java.util.Arrays.asList; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -35,6 +36,7 @@ import java.util.Optional; import javax.annotation.PostConstruct; +import org.apache.commons.lang3.StringUtils; import org.onap.sdnc.northbound.client.model.GenericResourceApiParam; import org.onap.sdnc.northbound.client.model.GenericResourceApiParamParam; import org.onap.sdnc.northbound.client.model.GenericResourceApiSubInterfaceNetworkData; @@ -443,7 +445,6 @@ public class VnfAdapterVfModuleObjectMapper { } } } - } private void buildVfModuleNetworkInformation(Map<String,String> paramsMap, GenericResourceApiVmNetworkData network, String key, String networkKey) { @@ -780,16 +781,26 @@ public class VnfAdapterVfModuleObjectMapper { deleteVfModuleRequest.setTenantId(cloudRegion.getTenantId()); deleteVfModuleRequest.setVnfId(genericVnf.getVnfId()); deleteVfModuleRequest.setVfModuleId(vfModule.getVfModuleId()); - deleteVfModuleRequest.setVfModuleStackId(vfModule.getHeatStackId());//DoDVfMod_heatStackId - deleteVfModuleRequest.setSkipAAI(true); - String messageId = vnfAdapterObjectMapperUtils.getRandomUuid(); - deleteVfModuleRequest.setMessageId(messageId); - deleteVfModuleRequest.setNotificationUrl(vnfAdapterObjectMapperUtils.createCallbackUrl("VNFAResponse", messageId)); + if (!StringUtils.isEmpty(vfModule.getHeatStackId())){ + deleteVfModuleRequest.setVfModuleStackId(vfModule.getHeatStackId());//DoDVfMod_heatStackId + } else + { + deleteVfModuleRequest.setVfModuleStackId(vfModule.getVfModuleName()); + } + + deleteVfModuleRequest.setSkipAAI(true); + setIdAndUrl(deleteVfModuleRequest); MsoRequest msoRequest = buildMsoRequest(requestContext, serviceInstance); deleteVfModuleRequest.setMsoRequest(msoRequest); return deleteVfModuleRequest; } + protected void setIdAndUrl(DeleteVfModuleRequest deleteVfModuleRequest) throws UnsupportedEncodingException{ + String messageId = vnfAdapterObjectMapperUtils.getRandomUuid(); + deleteVfModuleRequest.setMessageId(messageId); + deleteVfModuleRequest.setNotificationUrl(vnfAdapterObjectMapperUtils.createCallbackUrl("VNFAResponse", messageId)); + } + private String convertToString(Object obj) { String json; try { @@ -814,4 +825,4 @@ public class VnfAdapterVfModuleObjectMapper { } return baseVfModule; } -} +}
\ No newline at end of file diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAINetworkResources.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAINetworkResources.java index d2bf95a28e..4ca3f2a78d 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAINetworkResources.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAINetworkResources.java @@ -45,6 +45,7 @@ import org.springframework.stereotype.Component; @Component public class AAINetworkResources { + @Autowired private InjectionHelper injectionHelper; @@ -171,6 +172,16 @@ public class AAINetworkResources { AAIResourceUri instanceGroupURI = AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId()); injectionHelper.getAaiClient().delete(instanceGroupURI); } - - + + public void createNetworkPolicy(org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy networkPolicy) { + NetworkPolicy aaiNetworkPolicy = aaiObjectMapper.mapNetworkPolicy(networkPolicy); + String networkPolicyId = networkPolicy.getNetworkPolicyId(); + AAIResourceUri netUri = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, networkPolicyId); + injectionHelper.getAaiClient().create(netUri, aaiNetworkPolicy); + } + + public void deleteNetworkPolicy(String networkPolicyId) { + AAIResourceUri networkPolicyURI = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, networkPolicyId); + injectionHelper.getAaiClient().delete(networkPolicyURI); + } } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIVfModuleResources.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIVfModuleResources.java index a641d43ba3..ef61319eee 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIVfModuleResources.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIVfModuleResources.java @@ -76,6 +76,15 @@ public class AAIVfModuleResources { injectionHelper.getAaiClient().update(vfModuleURI, aaiVfModule); } + public void updateContrailServiceInstanceFqdnVfModule(VfModule vfModule, GenericVnf vnf) { + AAIResourceUri vfModuleURI = AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, vnf.getVnfId(), vfModule.getVfModuleId()); + VfModule copiedVfModule = vfModule.shallowCopyId(); + + copiedVfModule.setContrailServiceInstanceFqdn(vfModule.getContrailServiceInstanceFqdn()); + org.onap.aai.domain.yang.VfModule aaiVfModule = aaiObjectMapper.mapVfModule(copiedVfModule); + injectionHelper.getAaiClient().update(vfModuleURI, aaiVfModule); + } + public void changeAssignVfModule(VfModule vfModule, GenericVnf vnf) { AAIResourceUri vfModuleURI = AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, vnf.getVnfId(), vfModule.getVfModuleId()); org.onap.aai.domain.yang.VfModule AAIVfModule = aaiObjectMapper.mapVfModule(vfModule); diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/Candidate.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/Candidate.java index b42636b078..1f8c56e727 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/Candidate.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/sniro/beans/Candidate.java @@ -29,28 +29,28 @@ public class Candidate implements Serializable{ private static final long serialVersionUID = -5474502255533410907L; - @JsonProperty("candidateType") - private CandidateType candidateType; - @JsonProperty("candidates") - private List<String> candidates; + @JsonProperty("identifierType") + private CandidateType identifierType; + @JsonProperty("identifiers") + private List<String> identifiers; @JsonProperty("cloudOwner") private String cloudOwner; - public CandidateType getCandidateType(){ - return candidateType; + public CandidateType getIdentifierType(){ + return identifierType; } - public void setCandidateType(CandidateType candidateType){ - this.candidateType = candidateType; + public void setIdentifierType(CandidateType identifierType){ + this.identifierType = identifierType; } - public List<String> getCandidates(){ - return candidates; + public List<String> getIdentifiers(){ + return identifiers; } - public void setCandidates(List<String> candidates){ - this.candidates = candidates; + public void setIdentifiers(List<String> identifiers){ + this.identifiers = identifiers; } public String getCloudOwner(){ diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/aai/tasks/AAIFlagTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/aai/tasks/AAIFlagTasksTest.java index 873ff7ca95..cf28c114e8 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/aai/tasks/AAIFlagTasksTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/aai/tasks/AAIFlagTasksTest.java @@ -20,7 +20,7 @@ package org.onap.so.bpmn.common.aai.tasks; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java index df1f0adcea..d8c7ebaff7 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java @@ -45,6 +45,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup; import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network; import org.onap.so.bpmn.servicedecomposition.bbobjects.LineOfBusiness; +import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy; import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity; import org.onap.so.bpmn.servicedecomposition.bbobjects.Platform; import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf; @@ -516,7 +517,7 @@ public class TestDataSetup{ VfModule vfModule = new VfModule(); vfModule.setVfModuleId("testVfModuleId" + vfModuleCounter); vfModule.setVfModuleName("testVfModuleName" + vfModuleCounter); - + vfModule.setModuleIndex(0); ModelInfoVfModule modelInfoVfModule = new ModelInfoVfModule(); modelInfoVfModule.setModelInvariantUUID("testModelInvariantUUID" + vfModuleCounter); modelInfoVfModule.setModelVersion("testModelVersion" + vfModuleCounter); @@ -529,6 +530,10 @@ public class TestDataSetup{ } public VfModule setVfModule() { + return setVfModule(true); + } + + public VfModule setVfModule(boolean addToGenericVnf) { VfModule vfModule = buildVfModule(); GenericVnf genericVnf = null; @@ -539,7 +544,9 @@ public class TestDataSetup{ genericVnf = setGenericVnf(); } - genericVnf.getVfModules().add(vfModule); + if (addToGenericVnf) { + genericVnf.getVfModules().add(vfModule); + } lookupKeyMap.put(ResourceKey.VF_MODULE_ID, vfModule.getVfModuleId()); return vfModule; @@ -702,4 +709,12 @@ public class TestDataSetup{ subnet.setNeutronSubnetId("testNeutronSubnetId"); return subnet; } + + public NetworkPolicy buildNetworkPolicy() { + NetworkPolicy networkPolicy = new NetworkPolicy(); + networkPolicy.setNetworkPolicyId("testNetworkPolicyId"); + networkPolicy.setNetworkPolicyFqdn("testNetworkPolicyFqdn"); + networkPolicy.setHeatStackId("testHeatStackId"); + return networkPolicy; + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java index da7e727488..c48019af83 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java @@ -19,6 +19,7 @@ */ package org.onap.so.bpmn.infrastructure.aai.tasks; +import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; @@ -29,12 +30,18 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.util.Arrays; +import java.util.Optional; +import java.util.TreeSet; + import org.camunda.bpm.engine.delegate.BpmnError; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatchers; +import org.mockito.Captor; import org.mockito.InjectMocks; import org.onap.so.bpmn.BaseTaskTest; import org.onap.so.bpmn.common.BuildingBlockExecution; @@ -43,12 +50,16 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration; import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer; import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network; +import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy; import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule; import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup; import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; +import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf; +import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule; import org.onap.so.client.exception.BBObjectNotFoundException; import org.onap.so.db.catalog.beans.OrchestrationStatus; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; public class AAICreateTasksTest extends BaseTaskTest{ @@ -65,6 +76,9 @@ public class AAICreateTasksTest extends BaseTaskTest{ private Customer customer; private Configuration configuration; + @Captor + ArgumentCaptor<NetworkPolicy> networkPolicyCaptor; + @Rule public final ExpectedException exception = ExpectedException.none(); @@ -268,9 +282,17 @@ public class AAICreateTasksTest extends BaseTaskTest{ @Test public void createVfModuleTest() throws Exception { - doNothing().when(aaiVfModuleResources).createVfModule(vfModule, genericVnf); + + VfModule newVfModule = setVfModule(false); + newVfModule.setModuleIndex(null); + newVfModule.getModelInfoVfModule().setModelInvariantUUID("testModelInvariantUUID1"); + doNothing().when(aaiVfModuleResources).createVfModule(newVfModule, genericVnf); + when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID), any())).thenReturn(newVfModule); + + assertEquals(null, newVfModule.getModuleIndex()); aaiCreateTasks.createVfModule(execution); - verify(aaiVfModuleResources, times(1)).createVfModule(vfModule, genericVnf); + assertEquals(1, newVfModule.getModuleIndex().intValue()); + verify(aaiVfModuleResources, times(1)).createVfModule(newVfModule, genericVnf); } @Test @@ -445,4 +467,138 @@ public class AAICreateTasksTest extends BaseTaskTest{ aaiCreateTasks.connectVnfToTenant(execution); verify(aaiVnfResources, times(1)).connectVnfToTenant(genericVnf, gBBInput.getCloudRegion()); } + @Test + public void createNetworkPolicyNeedToCreateAllTest() throws Exception { + execution.setVariable("heatStackId", "testHeatStackId"); + execution.setVariable("contrailNetworkPolicyFqdnList", "ABC123,ED456"); + Optional<NetworkPolicy> networkPolicy = Optional.empty(); + doReturn(networkPolicy).when(aaiNetworkResources).getNetworkPolicy(any(AAIResourceUri.class)); + doNothing().when(aaiNetworkResources).createNetworkPolicy(any(NetworkPolicy.class)); + aaiCreateTasks.createNetworkPolicies(execution); + verify(aaiNetworkResources, times(2)).createNetworkPolicy(networkPolicyCaptor.capture()); + assertEquals("ABC123", networkPolicyCaptor.getAllValues().get(0).getNetworkPolicyFqdn()); + assertEquals("ED456", networkPolicyCaptor.getAllValues().get(1).getNetworkPolicyFqdn()); + assertEquals("testHeatStackId", networkPolicyCaptor.getAllValues().get(0).getHeatStackId()); + assertEquals("testHeatStackId", networkPolicyCaptor.getAllValues().get(1).getHeatStackId()); + } + + @Test + public void createNetworkPolicyNeedToCreateNoneTest() throws Exception { + execution.setVariable("heatStackId", "testHeatStackId"); + execution.setVariable("contrailNetworkPolicyFqdnList", "ABC123"); + NetworkPolicy networkPolicy = new NetworkPolicy(); + doReturn(Optional.of(networkPolicy)).when(aaiNetworkResources).getNetworkPolicy(any(AAIResourceUri.class)); + doNothing().when(aaiNetworkResources).createNetworkPolicy(any(NetworkPolicy.class)); + aaiCreateTasks.createNetworkPolicies(execution); + verify(aaiNetworkResources, times(0)).createNetworkPolicy(any(NetworkPolicy.class)); + } + + @Test + public void createNetworkPolicyNoNetworkPoliciesTest() throws Exception { + execution.setVariable("heatStackId", "testHeatStackId"); + aaiCreateTasks.createNetworkPolicies(execution); + verify(aaiNetworkResources, times(0)).createNetworkPolicy(any(NetworkPolicy.class)); + } + + @Test + public void createVfModuleGetLowestIndexTest() throws Exception { + GenericVnf vnf = new GenericVnf(); + ModelInfoGenericVnf vnfInfo = new ModelInfoGenericVnf(); + vnf.setModelInfoGenericVnf(vnfInfo); + vnfInfo.setModelInvariantUuid("my-uuid"); + + ModelInfoVfModule infoA = new ModelInfoVfModule(); + infoA.setIsBaseBoolean(false); + infoA.setModelInvariantUUID("A"); + + ModelInfoVfModule infoB = new ModelInfoVfModule(); + infoB.setIsBaseBoolean(false); + infoB.setModelInvariantUUID("B"); + + ModelInfoVfModule infoC = new ModelInfoVfModule(); + infoC.setIsBaseBoolean(false); + infoC.setModelInvariantUUID("C"); + + VfModule newVfModuleA = new VfModule(); + newVfModuleA.setVfModuleId("a"); + VfModule newVfModuleB = new VfModule(); + newVfModuleB.setVfModuleId("b"); + VfModule newVfModuleC = new VfModule(); + newVfModuleC.setVfModuleId("c"); + + VfModule vfModule = new VfModule(); + vnf.getVfModules().add(vfModule); + vfModule.setVfModuleId("1"); + + VfModule vfModule2 = new VfModule(); + vnf.getVfModules().add(vfModule2); + vfModule2.setVfModuleId("2"); + + VfModule vfModule3 = new VfModule(); + vnf.getVfModules().add(vfModule3); + vfModule3.setVfModuleId("3"); + + VfModule vfModule4 = new VfModule(); + vnf.getVfModules().add(vfModule4); + vfModule4.setVfModuleId("4"); + + VfModule vfModule5 = new VfModule(); + vnf.getVfModules().add(vfModule5); + vfModule5.setVfModuleId("5"); + + //modules are included in the vnf already + vnf.getVfModules().add(newVfModuleA); + vnf.getVfModules().add(newVfModuleB); + vnf.getVfModules().add(newVfModuleC); + + //A + newVfModuleA.setModelInfoVfModule(infoA); + vfModule.setModelInfoVfModule(infoA); + vfModule2.setModelInfoVfModule(infoA); + vfModule3.setModelInfoVfModule(infoA); + + //B + + newVfModuleB.setModelInfoVfModule(infoB); + vfModule4.setModelInfoVfModule(infoB); + vfModule5.setModelInfoVfModule(infoB); + + //C + newVfModuleC.setModelInfoVfModule(infoC); + + + //A + vfModule.setModuleIndex(2); + vfModule2.setModuleIndex(0); + vfModule3.setModuleIndex(3); + + //B + vfModule4.setModuleIndex(null); + vfModule5.setModuleIndex(1); + + assertEquals(1, aaiCreateTasks.getLowestUnusedVfModuleIndexFromAAIVnfResponse(vnf, newVfModuleA)); + + assertEquals(2, aaiCreateTasks.getLowestUnusedVfModuleIndexFromAAIVnfResponse(vnf, newVfModuleB)); + + assertEquals(0, aaiCreateTasks.getLowestUnusedVfModuleIndexFromAAIVnfResponse(vnf, newVfModuleC)); + + } + + @Test + public void calculateUnusedIndexTest() { + + TreeSet<Integer> a = new TreeSet<>(Arrays.asList(0,1,3)); + TreeSet<Integer> b = new TreeSet<>(Arrays.asList(0,1,8)); + TreeSet<Integer> c = new TreeSet<>(Arrays.asList(0,2,4)); + assertEquals(2, aaiCreateTasks.calculateUnusedIndex(a, 0)); + assertEquals(5, aaiCreateTasks.calculateUnusedIndex(a, 2)); + + assertEquals(4, aaiCreateTasks.calculateUnusedIndex(b, 2)); + assertEquals(3, aaiCreateTasks.calculateUnusedIndex(b, 1)); + + assertEquals(5, aaiCreateTasks.calculateUnusedIndex(c, 2)); + assertEquals(9, aaiCreateTasks.calculateUnusedIndex(c, 6)); + assertEquals(1, aaiCreateTasks.calculateUnusedIndex(c, 0)); + + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasksTest.java index 67f5d197de..5cb775180e 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasksTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasksTest.java @@ -20,22 +20,26 @@ package org.onap.so.bpmn.infrastructure.aai.tasks; +import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.ArrayList; -import java.util.List; +import java.util.Optional; import org.camunda.bpm.engine.delegate.BpmnError; import org.junit.Before; import org.junit.Test; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatchers; +import org.mockito.Captor; import org.mockito.InjectMocks; +import org.onap.aai.domain.yang.NetworkPolicy; import org.onap.so.bpmn.BaseTaskTest; import org.onap.so.bpmn.common.BuildingBlockExecution; import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; @@ -46,6 +50,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule; import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup; import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.exception.BBObjectNotFoundException; @@ -62,6 +67,9 @@ public class AAIDeleteTasksTest extends BaseTaskTest { private CloudRegion cloudRegion; private Configuration configuration; + @Captor + ArgumentCaptor<String> stringCaptor; + @Before public void before() throws BBObjectNotFoundException { serviceInstance = setServiceInstance(); @@ -179,4 +187,34 @@ public class AAIDeleteTasksTest extends BaseTaskTest { aaiDeleteTasks.deleteConfiguration(execution); verify(aaiConfigurationResources, times(1)).deleteConfiguration(configuration); } + + @Test + public void deleteNetworkPolicyNeedToDeleteAllTest() throws Exception { + execution.setVariable("contrailNetworkPolicyFqdnList", "ABC123,DEF456"); + NetworkPolicy networkPolicy0 = new NetworkPolicy(); + networkPolicy0.setNetworkPolicyId("testNetworkPolicyId0"); + NetworkPolicy networkPolicy1 = new NetworkPolicy(); + networkPolicy1.setNetworkPolicyId("testNetworkPolicyId1"); + doReturn(Optional.of(networkPolicy0),Optional.of(networkPolicy1)).when(aaiNetworkResources).getNetworkPolicy(any(AAIResourceUri.class)); + doNothing().when(aaiNetworkResources).deleteNetworkPolicy(any(String.class)); + aaiDeleteTasks.deleteNetworkPolicies(execution); + verify(aaiNetworkResources, times(2)).deleteNetworkPolicy(stringCaptor.capture()); + assertEquals("testNetworkPolicyId0", stringCaptor.getAllValues().get(0)); + assertEquals("testNetworkPolicyId1", stringCaptor.getAllValues().get(1)); + } + + @Test + public void deleteNetworkPolicyNeedToDeleteNoneTest() throws Exception { + execution.setVariable("contrailNetworkPolicyFqdnList", "ABC123"); + Optional<NetworkPolicy> networkPolicy = Optional.empty(); + doReturn(networkPolicy).when(aaiNetworkResources).getNetworkPolicy(any(AAIResourceUri.class)); + aaiDeleteTasks.deleteNetworkPolicies(execution); + verify(aaiNetworkResources, times(0)).deleteNetworkPolicy(any(String.class)); + } + + @Test + public void deleteNetworkPolicyNoNetworkPoliciesTest() throws Exception { + aaiDeleteTasks.deleteNetworkPolicies(execution); + verify(aaiNetworkResources, times(0)).deleteNetworkPolicy(any(String.class)); + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasksTest.java index f97b137fb3..73d7257632 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasksTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasksTest.java @@ -586,4 +586,49 @@ public class AAIUpdateTasksTest extends BaseTaskTest{ verify(aaiConfigurationResources, times(1)).updateOrchestrationStatusConfiguration(configuration, OrchestrationStatus.ACTIVE); } + @Test + public void updateContrailServiceInstanceFqdnVfModuleTest() throws Exception { + execution.setVariable("contrailServiceInstanceFqdn", "newContrailServiceInstanceFqdn"); + doNothing().when(aaiVfModuleResources).updateContrailServiceInstanceFqdnVfModule(vfModule, genericVnf); + + aaiUpdateTasks.updateContrailServiceInstanceFqdnVfModule(execution); + + verify(aaiVfModuleResources, times(1)).updateContrailServiceInstanceFqdnVfModule(vfModule, genericVnf); + assertEquals("newContrailServiceInstanceFqdn", vfModule.getContrailServiceInstanceFqdn()); + } + @Test + public void updateContrailServiceInstanceFqdnVfModuleNoUpdateTest() throws Exception { + aaiUpdateTasks.updateContrailServiceInstanceFqdnVfModule(execution); + verify(aaiVfModuleResources, times(0)).updateContrailServiceInstanceFqdnVfModule(vfModule, genericVnf); + } + @Test + public void updateIpv4OamAddressVnfTest() throws Exception { + execution.setVariable("oamManagementV4Address", "newIpv4OamAddress"); + doNothing().when(aaiVnfResources).updateObjectVnf(genericVnf); + + aaiUpdateTasks.updateIpv4OamAddressVnf(execution); + + verify(aaiVnfResources, times(1)).updateObjectVnf(genericVnf); + assertEquals("newIpv4OamAddress", genericVnf.getIpv4OamAddress()); + } + @Test + public void updateIpv4OamAddressVnfNoUpdateTest() throws Exception { + aaiUpdateTasks.updateIpv4OamAddressVnf(execution); + verify(aaiVnfResources, times(0)).updateObjectVnf(genericVnf); + } + @Test + public void updateManagementV6AddressVnfTest() throws Exception { + execution.setVariable("oamManagementV6Address", "newManagementV6Address"); + doNothing().when(aaiVnfResources).updateObjectVnf(genericVnf); + + aaiUpdateTasks.updateManagementV6AddressVnf(execution); + + verify(aaiVnfResources, times(1)).updateObjectVnf(genericVnf); + assertEquals("newManagementV6Address", genericVnf.getManagementV6Address()); + } + @Test + public void updateManagementV6AddressVnfNoUpdateTest() throws Exception { + aaiUpdateTasks.updateManagementV6AddressVnf(execution); + verify(aaiVnfResources, times(0)).updateObjectVnf(genericVnf); + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1Test.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1Test.java index 2ba8cb4b57..516c9480ad 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1Test.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterRestV1Test.java @@ -1,11 +1,37 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.bpmn.infrastructure.adapter.network.tasks; +import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; +import static org.junit.Assert.assertThat; + import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import javax.xml.bind.JAXBException; import org.junit.Test; import org.onap.so.adapters.nwrest.CreateNetworkResponse; +import org.onap.so.adapters.nwrest.UpdateNetworkResponse; public class NetworkAdapterRestV1Test { @@ -16,4 +42,17 @@ public class NetworkAdapterRestV1Test { String returnedXml = response.toXmlString(); System.out.println(returnedXml); } + + @Test + public void testUnmarshalXmlUpdate() throws IOException, JAXBException { + UpdateNetworkResponse expectedResponse = new UpdateNetworkResponse(); + expectedResponse.setMessageId("ec100bcc-2659-4aa4-b4d8-3255715c2a51"); + expectedResponse.setNetworkId("80de31e3-cc78-4111-a9d3-5b92bf0a39eb"); + Map<String,String>subnetMap = new HashMap<String,String>(); + subnetMap.put("95cd8437-25f1-4238-8720-cbfe7fa81476", "d8d16606-5d01-4822-b160-9a0d257303e0"); + expectedResponse.setSubnetMap(subnetMap); + String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><updateNetworkResponse><messageId>ec100bcc-2659-4aa4-b4d8-3255715c2a51</messageId><networkId>80de31e3-cc78-4111-a9d3-5b92bf0a39eb</networkId><subnetMap><entry><key>95cd8437-25f1-4238-8720-cbfe7fa81476</key><value>d8d16606-5d01-4822-b160-9a0d257303e0</value></entry></subnetMap></updateNetworkResponse>"; + UpdateNetworkResponse response = (UpdateNetworkResponse) new NetworkAdapterRestV1().unmarshalXml(xml, UpdateNetworkResponse.class); + assertThat(expectedResponse, sameBeanAs(response)); + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImplTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImplTest.java index 4158f9cfae..33d0dbe130 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImplTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImplTest.java @@ -21,6 +21,7 @@ package org.onap.so.bpmn.infrastructure.adapter.vnf.tasks; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -35,6 +36,7 @@ import org.mockito.InjectMocks; import org.onap.so.FileUtil; import org.onap.so.bpmn.BaseTaskTest; import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule; import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup; @@ -50,6 +52,7 @@ public class VnfAdapterImplTest extends BaseTaskTest { private RequestContext requestContext; private ServiceInstance serviceInstance; + private GenericVnf genericVnf; private VfModule vfModule; private VolumeGroup volumeGroup; @@ -58,12 +61,17 @@ public class VnfAdapterImplTest extends BaseTaskTest { private static final String VNF_ADAPTER_VOLUME_CREATE_RESPONSE = FileUtil.readResourceFile("__files/VfModularity/CreateVfModuleVolumeCallbackResponse.xml"); private static final String VNF_ADAPTER_VOLUME_DELETE_RESPONSE = FileUtil.readResourceFile("__files/VfModularity/DeleteVfModuleVolumeCallbackResponse.xml"); private static final String TEST_VFMODULE_HEATSTACK_ID = "slowburn"; - private static final String TEST_VOLUME_HEATSTACK_ID = "testHeatStackId1"; + private static final String TEST_VOLUME_HEATSTACK_ID = "testHeatStackId1"; + private static final String TEST_CONTRAIL_SERVICE_INSTANCE_FQDN = "default-domain:MSOTest:MsoNW-RA"; + private static final String TEST_OAM_MANAGEMENT_V4_ADDRESS = "127.0.0.1"; + private static final String TEST_OAM_MANAGEMENT_V6_ADDRESS = "2000:abc:bce:1111"; + private static final String TEST_CONTRAIL_NETWORK_POLICY_FQDNS = "MSOTest:DefaultPolicyFQDN2,MSOTest:DefaultPolicyFQDN1"; @Before public void before() throws BBObjectNotFoundException { requestContext = setRequestContext(); serviceInstance = setServiceInstance(); + genericVnf = setGenericVnf(); vfModule = setVfModule(); volumeGroup = setVolumeGroup(); vfModule.setHeatStackId(null); @@ -72,6 +80,7 @@ public class VnfAdapterImplTest extends BaseTaskTest { doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class)); when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID), any())).thenReturn(serviceInstance); when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VOLUME_GROUP_ID), any())).thenReturn(volumeGroup); + when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID), any())).thenReturn(genericVnf); when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID), any())).thenReturn(vfModule); } @@ -86,8 +95,15 @@ public class VnfAdapterImplTest extends BaseTaskTest { @Test public void postProcessVnfAdapter_CreateResponseTest() { execution.setVariable("vnfAdapterRestV1Response", VNF_ADAPTER_REST_CREATE_RESPONSE); - vnfAdapterImpl.postProcessVnfAdapter(execution); + vnfAdapterImpl.postProcessVnfAdapter(execution); assertEquals(TEST_VFMODULE_HEATSTACK_ID, vfModule.getHeatStackId()); + assertEquals(TEST_CONTRAIL_SERVICE_INSTANCE_FQDN, vfModule.getContrailServiceInstanceFqdn()); + assertEquals(TEST_CONTRAIL_SERVICE_INSTANCE_FQDN, execution.getVariable("contrailServiceInstanceFqdn")); + assertEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, genericVnf.getIpv4OamAddress()); + assertEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, execution.getVariable("oamManagementV4Address")); + assertEquals(TEST_OAM_MANAGEMENT_V6_ADDRESS, genericVnf.getManagementV6Address()); + assertEquals(TEST_OAM_MANAGEMENT_V6_ADDRESS, execution.getVariable("oamManagementV6Address")); + assertEquals(TEST_CONTRAIL_NETWORK_POLICY_FQDNS, execution.getVariable("contrailNetworkPolicyFqdnList")); } @@ -111,6 +127,20 @@ public class VnfAdapterImplTest extends BaseTaskTest { vnfAdapterImpl.postProcessVnfAdapter(execution); assertNull(vfModule.getHeatStackId()); } + + @Test + public void postProcessVnfAdapter_CreateResponseTest_EmptyVfModuleOutputs() { + execution.setVariable("vnfAdapterRestV1Response", "<createVfModuleResponse><vfModuleOutputs></vfModuleOutputs></createVfModuleResponse>"); + vnfAdapterImpl.postProcessVnfAdapter(execution); + assertNull(vfModule.getHeatStackId()); + assertNull(vfModule.getContrailServiceInstanceFqdn()); + assertNull(execution.getVariable("contrailServiceInstanceFqdn")); + assertNotEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, genericVnf.getIpv4OamAddress()); + assertNull(execution.getVariable("oamManagementV4Address")); + assertNull(genericVnf.getManagementV6Address()); + assertNull(execution.getVariable("oamManagementV6Address")); + assertNull(execution.getVariable("contrailNetworkPolicyFqdnList")); + } @Test public void postProcessVnfAdapter_DeleteResponseTest() { @@ -118,6 +148,25 @@ public class VnfAdapterImplTest extends BaseTaskTest { execution.setVariable("vnfAdapterRestV1Response", VNF_ADAPTER_REST_DELETE_RESPONSE); vnfAdapterImpl.postProcessVnfAdapter(execution); assertNull(vfModule.getHeatStackId()); + assertEquals(vfModule.getContrailServiceInstanceFqdn(), ""); + assertEquals(execution.getVariable("contrailServiceInstanceFqdn"), ""); + assertEquals(genericVnf.getIpv4OamAddress(), ""); + assertEquals(execution.getVariable("oamManagementV4Address"), ""); + assertEquals(genericVnf.getManagementV6Address(), ""); + assertEquals(execution.getVariable("oamManagementV6Address"), ""); + assertEquals(TEST_CONTRAIL_NETWORK_POLICY_FQDNS, execution.getVariable("contrailNetworkPolicyFqdnList")); + } + + @Test + public void postProcessVnfAdapter_DeleteResponseTest_EmptyVfModuleOutputs() { + execution.setVariable("vnfAdapterRestV1Response", "<createVfModuleResponse><vfModuleOutputs></vfModuleOutputs></createVfModuleResponse>"); + vnfAdapterImpl.postProcessVnfAdapter(execution); + assertNull(vfModule.getHeatStackId()); + assertNull(vfModule.getContrailServiceInstanceFqdn()); + assertNull(execution.getVariable("contrailServiceInstanceFqdn")); + assertNull(execution.getVariable("oamManagementV4Address")); + assertNull(execution.getVariable("oamManagementV6Address")); + assertNull(execution.getVariable("contrailNetworkPolicyFqdnList")); } @Test diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/audit/AuditTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/audit/AuditTasksTest.java new file mode 100644 index 0000000000..7a9e2bb6cf --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/audit/AuditTasksTest.java @@ -0,0 +1,74 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T 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.so.bpmn.infrastructure.audit; + +import static com.shazam.shazamcrest.MatcherAssert.assertThat; +import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.ArgumentMatchers; +import org.mockito.InjectMocks; +import org.onap.so.audit.beans.AuditInventory; +import org.onap.so.bpmn.BaseTaskTest; +import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; +import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; +import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule; +import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; +import org.onap.so.client.exception.BBObjectNotFoundException; + +public class AuditTasksTest extends BaseTaskTest{ + + @InjectMocks + private AuditTasks auditTasks = new AuditTasks(); + private ServiceInstance serviceInstance; + private GenericVnf genericVnf; + private VfModule vfModule; + + + @Rule + public final ExpectedException exception = ExpectedException.none(); + + @Before + public void before() throws BBObjectNotFoundException { + serviceInstance = setServiceInstance(); + genericVnf = setGenericVnf(); + vfModule = setVfModule(); + setCloudRegion(); + when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID), any())).thenReturn(genericVnf); + when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID), any())).thenReturn(vfModule); + when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID), any())).thenReturn(serviceInstance); + } + + @Test + public void setupAuditVariableTest() throws Exception { + AuditInventory expectedAuditInventory = new AuditInventory(); + expectedAuditInventory.setCloudOwner("testCloudOwner"); + expectedAuditInventory.setCloudRegion("testLcpCloudRegionId"); + expectedAuditInventory.setHeatStackName("testVfModuleName1"); + expectedAuditInventory.setTenantId("testTenantId"); + auditTasks.setupAuditVariable(execution); + assertThat((AuditInventory)execution.getVariable("auditInventory"), sameBeanAs(expectedAuditInventory)); + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModuleTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModuleTest.java new file mode 100644 index 0000000000..d1d167e561 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/ActivateVfModuleTest.java @@ -0,0 +1,44 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.bpmn.infrastructure.flowspecific.tasks; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.onap.so.bpmn.BaseTaskTest; + +public class ActivateVfModuleTest extends BaseTaskTest { + + @InjectMocks + private ActivateVfModule activateVfModule = new ActivateVfModule(); + + @Test + public void setWaitBeforeDurationTest() throws Exception { + when(env.getProperty(ActivateVfModule.VF_MODULE_TIMER_DURATION_PATH, ActivateVfModule.DEFAULT_TIMER_DURATION)).thenReturn("PT300S"); + activateVfModule.setTimerDuration(execution); + verify(env, times(1)).getProperty(ActivateVfModule.VF_MODULE_TIMER_DURATION_PATH, ActivateVfModule.DEFAULT_TIMER_DURATION); + assertEquals("PT300S", (String) execution.getVariable("vfModuleActivateTimerDuration")); + } + +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheckTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheckTest.java index e17859969d..7fdf2535bf 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheckTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericVnfHealthCheckTest.java @@ -35,6 +35,7 @@ import java.util.UUID; import org.camunda.bpm.engine.delegate.BpmnError; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.mockito.ArgumentMatchers; import org.mockito.InjectMocks; @@ -142,4 +143,34 @@ public class GenericVnfHealthCheckTest extends BaseTaskTest { genericVnfHealthCheck.callAppcClient(execution); verify(appCClient, times(1)).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType); } + + @Test + @Ignore //The runAppCCommand method in not capable of throwing this exception + public void callAppcClientTimeOutExceptionTest() { + expectedException.expect(java.util.concurrent.TimeoutException.class); + Action action = Action.HealthCheck; + String vnfId = genericVnf.getVnfId(); + String payload = "{\"testName\":\"testValue\",}"; + String controllerType = "testType"; + HashMap<String, String> payloadInfo = new HashMap<String, String>(); + payloadInfo.put("vnfName", "testVnfName"); + payloadInfo.put("vfModuleId", "testVfModuleId"); + payloadInfo.put("oamIpAddress", "testOamIpAddress"); + payloadInfo.put("vnfHostIpAddress", "testOamIpAddress"); + execution.setVariable("action", Action.HealthCheck.toString()); + execution.setVariable("msoRequestId", msoRequestId); + execution.setVariable("controllerType", controllerType); + execution.setVariable("vnfId", "testVnfId1"); + execution.setVariable("vnfName", "testVnfName"); + execution.setVariable("vfModuleId", "testVfModuleId"); + execution.setVariable("oamIpAddress", "testOamIpAddress"); + execution.setVariable("vnfHostIpAddress", "testOamIpAddress"); + execution.setVariable("payload", payload); + + doThrow(java.util.concurrent.TimeoutException.class).when(appCClient).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType); + + + genericVnfHealthCheck.callAppcClient(execution); + verify(appCClient, times(1)).runAppCCommand(action, msoRequestId, vnfId, Optional.of(payload), payloadInfo, controllerType); + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/SniroHomingV2IT.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/SniroHomingV2IT.java index f0bb6a369c..59fad5cdd6 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/SniroHomingV2IT.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/SniroHomingV2IT.java @@ -84,7 +84,7 @@ public class SniroHomingV2IT extends BaseIntegrationTest{ requestContext.setMsoRequestId("testRequestId"); RequestParameters params = new RequestParameters(); params.setaLaCarte(false); - params.setSubscriptionServiceType("iptollfree"); + params.setSubscriptionServiceType("testSubscriptionServiceType"); requestContext.setRequestParameters(params); } @@ -94,10 +94,10 @@ public class SniroHomingV2IT extends BaseIntegrationTest{ bondingLink.getServiceProxies().add(setServiceProxy("1", "transport")); ServiceProxy sp2 = setServiceProxy("2", "infrastructure"); Candidate requiredCandidate = new Candidate(); - requiredCandidate.setCandidateType(CandidateType.VNF_ID); + requiredCandidate.setIdentifierType(CandidateType.VNF_ID); List<String> c = new ArrayList<String>(); c.add("testVnfId"); - requiredCandidate.setCandidates(c); + requiredCandidate.setIdentifiers(c); sp2.addRequiredCandidates(requiredCandidate); bondingLink.getServiceProxies().add(sp2); serviceInstance.getVpnBondingLinks().add(bondingLink); diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/UnassignVnfTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/UnassignVnfTest.java index 1da8a183a6..688f95c3c0 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/UnassignVnfTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/UnassignVnfTest.java @@ -22,7 +22,7 @@ package org.onap.so.bpmn.infrastructure.flowspecific.tasks; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.times; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/FlowCompletionTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/FlowCompletionTasksTest.java index a8d7eb3d2e..3cf003d1ad 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/FlowCompletionTasksTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/FlowCompletionTasksTest.java @@ -21,7 +21,7 @@ package org.onap.so.bpmn.infrastructure.workflow.tasks; import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorUnitTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorUnitTest.java new file mode 100644 index 0000000000..03b39f57e5 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidatorUnitTest.java @@ -0,0 +1,65 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.bpmn.infrastructure.workflow.tasks; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.when; + +import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.common.DelegateExecutionImpl; +import org.onap.so.db.catalog.beans.BuildingBlockDetail; +import org.onap.so.db.catalog.beans.OrchestrationAction; +import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective; +import org.onap.so.db.catalog.beans.ResourceType; +import org.onap.so.db.catalog.client.CatalogDbClient; + +@RunWith(MockitoJUnitRunner.class) +public class OrchestrationStatusValidatorUnitTest { + + @Mock + private CatalogDbClient catalogDbClient; + + @InjectMocks + private OrchestrationStatusValidator validator; + @Test + public void skipValidationTest() { + BuildingBlockDetail bbDetail = new BuildingBlockDetail(); + bbDetail.setBuildingBlockName("customBB"); + bbDetail.setResourceType(ResourceType.NO_VALIDATE); + bbDetail.setTargetAction(OrchestrationAction.CUSTOM); + when(catalogDbClient.getBuildingBlockDetail("customBB")).thenReturn(bbDetail); + BuildingBlockExecution execution = new DelegateExecutionImpl(new DelegateExecutionFake()); + execution.setVariable("flowToBeCalled", "customBB"); + execution.setVariable("aLaCarte", false); + validator.validateOrchestrationStatus(execution); + + + assertThat(execution.getVariable("orchestrationStatusValidationResult"), equalTo(OrchestrationStatusValidationDirective.VALIDATION_SKIPPED)); + } + +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java index 7b348c8cb3..24b87277c4 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java @@ -37,9 +37,11 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.UUID; +import java.util.Set; import org.camunda.bpm.engine.delegate.BpmnError; import org.camunda.bpm.engine.delegate.DelegateExecution; @@ -70,6 +72,8 @@ import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization; import org.onap.so.db.catalog.beans.CollectionResource; import org.onap.so.db.catalog.beans.CollectionResourceCustomization; import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization; +import org.onap.so.db.catalog.beans.ConfigurationResource; +import org.onap.so.db.catalog.beans.CvnfcCustomization; import org.onap.so.db.catalog.beans.HeatEnvironment; import org.onap.so.db.catalog.beans.HeatTemplate; import org.onap.so.db.catalog.beans.InstanceGroup; @@ -77,6 +81,7 @@ import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization; import org.onap.so.db.catalog.beans.NetworkResourceCustomization; import org.onap.so.db.catalog.beans.Service; import org.onap.so.db.catalog.beans.VfModuleCustomization; +import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization; import org.onap.so.db.catalog.beans.macro.NorthBoundRequest; import org.onap.so.db.catalog.beans.macro.OrchestrationFlow; import org.onap.so.serviceinstancebeans.RequestDetails; @@ -854,6 +859,63 @@ public class WorkflowActionTest extends BaseTaskTest { ,"DeleteNetworkCollectionBB"); } + @Test + public void selectExecutionListALaCarteVfModuleNoFabricCreateTest() throws Exception{ + String gAction = "createInstance"; + String resource = "VfModule"; + execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688"); + execution.setVariable("requestAction", gAction); + String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json"))); + execution.setVariable("bpmnRequest", bpmnRequest); + execution.setVariable("aLaCarte", true); + execution.setVariable("apiVersion", "7"); + execution.setVariable("requestUri", "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules"); + + + NorthBoundRequest northBoundRequest = new NorthBoundRequest(); + List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"); + northBoundRequest.setOrchestrationFlowList(orchFlows); + + when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true,"my-custom-cloud-owner")).thenReturn(northBoundRequest); + workflowAction.selectExecutionList(execution); + List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute"); + assertEqualsBulkFlowName(ebbs,"AssignVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB"); + } + + @Test + public void selectExecutionListALaCarteVfModuleFabricCreateTest() throws Exception{ + String gAction = "createInstance"; + String resource = "VfModule"; + execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688"); + execution.setVariable("requestAction", gAction); + String bpmnRequest = new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json"))); + execution.setVariable("bpmnRequest", bpmnRequest); + execution.setVariable("aLaCarte", true); + execution.setVariable("apiVersion", "7"); + execution.setVariable("requestUri", "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules"); + + NorthBoundRequest northBoundRequest = new NorthBoundRequest(); + List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"); + northBoundRequest.setOrchestrationFlowList(orchFlows); + + List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<CvnfcCustomization>(); + CvnfcCustomization cvnfcCustomization = new CvnfcCustomization(); + VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization = new VnfVfmoduleCvnfcConfigurationCustomization(); + ConfigurationResource configurationResource = new ConfigurationResource(); + configurationResource.setToscaNodeType("FabricConfiguration"); + vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource); + Set<VnfVfmoduleCvnfcConfigurationCustomization> custSet = new HashSet<VnfVfmoduleCvnfcConfigurationCustomization>(); + custSet.add(vnfVfmoduleCvnfcConfigurationCustomization); + cvnfcCustomization.setVnfVfmoduleCvnfcConfigurationCustomization(custSet); + cvnfcCustomizations.add(cvnfcCustomization); + + when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction,resource,true,"my-custom-cloud-owner")).thenReturn(northBoundRequest); + when(catalogDbClient.getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID("fc25201d-36d6-43a3-8d39-fdae88e526ae", "9a6d01fd-19a7-490a-9800-460830a12e0b")).thenReturn(cvnfcCustomizations); + workflowAction.selectExecutionList(execution); + List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute"); + assertEqualsBulkFlowName(ebbs,"AssignVfModuleBB","CreateVfModuleBB","ActivateVfModuleBB","AssignFabricConfigurationBB","ActivateFabricConfigurationBB"); + } + /** * WorkflowActionBB Tests */ diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionUnitTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionUnitTest.java index 297d75a104..2dd4033aa2 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionUnitTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionUnitTest.java @@ -57,6 +57,10 @@ import org.onap.so.db.catalog.beans.CvnfcCustomization; import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization; import org.onap.so.db.catalog.beans.macro.OrchestrationFlow; import org.onap.so.db.catalog.client.CatalogDbClient; +import org.onap.so.serviceinstancebeans.ModelInfo; +import org.onap.so.serviceinstancebeans.RelatedInstance; +import org.onap.so.serviceinstancebeans.RequestDetails; +import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; @RunWith(MockitoJUnitRunner.class) public class WorkflowActionUnitTest { @@ -87,9 +91,16 @@ public class WorkflowActionUnitTest { "flow y", "ActivateFabricConfigurationBB", "flow z"); - doReturn(Arrays.asList("yes", "yes")).when(workflowAction).traverseCatalogDbForConfiguration(ArgumentMatchers.isNull(), ArgumentMatchers.isNull()); + doReturn(Arrays.asList("yes", "yes")).when(workflowAction).traverseCatalogDbForConfiguration(ArgumentMatchers.any(String.class), ArgumentMatchers.isNull()); - List<OrchestrationFlow> result = workflowAction.filterOrchFlows(flows, WorkflowType.VFMODULE, mock(DelegateExecution.class)); + ServiceInstancesRequest sIRequest = new ServiceInstancesRequest(); + RequestDetails requestDetails = new RequestDetails(); + ModelInfo modelInfo = new ModelInfo(); + requestDetails.setModelInfo(modelInfo); + RelatedInstance relatedInstance = new RelatedInstance(); + sIRequest.setRequestDetails(requestDetails); + + List<OrchestrationFlow> result = workflowAction.filterOrchFlows(sIRequest, flows, WorkflowType.VFMODULE, mock(DelegateExecution.class)); assertThat(result, is(flows)); } @@ -103,7 +114,14 @@ public class WorkflowActionUnitTest { "ActivateFabricConfigurationBB", "flow z"); - List<OrchestrationFlow> result = workflowAction.filterOrchFlows(flows, WorkflowType.VFMODULE, mock(DelegateExecution.class)); + ServiceInstancesRequest sIRequest = new ServiceInstancesRequest(); + RequestDetails requestDetails = new RequestDetails(); + ModelInfo modelInfo = new ModelInfo(); + modelInfo.setModelCustomizationUuid(""); + requestDetails.setModelInfo(modelInfo); + sIRequest.setRequestDetails(requestDetails); + + List<OrchestrationFlow> result = workflowAction.filterOrchFlows(sIRequest, flows, WorkflowType.VFMODULE, mock(DelegateExecution.class)); List<OrchestrationFlow> expected = createFlowList( "flow x", "flow y", @@ -147,7 +165,7 @@ public class WorkflowActionUnitTest { doReturn(Arrays.asList(flow)).when(workflowAction).queryNorthBoundRequestCatalogDb(any(), any(), any(), anyBoolean(), any(), any()); workflowAction.selectExecutionList(execution); - verify(workflowAction, times(1)).filterOrchFlows(eq(flows), any(), any()); + verify(workflowAction, times(1)).filterOrchFlows(any(), eq(flows), any(), any()); flow = new OrchestrationFlow(); flow.setFlowName("flow y"); @@ -155,7 +173,7 @@ public class WorkflowActionUnitTest { when(execution.getVariable(eq("aLaCarte"))).thenReturn(false); workflowAction.selectExecutionList(execution); - verify(workflowAction, never()).filterOrchFlows(eq(flows), any(), any()); + verify(workflowAction, never()).filterOrchFlows(any(), eq(flows), any(), any()); } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/sdno/tasks/SDNOHealthCheckTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/sdno/tasks/SDNOHealthCheckTasksTest.java index 611d793166..6eb22a6dcc 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/sdno/tasks/SDNOHealthCheckTasksTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/sdno/tasks/SDNOHealthCheckTasksTest.java @@ -21,7 +21,7 @@ package org.onap.so.bpmn.sdno.tasks; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.times; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/aai/mapper/AAIObjectMapperTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/aai/mapper/AAIObjectMapperTest.java index db01399b82..a8e9a7e57e 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/aai/mapper/AAIObjectMapperTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/aai/mapper/AAIObjectMapperTest.java @@ -41,6 +41,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; import org.onap.so.bpmn.servicedecomposition.bbobjects.HostRoute; import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup; import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network; +import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy; import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity; import org.onap.so.bpmn.servicedecomposition.bbobjects.Project; import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget; @@ -672,4 +673,21 @@ public class AAIObjectMapperTest { assertThat(actualSubnet, sameBeanAs(expectedSubnet)); } + + @Test + public void mapNetworkPolicyTest() { + NetworkPolicy networkPolicy = new NetworkPolicy(); + networkPolicy.setNetworkPolicyId("testNetworkPolicyId"); + networkPolicy.setNetworkPolicyFqdn("testNetworkPolicyFqdn"); + networkPolicy.setHeatStackId("testHeatStackId"); + + org.onap.aai.domain.yang.NetworkPolicy expectedNetworkPolicy = new org.onap.aai.domain.yang.NetworkPolicy(); + expectedNetworkPolicy.setNetworkPolicyId("testNetworkPolicyId"); + expectedNetworkPolicy.setNetworkPolicyFqdn("testNetworkPolicyFqdn"); + expectedNetworkPolicy.setHeatStackId("testHeatStackId"); + + org.onap.aai.domain.yang.NetworkPolicy actualNetworkPolicy = aaiObjectMapper.mapNetworkPolicy(networkPolicy); + + assertThat(actualNetworkPolicy, sameBeanAs(expectedNetworkPolicy)); + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapperTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapperTest.java index 1a86d713a2..4bdbd1a846 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapperTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapperTest.java @@ -22,7 +22,7 @@ package org.onap.so.client.adapter.network.mapper; import static com.shazam.shazamcrest.MatcherAssert.assertThat; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.*; -import static org.mockito.Matchers.isA; +import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doReturn; import java.io.UnsupportedEncodingException; @@ -30,6 +30,7 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -99,24 +100,6 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{ } @Test - public void testSetNetworkTechnology() { - String networkTechnology = "Contrail"; - NetworkTechnology expectedNetworkTechnology = NetworkTechnology.CONTRAIL; - NetworkTechnology actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology); - assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology); - - networkTechnology = "Neutron"; - expectedNetworkTechnology = NetworkTechnology.NEUTRON; - actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology); - assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology); - - networkTechnology = "Vmware"; - expectedNetworkTechnology = NetworkTechnology.VMWARE; - actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology); - assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology); - - } - @Test public void buildCreateNetworkRequestFromBbobjectTest() throws Exception { String cloudRegionPo = "cloudRegionPo"; @@ -129,12 +112,17 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{ expectedCreateNetworkRequest.setNetworkType(l3Network.getNetworkType()); expectedCreateNetworkRequest.setBackout(false); expectedCreateNetworkRequest.setFailIfExists(true); - expectedCreateNetworkRequest.setNetworkTechnology(NetworkTechnology.CONTRAIL); + expectedCreateNetworkRequest.setNetworkTechnology("CONTRAIL"); MsoRequest msoRequest = new MsoRequest(); msoRequest.setRequestId(requestContext.getMsoRequestId()); msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId()); expectedCreateNetworkRequest.setMsoRequest(msoRequest); expectedCreateNetworkRequest.setSkipAAI(true); + HashMap<String, String> networkParams = new HashMap<String, String>(); + networkParams.put("shared", "true"); + networkParams.put("external", "false"); + networkParams.put("testUserInputKey", "testUserInputValue"); + expectedCreateNetworkRequest.setNetworkParams(networkParams); expectedCreateNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId"); @@ -148,13 +136,15 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{ subnetList.add(openstackSubnet); l3Network.getSubnets().add(openstackSubnet); l3Network.setNetworkTechnology("Contrail"); + l3Network.setIsSharedNetwork(true); + l3Network.setIsExternalNetwork(false); doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint(); doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid(); CreateNetworkRequest createNetworkRequest = SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, l3Network, userInput, cloudRegionPo, customer); - assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("contrailRequest").ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("networkParams").ignoring("messageId")); + assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("contrailRequest").ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("messageId")); } @Test @@ -243,6 +233,12 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{ l3Network.getSubnets().add(actualSubnet); l3Network.getNetworkPolicies().add(networkPolicy); l3Network.getContrailNetworkRouteTableReferences().add(routeTableReference); + l3Network.setIsSharedNetwork(false); + l3Network.setIsExternalNetwork(false); + HashMap<String, String> networkParams = new HashMap<String, String>(); + networkParams.put("shared", "false"); + networkParams.put("external", "false"); + networkParams.put("testUserInputKey", "testUserInputValue"); UpdateNetworkRequest expectedUpdateNetworkRequest = new UpdateNetworkRequest(); expectedUpdateNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId()); @@ -256,7 +252,7 @@ public class NetworkAdapterObjectMapperTest extends TestDataSetup{ expectedUpdateNetworkRequest.setSubnets(subnets); expectedUpdateNetworkRequest.setProviderVlanNetwork(providerVlanNetwork); expectedUpdateNetworkRequest.setContrailNetwork(contrailNetwork); - expectedUpdateNetworkRequest.setNetworkParams(userInput); + expectedUpdateNetworkRequest.setNetworkParams(networkParams); expectedUpdateNetworkRequest.setMsoRequest(msoRequest); expectedUpdateNetworkRequest.setSkipAAI(true); expectedUpdateNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled())); diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterObjectMapperTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterObjectMapperTest.java index 99e76450af..339e9cbf17 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterObjectMapperTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterObjectMapperTest.java @@ -230,7 +230,16 @@ public class VnfAdapterObjectMapperTest { } @Test - public void test_deleteVolumeGroupRequestMapper() throws Exception { + public void test_deleteVolumeGroupHeatIdRequestMapper() throws Exception{ + this.test_deleteVolumeGroupRequestMapper("heatStackId"); + } + + @Test + public void test_deleteVolumeGroupNoHeatIdRequestMapper() throws Exception{ + this.test_deleteVolumeGroupRequestMapper(null); + } + + private void test_deleteVolumeGroupRequestMapper(String heatStackId) throws Exception { DeleteVolumeGroupRequest expectedDeleteVolumeGroupRequest = new DeleteVolumeGroupRequest(); CloudRegion cloudRegion = new CloudRegion(); @@ -244,8 +253,13 @@ public class VnfAdapterObjectMapperTest { volumeGroup.setVolumeGroupId("volumeGroupId"); expectedDeleteVolumeGroupRequest.setVolumeGroupId(volumeGroup.getVolumeGroupId()); - volumeGroup.setHeatStackId("heatStackId"); - expectedDeleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getHeatStackId()); + if (heatStackId != null){ + volumeGroup.setHeatStackId("heatStackId"); + expectedDeleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getHeatStackId()); + } else { + volumeGroup.setVolumeGroupName("volumeGroupName"); + expectedDeleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getVolumeGroupName()); + } expectedDeleteVolumeGroupRequest.setSkipAAI(true); @@ -269,7 +283,7 @@ public class VnfAdapterObjectMapperTest { assertThat(actualDeleteVolumeGroupRequest, sameBeanAs(expectedDeleteVolumeGroupRequest)); } - + @Test @Ignore public void test_createVolumeGroupParams() throws Exception { diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperPayloadTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperPayloadTest.java index 32a495e094..a156c382d1 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperPayloadTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperPayloadTest.java @@ -845,7 +845,7 @@ public class VnfAdapterVfModuleObjectMapperPayloadTest { jsonToCompare, DeleteVfModuleRequest.class); - assertThat(vfModuleVNFAdapterRequest, sameBeanAs(reqMapper1).ignoring("messageId").ignoring("notificationUrl")); + assertThat(vfModuleVNFAdapterRequest, sameBeanAs(reqMapper1).ignoring("messageId").ignoring("notificationUrl").ignoring("vfModuleStackId")); } @Test diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperTest.java index c8f4a222f3..160feed426 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapperTest.java @@ -20,19 +20,38 @@ package org.onap.so.client.adapter.vnf.mapper; +import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import org.junit.Before; import org.junit.Test; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.onap.so.adapters.vnfrest.DeleteVfModuleRequest; +import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; +import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; +import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; +import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule; +import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext; +import org.onap.so.entity.MsoRequest; -public class VnfAdapterVfModuleObjectMapperTest{ +public class VnfAdapterVfModuleObjectMapperTest { + @Spy private VnfAdapterVfModuleObjectMapper mapper = new VnfAdapterVfModuleObjectMapper(); + + @Before + public void before() { + MockitoAnnotations.initMocks(this); + } @Test public void createVnfcSubInterfaceKeyTest() { @@ -64,4 +83,42 @@ public class VnfAdapterVfModuleObjectMapperTest{ } + @Test + public void test_deleteVfModuleNoHeatIdRequestMapper() throws Exception { + DeleteVfModuleRequest expectedDeleteVfModuleRequest = new DeleteVfModuleRequest(); + + CloudRegion cloudRegion = new CloudRegion(); + cloudRegion.setLcpCloudRegionId("lcpCloudRegionId"); + expectedDeleteVfModuleRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId()); + + cloudRegion.setTenantId("tenantId"); + expectedDeleteVfModuleRequest.setTenantId(cloudRegion.getTenantId()); + + GenericVnf genericVnf = new GenericVnf(); + VfModule vfModule = new VfModule(); + vfModule.setHeatStackId("heatStackId"); + expectedDeleteVfModuleRequest.setVfModuleStackId("heatStackId"); + expectedDeleteVfModuleRequest.setSkipAAI(true); + + MsoRequest msoRequest = new MsoRequest(); + RequestContext requestContext = new RequestContext(); + requestContext.setMsoRequestId("msoRequestId"); + msoRequest.setRequestId(requestContext.getMsoRequestId()); + ServiceInstance serviceInstance = new ServiceInstance(); + serviceInstance.setServiceInstanceId("serviceInstanceId"); + msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId()); + expectedDeleteVfModuleRequest.setMsoRequest(msoRequest); + + String messageId = "messageId"; + String endpoint = "endpoint"; + doNothing().when(mapper).setIdAndUrl(any()); + expectedDeleteVfModuleRequest.setMessageId(messageId); + expectedDeleteVfModuleRequest.setNotificationUrl(endpoint + "/VNFAResponse/" + messageId); + + DeleteVfModuleRequest actualDeleteVfModuleRequest = mapper.deleteVfModuleRequestMapper(requestContext, cloudRegion, + serviceInstance, genericVnf, vfModule); + + assertThat(actualDeleteVfModuleRequest, sameBeanAs(expectedDeleteVfModuleRequest).ignoring("messageId").ignoring("notificationUrl")); + } + } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAICollectionResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAICollectionResourcesTest.java index 11e542be7b..8bf3de5c4e 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAICollectionResourcesTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAICollectionResourcesTest.java @@ -21,7 +21,7 @@ package org.onap.so.client.orchestration; import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIConfigurationResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIConfigurationResourcesTest.java index 8b16964ab5..a38c8be686 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIConfigurationResourcesTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIConfigurationResourcesTest.java @@ -21,7 +21,7 @@ package org.onap.so.client.orchestration; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIInstanceGroupResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIInstanceGroupResourcesTest.java index e19458f21d..10bbf39823 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIInstanceGroupResourcesTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIInstanceGroupResourcesTest.java @@ -20,7 +20,7 @@ package org.onap.so.client.orchestration; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAINetworkResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAINetworkResourcesTest.java index f20c646657..2e2cc5d974 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAINetworkResourcesTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAINetworkResourcesTest.java @@ -26,7 +26,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -45,7 +45,6 @@ import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import org.onap.aai.domain.yang.NetworkPolicy; import org.onap.aai.domain.yang.RouteTableReference; import org.onap.aai.domain.yang.VpnBinding; import org.onap.so.bpmn.common.InjectionHelper; @@ -54,6 +53,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection; import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup; import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network; +import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy; import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet; import org.onap.so.client.aai.AAIObjectType; @@ -77,6 +77,7 @@ public class AAINetworkResourcesTest extends TestDataSetup{ private ServiceInstance serviceInstance; private CloudRegion cloudRegion; private Subnet subnet; + private NetworkPolicy networkPolicy; @Mock protected AAIResourcesClient MOCK_aaiResourcesClient; @@ -107,6 +108,8 @@ public class AAINetworkResourcesTest extends TestDataSetup{ subnet = buildSubnet(); + networkPolicy = buildNetworkPolicy(); + doReturn(MOCK_aaiResourcesClient).when(MOCK_injectionHelper).getAaiClient(); } @@ -175,16 +178,15 @@ public class AAINetworkResourcesTest extends TestDataSetup{ public void getNetworkPolicyTest() throws Exception { final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkPolicy.json"))); AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content); - Optional<NetworkPolicy> oNetPolicy = Optional.empty(); + Optional<org.onap.aai.domain.yang.NetworkPolicy> oNetPolicy = Optional.empty(); AAIResourceUri netPolicyUri = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, "ModelInvariantUUID"); doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class)); oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri); - verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class)); - + verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class)); if (oNetPolicy.isPresent()) { - NetworkPolicy networkPolicy = oNetPolicy.get(); - assertThat(aaiResultWrapper.asBean(NetworkPolicy.class).get(), sameBeanAs(networkPolicy)); + org.onap.aai.domain.yang.NetworkPolicy networkPolicy = oNetPolicy.get(); + assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.NetworkPolicy.class).get(), sameBeanAs(networkPolicy)); } } @@ -357,4 +359,20 @@ public class AAINetworkResourcesTest extends TestDataSetup{ assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.Subnet.class).get(), sameBeanAs(subnet)); } } + + @Test + public void createNetworkPolicyTest() throws Exception { + doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class), isA(org.onap.aai.domain.yang.NetworkPolicy.class)); + doReturn(new org.onap.aai.domain.yang.NetworkPolicy()).when(MOCK_aaiObjectMapper).mapNetworkPolicy(networkPolicy); + aaiNetworkResources.createNetworkPolicy(networkPolicy); + verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class), isA(org.onap.aai.domain.yang.NetworkPolicy.class)); + } + + @Test + public void deleteNetworkPolicyTest() throws Exception { + doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class)); + aaiNetworkResources.deleteNetworkPolicy(networkPolicy.getNetworkPolicyId()); + verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class)); + } + } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVfModuleResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVfModuleResourcesTest.java index 0a8e7ce349..a8200caf79 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVfModuleResourcesTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVfModuleResourcesTest.java @@ -138,4 +138,17 @@ public class AAIVfModuleResourcesTest extends TestDataSetup{ assertEquals("testHeatStackId", vfModule.getHeatStackId()); } + + @Test + public void updateContrailServiceInstanceFqdnVfModuleTest() throws Exception { + vfModule.setContrailServiceInstanceFqdn("testContrailServiceInstanceFqdn"); + + doNothing().when(MOCK_aaiResourcesClient).update(isA(AAIResourceUri.class), isA(org.onap.aai.domain.yang.VfModule.class)); + + aaiVfModuleResources.updateContrailServiceInstanceFqdnVfModule(vfModule, vnf); + + verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class),ArgumentMatchers.isNull()); + + assertEquals("testContrailServiceInstanceFqdn", vfModule.getContrailServiceInstanceFqdn()); + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVnfResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVnfResourcesTest.java index c28bc05dcb..b87b5e4166 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVnfResourcesTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVnfResourcesTest.java @@ -22,7 +22,7 @@ package org.onap.so.client.orchestration; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVpnBindingResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVpnBindingResourcesTest.java index 77e56751d4..c50b084df2 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVpnBindingResourcesTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVpnBindingResourcesTest.java @@ -22,7 +22,7 @@ package org.onap.so.client.orchestration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNOHealthCheckResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNOHealthCheckResourcesTest.java index 44263fa3f5..46d87c7ca3 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNOHealthCheckResourcesTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/SDNOHealthCheckResourcesTest.java @@ -21,7 +21,7 @@ package org.onap.so.client.orchestration; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.ArgumentMatchers.any; diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/NetworkMapper/createNetworkRequest.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/NetworkMapper/createNetworkRequest.json index a9cef565df..d7e282dda7 100644 --- a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/NetworkMapper/createNetworkRequest.json +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/NetworkMapper/createNetworkRequest.json @@ -13,9 +13,13 @@ "cidr": "107.244.64.2/20", "gatewayIp": "107.244.64.1", "ipVersion": "4", - "enableDHCP": false, + "enableDHCP": true, "addrFromStart": true, - "hostRoutes": [] + "hostRoutes": [], + "allocationPools": [{ + "start": "107.244.64.2", + "end": "107.244.64.16" + }] } ], "providerVlanNetwork": { diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/NetworkMapper/generalBB.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/NetworkMapper/generalBB.json index 6c6981b96a..e0b3bc4ff9 100644 --- a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/NetworkMapper/generalBB.json +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/NetworkMapper/generalBB.json @@ -64,9 +64,9 @@ "cidr-mask" : "20", "ip-version" : "4", "orchestration-status" : null, - "dhcp-enabled" : false, - "dhcp-start" : "", - "dhcp-end" : "", + "dhcp-enabled" : true, + "dhcp-start" : "107.244.64.2", + "dhcp-end" : "107.244.64.16", "subnet-role" : "", "ip-assignment-direction" : "true", "subnet-sequence" : null, diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest1Vpn.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest1Vpn.json index b65203b24d..83ecd6add1 100644 --- a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest1Vpn.json +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest1Vpn.json @@ -42,13 +42,13 @@ "modelInvariantId" : "testProxyModelInvariantUuid2" }, "requiredCandidates" : [ { - "candidateType" : { + "identifierType" : { "name" : "vnfId" }, - "candidates" : [ "testVnfId" ] + "identifiers" : [ "testVnfId" ] } ] } ], - "requestParameters" : {"subscriptionServiceType":"iptollfree","aLaCarte":false} + "requestParameters" : {"subscriptionServiceType":"testSubscriptionServiceType","aLaCarte":false} }, "licenseInfo" : { "licenseDemands" : [ ] diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest3AR.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest3AR.json index ac460c328a..740a05d1be 100644 --- a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest3AR.json +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest3AR.json @@ -51,7 +51,7 @@ "modelInvariantId" : "testAllottedModelInvariantUuid3" } } ], - "requestParameters" : {"subscriptionServiceType":"iptollfree","aLaCarte":false} + "requestParameters" : {"subscriptionServiceType":"testSubscriptionServiceType","aLaCarte":false} }, "licenseInfo" : { "licenseDemands" : [ ] diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest3Vpn.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest3Vpn.json index 6db2153691..c3c5c0771a 100644 --- a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest3Vpn.json +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/SniroHoming/SniroManagerRequest3Vpn.json @@ -42,10 +42,10 @@ "modelInvariantId" : "testProxyModelInvariantUuid2" }, "requiredCandidates" : [ { - "candidateType" : { + "identifierType" : { "name" : "vnfId" }, - "candidates" : [ "testVnfId" ] + "identifiers" : [ "testVnfId" ] } ] }, { "serviceResourceId" : "testProxyId1", @@ -66,10 +66,10 @@ "modelInvariantId" : "testProxyModelInvariantUuid2" }, "requiredCandidates" : [ { - "candidateType" : { + "identifierType" : { "name" : "vnfId" }, - "candidates" : [ "testVnfId" ] + "identifiers" : [ "testVnfId" ] } ] }, { "serviceResourceId" : "testProxyId1", @@ -90,13 +90,13 @@ "modelInvariantId" : "testProxyModelInvariantUuid2" }, "requiredCandidates" : [ { - "candidateType" : { + "identifierType" : { "name" : "vnfId" }, - "candidates" : [ "testVnfId" ] + "identifiers" : [ "testVnfId" ] } ] } ], - "requestParameters" : {"subscriptionServiceType":"iptollfree","aLaCarte":false} + "requestParameters" : {"subscriptionServiceType":"testSubscriptionServiceType","aLaCarte":false} }, "licenseInfo" : { "licenseDemands" : [ ] diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/VnfAndVfModuleMapper/vnfAdapterDeleteVfModuleRequest.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/VnfAndVfModuleMapper/vnfAdapterDeleteVfModuleRequest.json index 21e5bde3ec..1d2e7d090f 100644 --- a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/VnfAndVfModuleMapper/vnfAdapterDeleteVfModuleRequest.json +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/VnfAndVfModuleMapper/vnfAdapterDeleteVfModuleRequest.json @@ -2,7 +2,8 @@ "cloudSiteId" : "cloudRegionId", "tenantId" : "tenantId", "vnfId" : "vnfId", - "vfModuleId" : "vfModuleId", + "vfModuleId" : "vfModuleId", + "vfModuleStackId" : "vfModuleName", "skipAAI" : true, "msoRequest" : { "requestId" : "requestId", diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/VfModuleCreateWithFabric.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/VfModuleCreateWithFabric.json new file mode 100644 index 0000000000..332ad4500c --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/VfModuleCreateWithFabric.json @@ -0,0 +1,65 @@ +{ + "requestDetails": { + "modelInfo": { + "modelCustomizationName": "model-cust-name", + "modelInvariantId": "db86e4a6-c027-452e-a559-3a23b3128367", + "modelType": "vfModule", + "modelName": "test-model-name", + "modelVersion": "1", + "modelCustomizationUuid": "9a6d01fd-19a7-490a-9800-460830a12e0b", + "modelVersionId": "14c8f313-fb0f-4cf6-8caf-c7cce8137b60", + "modelCustomizationId": "9a6d01fd-19a7-490a-9800-460830a12e0b", + "modelUuid": "14c8f313-fb0f-4cf6-8caf-c7cce8137b60", + "modelInvariantUuid": "db86e4a6-c027-452e-a559-3a23b3128367", + "modelInstanceName": "test-model-instance-name" + }, + "requestInfo": { + "source": "VID", + "instanceName": "instanceName", + "suppressRollback": false, + "requestorId": "user" + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": "f647e3ef-6d2e-4cd3-bff4-8df4634208de", + "modelInfo": { + "modelInvariantId": "86adb376-5303-441a-b50e-96c0cd643b0f", + "modelType": "service", + "modelName": "model-name", + "modelVersion": "1.0", + "modelVersionId": "599e21ed-803d-4d1f-83df-20005339b83f", + "modelUuid": "599e21ed-803d-4d1f-83df-20005339b83f", + "modelInvariantUuid": "86adb376-5303-441a-b50e-96c0cd643b0f" + } + } + }, + { + "relatedInstance": { + "instanceId": "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", + "modelInfo": { + "modelCustomizationName": "modle-cust-name", + "modelInvariantId": "5cca9285-4ed4-4e11-a609-921ed3344811", + "modelType": "vnf", + "modelName": "modle-name", + "modelVersion": "1.0", + "modelCustomizationUuid": "fc25201d-36d6-43a3-8d39-fdae88e526ae", + "modelVersionId": "7cae703a-b20d-481a-863a-b862236c00f7", + "modelCustomizationId": "fc25201d-36d6-43a3-8d39-fdae88e526ae", + "modelUuid": "7cae703a-b20d-481a-863a-b862236c00f7", + "modelInvariantUuid": "5cca9285-4ed4-4e11-a609-921ed3344811", + "modelInstanceName": "model-inst-name" + } + } + } + ], + "cloudConfiguration": { + "tenantId": "872f331350c54e59991a8de2cbffb40c", + "cloudOwner": "my-custom-cloud-owner", + "lcpCloudRegionId": "cloud-region" + }, + "requestParameters": { + "usePreload": true + } + } +}
\ No newline at end of file diff --git a/common/pom.xml b/common/pom.xml index 7d468fae3f..51c9ed3bcb 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -126,6 +126,11 @@ <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + <version>0.9.11</version> + </dependency> </dependencies> <build> <resources> diff --git a/common/src/main/java/org/onap/so/client/aai/AAICommonObjectMapperPatchProvider.java b/common/src/main/java/org/onap/so/client/aai/AAICommonObjectMapperPatchProvider.java index 33c9769400..9c8345d4b6 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAICommonObjectMapperPatchProvider.java +++ b/common/src/main/java/org/onap/so/client/aai/AAICommonObjectMapperPatchProvider.java @@ -20,16 +20,12 @@ package org.onap.so.client.aai; -import com.fasterxml.jackson.databind.module.SimpleModule; +import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperPatchProvider; -public class AAICommonObjectMapperPatchProvider extends AAICommonObjectMapperProvider { +public class AAICommonObjectMapperPatchProvider extends GraphInventoryCommonObjectMapperPatchProvider { public AAICommonObjectMapperPatchProvider() { super(); - EmptyStringToNullSerializer sp = new EmptyStringToNullSerializer(); - SimpleModule emptyStringModule = new SimpleModule(); - emptyStringModule.addSerializer(String.class, sp); - mapper.registerModule(emptyStringModule); } } diff --git a/common/src/main/java/org/onap/so/client/aai/AAICommonObjectMapperProvider.java b/common/src/main/java/org/onap/so/client/aai/AAICommonObjectMapperProvider.java index 0e2071842f..15bc2ea8ef 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAICommonObjectMapperProvider.java +++ b/common/src/main/java/org/onap/so/client/aai/AAICommonObjectMapperProvider.java @@ -20,33 +20,12 @@ package org.onap.so.client.aai; -import org.onap.so.client.policy.CommonObjectMapperProvider; +import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.databind.AnnotationIntrospector; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.MapperFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; -import com.fasterxml.jackson.databind.type.TypeFactory; -import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; - -public class AAICommonObjectMapperProvider extends CommonObjectMapperProvider { +public class AAICommonObjectMapperProvider extends GraphInventoryCommonObjectMapperProvider { public AAICommonObjectMapperProvider() { - mapper = new ObjectMapper(); - mapper.setSerializationInclusion(Include.NON_NULL); - mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); - mapper.enable(MapperFeature.USE_ANNOTATIONS); - mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - AnnotationIntrospector aiJaxb = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()); - AnnotationIntrospector aiJackson = new JacksonAnnotationIntrospector(); - // first Jaxb, second Jackson annotations - mapper.setAnnotationIntrospector(AnnotationIntrospector.pair(aiJaxb, aiJackson)); + super(); } } diff --git a/common/src/main/java/org/onap/so/client/aai/AAIDSLQuery.java b/common/src/main/java/org/onap/so/client/aai/AAIDSLQuery.java new file mode 100644 index 0000000000..52bae20ff3 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/aai/AAIDSLQuery.java @@ -0,0 +1,83 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T 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.so.client.aai; + +import java.util.Optional; + +import org.onap.so.client.RestClient; +import org.onap.so.client.aai.entities.DSLQuery; +import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import org.onap.so.client.graphinventory.Format; +import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; + +public class AAIDSLQuery extends AAIClient { + + private Optional<String> depth = Optional.empty(); + private boolean nodesOnly = false; + private Optional<AAISubgraphType> subgraph = Optional.empty(); + + public AAIDSLQuery() { + super(); + } + + public AAIDSLQuery(AAIVersion version) { + super(); + this.version = version; + } + + public String query(Format format, DSLQuery query) { + return this.createClient(AAIUriFactory.createResourceUri(AAIObjectType.DSL).queryParam("format", format.toString())) + .put(query, String.class); + } + + public AAIDSLQuery depth (String depth) { + this.depth = Optional.of(depth); + return this; + } + public AAIDSLQuery nodesOnly() { + this.nodesOnly = true; + return this; + } + public AAIDSLQuery subgraph(AAISubgraphType type){ + + subgraph = Optional.of(type); + + return this; + } + + protected GraphInventoryUri setupQueryParams(GraphInventoryUri uri) { + GraphInventoryUri clone = uri.clone(); + if (this.depth.isPresent()) { + clone.queryParam("depth", depth.get()); + } + if (this.nodesOnly) { + clone.queryParam("nodesOnly", ""); + } + if (this.subgraph.isPresent()) { + clone.queryParam("subgraph", this.subgraph.get().toString()); + } + return clone; + } + @Override + protected RestClient createClient(GraphInventoryUri uri) { + return super.createClient(setupQueryParams(uri)); + } +} diff --git a/common/src/main/java/org/onap/so/client/aai/AAINamespaceConstants.java b/common/src/main/java/org/onap/so/client/aai/AAINamespaceConstants.java index 242fd41b19..9d2c3a8b1b 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAINamespaceConstants.java +++ b/common/src/main/java/org/onap/so/client/aai/AAINamespaceConstants.java @@ -22,10 +22,10 @@ package org.onap.so.client.aai; public class AAINamespaceConstants { - protected static final String CLOUD_INFRASTRUCTURE = "/cloud-infrastructure"; - protected static final String NETWORK = "/network"; - protected static final String BUSINESS = "/business"; - protected static final String SERVICE_DESIGN_AND_CREATION = "/service-design-and-creation"; + public static final String CLOUD_INFRASTRUCTURE = "/cloud-infrastructure"; + public static final String NETWORK = "/network"; + public static final String BUSINESS = "/business"; + public static final String SERVICE_DESIGN_AND_CREATION = "/service-design-and-creation"; } diff --git a/common/src/main/java/org/onap/so/client/aai/AAIObjectPlurals.java b/common/src/main/java/org/onap/so/client/aai/AAIObjectPlurals.java index 4f3816ad90..7eadea00ff 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIObjectPlurals.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIObjectPlurals.java @@ -20,37 +20,45 @@ package org.onap.so.client.aai; -import org.onap.aai.domain.yang.NetworkTechnologies; +import java.io.Serializable; + import org.onap.so.client.graphinventory.GraphInventoryObjectPlurals; import org.onap.so.constants.Defaults; import com.google.common.base.CaseFormat; -public enum AAIObjectPlurals implements GraphInventoryObjectPlurals { +public class AAIObjectPlurals implements GraphInventoryObjectPlurals, Serializable { - CUSTOMER(AAINamespaceConstants.BUSINESS, "/customers"), - GENERIC_VNF(AAINamespaceConstants.NETWORK, "/generic-vnfs"), - PSERVER(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/pservers"), - P_INTERFACE(AAIObjectType.PSERVER.uriTemplate(), "/p-interfaces"), - L3_NETWORK(AAINamespaceConstants.NETWORK, "/l3-networks"), - NETWORK_POLICY(AAINamespaceConstants.NETWORK, "/network-policies"), - VPN_BINDING(AAINamespaceConstants.NETWORK, "/vpn-bindings"), - SERVICE_SUBSCRIPTION(AAIObjectType.CUSTOMER.uriTemplate(), "/service-subscriptions"), - SERVICE_INSTANCE(AAIObjectType.SERVICE_SUBSCRIPTION.uriTemplate(), "/service-instances"), - OWNING_ENTITY(AAINamespaceConstants.BUSINESS, "/owning-entities"), - VOLUME_GROUP(AAIObjectType.CLOUD_REGION.uriTemplate(), "/volume-groups"), - AVAILIBILITY_ZONE(AAIObjectType.CLOUD_REGION.uriTemplate(), "/availability-zones"), - VF_MODULE(AAIObjectType.GENERIC_VNF.uriTemplate(), "/vf-modules"), - CONFIGURATION(AAINamespaceConstants.NETWORK, "/configurations"), - DEFAULT_TENANT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE + "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/AAIAIC25", "/tenants"), - NETWORK_TECHNOLOGY(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/network-technologies"), - LOGICAL_LINK(AAINamespaceConstants.NETWORK, "/logical-links"); + private static final long serialVersionUID = 5312713297525740746L; + + public static final AAIObjectPlurals CUSTOMER = new AAIObjectPlurals(AAINamespaceConstants.BUSINESS, "/customers", "customer"); + public static final AAIObjectPlurals GENERIC_VNF = new AAIObjectPlurals(AAINamespaceConstants.NETWORK, "/generic-vnfs", "generic-vnf"); + public static final AAIObjectPlurals PORT_GROUP = new AAIObjectPlurals(AAIObjectType.VCE.uriTemplate(), "/port-groups", "port-group"); + public static final AAIObjectPlurals PSERVER = new AAIObjectPlurals(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/pservers", "pserver"); + public static final AAIObjectPlurals P_INTERFACE = new AAIObjectPlurals(AAIObjectType.PSERVER.uriTemplate(), "/p-interfaces", "p-interface"); + public static final AAIObjectPlurals L3_NETWORK = new AAIObjectPlurals(AAINamespaceConstants.NETWORK, "/l3-networks", "l3-network"); + public static final AAIObjectPlurals NETWORK_POLICY = new AAIObjectPlurals(AAINamespaceConstants.NETWORK, "/network-policies", "network-policy"); + public static final AAIObjectPlurals VPN_BINDING = new AAIObjectPlurals(AAINamespaceConstants.NETWORK, "/vpn-bindings", "vpn-binding"); + public static final AAIObjectPlurals SERVICE_SUBSCRIPTION = new AAIObjectPlurals(AAIObjectType.CUSTOMER.uriTemplate(), "/service-subscriptions", "service-subscription"); + public static final AAIObjectPlurals SERVICE_INSTANCE = new AAIObjectPlurals(AAIObjectType.SERVICE_SUBSCRIPTION.uriTemplate(), "/service-instances", "service-instance"); + public static final AAIObjectPlurals OWNING_ENTITY = new AAIObjectPlurals(AAINamespaceConstants.BUSINESS, "/owning-entities", "owning-entity"); + public static final AAIObjectPlurals VOLUME_GROUP = new AAIObjectPlurals(AAIObjectType.CLOUD_REGION.uriTemplate(), "/volume-groups", "volume-group"); + public static final AAIObjectPlurals AVAILIBILITY_ZONE = new AAIObjectPlurals(AAIObjectType.CLOUD_REGION.uriTemplate(), "/availability-zones", "availability-zone"); + public static final AAIObjectPlurals VF_MODULE = new AAIObjectPlurals(AAIObjectType.GENERIC_VNF.uriTemplate(), "/vf-modules", "vf-module"); + public static final AAIObjectPlurals CONFIGURATION = new AAIObjectPlurals(AAINamespaceConstants.NETWORK, "/configurations", "configuration"); + public static final AAIObjectPlurals DEFAULT_TENANT = new AAIObjectPlurals(AAINamespaceConstants.CLOUD_INFRASTRUCTURE + "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/AAIAIC25", "/tenants", "default-tenant"); + public static final AAIObjectPlurals NETWORK_TECHNOLOGY = new AAIObjectPlurals(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/network-technologies", "network-technology"); + public static final AAIObjectPlurals LOGICAL_LINK = new AAIObjectPlurals(AAINamespaceConstants.NETWORK, "/logical-links", "logical-link"); + public static final AAIObjectPlurals L_INTERFACE = new AAIObjectPlurals(AAIObjectType.VSERVER.uriTemplate(), "/l-interfaces", "l-interface"); + public static final AAIObjectPlurals SUB_L_INTERFACE = new AAIObjectPlurals(AAIObjectType.L_INTERFACE.uriTemplate(), "/l-interfaces", "l-interface"); private final String uriTemplate; private final String partialUri; - private AAIObjectPlurals(String parentUri, String partialUri) { + private final String name; + protected AAIObjectPlurals(String parentUri, String partialUri, String name) { this.uriTemplate = parentUri + partialUri; this.partialUri = partialUri; + this.name = name; } @Override @@ -74,6 +82,6 @@ public enum AAIObjectPlurals implements GraphInventoryObjectPlurals { } @Override public String typeName(CaseFormat format) { - return CaseFormat.UPPER_UNDERSCORE.to(format, this.name()); + return CaseFormat.LOWER_HYPHEN.to(format, this.name); } } diff --git a/common/src/main/java/org/onap/so/client/aai/AAIObjectType.java b/common/src/main/java/org/onap/so/client/aai/AAIObjectType.java index c782ab4904..14d7f43911 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIObjectType.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIObjectType.java @@ -20,22 +20,30 @@ package org.onap.so.client.aai; +import java.io.Serializable; +import java.lang.reflect.Field; +import java.net.URL; import java.util.HashMap; import java.util.Map; +import java.util.Set; + +import javax.annotation.Priority; import org.onap.aai.annotations.Metadata; -import org.onap.aai.domain.yang.AllottedResource; import org.onap.aai.domain.yang.AggregateRoute; +import org.onap.aai.domain.yang.AllottedResource; import org.onap.aai.domain.yang.CloudRegion; import org.onap.aai.domain.yang.Collection; import org.onap.aai.domain.yang.Complex; import org.onap.aai.domain.yang.Configuration; import org.onap.aai.domain.yang.Connector; import org.onap.aai.domain.yang.Customer; +import org.onap.aai.domain.yang.Device; import org.onap.aai.domain.yang.ExtAaiNetwork; import org.onap.aai.domain.yang.GenericVnf; import org.onap.aai.domain.yang.InstanceGroup; import org.onap.aai.domain.yang.L3Network; +import org.onap.aai.domain.yang.LInterface; import org.onap.aai.domain.yang.LineOfBusiness; import org.onap.aai.domain.yang.ModelVer; import org.onap.aai.domain.yang.NetworkPolicy; @@ -45,13 +53,14 @@ import org.onap.aai.domain.yang.OwningEntity; import org.onap.aai.domain.yang.PInterface; import org.onap.aai.domain.yang.PhysicalLink; import org.onap.aai.domain.yang.Platform; +import org.onap.aai.domain.yang.Pnf; +import org.onap.aai.domain.yang.PortGroup; import org.onap.aai.domain.yang.Project; import org.onap.aai.domain.yang.Pserver; import org.onap.aai.domain.yang.RouteTableReference; import org.onap.aai.domain.yang.ServiceInstance; import org.onap.aai.domain.yang.ServiceSubscription; import org.onap.aai.domain.yang.SpPartner; -import org.onap.aai.domain.yang.Device; import org.onap.aai.domain.yang.Subnet; import org.onap.aai.domain.yang.Tenant; import org.onap.aai.domain.yang.TunnelXconnect; @@ -64,76 +73,117 @@ import org.onap.aai.domain.yang.VpnBinding; import org.onap.aai.domain.yang.Vserver; import org.onap.so.client.graphinventory.GraphInventoryObjectType; import org.onap.so.constants.Defaults; +import org.reflections.Reflections; +import org.reflections.scanners.SubTypesScanner; +import org.reflections.util.ClasspathHelper; +import org.reflections.util.ConfigurationBuilder; import com.google.common.base.CaseFormat; -public enum AAIObjectType implements GraphInventoryObjectType { +public class AAIObjectType implements GraphInventoryObjectType, Serializable { - DEFAULT_CLOUD_REGION(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/{cloud-region-id}"), - CUSTOMER(AAINamespaceConstants.BUSINESS, Customer.class), - GENERIC_QUERY("/search", "/generic-query"), - BULK_PROCESS("/bulkprocess", ""), - SINGLE_TRANSACTION("/bulk/single-transaction", ""), - GENERIC_VNF(AAINamespaceConstants.NETWORK, GenericVnf.class), - VF_MODULE(AAIObjectType.GENERIC_VNF.uriTemplate(), VfModule.class), - L3_NETWORK(AAINamespaceConstants.NETWORK, L3Network.class), - NETWORK_POLICY(AAINamespaceConstants.NETWORK, NetworkPolicy.class), - NODES_QUERY("/search", "/nodes-query"), - CUSTOM_QUERY("/query", ""), - ROUTE_TABLE_REFERENCE(AAINamespaceConstants.NETWORK, RouteTableReference.class), - DEFAULT_TENANT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE + "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/AAIAIC25", "/tenants/tenant/{tenant-id}"), - VCE(AAINamespaceConstants.NETWORK, Vce.class), - VPN_BINDING(AAINamespaceConstants.NETWORK, VpnBinding.class), - CONFIGURATION(AAINamespaceConstants.NETWORK, Configuration.class), - PSERVER(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, Pserver.class), - SERVICE_SUBSCRIPTION(AAIObjectType.CUSTOMER.uriTemplate(), ServiceSubscription.class), - SERVICE_INSTANCE(AAIObjectType.SERVICE_SUBSCRIPTION.uriTemplate(), ServiceInstance.class), - PROJECT(AAINamespaceConstants.BUSINESS, Project.class), - LINE_OF_BUSINESS(AAINamespaceConstants.BUSINESS, LineOfBusiness.class), - PLATFORM(AAINamespaceConstants.BUSINESS, Platform.class), - OWNING_ENTITY(AAINamespaceConstants.BUSINESS, OwningEntity.class), - ALLOTTED_RESOURCE(AAIObjectType.SERVICE_INSTANCE.uriTemplate(), AllottedResource.class), - PNF(AAINamespaceConstants.NETWORK, "/pnfs/pnf/{pnf-name}"), - OPERATIONAL_ENVIRONMENT(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, OperationalEnvironment.class), - CLOUD_REGION(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, CloudRegion.class), - TENANT(AAIObjectType.CLOUD_REGION.uriTemplate(), Tenant.class), - VOLUME_GROUP(AAIObjectType.CLOUD_REGION.uriTemplate(), VolumeGroup.class), - VSERVER(AAIObjectType.TENANT.uriTemplate(), Vserver.class), - MODEL_VER(AAINamespaceConstants.SERVICE_DESIGN_AND_CREATION + "/models/model/{model-invariant-id}", ModelVer.class), - TUNNEL_XCONNECT(AAIObjectType.ALLOTTED_RESOURCE.uriTemplate(), TunnelXconnect.class), - P_INTERFACE(AAIObjectType.PSERVER.uriTemplate(), PInterface.class), - PHYSICAL_LINK(AAINamespaceConstants.NETWORK, PhysicalLink.class), - INSTANCE_GROUP(AAINamespaceConstants.NETWORK, InstanceGroup.class), - COLLECTION(AAINamespaceConstants.NETWORK, Collection.class), - VNFC(AAINamespaceConstants.NETWORK, Vnfc.class), - VLAN_TAG(AAINamespaceConstants.NETWORK, VlanTag.class), - COMPLEX(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, Complex.class), - CONNECTOR(AAINamespaceConstants.BUSINESS, Connector.class), - NETWORK_TECHNOLOGY(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, NetworkTechnology.class), - SUBNET(AAIObjectType.L3_NETWORK.uriTemplate(), Subnet.class), - SP_PARTNER(AAINamespaceConstants.BUSINESS, SpPartner.class), - DEVICE(AAINamespaceConstants.NETWORK, Device.class), - EXT_AAI_NETWORK(AAINamespaceConstants.NETWORK, ExtAaiNetwork.class), - AGGREGATE_ROUTE(AAINamespaceConstants.NETWORK, AggregateRoute.class), - UNKNOWN("", ""); + private static final long serialVersionUID = -2877184776691514600L; + private static Map<String, AAIObjectType> map = new HashMap<>(); + + public static final AAIObjectType DEFAULT_CLOUD_REGION = new AAIObjectType(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/{cloud-region-id}", "default-cloud-region"); + public static final AAIObjectType CUSTOMER = new AAIObjectType(AAINamespaceConstants.BUSINESS, Customer.class); + public static final AAIObjectType GENERIC_QUERY = new AAIObjectType("/search", "/generic-query", "generic-query"); + public static final AAIObjectType BULK_PROCESS = new AAIObjectType("/bulkprocess", "", "bulkprocess"); + public static final AAIObjectType SINGLE_TRANSACTION = new AAIObjectType("/bulk/single-transaction", "", "single-transaction"); + public static final AAIObjectType GENERIC_VNF = new AAIObjectType(AAINamespaceConstants.NETWORK, GenericVnf.class); + public static final AAIObjectType VF_MODULE = new AAIObjectType(AAIObjectType.GENERIC_VNF.uriTemplate(), VfModule.class); + public static final AAIObjectType L3_NETWORK = new AAIObjectType(AAINamespaceConstants.NETWORK, L3Network.class); + public static final AAIObjectType NETWORK_POLICY = new AAIObjectType(AAINamespaceConstants.NETWORK, NetworkPolicy.class); + public static final AAIObjectType NODES_QUERY = new AAIObjectType("/search", "/nodes-query", "nodes-query"); + public static final AAIObjectType CUSTOM_QUERY = new AAIObjectType("/query", "", "query"); + public static final AAIObjectType ROUTE_TABLE_REFERENCE = new AAIObjectType(AAINamespaceConstants.NETWORK, RouteTableReference.class); + public static final AAIObjectType DEFAULT_TENANT = new AAIObjectType(AAINamespaceConstants.CLOUD_INFRASTRUCTURE + "/cloud-regions/cloud-region/" + Defaults.CLOUD_OWNER + "/AAIAIC25", "/tenants/tenant/{tenant-id}", "default-tenant"); + public static final AAIObjectType VCE = new AAIObjectType(AAINamespaceConstants.NETWORK, Vce.class); + public static final AAIObjectType PORT_GROUP = new AAIObjectType(AAIObjectType.VCE.uriTemplate(), PortGroup.class); + public static final AAIObjectType VPN_BINDING = new AAIObjectType(AAINamespaceConstants.NETWORK, VpnBinding.class); + public static final AAIObjectType CONFIGURATION = new AAIObjectType(AAINamespaceConstants.NETWORK, Configuration.class); + public static final AAIObjectType PSERVER = new AAIObjectType(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, Pserver.class); + public static final AAIObjectType SERVICE_SUBSCRIPTION = new AAIObjectType(AAIObjectType.CUSTOMER.uriTemplate(), ServiceSubscription.class); + public static final AAIObjectType SERVICE_INSTANCE = new AAIObjectType(AAIObjectType.SERVICE_SUBSCRIPTION.uriTemplate(), ServiceInstance.class); + public static final AAIObjectType PROJECT = new AAIObjectType(AAINamespaceConstants.BUSINESS, Project.class); + public static final AAIObjectType LINE_OF_BUSINESS = new AAIObjectType(AAINamespaceConstants.BUSINESS, LineOfBusiness.class); + public static final AAIObjectType PLATFORM = new AAIObjectType(AAINamespaceConstants.BUSINESS, Platform.class); + public static final AAIObjectType OWNING_ENTITY = new AAIObjectType(AAINamespaceConstants.BUSINESS, OwningEntity.class); + public static final AAIObjectType ALLOTTED_RESOURCE = new AAIObjectType(AAIObjectType.SERVICE_INSTANCE.uriTemplate(), AllottedResource.class); + public static final AAIObjectType PNF = new AAIObjectType(AAINamespaceConstants.NETWORK, Pnf.class); + public static final AAIObjectType OPERATIONAL_ENVIRONMENT = new AAIObjectType(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, OperationalEnvironment.class); + public static final AAIObjectType CLOUD_REGION = new AAIObjectType(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, CloudRegion.class); + public static final AAIObjectType TENANT = new AAIObjectType(AAIObjectType.CLOUD_REGION.uriTemplate(), Tenant.class); + public static final AAIObjectType VOLUME_GROUP = new AAIObjectType(AAIObjectType.CLOUD_REGION.uriTemplate(), VolumeGroup.class); + public static final AAIObjectType VSERVER = new AAIObjectType(AAIObjectType.TENANT.uriTemplate(), Vserver.class); + public static final AAIObjectType MODEL_VER = new AAIObjectType(AAINamespaceConstants.SERVICE_DESIGN_AND_CREATION + "/models/model/{model-invariant-id}", ModelVer.class); + public static final AAIObjectType TUNNEL_XCONNECT = new AAIObjectType(AAIObjectType.ALLOTTED_RESOURCE.uriTemplate(), TunnelXconnect.class); + public static final AAIObjectType P_INTERFACE = new AAIObjectType(AAIObjectType.PSERVER.uriTemplate(), PInterface.class); + public static final AAIObjectType PHYSICAL_LINK = new AAIObjectType(AAINamespaceConstants.NETWORK, PhysicalLink.class); + public static final AAIObjectType INSTANCE_GROUP = new AAIObjectType(AAINamespaceConstants.NETWORK, InstanceGroup.class); + public static final AAIObjectType COLLECTION = new AAIObjectType(AAINamespaceConstants.NETWORK, Collection.class); + public static final AAIObjectType VNFC = new AAIObjectType(AAINamespaceConstants.NETWORK, Vnfc.class); + public static final AAIObjectType VLAN_TAG = new AAIObjectType(AAINamespaceConstants.NETWORK, VlanTag.class); + public static final AAIObjectType COMPLEX = new AAIObjectType(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, Complex.class); + public static final AAIObjectType CONNECTOR = new AAIObjectType(AAINamespaceConstants.BUSINESS, Connector.class); + public static final AAIObjectType NETWORK_TECHNOLOGY = new AAIObjectType(AAINamespaceConstants.CLOUD_INFRASTRUCTURE, NetworkTechnology.class); + public static final AAIObjectType SUBNET = new AAIObjectType(AAIObjectType.L3_NETWORK.uriTemplate(), Subnet.class); + public static final AAIObjectType SP_PARTNER = new AAIObjectType(AAINamespaceConstants.BUSINESS, SpPartner.class); + public static final AAIObjectType DEVICE = new AAIObjectType(AAINamespaceConstants.NETWORK, Device.class); + public static final AAIObjectType EXT_AAI_NETWORK = new AAIObjectType(AAINamespaceConstants.NETWORK, ExtAaiNetwork.class); + public static final AAIObjectType AGGREGATE_ROUTE = new AAIObjectType(AAINamespaceConstants.NETWORK, AggregateRoute.class); + public static final AAIObjectType L_INTERFACE = new AAIObjectType(AAIObjectType.VSERVER.uriTemplate(), LInterface.class); + public static final AAIObjectType UNKNOWN = new AAIObjectType("", "", "unknown"); + public static final AAIObjectType DSL = new AAIObjectType("/dsl", "", "dsl"); private final String uriTemplate; private final String parentUri; private final String partialUri; private final Class<?> aaiObjectClass; - private static Map<String, AAIObjectType> map = new HashMap<>(); - private AAIObjectType(String parentUri, String partialUri) { + private final String name; + + static { + /* Locate any AAIObjectTypes on the classpath and add them to our map */ + java.util.Collection<URL> packages = ClasspathHelper.forPackage(""); + Reflections r = new Reflections(new ConfigurationBuilder().setUrls(packages).setScanners(new SubTypesScanner())); + + Set<Class<? extends AAIObjectType>> resources = + r.getSubTypesOf(AAIObjectType.class); + try { + for (Class<? extends AAIObjectType> customTypeClass : resources) { + AAIObjectType customType; + customType = customTypeClass.newInstance(); + } + } catch (InstantiationException | IllegalAccessException e) { + } + } + protected AAIObjectType() { + this.parentUri = null; + this.partialUri = null; + this.uriTemplate = null; + this.aaiObjectClass = null; + this.name = null; + } + protected AAIObjectType(String parentUri, String partialUri, String name) { this.parentUri = parentUri; this.partialUri = partialUri; this.uriTemplate = parentUri + partialUri; this.aaiObjectClass = null; + this.name = name; + if (!AAIObjectType.map.containsKey(name)) { + AAIObjectType.map.put(name, this); + } } - private AAIObjectType(String parentUri, Class<?> aaiObjectClass) { + protected AAIObjectType(String parentUri, Class<?> aaiObjectClass) { this.parentUri = parentUri; this.partialUri = removeParentUri(aaiObjectClass, parentUri); this.uriTemplate = parentUri + partialUri; this.aaiObjectClass = aaiObjectClass; + this.name = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, aaiObjectClass.getSimpleName()); + if (!AAIObjectType.map.containsKey(name)) { + AAIObjectType.map.put(name, this); + } } @Override @@ -142,12 +192,6 @@ public enum AAIObjectType implements GraphInventoryObjectType { } public static AAIObjectType fromTypeName(String name) { - if (map.isEmpty()) { - for (AAIObjectType type : AAIObjectType.values()) { - map.put(type.typeName(), type); - } - } - if (map.containsKey(name)) { return map.get(name); } else { @@ -160,12 +204,7 @@ public enum AAIObjectType implements GraphInventoryObjectType { } @Override public String typeName(CaseFormat format) { - String enumName = this.name(); - if (this.equals(AAIObjectType.DEFAULT_CLOUD_REGION) || this.equals(AAIObjectType.DEFAULT_TENANT)) { - enumName = enumName.replace("DEFAULT_", ""); - } - - return CaseFormat.UPPER_UNDERSCORE.to(format, enumName); + return CaseFormat.LOWER_HYPHEN.to(format, this.name.replace("default-", "")); } @Override diff --git a/common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java b/common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java index 87951d516b..288ac9bc7f 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java @@ -36,9 +36,10 @@ import org.onap.so.client.aai.entities.AAIEdgeLabel; import org.onap.so.client.aai.entities.AAIResultWrapper; import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.aai.entities.uri.AAIUri; +import org.onap.so.client.graphinventory.GraphInventoryResourcesClient; import org.onap.so.client.graphinventory.entities.uri.Depth; -public class AAIResourcesClient extends AAIClient { +public class AAIResourcesClient extends AAIClient implements GraphInventoryResourcesClient<AAIResourcesClient, AAIResourceUri, AAIEdgeLabel, AAIResultWrapper, AAITransactionalClient, AAISingleTransactionClient> { public AAIResourcesClient() { super(); @@ -49,37 +50,30 @@ public class AAIResourcesClient extends AAIClient { this.version = version; } - /** - * creates a new object in A&AI - * - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#create(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) */ + @Override public void create(AAIResourceUri uri, Object obj) { RestClient aaiRC = this.createClient(uri); aaiRC.put(obj); return; } - /** - * creates a new object in A&AI with no payload body - * - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#createEmpty(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public void createEmpty(AAIResourceUri uri) { RestClient aaiRC = this.createClient(uri); aaiRC.put(""); return; } - /** - * returns false if the object does not exist in A&AI - * - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#exists(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public boolean exists(AAIResourceUri uri) { AAIUri forceMinimal = this.addParams(Optional.of(Depth.ZERO), true, uri); try { @@ -91,12 +85,10 @@ public class AAIResourcesClient extends AAIClient { } } - /** - * Adds a relationship between two objects in A&AI - * @param uriA - * @param uriB - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public void connect(AAIResourceUri uriA, AAIResourceUri uriB) { AAIResourceUri uriAClone = uriA.clone(); RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); @@ -104,14 +96,10 @@ public class AAIResourcesClient extends AAIClient { return; } - /** - * Adds a relationship between two objects in A&AI - * with a given edge label - * @param uriA - * @param uriB - * @param edge label - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.AAIEdgeLabel) */ + @Override public void connect(AAIResourceUri uriA, AAIResourceUri uriB, AAIEdgeLabel label) { AAIResourceUri uriAClone = uriA.clone(); RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); @@ -119,13 +107,10 @@ public class AAIResourcesClient extends AAIClient { return; } - /** - * Removes relationship from two objects in A&AI - * - * @param uriA - * @param uriB - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public void disconnect(AAIResourceUri uriA, AAIResourceUri uriB) { AAIResourceUri uriAClone = uriA.clone(); RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); @@ -133,12 +118,10 @@ public class AAIResourcesClient extends AAIClient { return; } - /** - * Deletes object from A&AI. Automatically handles resource-version. - * - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#delete(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public void delete(AAIResourceUri uri) { AAIResourceUri clone = uri.clone(); RestClient aaiRC = this.createClient(clone); @@ -150,23 +133,20 @@ public class AAIResourcesClient extends AAIClient { return; } - /** - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#update(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) */ + @Override public void update(AAIResourceUri uri, Object obj) { RestClient aaiRC = this.createClient(uri); aaiRC.patch(obj); return; } - /** - * Retrieves an object from A&AI and unmarshalls it into the Class specified - * @param clazz - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#get(java.lang.Class, org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public <T> Optional<T> get(Class<T> clazz, AAIResourceUri uri) { try { return this.createClient(uri).get(clazz); @@ -179,11 +159,10 @@ public class AAIResourcesClient extends AAIClient { } } - /** - * Retrieves an object from A&AI and returns complete response - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#getFullResponse(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public Response getFullResponse(AAIResourceUri uri) { try { return this.createClient(uri).get(); @@ -196,12 +175,10 @@ public class AAIResourcesClient extends AAIClient { } } - /** - * Retrieves an object from A&AI and automatically unmarshalls it into a Map or List - * @param resultClass - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#get(javax.ws.rs.core.GenericType, org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public <T> Optional<T> get(GenericType<T> resultClass, AAIResourceUri uri) { try { return this.createClient(uri).get(resultClass); @@ -214,12 +191,10 @@ public class AAIResourcesClient extends AAIClient { } } - /** - * Retrieves an object from A&AI wrapped in a helper class which offer additional features - * - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#get(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAIResultWrapper get(AAIResourceUri uri) { String json; try { @@ -234,13 +209,10 @@ public class AAIResourcesClient extends AAIClient { return new AAIResultWrapper(json); } - /** - * Retrieves an object from A&AI wrapped in a helper class which offer additional features - * If the object cannot be found in A&AI the method will throw the runtime exception - * included as an argument - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#get(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Class) */ + @Override public AAIResultWrapper get(AAIResourceUri uri, Class<? extends RuntimeException> c) { String json; try { @@ -285,13 +257,10 @@ public class AAIResourcesClient extends AAIClient { return result; } - /** - * Will automatically create the object if it does not exist - * - * @param obj - Optional object which serializes to a valid A&AI payload - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#createIfNotExists(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.Optional) */ + @Override public AAIResourcesClient createIfNotExists(AAIResourceUri uri, Optional<Object> obj) { if(!this.exists(uri)){ if (obj.isPresent()) { @@ -304,20 +273,18 @@ public class AAIResourcesClient extends AAIClient { return this; } - /** - * Starts a transaction which encloses multiple A&AI mutations - * - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#beginTransaction() */ + @Override public AAITransactionalClient beginTransaction() { return new AAITransactionalClient(this.getVersion()); } - /** - * Starts a transaction groups multiple A&AI mutations - * - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#beginSingleTransaction() */ + @Override public AAISingleTransactionClient beginSingleTransaction() { return new AAISingleTransactionClient(this.getVersion()); } @@ -333,6 +300,9 @@ public class AAIResourcesClient extends AAIClient { return clone; } + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryResourcesClient#getRestProperties() + */ @Override public <T extends RestProperties> T getRestProperties() { return super.getRestProperties(); diff --git a/common/src/main/java/org/onap/so/client/aai/AAIRestClient.java b/common/src/main/java/org/onap/so/client/aai/AAIRestClient.java index 4f235c35f1..a2651195ee 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIRestClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIRestClient.java @@ -28,6 +28,7 @@ import javax.ws.rs.core.Response; import org.onap.so.client.ResponseExceptionMapper; import org.onap.so.client.RestClientSSL; +import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; import org.onap.so.client.policy.CommonObjectMapperProvider; import org.onap.so.utils.TargetEntity; @@ -36,7 +37,7 @@ public class AAIRestClient extends RestClientSSL { private final AAIProperties aaiProperties; private static final AAICommonObjectMapperProvider standardProvider = new AAICommonObjectMapperProvider(); - private final AAIPatchConverter patchConverter = new AAIPatchConverter(); + private final GraphInventoryPatchConverter patchConverter = new GraphInventoryPatchConverter(); protected AAIRestClient(AAIProperties props, URI uri) { super(props, Optional.of(uri)); @@ -81,7 +82,7 @@ public class AAIRestClient extends RestClientSSL { return super.patch(convertToPatchFormat(obj), resultClass); } - protected AAIPatchConverter getPatchConverter() { + protected GraphInventoryPatchConverter getPatchConverter() { return this.patchConverter; } diff --git a/common/src/main/java/org/onap/so/client/aai/AAISingleTransactionClient.java b/common/src/main/java/org/onap/so/client/aai/AAISingleTransactionClient.java index 2ecdb7c480..ba65ac3f15 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAISingleTransactionClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAISingleTransactionClient.java @@ -43,19 +43,21 @@ import org.onap.so.client.aai.entities.singletransaction.SingleTransactionRespon import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.aai.entities.uri.AAIUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; +import org.onap.so.client.graphinventory.GraphInventorySingleTransactionClient; import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; -public class AAISingleTransactionClient extends AAIClient { +public class AAISingleTransactionClient extends AAIClient implements GraphInventorySingleTransactionClient<AAISingleTransactionClient, AAIResourceUri, AAIEdgeLabel> { private final SingleTransactionRequest request; private final AAIVersion version; private int actionCount = 0; - private final AAIPatchConverter patchConverter = new AAIPatchConverter(); + private final GraphInventoryPatchConverter patchConverter = new GraphInventoryPatchConverter(); protected AAISingleTransactionClient(AAIVersion version) { super(); @@ -63,37 +65,30 @@ public class AAISingleTransactionClient extends AAIClient { this.request = new SingleTransactionRequest(); } - /** - * creates a new object in A&AI - * - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#create(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) */ + @Override public AAISingleTransactionClient create(AAIResourceUri uri, Object obj) { request.getOperations().add(new OperationBodyRequest().withAction("put").withUri(uri.build().toString()).withBody(obj)); incrementActionAmount(); return this; } - /** - * creates a new object in A&AI with no payload body - * - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#createEmpty(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAISingleTransactionClient createEmpty(AAIResourceUri uri) { request.getOperations().add(new OperationBodyRequest().withAction("put").withUri(uri.build().toString()).withBody(new HashMap<String, String>())); incrementActionAmount(); return this; } - /** - * Adds a relationship between two objects in A&AI - * @param uriA - * @param uriB - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAISingleTransactionClient connect(AAIResourceUri uriA, AAIResourceUri uriB) { AAIResourceUri uriAClone = uriA.clone(); request.getOperations().add(new OperationBodyRequest().withAction("put").withUri(uriAClone.relationshipAPI().build().toString()).withBody(this.buildRelationship(uriB))); @@ -101,13 +96,10 @@ public class AAISingleTransactionClient extends AAIClient { return this; } - /** - * relationship between multiple objects in A&AI - connects A to all objects specified in list - * - * @param uriA - * @param uris - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List) */ + @Override public AAISingleTransactionClient connect(AAIResourceUri uriA, List<AAIResourceUri> uris) { for (AAIResourceUri uri : uris) { this.connect(uriA, uri); @@ -115,6 +107,10 @@ public class AAISingleTransactionClient extends AAIClient { return this; } + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.AAIEdgeLabel) + */ + @Override public AAISingleTransactionClient connect(AAIResourceUri uriA, AAIResourceUri uriB, AAIEdgeLabel label) { AAIResourceUri uriAClone = uriA.clone(); RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); @@ -122,6 +118,10 @@ public class AAISingleTransactionClient extends AAIClient { return this; } + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List, org.onap.so.client.aai.entities.AAIEdgeLabel) + */ + @Override public AAISingleTransactionClient connect(AAIResourceUri uriA, List<AAIResourceUri> uris, AAIEdgeLabel label) { for (AAIResourceUri uri : uris) { this.connect(uriA, uri, label); @@ -129,13 +129,10 @@ public class AAISingleTransactionClient extends AAIClient { return this; } - /** - * Removes relationship from two objects in A&AI - * - * @param uriA - * @param uriB - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAISingleTransactionClient disconnect(AAIResourceUri uriA, AAIResourceUri uriB) { AAIResourceUri uriAClone = uriA.clone(); request.getOperations().add(new OperationBodyRequest().withAction("delete").withUri(uriAClone.relationshipAPI().build().toString()).withBody(this.buildRelationship(uriB))); @@ -143,24 +140,20 @@ public class AAISingleTransactionClient extends AAIClient { return this; } - /** - * Removes relationship from multiple objects - disconnects A from all objects specified in list - * @param uriA - * @param uris - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List) */ + @Override public AAISingleTransactionClient disconnect(AAIResourceUri uriA, List<AAIResourceUri> uris) { for (AAIResourceUri uri : uris) { this.disconnect(uriA, uri); } return this; } - /** - * Deletes object from A&AI. Automatically handles resource-version. - * - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#delete(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAISingleTransactionClient delete(AAIResourceUri uri) { AAIResourcesClient client = new AAIResourcesClient(); AAIResourceUri clone = uri.clone(); @@ -172,11 +165,10 @@ public class AAISingleTransactionClient extends AAIClient { return this; } - /** - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#update(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) */ + @Override public AAISingleTransactionClient update(AAIResourceUri uri, Object obj) { final String payload = getPatchConverter().convertPatchFormat(obj); @@ -188,10 +180,10 @@ public class AAISingleTransactionClient extends AAIClient { private void incrementActionAmount() { actionCount++; } - /** - * Executes all created transactions in A&AI - * @throws BulkProcessFailed + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionClient#execute() */ + @Override public void execute() throws BulkProcessFailed { RestClient client = this.createClient(AAIUriFactory.createResourceUri(AAIObjectType.SINGLE_TRANSACTION)); try { @@ -261,7 +253,7 @@ public class AAISingleTransactionClient extends AAIClient { return this.request; } - protected AAIPatchConverter getPatchConverter() { + protected GraphInventoryPatchConverter getPatchConverter() { return this.patchConverter; } } diff --git a/common/src/main/java/org/onap/so/client/aai/AAITransactionalClient.java b/common/src/main/java/org/onap/so/client/aai/AAITransactionalClient.java index 118a3edf1c..dd4cb2f591 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAITransactionalClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAITransactionalClient.java @@ -20,8 +20,6 @@ package org.onap.so.client.aai; -import static org.mockito.Mockito.RETURNS_DEEP_STUBS; - import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -42,8 +40,9 @@ import org.onap.so.client.aai.entities.bulkprocess.OperationBody; import org.onap.so.client.aai.entities.bulkprocess.Transaction; import org.onap.so.client.aai.entities.bulkprocess.Transactions; import org.onap.so.client.aai.entities.uri.AAIResourceUri; -import org.onap.so.client.aai.entities.uri.AAIUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; +import org.onap.so.client.graphinventory.GraphInventoryTransactionalClient; import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; import org.onap.so.jsonpath.JsonPathUtil; @@ -51,14 +50,14 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; -public class AAITransactionalClient extends AAIClient { +public class AAITransactionalClient extends AAIClient implements GraphInventoryTransactionalClient<AAITransactionalClient, AAIResourceUri, AAIEdgeLabel> { private final Transactions transactions; private Transaction currentTransaction; private final AAIVersion version; private int actionCount = 0; - private final AAIPatchConverter patchConverter = new AAIPatchConverter(); + private final GraphInventoryPatchConverter patchConverter = new GraphInventoryPatchConverter(); protected AAITransactionalClient(AAIVersion version) { super(); @@ -73,47 +72,39 @@ public class AAITransactionalClient extends AAIClient { currentTransaction = transaction; } - /** - * adds an additional transaction and closes the previous transaction - * - * @return AAITransactionalClient + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#beginNewTransaction() */ + @Override public AAITransactionalClient beginNewTransaction() { startTransaction(); return this; } - /** - * creates a new object in A&AI - * - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#create(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) */ + @Override public AAITransactionalClient create(AAIResourceUri uri, Object obj) { currentTransaction.getPut().add(new OperationBody().withUri(uri.build().toString()).withBody(obj)); incrementActionAmount(); return this; } - /** - * creates a new object in A&AI with no payload body - * - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#createEmpty(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAITransactionalClient createEmpty(AAIResourceUri uri) { currentTransaction.getPut().add(new OperationBody().withUri(uri.build().toString()).withBody(new HashMap<String, String>())); incrementActionAmount(); return this; } - /** - * Adds a relationship between two objects in A&AI - * @param uriA - * @param uriB - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAITransactionalClient connect(AAIResourceUri uriA, AAIResourceUri uriB) { AAIResourceUri uriAClone = uriA.clone(); currentTransaction.getPut().add(new OperationBody().withUri(uriAClone.relationshipAPI().build().toString()).withBody(this.buildRelationship(uriB))); @@ -121,13 +112,10 @@ public class AAITransactionalClient extends AAIClient { return this; } - /** - * relationship between multiple objects in A&AI - connects A to all objects specified in list - * - * @param uriA - * @param uris - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List) */ + @Override public AAITransactionalClient connect(AAIResourceUri uriA, List<AAIResourceUri> uris) { for (AAIResourceUri uri : uris) { this.connect(uriA, uri); @@ -135,6 +123,10 @@ public class AAITransactionalClient extends AAIClient { return this; } + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.AAIEdgeLabel) + */ + @Override public AAITransactionalClient connect(AAIResourceUri uriA, AAIResourceUri uriB, AAIEdgeLabel label) { AAIResourceUri uriAClone = uriA.clone(); RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); @@ -142,6 +134,10 @@ public class AAITransactionalClient extends AAIClient { return this; } + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List, org.onap.so.client.aai.entities.AAIEdgeLabel) + */ + @Override public AAITransactionalClient connect(AAIResourceUri uriA, List<AAIResourceUri> uris, AAIEdgeLabel label) { for (AAIResourceUri uri : uris) { this.connect(uriA, uri, label); @@ -149,13 +145,10 @@ public class AAITransactionalClient extends AAIClient { return this; } - /** - * Removes relationship from two objects in A&AI - * - * @param uriA - * @param uriB - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAITransactionalClient disconnect(AAIResourceUri uriA, AAIResourceUri uriB) { AAIResourceUri uriAClone = uriA.clone(); currentTransaction.getDelete().add(new OperationBody().withUri(uriAClone.relationshipAPI().build().toString()).withBody(this.buildRelationship(uriB))); @@ -163,24 +156,20 @@ public class AAITransactionalClient extends AAIClient { return this; } - /** - * Removes relationship from multiple objects - disconnects A from all objects specified in list - * @param uriA - * @param uris - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List) */ + @Override public AAITransactionalClient disconnect(AAIResourceUri uriA, List<AAIResourceUri> uris) { for (AAIResourceUri uri : uris) { this.disconnect(uriA, uri); } return this; } - /** - * Deletes object from A&AI. Automatically handles resource-version. - * - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#delete(org.onap.so.client.aai.entities.uri.AAIResourceUri) */ + @Override public AAITransactionalClient delete(AAIResourceUri uri) { AAIResourcesClient client = new AAIResourcesClient(); AAIResourceUri clone = uri.clone(); @@ -192,11 +181,10 @@ public class AAITransactionalClient extends AAIClient { return this; } - /** - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#update(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) */ + @Override public AAITransactionalClient update(AAIResourceUri uri, Object obj) { final String payload = getPatchConverter().convertPatchFormat(obj); currentTransaction.getPatch().add(new OperationBody().withUri(uri.build().toString()).withBody(payload)); @@ -207,10 +195,10 @@ public class AAITransactionalClient extends AAIClient { private void incrementActionAmount() { actionCount++; } - /** - * Executes all created transactions in A&AI - * @throws BulkProcessFailed + /* (non-Javadoc) + * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#execute() */ + @Override public void execute() throws BulkProcessFailed { RestClient client = this.createClient(AAIUriFactory.createResourceUri(AAIObjectType.BULK_PROCESS)); try { @@ -293,7 +281,7 @@ public class AAITransactionalClient extends AAIClient { return this.transactions; } - protected AAIPatchConverter getPatchConverter() { + protected GraphInventoryPatchConverter getPatchConverter() { return this.patchConverter; } } diff --git a/common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java b/common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java index 77ea9bcdfe..9b3f98baa4 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java +++ b/common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java @@ -20,96 +20,22 @@ package org.onap.so.client.aai.entities; -import java.io.IOException; import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; - -import org.onap.so.client.aai.AAICommonObjectMapperProvider; -import org.onap.so.jsonpath.JsonPathUtil; +import org.onap.so.client.graphinventory.entities.GraphInventoryResultWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class AAIResultWrapper implements Serializable { +public class AAIResultWrapper extends GraphInventoryResultWrapper implements Serializable { private static final long serialVersionUID = 5895841925807816737L; - private final String jsonBody; - private final ObjectMapper mapper; - private final transient Logger logger = LoggerFactory.getLogger(AAIResultWrapper.class); + private final static transient Logger logger = LoggerFactory.getLogger(AAIResultWrapper.class); public AAIResultWrapper(String json) { - this.jsonBody = json; - this.mapper = new AAICommonObjectMapperProvider().getMapper(); + super(json, logger); } public AAIResultWrapper(Object aaiObject) { - this.mapper = new AAICommonObjectMapperProvider().getMapper(); - this.jsonBody = mapObjectToString(aaiObject); - } - - protected String mapObjectToString(Object aaiObject) { - try { - return mapper.writeValueAsString(aaiObject); - } catch (JsonProcessingException e) { - logger.warn("could not parse object into json - defaulting to {}"); - return "{}"; - } + super(aaiObject, logger); } - public Optional<Relationships> getRelationships() { - final String path = "$.relationship-list"; - if (isEmpty()) { - return Optional.empty(); - } - Optional<String> result = JsonPathUtil.getInstance().locateResult(jsonBody, path); - if (result.isPresent()) { - return Optional.of(new Relationships(result.get())); - } else { - return Optional.empty(); - } - } - - public String getJson() { - if(jsonBody == null) { - return "{}"; - } else { - return jsonBody; - } - } - - public Map<String, Object> asMap() { - if (isEmpty()) { - return new HashMap<>(); - } - try { - return mapper.readValue(this.jsonBody, new TypeReference<Map<String, Object>>(){}); - } catch (IOException e) { - return new HashMap<>(); - } - } - - public <T> Optional<T> asBean(Class<T> clazz) { - if (isEmpty()) { - return Optional.empty(); - } - try { - return Optional.of(mapper.readValue(this.jsonBody, clazz)); - } catch (IOException e) { - return Optional.empty(); - } - } - - public boolean isEmpty() { - return jsonBody == null; - } - @Override - public String toString() { - return this.getJson(); - } - } diff --git a/common/src/main/java/org/onap/so/client/aai/entities/DSLNode.java b/common/src/main/java/org/onap/so/client/aai/entities/DSLNode.java new file mode 100644 index 0000000000..f94c28c5b7 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/aai/entities/DSLNode.java @@ -0,0 +1,75 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.client.aai.entities; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.onap.so.client.graphinventory.GraphInventoryObjectName; + +public class DSLNode implements QueryStep { + + private final String nodeName; + private final List<DSLNodeKey> nodeKeys; + private final StringBuilder query = new StringBuilder(); + private boolean output = false; + + public DSLNode() { + this.nodeName = ""; + this.nodeKeys = new ArrayList<>(); + + } + public DSLNode(GraphInventoryObjectName name) { + this.nodeName = name.typeName(); + this.nodeKeys = new ArrayList<>(); + query.append(nodeName); + } + public DSLNode(GraphInventoryObjectName name, DSLNodeKey... key) { + this.nodeName = name.typeName(); + this.nodeKeys = Arrays.asList(key); + query.append(nodeName); + } + + public DSLNode output() { + this.output = true; + + return this; + } + + public DSLNode and(DSLNodeKey... key) { + this.nodeKeys.addAll(Arrays.asList(key)); + + return this; + } + + @Override + public String build() { + if (output) { + query.append("*"); + } + for (DSLNodeKey key : nodeKeys) { + query.append(key.build()); + } + + return query.toString(); + } +} diff --git a/common/src/main/java/org/onap/so/client/aai/entities/DSLNodeKey.java b/common/src/main/java/org/onap/so/client/aai/entities/DSLNodeKey.java new file mode 100644 index 0000000000..a9795d1cc3 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/aai/entities/DSLNodeKey.java @@ -0,0 +1,69 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.client.aai.entities; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.common.base.Joiner; + + +public class DSLNodeKey implements QueryStep { + + private boolean not = false; + private final StringBuilder query = new StringBuilder(); + private final String keyName; + private final List<String> values; + public DSLNodeKey(String keyName, String... value) { + + this.keyName = keyName; + this.values = Arrays.asList(value); + } + + public DSLNodeKey not() { + + this.not = true; + return this; + } + + @Override + public String build() { + + if (not) { + query.append(" !"); + } + query.append("('").append(keyName).append("', "); + List<String> temp = new ArrayList<>(); + for (String item : values) { + if (item.equals("null")) { + temp.add(String.format("' %s '", item)); + } else if (item.equals("")){ + temp.add("' '"); + } else { + temp.add(String.format("'%s'", item)); + } + } + query.append(Joiner.on(", ").join(temp)).append(")"); + + return query.toString(); + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Status.java b/common/src/main/java/org/onap/so/client/aai/entities/DSLQuery.java index fe9764a2f2..0f4095177a 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Status.java +++ b/common/src/main/java/org/onap/so/client/aai/entities/DSLQuery.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017 - 2019 AT&T 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. @@ -18,19 +18,30 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.apihandlerinfra; +package org.onap.so.client.aai.entities; +import com.fasterxml.jackson.annotation.JsonInclude; -/* - * Enum for Status values returned by API Handler to Tail-F -*/ -public enum Status { - PENDING, - IN_PROGRESS, - COMPLETE, - COMPLETED, - FAILED, - TIMEOUT, - UNLOCKED, - PENDING_MANUAL_TASK +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DSLQuery { + + private String dsl; + + public DSLQuery() { + + } + + public DSLQuery(String dsl) { + this.dsl = dsl; + } + + public String getDsl() { + return dsl; + } + + public void setDsl(String dsl) { + this.dsl = dsl; + } + + } diff --git a/common/src/main/java/org/onap/so/client/aai/entities/DSLQueryBuilder.java b/common/src/main/java/org/onap/so/client/aai/entities/DSLQueryBuilder.java new file mode 100644 index 0000000000..9f1dbeda8f --- /dev/null +++ b/common/src/main/java/org/onap/so/client/aai/entities/DSLQueryBuilder.java @@ -0,0 +1,111 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.client.aai.entities; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import com.google.common.base.Joiner; + + +public class DSLQueryBuilder<S, E> implements QueryStep { + + private List<QueryStep> steps = new ArrayList<>(); + + + public DSLQueryBuilder() { + + } + public DSLQueryBuilder(DSLNode node) { + steps.add(node); + } + + public DSLQueryBuilder<S, DSLNode> node(DSLNode node) { + steps.add(node); + + return (DSLQueryBuilder<S, DSLNode>) this; + } + public DSLQueryBuilder<S, E> output() { + if (steps.get(steps.size() -1) instanceof DSLNode) { + ((DSLNode)steps.get(steps.size() -1)).output(); + } + return this; + } + + public <E2> DSLQueryBuilder<S, E2> union(final DSLQueryBuilder<?, E2>... union) { + + List<DSLQueryBuilder<?, ?>> unions = Arrays.asList(union); + steps.add(() -> { + StringBuilder query = new StringBuilder(); + + query.append("> [ ").append( + Joiner.on(", ").join( + unions.stream().map(item -> item.build()).collect(Collectors.toList()))) + .append(" ]"); + return query.toString(); + }); + + return (DSLQueryBuilder<S, E2>) this; + } + + public DSLQueryBuilder<S, E> where(DSLQueryBuilder<?, ?> where) { + + steps.add(() -> { + StringBuilder query = new StringBuilder(); + query.append(where.build()).append(")"); + String result = query.toString(); + if (!result.startsWith(">")) { + result = "> " + result; + } + return "(" + result; + }); + return this; + } + + public DSLQueryBuilder<S, E> to(DSLQueryBuilder<?, ?> to) { + steps.add(() -> { + StringBuilder query = new StringBuilder(); + + query.append("> ").append(to.build()); + return query.toString(); + }); + return this; + } + + public String limit(int limit) { + return compile() + " LIMIT " + limit; + } + + @Override + public String build() { + return compile(); + } + + private String compile() { + return Joiner.on(" ").join(steps.stream().map(item -> item.build()).collect(Collectors.toList())); + } + + protected QueryStep getFirst() { + return steps.get(0); + } +} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/MsoException.java b/common/src/main/java/org/onap/so/client/aai/entities/QueryStep.java index defc904b05..b056fd0e40 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/MsoException.java +++ b/common/src/main/java/org/onap/so/client/aai/entities/QueryStep.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017 - 2019 AT&T 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. @@ -18,9 +18,11 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.apihandlerinfra; +package org.onap.so.client.aai.entities; -public enum MsoException { - ServiceException, - PolicyException, +@FunctionalInterface +public interface QueryStep { + + + public String build(); } diff --git a/common/src/main/java/org/onap/so/client/aai/entities/Relationships.java b/common/src/main/java/org/onap/so/client/aai/entities/Relationships.java index bab145b3fd..e907bc97d7 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/Relationships.java +++ b/common/src/main/java/org/onap/so/client/aai/entities/Relationships.java @@ -91,11 +91,7 @@ public class Relationships { final String relatedTo = (String)relationship.get("related-to"); if (p.test(relatedTo)) { AAIObjectType type; - try { - type = AAIObjectType.valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, relatedTo)); - } catch (IllegalArgumentException e) { - type = AAIObjectType.UNKNOWN; - } + type = AAIObjectType.fromTypeName(relatedTo); final String relatedLink = (String)relationship.get("related-link"); result.add(AAIUriFactory.createResourceFromExistingURI(type, UriBuilder.fromPath(relatedLink).build())); diff --git a/common/src/main/java/org/onap/so/client/aai/entities/__.java b/common/src/main/java/org/onap/so/client/aai/entities/__.java new file mode 100644 index 0000000000..16d6f9b27e --- /dev/null +++ b/common/src/main/java/org/onap/so/client/aai/entities/__.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.client.aai.entities; + +import org.onap.so.client.graphinventory.GraphInventoryObjectName; + +public class __ { + + protected __() { + + } + + public static <A> DSLQueryBuilder<A, A> identity() { + return new DSLQueryBuilder<>(); + } + public static <A> DSLQueryBuilder<A, A> start(DSLNode node) { + return new DSLQueryBuilder<>(node); + } + public static DSLQueryBuilder<DSLNode, DSLNode> node(GraphInventoryObjectName name) { + + return __.<DSLNode>start(new DSLNode(name)); + } + + public static DSLQueryBuilder<DSLNode, DSLNode> node(GraphInventoryObjectName name, DSLNodeKey... key) { + return __.<DSLNode>start(new DSLNode(name, key)); + } + + public static DSLNodeKey key(String keyName, String... value) { + return new DSLNodeKey(keyName, value); + } + + public static <A, B> DSLQueryBuilder<A, B> union(final DSLQueryBuilder<?, B>... traversal) { + + return __.<A>identity().union(traversal); + } + +public static <A> DSLQueryBuilder<A, A> where(DSLQueryBuilder<A, A> traversal) { + + return __.<A>identity().where(traversal); + } +} diff --git a/common/src/main/java/org/onap/so/client/aai/objects/AAIOperationalEnvironment.java b/common/src/main/java/org/onap/so/client/aai/objects/AAIOperationalEnvironment.java deleted file mode 100644 index 02d8d56867..0000000000 --- a/common/src/main/java/org/onap/so/client/aai/objects/AAIOperationalEnvironment.java +++ /dev/null @@ -1,159 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2017 AT&T 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.so.client.aai.objects; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonPropertyOrder({ -"operational-environment-id", -"operational-environment-name", -"operational-environment-type", -"operational-environment-status", -"tenant-context", -"workload-context", -"resource-version" -}) -public class AAIOperationalEnvironment { - -@JsonProperty("operational-environment-id") -private String operationalEnvironmentId; -@JsonProperty("operational-environment-name") -private String operationalEnvironmentName; -@JsonProperty("operational-environment-type") -private String operationalEnvironmentType; -@JsonProperty("operational-environment-status") -private String operationalEnvironmentStatus; -@JsonProperty("tenant-context") -private String tenantContext; -@JsonProperty("workload-context") -private String workloadContext; -@JsonProperty("resource-version") -private String resourceVersion; - -@JsonProperty("operational-environment-id") -public String getOperationalEnvironmentId() { -return operationalEnvironmentId; - } - -@JsonProperty("operational-environment-id") -public void setOperationalEnvironmentId(String operationalEnvironmentId) { -this.operationalEnvironmentId = operationalEnvironmentId; - } - -public AAIOperationalEnvironment withOperationalEnvironmentId(String operationalEnvironmentId) { -this.operationalEnvironmentId = operationalEnvironmentId; -return this; - } - -@JsonProperty("operational-environment-name") -public String getOperationalEnvironmentName() { -return operationalEnvironmentName; - } - -@JsonProperty("operational-environment-name") -public void setOperationalEnvironmentName(String operationalEnvironmentName) { -this.operationalEnvironmentName = operationalEnvironmentName; - } - -public AAIOperationalEnvironment withOperationalEnvironmentName(String operationalEnvironmentName) { -this.operationalEnvironmentName = operationalEnvironmentName; -return this; - } - -@JsonProperty("operational-environment-type") -public String getOperationalEnvironmentType() { -return operationalEnvironmentType; - } - -@JsonProperty("operational-environment-type") -public void setOperationalEnvironmentType(String operationalEnvironmentType) { -this.operationalEnvironmentType = operationalEnvironmentType; - } - -public AAIOperationalEnvironment withOperationalEnvironmentType(String operationalEnvironmentType) { -this.operationalEnvironmentType = operationalEnvironmentType; -return this; - } - -@JsonProperty("operational-environment-status") -public String getOperationalEnvironmentStatus() { -return operationalEnvironmentStatus; - } - -@JsonProperty("operational-environment-status") -public void setOperationalEnvironmentStatus(String operationalEnvironmentStatus) { -this.operationalEnvironmentStatus = operationalEnvironmentStatus; - } - -public AAIOperationalEnvironment withOperationalEnvironmentStatus(String operationalEnvironmentStatus) { -this.operationalEnvironmentStatus = operationalEnvironmentStatus; -return this; - } - -@JsonProperty("tenant-context") -public String getTenantContext() { -return tenantContext; - } - -@JsonProperty("tenant-context") -public void setTenantContext(String tenantContext) { -this.tenantContext = tenantContext; - } - -public AAIOperationalEnvironment withTenantContext(String tenantContext) { -this.tenantContext = tenantContext; -return this; - } - -@JsonProperty("workload-context") -public String getWorkloadContext() { -return workloadContext; - } - -@JsonProperty("workload-context") -public void setWorkloadContext(String workloadContext) { -this.workloadContext = workloadContext; - } - -public AAIOperationalEnvironment withWorkloadContext(String workloadContext) { -this.workloadContext = workloadContext; -return this; - } - -@JsonProperty("resource-version") -public String getResourceVersion() { -return resourceVersion; - } - -@JsonProperty("resource-version") -public void setResourceVersion(String resourceVersion) { -this.resourceVersion = resourceVersion; - } - -public AAIOperationalEnvironment withResourceVersion(String resourceVersion) { -this.resourceVersion = resourceVersion; -return this; - } - -} diff --git a/common/src/main/java/org/onap/so/client/aai/EmptyStringToNullSerializer.java b/common/src/main/java/org/onap/so/client/graphinventory/EmptyStringToNullSerializer.java index 1120ebe0b9..e21386f809 100644 --- a/common/src/main/java/org/onap/so/client/aai/EmptyStringToNullSerializer.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/EmptyStringToNullSerializer.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai; +package org.onap.so.client.graphinventory; import java.io.IOException; diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/beans/avpnbondingbeans/AVPNServiceNames.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryCommonObjectMapperPatchProvider.java index ed4e8c9305..47c9e77b84 100644 --- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/beans/avpnbondingbeans/AVPNServiceNames.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryCommonObjectMapperPatchProvider.java @@ -18,27 +18,18 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.apihandler.beans.avpnbondingbeans; +package org.onap.so.client.graphinventory; -public enum AVPNServiceNames { - AVPN_BONDING_TO_COLLABORATE("AVPNBondingToCollaborate"), - AVPN_BONDING_TO_IP_FLEX_REACH("AVPNBondingToIPFlexReach"), - AVPN_BONDING_TO_IP_TOLL_FREE("AVPNBondingToIPTollFree"); +import com.fasterxml.jackson.databind.module.SimpleModule; - private String serviceName; +public class GraphInventoryCommonObjectMapperPatchProvider extends GraphInventoryCommonObjectMapperProvider { - AVPNServiceNames(String serviceName){ - this.serviceName=serviceName; - } - - public String getServiceName() { - return serviceName; - } - - @Override - public String toString() { - return "AVPNServiceNames{" + - "serviceName='" + serviceName + '\'' + - '}'; - } + + public GraphInventoryCommonObjectMapperPatchProvider() { + super(); + EmptyStringToNullSerializer sp = new EmptyStringToNullSerializer(); + SimpleModule emptyStringModule = new SimpleModule(); + emptyStringModule.addSerializer(String.class, sp); + mapper.registerModule(emptyStringModule); + } } diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryCommonObjectMapperProvider.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryCommonObjectMapperProvider.java new file mode 100644 index 0000000000..f9857424a2 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryCommonObjectMapperProvider.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T 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.so.client.graphinventory; + +import org.onap.so.client.policy.CommonObjectMapperProvider; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.AnnotationIntrospector; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; +import com.fasterxml.jackson.databind.type.TypeFactory; +import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; + +public class GraphInventoryCommonObjectMapperProvider extends CommonObjectMapperProvider { + + public GraphInventoryCommonObjectMapperProvider() { + mapper = new ObjectMapper(); + mapper.setSerializationInclusion(Include.NON_NULL); + mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); + mapper.enable(MapperFeature.USE_ANNOTATIONS); + mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false); + mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + AnnotationIntrospector aiJaxb = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()); + AnnotationIntrospector aiJackson = new JacksonAnnotationIntrospector(); + // first Jaxb, second Jackson annotations + mapper.setAnnotationIntrospector(AnnotationIntrospector.pair(aiJaxb, aiJackson)); + } + +} diff --git a/common/src/main/java/org/onap/so/client/aai/AAIPatchConverter.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryPatchConverter.java index 6ccb592409..00e597b189 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIPatchConverter.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryPatchConverter.java @@ -18,29 +18,31 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai; +package org.onap.so.client.graphinventory; import java.util.List; import java.util.Map; import java.util.regex.Pattern; +import org.onap.so.client.aai.AAICommonObjectMapperPatchProvider; +import org.onap.so.client.aai.AAICommonObjectMapperProvider; import org.onap.so.client.graphinventory.exceptions.GraphInventoryPatchDepthExceededException; import org.onap.so.jsonpath.JsonPathUtil; import com.fasterxml.jackson.core.JsonProcessingException; -public class AAIPatchConverter { +public class GraphInventoryPatchConverter { private static final AAICommonObjectMapperProvider standardProvider = new AAICommonObjectMapperProvider(); private static final AAICommonObjectMapperPatchProvider patchProvider = new AAICommonObjectMapperPatchProvider(); private static final Pattern LOCATE_COMPLEX_OBJECT = Pattern.compile("^((?!relationship-list).)+?\\['[^\\[\\]]+?'\\]$"); - protected String convertPatchFormat(Object obj) { + public String convertPatchFormat(Object obj) { return validatePatchObject(marshallObjectToPatchFormat(obj)); } - protected String validatePatchObject(String payload) { + public String validatePatchObject(String payload) { if (hasComplexObject(payload)) { throw new GraphInventoryPatchDepthExceededException(payload); } diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryResourcesClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryResourcesClient.java new file mode 100644 index 0000000000..7fbe286b98 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryResourcesClient.java @@ -0,0 +1,147 @@ +package org.onap.so.client.graphinventory; + +import java.util.Optional; + +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.Response; + +import org.onap.so.client.RestProperties; +import org.onap.so.client.graphinventory.entities.GraphInventoryEdgeLabel; +import org.onap.so.client.graphinventory.entities.GraphInventoryResultWrapper; +import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; + +public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryUri, EdgeLabel extends GraphInventoryEdgeLabel, Wrapper extends GraphInventoryResultWrapper, TransactionalClient, SingleTransactionClient> { + + /** + * creates a new object in GraphInventory + * + * @param obj - can be any object which will marshal into a valid GraphInventory payload + * @param uri + * @return + */ + void create(Uri uri, Object obj); + + /** + * creates a new object in GraphInventory with no payload body + * + * @param uri + * @return + */ + void createEmpty(Uri uri); + + /** + * returns false if the object does not exist in GraphInventory + * + * @param uri + * @return + */ + boolean exists(Uri uri); + + /** + * Adds a relationship between two objects in GraphInventory + * @param uriA + * @param uriB + * @return + */ + void connect(Uri uriA, Uri uriB); + + /** + * Adds a relationship between two objects in GraphInventory + * with a given edge label + * @param uriA + * @param uriB + * @param edge label + * @return + */ + void connect(Uri uriA, Uri uriB, EdgeLabel label); + + /** + * Removes relationship from two objects in GraphInventory + * + * @param uriA + * @param uriB + * @return + */ + void disconnect(Uri uriA, Uri uriB); + + /** + * Deletes object from GraphInventory. Automatically handles resource-version. + * + * @param uri + * @return + */ + void delete(Uri uri); + + /** + * @param obj - can be any object which will marshal into a valid GraphInventory payload + * @param uri + * @return + */ + void update(Uri uri, Object obj); + + /** + * Retrieves an object from GraphInventory and unmarshalls it into the Class specified + * @param clazz + * @param uri + * @return + */ + <T> Optional<T> get(Class<T> clazz, Uri uri); + + /** + * Retrieves an object from GraphInventory and returns complete response + * @param uri + * @return + */ + Response getFullResponse(Uri uri); + + /** + * Retrieves an object from GraphInventory and automatically unmarshalls it into a Map or List + * @param resultClass + * @param uri + * @return + */ + <T> Optional<T> get(GenericType<T> resultClass, Uri uri); + + /** + * Retrieves an object from GraphInventory wrapped in a helper class which offer additional features + * + * @param uri + * @return + */ + Wrapper get(Uri uri); + + /** + * Retrieves an object from GraphInventory wrapped in a helper class which offer additional features + * If the object cannot be found in GraphInventory the method will throw the runtime exception + * included as an argument + * @param uri + * @return + */ + Wrapper get(Uri uri, Class<? extends RuntimeException> c); + + /** + * Will automatically create the object if it does not exist + * + * @param obj - Optional object which serializes to a valid GraphInventory payload + * @param uri + * @return + */ + Self createIfNotExists(Uri uri, Optional<Object> obj); + + /** + * Starts a transaction which encloses multiple GraphInventory mutations + * + * @return + */ + TransactionalClient beginTransaction(); + + /** + * Starts a transaction groups multiple GraphInventory mutations + * + * @return + */ + SingleTransactionClient beginSingleTransaction(); + + <T extends RestProperties> T getRestProperties(); + +}
\ No newline at end of file diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventorySingleTransactionClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventorySingleTransactionClient.java new file mode 100644 index 0000000000..e1aa2252d9 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventorySingleTransactionClient.java @@ -0,0 +1,87 @@ +package org.onap.so.client.graphinventory; + +import java.util.List; + +import org.onap.so.client.graphinventory.entities.GraphInventoryEdgeLabel; +import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; +import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; + +public interface GraphInventorySingleTransactionClient<Self, Uri extends GraphInventoryUri, EdgeLabel extends GraphInventoryEdgeLabel> { + + /** + * creates a new object in A&AI + * + * @param obj - can be any object which will marshal into a valid A&AI payload + * @param uri + * @return + */ + Self create(Uri uri, Object obj); + + /** + * creates a new object in A&AI with no payload body + * + * @param uri + * @return + */ + Self createEmpty(Uri uri); + + /** + * Adds a relationship between two objects in A&AI + * @param uriA + * @param uriB + * @return + */ + Self connect(Uri uriA, Uri uriB); + + /** + * relationship between multiple objects in A&AI - connects A to all objects specified in list + * + * @param uriA + * @param uris + * @return + */ + Self connect(Uri uriA, List<Uri> uris); + + Self connect(Uri uriA, Uri uriB, EdgeLabel label); + + Self connect(Uri uriA, List<Uri> uris, EdgeLabel label); + + /** + * Removes relationship from two objects in A&AI + * + * @param uriA + * @param uriB + * @return + */ + Self disconnect(Uri uriA, Uri uriB); + + /** + * Removes relationship from multiple objects - disconnects A from all objects specified in list + * @param uriA + * @param uris + * @return + */ + Self disconnect(Uri uriA, List<Uri> uris); + + /** + * Deletes object from A&AI. Automatically handles resource-version. + * + * @param uri + * @return + */ + Self delete(Uri uri); + + /** + * @param obj - can be any object which will marshal into a valid A&AI payload + * @param uri + * @return + */ + Self update(Uri uri, Object obj); + + /** + * Executes all created transactions in A&AI + * @throws BulkProcessFailed + */ + void execute() throws BulkProcessFailed; + +}
\ No newline at end of file diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionalClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionalClient.java new file mode 100644 index 0000000000..a7362c85da --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionalClient.java @@ -0,0 +1,94 @@ +package org.onap.so.client.graphinventory; + +import java.util.List; + +import org.onap.so.client.graphinventory.entities.GraphInventoryEdgeLabel; +import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; +import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; + +public interface GraphInventoryTransactionalClient<Self, Uri extends GraphInventoryUri, EdgeLabel extends GraphInventoryEdgeLabel> { + + /** + * adds an additional transaction and closes the previous transaction + * + * @return Self + */ + Self beginNewTransaction(); + + /** + * creates a new object in A&AI + * + * @param obj - can be any object which will marshal into a valid A&AI payload + * @param uri + * @return + */ + Self create(Uri uri, Object obj); + + /** + * creates a new object in A&AI with no payload body + * + * @param uri + * @return + */ + Self createEmpty(Uri uri); + + /** + * Adds a relationship between two objects in A&AI + * @param uriA + * @param uriB + * @return + */ + Self connect(Uri uriA, Uri uriB); + + /** + * relationship between multiple objects in A&AI - connects A to all objects specified in list + * + * @param uriA + * @param uris + * @return + */ + Self connect(Uri uriA, List<Uri> uris); + + Self connect(Uri uriA, Uri uriB, EdgeLabel label); + + Self connect(Uri uriA, List<Uri> uris, EdgeLabel label); + + /** + * Removes relationship from two objects in A&AI + * + * @param uriA + * @param uriB + * @return + */ + Self disconnect(Uri uriA, Uri uriB); + + /** + * Removes relationship from multiple objects - disconnects A from all objects specified in list + * @param uriA + * @param uris + * @return + */ + Self disconnect(Uri uriA, List<Uri> uris); + + /** + * Deletes object from A&AI. Automatically handles resource-version. + * + * @param uri + * @return + */ + Self delete(Uri uri); + + /** + * @param obj - can be any object which will marshal into a valid A&AI payload + * @param uri + * @return + */ + Self update(Uri uri, Object obj); + + /** + * Executes all created transactions in A&AI + * @throws BulkProcessFailed + */ + void execute() throws BulkProcessFailed; + +}
\ No newline at end of file diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java new file mode 100644 index 0000000000..cc1ce0063b --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java @@ -0,0 +1,117 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T 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.so.client.graphinventory.entities; + +import java.io.IOException; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import org.onap.so.client.aai.AAICommonObjectMapperProvider; +import org.onap.so.client.aai.entities.Relationships; +import org.onap.so.jsonpath.JsonPathUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class GraphInventoryResultWrapper implements Serializable { + + private static final long serialVersionUID = 5895841925807816727L; + protected final String jsonBody; + protected final ObjectMapper mapper; + private final transient Logger logger; + + protected GraphInventoryResultWrapper(String json, Logger logger) { + this.jsonBody = json; + this.mapper = new AAICommonObjectMapperProvider().getMapper(); + this.logger = logger; + } + + protected GraphInventoryResultWrapper(Object aaiObject, Logger logger) { + this.mapper = new AAICommonObjectMapperProvider().getMapper(); + this.jsonBody = mapObjectToString(aaiObject); + this.logger = logger; + } + + protected String mapObjectToString(Object aaiObject) { + try { + return mapper.writeValueAsString(aaiObject); + } catch (JsonProcessingException e) { + logger.warn("could not parse object into json - defaulting to {}"); + return "{}"; + } + } + public Optional<Relationships> getRelationships() { + final String path = "$.relationship-list"; + if (isEmpty()) { + return Optional.empty(); + } + Optional<String> result = JsonPathUtil.getInstance().locateResult(jsonBody, path); + if (result.isPresent()) { + return Optional.of(new Relationships(result.get())); + } else { + return Optional.empty(); + } + } + + public String getJson() { + if(jsonBody == null) { + return "{}"; + } else { + return jsonBody; + } + } + + public Map<String, Object> asMap() { + if (isEmpty()) { + return new HashMap<>(); + } + try { + return mapper.readValue(this.jsonBody, new TypeReference<Map<String, Object>>(){}); + } catch (IOException e) { + return new HashMap<>(); + } + } + + public <T> Optional<T> asBean(Class<T> clazz) { + if (isEmpty()) { + return Optional.empty(); + } + try { + return Optional.of(mapper.readValue(this.jsonBody, clazz)); + } catch (IOException e) { + return Optional.empty(); + } + } + + public boolean isEmpty() { + return jsonBody == null; + } + @Override + public String toString() { + return this.getJson(); + } + +} diff --git a/common/src/main/java/org/onap/so/client/graphinventory/exceptions/IncorrectNumberOfUriKeys.java b/common/src/main/java/org/onap/so/client/graphinventory/exceptions/IncorrectNumberOfUriKeys.java index c94e561274..121708fc46 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/exceptions/IncorrectNumberOfUriKeys.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/exceptions/IncorrectNumberOfUriKeys.java @@ -1,3 +1,23 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.client.graphinventory.exceptions; public class IncorrectNumberOfUriKeys extends RuntimeException { diff --git a/common/src/main/resources/dmaap/default-consumer.properties b/common/src/main/resources/dmaap/default-consumer.properties index f19b64242d..3f492e1d33 100644 --- a/common/src/main/resources/dmaap/default-consumer.properties +++ b/common/src/main/resources/dmaap/default-consumer.properties @@ -16,6 +16,7 @@ maxBatchSize=100 maxAgeMs=250 group=MSO id=dev +timeout=60000 AFT_DME2_EXCHANGE_REQUEST_HANDLERS=com.att.nsa.test.PreferredRouteRequestHandler AFT_DME2_EXCHANGE_REPLY_HANDLERS=com.att.nsa.test.PreferredRouteReplyHandler AFT_DME2_REQ_TRACE_ON=true diff --git a/common/src/test/java/org/onap/so/BeansTest.java b/common/src/test/java/org/onap/so/BeansTest.java index 2e825cf8c7..54cbced563 100644 --- a/common/src/test/java/org/onap/so/BeansTest.java +++ b/common/src/test/java/org/onap/so/BeansTest.java @@ -63,7 +63,6 @@ public class BeansTest { @Test public void pojoStructure() { - test("org.onap.so.client.aai.objects"); test("org.onap.so.client.policy.entities"); test("org.onap.so.client.grm.beans"); test("org.onap.so.client.ruby.beans"); diff --git a/common/src/test/java/org/onap/so/client/aai/AAIObjectTypeTest.java b/common/src/test/java/org/onap/so/client/aai/AAIObjectTypeTest.java index ea842719e8..d4eaf0873b 100644 --- a/common/src/test/java/org/onap/so/client/aai/AAIObjectTypeTest.java +++ b/common/src/test/java/org/onap/so/client/aai/AAIObjectTypeTest.java @@ -28,6 +28,20 @@ import org.onap.so.client.aai.entities.uri.AAIUriFactory; public class AAIObjectTypeTest { + + @Test + public void fromTypeNameTest() throws IllegalArgumentException, IllegalAccessException, InstantiationException { + AAIObjectType type = AAIObjectType.fromTypeName("allotted-resource"); + assertEquals("allotted-resource", type.typeName()); + + } + + @Test + public void customTypeTest() throws IllegalArgumentException, IllegalAccessException, InstantiationException { + AAIObjectType type = AAIObjectType.fromTypeName("my-custom-name"); + assertEquals("my-custom-name", type.typeName()); + + } @Test public void verifyDefaultCase() { assertEquals("default removed for tenant", "tenant", AAIObjectType.DEFAULT_TENANT.typeName()); diff --git a/common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java b/common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java index f4b6141b0a..43616ba0c2 100644 --- a/common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java +++ b/common/src/test/java/org/onap/so/client/aai/AAIQueryClientTest.java @@ -21,7 +21,7 @@ package org.onap.so.client.aai; import static org.junit.Assert.assertNotNull; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; diff --git a/common/src/test/java/org/onap/so/client/aai/AAIRestClientTest.java b/common/src/test/java/org/onap/so/client/aai/AAIRestClientTest.java index 6abeea9d9b..95b30f934b 100644 --- a/common/src/test/java/org/onap/so/client/aai/AAIRestClientTest.java +++ b/common/src/test/java/org/onap/so/client/aai/AAIRestClientTest.java @@ -22,7 +22,7 @@ package org.onap.so.client.aai; import static org.hamcrest.CoreMatchers.containsString; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -41,6 +41,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.onap.so.client.RestClientSSL; +import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; import org.onap.so.client.graphinventory.exceptions.GraphInventoryPatchDepthExceededException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -68,7 +69,7 @@ public class AAIRestClientTest { public void verifyPatchValidation() throws URISyntaxException { AAIRestClient client = new AAIRestClient(props, new URI("")); AAIRestClient spy = spy(client); - AAIPatchConverter patchValidatorMock = mock(AAIPatchConverter.class); + GraphInventoryPatchConverter patchValidatorMock = mock(GraphInventoryPatchConverter.class); doReturn(patchValidatorMock).when(spy).getPatchConverter(); String payload = "{}"; doReturn(Response.ok().build()).when(spy).method(eq("PATCH"), any()); diff --git a/common/src/test/java/org/onap/so/client/aai/AAISingleTransactionClientTest.java b/common/src/test/java/org/onap/so/client/aai/AAISingleTransactionClientTest.java index 428fa276db..27637126c6 100644 --- a/common/src/test/java/org/onap/so/client/aai/AAISingleTransactionClientTest.java +++ b/common/src/test/java/org/onap/so/client/aai/AAISingleTransactionClientTest.java @@ -45,6 +45,7 @@ import org.onap.so.client.aai.entities.singletransaction.SingleTransactionRespon import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; import org.onap.so.client.defaultproperties.DefaultAAIPropertiesImpl; +import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; import org.skyscreamer.jsonassert.JSONAssert; import com.fasterxml.jackson.core.JsonParseException; @@ -117,7 +118,7 @@ public class AAISingleTransactionClientTest { @Test public void confirmPatchFormat() { AAISingleTransactionClient singleTransaction = spy(new AAISingleTransactionClient(AAIVersion.LATEST)); - AAIPatchConverter mock = mock(AAIPatchConverter.class); + GraphInventoryPatchConverter mock = mock(GraphInventoryPatchConverter.class); doReturn(mock).when(singleTransaction).getPatchConverter(); singleTransaction.update(uriA, "{}"); verify(mock, times(1)).convertPatchFormat(any()); diff --git a/common/src/test/java/org/onap/so/client/aai/AAITransactionalClientTest.java b/common/src/test/java/org/onap/so/client/aai/AAITransactionalClientTest.java index 621375882b..342e3b1aa4 100644 --- a/common/src/test/java/org/onap/so/client/aai/AAITransactionalClientTest.java +++ b/common/src/test/java/org/onap/so/client/aai/AAITransactionalClientTest.java @@ -43,6 +43,7 @@ import org.onap.aai.domain.yang.Relationship; import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; import org.onap.so.client.defaultproperties.DefaultAAIPropertiesImpl; +import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.type.TypeReference; @@ -143,7 +144,7 @@ public class AAITransactionalClientTest { @Test public void confirmPatchFormat() { AAITransactionalClient client = spy(new AAITransactionalClient(AAIVersion.LATEST)); - AAIPatchConverter mock = mock(AAIPatchConverter.class); + GraphInventoryPatchConverter mock = mock(GraphInventoryPatchConverter.class); doReturn(mock).when(client).getPatchConverter(); client.update(uriA, "{}"); verify(mock, times(1)).convertPatchFormat(any()); diff --git a/common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java b/common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java new file mode 100644 index 0000000000..e66f43fa5f --- /dev/null +++ b/common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java @@ -0,0 +1,83 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.client.aai; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.onap.so.client.aai.entities.DSLNode; +import org.onap.so.client.aai.entities.DSLQueryBuilder; +import org.onap.so.client.aai.entities.__; + +public class DSLQueryBuilderTest { + + + @Test + public void whereTest() { + DSLQueryBuilder<DSLNode, DSLNode> builder = new DSLQueryBuilder<>(new DSLNode(AAIObjectType.CLOUD_REGION, + __.key("cloud-owner", "att-nc"), + __.key("cloud-region-id", "test"))); + + builder.to(__.node(AAIObjectType.VLAN_TAG)).where( + __.node(AAIObjectType.OWNING_ENTITY, + __.key("owning-entity-name", "name") + ) + ).to(__.node(AAIObjectType.VLAN_TAG, __.key("vlan-id-outer", "108")).output()); + + assertEquals("cloud-region('cloud-owner', 'att-nc')('cloud-region-id', 'test') > " + + "vlan-tag (> owning-entity('owning-entity-name', 'name')) > " + + "vlan-tag*('vlan-id-outer', '108')", builder.build()); + } + + @Test + public void unionTest() { + DSLQueryBuilder<DSLNode, DSLNode> builder = new DSLQueryBuilder<>(new DSLNode(AAIObjectType.GENERIC_VNF, + __.key("vnf-id", "vnfId")).output()); + + builder.union(__.node(AAIObjectType.PSERVER).output().to(__.node(AAIObjectType.COMPLEX).output()), + __.node(AAIObjectType.VSERVER).to(__.node(AAIObjectType.PSERVER).output().to(__.node(AAIObjectType.COMPLEX).output()))); + + assertEquals("generic-vnf*('vnf-id', 'vnfId') > " + "[ pserver* > complex*, " + + "vserver > pserver* > complex* ]", builder.build()); + } + + @Test + public void whereUnionTest() { + DSLQueryBuilder<DSLNode, DSLNode> builder = new DSLQueryBuilder<>(new DSLNode(AAIObjectType.GENERIC_VNF, + __.key("vnf-id", "vnfId")).output()); + + builder.where( + __.union( + __.node(AAIObjectType.PSERVER, __.key("hostname", "hostname1")), + __.node(AAIObjectType.VSERVER).to(__.node(AAIObjectType.PSERVER, __.key("hostname", "hostname1"))))); + + assertEquals("generic-vnf*('vnf-id', 'vnfId') (> [ pserver('hostname', 'hostname1'), " + + "vserver > pserver('hostname', 'hostname1') ])", builder.build()); + } + + @Test + public void notNullTest() { + DSLQueryBuilder<DSLNode, DSLNode> builder = new DSLQueryBuilder<>(new DSLNode(AAIObjectType.CLOUD_REGION, + __.key("cloud-owner", "", "null").not()).output()); + + assertEquals("cloud-region* !('cloud-owner', ' ', ' null ')", builder.build()); + } +} diff --git a/common/src/test/java/org/onap/so/client/aai/entities/uri/IncorrectNumberOfUriKeysTest.java b/common/src/test/java/org/onap/so/client/aai/entities/uri/IncorrectNumberOfUriKeysTest.java index 729f0e50e9..e84326e95f 100644 --- a/common/src/test/java/org/onap/so/client/aai/entities/uri/IncorrectNumberOfUriKeysTest.java +++ b/common/src/test/java/org/onap/so/client/aai/entities/uri/IncorrectNumberOfUriKeysTest.java @@ -1,3 +1,23 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.client.aai.entities.uri; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java b/common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java index 7e70f2d5f4..6059e7bd23 100644 --- a/common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java +++ b/common/src/test/java/org/onap/so/client/aai/entities/uri/ServiceInstanceUriTest.java @@ -48,7 +48,7 @@ import javax.ws.rs.core.UriBuilder; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.mockito.Matchers; +import org.mockito.ArgumentMatchers; import org.onap.so.client.aai.AAIResourcesClient; import org.onap.so.client.aai.entities.AAIResultWrapper; import org.onap.so.client.defaultproperties.DefaultAAIPropertiesImpl; @@ -158,7 +158,7 @@ public class ServiceInstanceUriTest { ServiceInstanceUri spy = spy(instance); AAIResourcesClient mockResourcesClient = mock(AAIResourcesClient.class); AAIResultWrapper wrapper = mock(AAIResultWrapper.class); - when(mockResourcesClient.get(Matchers.<AAIResourceUri>any(AAIResourceUri.class), Matchers.<Class<NotFoundException>>any())).thenReturn(wrapper); + when(mockResourcesClient.get(ArgumentMatchers.<AAIResourceUri>any(AAIResourceUri.class), ArgumentMatchers.<Class<NotFoundException>>any())).thenReturn(wrapper); when(wrapper.getJson()).thenReturn(content); when(spy.getResourcesClient()).thenReturn(mockResourcesClient); exception.expect(GraphInventoryUriComputationException.class); diff --git a/common/src/test/java/org/onap/so/client/aai/objects/AAIOperationalEnvironmentTest.java b/common/src/test/java/org/onap/so/client/aai/objects/AAIOperationalEnvironmentTest.java deleted file mode 100644 index e2a3cbd6bd..0000000000 --- a/common/src/test/java/org/onap/so/client/aai/objects/AAIOperationalEnvironmentTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * 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.so.client.aai.objects; - -import static org.junit.Assert.*; - -import org.junit.Test; - -public class AAIOperationalEnvironmentTest { - - AAIOperationalEnvironment aaiOE =new AAIOperationalEnvironment(); - - @Test - public void test() { - aaiOE.setOperationalEnvironmentId("operationalEnvironmentId"); - aaiOE.setOperationalEnvironmentName("operationalEnvironmentName"); - aaiOE.setOperationalEnvironmentStatus("operationalEnvironmentStatus"); - aaiOE.setOperationalEnvironmentType("operationalEnvironmentType"); - aaiOE.setResourceVersion("resourceVersion"); - aaiOE.setTenantContext("tenantContext"); - aaiOE.setWorkloadContext("workloadContext"); - assertEquals(aaiOE.getOperationalEnvironmentId(),"operationalEnvironmentId"); - assertEquals(aaiOE.getOperationalEnvironmentName(),"operationalEnvironmentName"); - assertEquals(aaiOE.getOperationalEnvironmentStatus(),"operationalEnvironmentStatus"); - assertEquals(aaiOE.getOperationalEnvironmentType(),"operationalEnvironmentType"); - assertEquals(aaiOE.getResourceVersion(),"resourceVersion"); - assertEquals(aaiOE.getTenantContext(),"tenantContext"); - assertEquals(aaiOE.getWorkloadContext(),"workloadContext"); - aaiOE.withOperationalEnvironmentId("operationalEnvironmentId"); - aaiOE.withOperationalEnvironmentName("operationalEnvironmentName"); - aaiOE.withOperationalEnvironmentStatus("operationalEnvironmentStatus"); - aaiOE.withOperationalEnvironmentType("operationalEnvironmentType"); - aaiOE.withResourceVersion("resourceVersion"); - aaiOE.withTenantContext("tenantContext"); - aaiOE.withWorkloadContext("workloadContext"); - } - -} diff --git a/common/src/test/java/org/onap/so/client/aai/objects/CustomAAIObjectType.java b/common/src/test/java/org/onap/so/client/aai/objects/CustomAAIObjectType.java new file mode 100644 index 0000000000..3979902962 --- /dev/null +++ b/common/src/test/java/org/onap/so/client/aai/objects/CustomAAIObjectType.java @@ -0,0 +1,40 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T 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.so.client.aai.objects; + +import org.onap.so.client.aai.AAINamespaceConstants; +import org.onap.so.client.aai.AAIObjectType; + +public class CustomAAIObjectType extends AAIObjectType { + + private static final long serialVersionUID = 1919729212831978098L; + + public static final AAIObjectType CUSTOM = new CustomAAIObjectType(AAINamespaceConstants.NETWORK, "my-url", "my-custom-name"); + + /* Default constructor automatically called by AAIObjectType */ + public CustomAAIObjectType() { + super(); + } + protected CustomAAIObjectType(String parent, String uri, String name) { + super(parent, uri, name); + } + +} diff --git a/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java b/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java new file mode 100644 index 0000000000..f4490faacc --- /dev/null +++ b/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java @@ -0,0 +1,109 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2019 Nokia. + * ================================================================================ + * 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.so.client.adapter.rest; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.entry; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.net.URI; +import java.net.URISyntaxException; +import java.security.GeneralSecurityException; +import java.util.HashMap; +import java.util.Map; +import org.apache.commons.codec.binary.Base64; +import org.junit.Before; +import org.junit.Test; +import org.onap.so.client.policy.JettisonStyleMapperProvider; +import org.onap.so.utils.CryptoUtils; +import org.onap.so.utils.TargetEntity; + +public class AdapterRestClientTest { + + private static final String CRYPTO_KEY = "546573746F736973546573746F736973"; + private static final String INVALID_CRYPTO_KEY = "1234"; + + private Map<String, String> headerMap; + private AdapterRestProperties adapterRestPropertiesMock; + + @Before + public void setup() { + headerMap = new HashMap<>(); + adapterRestPropertiesMock = mock(AdapterRestProperties.class); + } + + @Test + public void initializeHeaderMap_success() throws URISyntaxException, GeneralSecurityException { + // given + String encyptedMessage = CryptoUtils.encrypt("testAdapter", CRYPTO_KEY); + when(adapterRestPropertiesMock.getAuth()).thenReturn(encyptedMessage); + when(adapterRestPropertiesMock.getKey()).thenReturn(CRYPTO_KEY); + AdapterRestClient testedObject = new AdapterRestClient(adapterRestPropertiesMock, new URI("")); + // when + testedObject.initializeHeaderMap(headerMap); + // then + assertThat(headerMap).containsOnly(entry("Authorization", getExpectedEncodedString(encyptedMessage))); + } + + @Test + public void initializeHeaderMap_putNullToMapWhenAuthIsNull() throws URISyntaxException { + // given + AdapterRestClient testedObject = new AdapterRestClient(adapterRestPropertiesMock, new URI("")); + // when + testedObject.initializeHeaderMap(headerMap); + // then + assertThat(headerMap).containsOnly(entry("Authorization", null)); + } + + @Test + public void initializeHeaderMap_putNullToMapWhenExOccurs() throws URISyntaxException, GeneralSecurityException { + // given + String encyptedMessage = CryptoUtils.encrypt("testAdapter", CRYPTO_KEY); + when(adapterRestPropertiesMock.getAuth()).thenReturn(encyptedMessage); + when(adapterRestPropertiesMock.getKey()).thenReturn(INVALID_CRYPTO_KEY); + AdapterRestClient testedObject = new AdapterRestClient(adapterRestPropertiesMock, new URI(""), + "accept", "contentType"); + // when + testedObject.initializeHeaderMap(headerMap); + // then + assertThat(headerMap).containsOnly(entry("Authorization", null)); + } + + @Test + public void getTargetEntity_success() throws URISyntaxException { + AdapterRestClient testedObject = new AdapterRestClient(adapterRestPropertiesMock, new URI("")); + assertThat(testedObject.getTargetEntity()).isEqualTo(TargetEntity.OPENSTACK_ADAPTER); + } + + @Test + public void getCommonObjectMapperProvider_success() throws URISyntaxException { + AdapterRestClient testedObject = new AdapterRestClient(adapterRestPropertiesMock, new URI("")); + assertThat(testedObject.getCommonObjectMapperProvider()).isInstanceOf(JettisonStyleMapperProvider.class); + } + + private String getExpectedEncodedString(String encryptedMessage) throws GeneralSecurityException { + String auth = CryptoUtils.decrypt(encryptedMessage, CRYPTO_KEY); + byte[] encoded = Base64.encodeBase64(auth.getBytes()); + String encodedString = new String(encoded); + return "Basic " + encodedString; + } +} diff --git a/common/src/test/java/org/onap/so/client/aai/AAIPatchConverterTest.java b/common/src/test/java/org/onap/so/client/graphinventory/GraphInventoryPatchConverterTest.java index 0d4490f51d..d24b3ff147 100644 --- a/common/src/test/java/org/onap/so/client/aai/AAIPatchConverterTest.java +++ b/common/src/test/java/org/onap/so/client/graphinventory/GraphInventoryPatchConverterTest.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai; +package org.onap.so.client.graphinventory; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -35,6 +35,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.onap.aai.domain.yang.GenericVnf; +import org.onap.so.client.aai.AAICommonObjectMapperProvider; +import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; @@ -42,13 +44,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; @RunWith(MockitoJUnitRunner.class) -public class AAIPatchConverterTest { +public class GraphInventoryPatchConverterTest { private ObjectMapper mapper = new AAICommonObjectMapperProvider().getMapper(); @Test public void convertObjectToPatchFormatTest() throws URISyntaxException, JsonParseException, JsonMappingException, IOException { - AAIPatchConverter validator = new AAIPatchConverter(); + GraphInventoryPatchConverter validator = new GraphInventoryPatchConverter(); GenericVnf vnf = new GenericVnf(); vnf.setIpv4Loopback0Address(""); String result = validator.marshallObjectToPatchFormat(vnf); @@ -60,7 +62,7 @@ public class AAIPatchConverterTest { @Test public void convertStringToPatchFormatTest() throws URISyntaxException, JsonParseException, JsonMappingException, IOException { - AAIPatchConverter validator = new AAIPatchConverter(); + GraphInventoryPatchConverter validator = new GraphInventoryPatchConverter(); String payload = "{\"ipv4-loopback0-address\":\"\"}"; String result = validator.marshallObjectToPatchFormat(payload); @@ -69,7 +71,7 @@ public class AAIPatchConverterTest { @Test public void convertStringToPatchFormatNull_Test() throws URISyntaxException, JsonParseException, JsonMappingException, IOException { - AAIPatchConverter validator = new AAIPatchConverter(); + GraphInventoryPatchConverter validator = new GraphInventoryPatchConverter(); String payload = "{\"ipv4-loopback0-address\": null}"; String result = validator.marshallObjectToPatchFormat(payload); System.out.println(result); @@ -78,7 +80,7 @@ public class AAIPatchConverterTest { @Test public void convertMapToPatchFormatTest() throws URISyntaxException, JsonParseException, JsonMappingException, IOException { - AAIPatchConverter validator = new AAIPatchConverter(); + GraphInventoryPatchConverter validator = new GraphInventoryPatchConverter(); HashMap<String, String> map = new HashMap<>(); map.put("ipv4-loopback0-address", ""); map.put("ipv4-loopback1-address", "192.168.1.1"); @@ -89,7 +91,7 @@ public class AAIPatchConverterTest { @Test public void hasComplexObjectTest() { - AAIPatchConverter validator = new AAIPatchConverter(); + GraphInventoryPatchConverter validator = new GraphInventoryPatchConverter(); String hasNesting = "{ \"hello\" : \"world\", \"nested\" : { \"key\" : \"value\" } }"; String noNesting = "{ \"hello\" : \"world\" }"; String arrayCase = "{ \"hello\" : \"world\", \"nestedSimple\" : [\"value1\" , \"value2\"], \"nestedComplex\" : [{\"key\" : \"value\"}]}"; diff --git a/common/src/test/resources/logback-test.xml b/common/src/test/resources/logback-test.xml index 772eeabeb6..b52e6be022 100644 --- a/common/src/test/resources/logback-test.xml +++ b/common/src/test/resources/logback-test.xml @@ -65,6 +65,10 @@ <appender-ref ref="STDOUT" /> </logger> + <logger name="org.reflections" level="ERROR" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + <root level="WARN"> <appender-ref ref="STDOUT" /> diff --git a/docs/api/SO_Interface.rst b/docs/api/SO_Interface.rst deleted file mode 100644 index 4f3d9146e4..0000000000 --- a/docs/api/SO_Interface.rst +++ /dev/null @@ -1,4479 +0,0 @@ -.. This work is licensed under a Creative Commons Attribution 4.0 International License. -.. http://creativecommons.org/licenses/by/4.0 -.. Copyright 2018 Huawei Technologies Co., Ltd. - -SO Interfaces -================================ - -.. image:: ../images/SO_1.png - -SO APIs ----------------- - -North Bound APIs ----------------- -Create service instance -++++++++++++++++++++++++ - -+--------------------+-------------------------------------+ -|Interface Definition|Description | -+====================+=====================================+ -|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6 | -+--------------------+-------------------------------------+ -|Operation Type |POST | -+--------------------+-------------------------------------+ -|Content-Type |application/json | -+--------------------+-------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestDetails |M |1 |requestDetails Object |Content of requestDetails object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+-------------------+--------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+===================+==========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|subscriberInfo |subscriberInfo Object |Content of subscriberInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestParameters |requestParameters Object |Content of requestParameters object. | -+-------------------+--------------------------+-------------------------------------------------+ -|relatedInstanceList|relatedInstanceList Object|Content of relatedInstanceList object. | -+-------------------+--------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object |Content of cloudConfiguration object. | -+-------------------+--------------------------+-------------------------------------------------+ -|project |project Object |Content of project object. | -+-------------------+--------------------------+-------------------------------------------------+ -|owningEntity |owningEntity Object |Content of owningEntity object. | -+-------------------+--------------------------+-------------------------------------------------+ -|platform |platform Object |Content of platform object. | -+-------------------+--------------------------+-------------------------------------------------+ -|lineOfBusiness |lineOfBusiness Object |Content of lineOfBusiness object. | -+-------------------+--------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelInvariantId |String |The Model Invariant Id. | -+-------------------------+------------------+-------------------------------------------------+ -|ModelNameVersionId |String |The modelname Version Id | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelVersion |String |Version of the model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelCustomization Name |String |The Model Customization name | -+-------------------------+------------------+-------------------------------------------------+ -|modelCustomizationUuid |String |The Model Customization UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelVersionId |String |The Model version id | -+-------------------------+------------------+-------------------------------------------------+ -|modelUuid |String |The Model UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInvariantUuid |String |The Model Invariant UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInstanceName |String |The Model Instance name | -+-------------------------+------------------+-------------------------------------------------+ - - -SubscriberInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|GlobalSubscriberId |String |Global customer Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|SubscriberName |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ -|billingAccountNumber |String |billingAccountNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|callbackUrl |String |callbackUrl of the request | -+-------------------------+------------------+-------------------------------------------------+ -|correlator |String |correlator of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderNumber |String |orderNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|productFamilyId |String |productFamilyId of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderVersion |String |orderVersion of the request | -+-------------------------+------------------+-------------------------------------------------+ -|instanceName |String |instanceName of the request | -+-------------------------+------------------+-------------------------------------------------+ -|suppressRollback |String |suppressRollback of the request | -+-------------------------+------------------+-------------------------------------------------+ -|requestorId |String |requestorId of the request | -+-------------------------+------------------+-------------------------------------------------+ - -RequestParameters Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|SubscriptionServiceType |String |The service type of the Subscription | -+-------------------------+------------------+-------------------------------------------------+ -|UserParams |Array |The product family Id. | -+-------------------------+------------------+-------------------------------------------------+ -|aLaCarte |Boolean | aLaCarte | -+-------------------------+------------------+-------------------------------------------------+ -|autoBuildVfModules |Boolean |autoBuildVfModules | -+-------------------------+------------------+-------------------------------------------------+ -|cascadeDelete |Boolean |cascadeDelete | -+-------------------------+------------------+-------------------------------------------------+ -|usePreload |Boolean |usePreload | -+-------------------------+------------------+-------------------------------------------------+ -|rebuildVolumeGroups |Boolean |rebuildVolumeGroups | -+-------------------------+------------------+-------------------------------------------------+ -|payload |String |payload | -+-------------------------+------------------+-------------------------------------------------+ -|controllerType |String |controllerType | -+-------------------------+------------------+-------------------------------------------------+ - -UserParams Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|name |String |Tag name of attribute | -+-------------------------+------------------+-------------------------------------------------+ -|value |String |Value of the tag | -+-------------------------+------------------+-------------------------------------------------+ - -CloudConfiguration Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|lcpCloudRegionId |String |CloudRegion Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|tenantId |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ -|aicNodeClli |String |aicNodeClli property | -+-------------------------+------------------+-------------------------------------------------+ - -Project Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|projectName |String |Name of the project | -+-------------------------+------------------+-------------------------------------------------+ - -OwningEntity Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|owningEntityId |String |owningEntityId of the owingEntity | -+-------------------------+------------------+-------------------------------------------------+ -|owningEntityName |String |owningEntityName of the owingEntity | -+-------------------------+------------------+-------------------------------------------------+ - -Platform Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|platformName |String |Platform Name | -+-------------------------+------------------+-------------------------------------------------+ - -LineOfBusiness Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|lineOfBusinessName |String |Line Of Business Name | -+-------------------------+------------------+-------------------------------------------------+ - -Delete service instance -++++++++++++++++++++++++ - -+--------------------+---------------------------------------------------------+ -|Interface Definition|Description | -+====================+=========================================================+ -|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId} | -+--------------------+---------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+---------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+---------------------------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestDetails |M |1 |requestDetails Object |Content of requestDetails object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+-------------------+-------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+===================+=========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+-------------------+-------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+-------------------+-------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelInvariantId |String |The Model Invariant Id. | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelVersion |String |Version of the model | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ - -Create Volume Group -++++++++++++++++++++++++ - -+--------------------+-------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+===========================================================================================+ -|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups | -+--------------------+-------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestDetails |M |1 |requestDetails Object |Content of requestDetails object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+-------------------+--------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+===================+==========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|subscriberInfo |subscriberInfo Object |Content of subscriberInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestParameters |requestParameters Object |Content of requestParameters object. | -+-------------------+--------------------------+-------------------------------------------------+ -|relatedInstanceList|relatedInstanceList Object|Content of relatedInstanceList object. | -+-------------------+--------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object |Content of cloudConfiguration object. | -+-------------------+--------------------------+-------------------------------------------------+ -|project |project Object |Content of project object. | -+-------------------+--------------------------+-------------------------------------------------+ -|owningEntity |owningEntity Object |Content of owningEntity object. | -+-------------------+--------------------------+-------------------------------------------------+ -|platform |platform Object |Content of platform object. | -+-------------------+--------------------------+-------------------------------------------------+ -|lineOfBusiness |lineOfBusiness Object |Content of lineOfBusiness object. | -+-------------------+--------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelInvariantId |String |The Model Invariant Id. | -+-------------------------+------------------+-------------------------------------------------+ -|ModelNameVersionId |String |The modelname Version Id | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelVersion |String |Version of the model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelCustomization Name |String |The Model Customization name | -+-------------------------+------------------+-------------------------------------------------+ -|modelCustomizationUuid |String |The Model Customization UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelVersionId |String |The Model version id | -+-------------------------+------------------+-------------------------------------------------+ -|modelUuid |String |The Model UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInvariantUuid |String |The Model Invariant UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInstanceName |String |The Model Instance name | -+-------------------------+------------------+-------------------------------------------------+ - -CloudConfiguration Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|lcpCloudRegionId |String |CloudRegion Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|tenantId |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ -|aicNodeClli |String |aicNodeClli property | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ -|billingAccountNumber |String |billingAccountNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|callbackUrl |String |callbackUrl of the request | -+-------------------------+------------------+-------------------------------------------------+ -|correlator |String |correlator of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderNumber |String |orderNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|productFamilyId |String |productFamilyId of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderVersion |String |orderVersion of the request | -+-------------------------+------------------+-------------------------------------------------+ -|instanceName |String |instanceName of the request | -+-------------------------+------------------+-------------------------------------------------+ -|suppressRollback |String |suppressRollback of the request | -+-------------------------+------------------+-------------------------------------------------+ -|requestorId |String |requestorId of the request | -+-------------------------+------------------+-------------------------------------------------+ - -relatedInstance List - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|relatedInstance |Object |relatedInstance Object | -+-------------------------+------------------+-------------------------------------------------+ - -relatedInstance List - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|instanceId |String |instanceId | -+-------------------------+------------------+-------------------------------------------------+ -|modelInfo |Object |Content of modelInfo object. | -+-------------------------+------------------+-------------------------------------------------+ - -Delete Volume Group -++++++++++++++++++++++++ - -+--------------------+---------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=====================================================================================================================+ -|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volume-groupinstance-id} | -+--------------------+---------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+---------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+---------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestDetails |M |1 |requestDetails Object |Content of requestDetails object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+---------------------+-------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=====================+=========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+---------------------+-------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object|Content of cloudConfiguration object. | -+---------------------+-------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+---------------------+-------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ - -CloudConfiguration Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|lcpCloudRegionId |String |CloudRegion Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|tenantId |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ - -Create VF Module -+++++++++++++++++ - -+--------------------+----------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+========================================================================================+ -|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules | -+--------------------+----------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+----------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+----------------------------------------------------------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestDetails |M |1 |requestDetails Object |Content of requestDetails object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+---------------------+-------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=====================+=========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+---------------------+-------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object|Content of cloudConfiguration object. | -+---------------------+-------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+---------------------+-------------------------+-------------------------------------------------+ -|relatedInstanceList |List |Content of relatedInstanceList. | -+---------------------+-------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelInvariantId |String |The Model Invariant Id. | -+-------------------------+------------------+-------------------------------------------------+ -|ModelNameVersionId |String |The modelname Version Id | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelVersion |String |Version of the model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelCustomization Name |String |The Model Customization name | -+-------------------------+------------------+-------------------------------------------------+ - -CloudConfiguration Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|lcpCloudRegionId |String |CloudRegion Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|tenantId |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|InstanceName |String |The instance Name | -+-------------------------+------------------+-------------------------------------------------+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ -|SuppressRollback |Boolean |SuppressRollback | -+-------------------------+------------------+-------------------------------------------------+ - -relatedInstance List - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|relatedInstance |Object |relatedInstance Object | -+-------------------------+------------------+-------------------------------------------------+ - -relatedInstance List - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|instanceId |String |instanceId | -+-------------------------+------------------+-------------------------------------------------+ -|modelInfo |Object |Content of modelInfo object. | -+-------------------------+------------------+-------------------------------------------------+ -|instanceName |String |Name of the instance | -+-------------------------+------------------+-------------------------------------------------+ - -Delete VF Module -++++++++++++++++++++++++ - -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================================================================+ -|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleinstance-id} | -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+--------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestDetails |M |1 |requestDetails Object |Content of requestDetails object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+---------------------+-------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=====================+=========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+---------------------+-------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object|Content of cloudConfiguration object. | -+---------------------+-------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+---------------------+-------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelInvariantId |String |The Model Invariant Id. | -+-------------------------+------------------+-------------------------------------------------+ -|ModelNameVersionId |String |The modelname Version Id | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelVersion |String |Version of the model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelCustomization Name |String |The Model Customization name | -+-------------------------+------------------+-------------------------------------------------+ - -CloudConfiguration Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|lcpCloudRegionId |String |CloudRegion Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|tenantId |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ - -Create VNF -+++++++++++++++ - -+--------------------+--------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================+ -|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs | -+--------------------+--------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+--------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+--------------------------------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestDetails |M |1 |requestDetails Object |Content of requestDetails object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+-------------------+--------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+===================+==========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|subscriberInfo |subscriberInfo Object |Content of subscriberInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestParameters |requestParameters Object |Content of requestParameters object. | -+-------------------+--------------------------+-------------------------------------------------+ -|relatedInstanceList|relatedInstanceList Object|Content of relatedInstanceList object. | -+-------------------+--------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object |Content of cloudConfiguration object. | -+-------------------+--------------------------+-------------------------------------------------+ -|project |project Object |Content of project object. | -+-------------------+--------------------------+-------------------------------------------------+ -|owningEntity |owningEntity Object |Content of owningEntity object. | -+-------------------+--------------------------+-------------------------------------------------+ -|platform |platform Object |Content of platform object. | -+-------------------+--------------------------+-------------------------------------------------+ -|lineOfBusiness |lineOfBusiness Object |Content of lineOfBusiness object. | -+-------------------+--------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelInvariantId |String |The Model Invariant Id. | -+-------------------------+------------------+-------------------------------------------------+ -|ModelNameVersionId |String |The modelname Version Id | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelVersion |String |Version of the model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelCustomization Name |String |The Model Customization name | -+-------------------------+------------------+-------------------------------------------------+ -|modelCustomizationUuid |String |The Model Customization UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelVersionId |String |The Model version id | -+-------------------------+------------------+-------------------------------------------------+ -|modelUuid |String |The Model UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInvariantUuid |String |The Model Invariant UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInstanceName |String |The Model Instance name | -+-------------------------+------------------+-------------------------------------------------+ - -CloudConfiguration Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|lcpCloudRegionId |String |CloudRegion Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|tenantId |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ -|billingAccountNumber |String |billingAccountNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|callbackUrl |String |callbackUrl of the request | -+-------------------------+------------------+-------------------------------------------------+ -|correlator |String |correlator of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderNumber |String |orderNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|productFamilyId |String |productFamilyId of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderVersion |String |orderVersion of the request | -+-------------------------+------------------+-------------------------------------------------+ -|instanceName |String |instanceName of the request | -+-------------------------+------------------+-------------------------------------------------+ -|suppressRollback |String |suppressRollback of the request | -+-------------------------+------------------+-------------------------------------------------+ -|requestorId |String |requestorId of the request | -+-------------------------+------------------+-------------------------------------------------+ - -relatedInstance List - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|relatedInstance |Object |relatedInstance Object | -+-------------------------+------------------+-------------------------------------------------+ - -relatedInstance List - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|instanceId |String |instanceId | -+-------------------------+------------------+-------------------------------------------------+ -|modelInfo |Object |Content of modelInfo object. | -+-------------------------+------------------+-------------------------------------------------+ - -RequestParameters Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|UserParams |Array |The product family Id. | -+-------------------------+------------------+-------------------------------------------------+ - -UserParams Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|name |String |Tag name of attribute | -+-------------------------+------------------+-------------------------------------------------+ -|value |String |Value of the tag | -+-------------------------+------------------+-------------------------------------------------+ - -Delete VNF -+++++++++++++++ - -+--------------------+------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================================+ -|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId} | -+--------------------+------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+------------------------------------------------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestDetails |M |1 |requestDetails Object |Content of requestDetails object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+---------------------+-------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=====================+=========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+---------------------+-------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object|Content of cloudConfiguration object. | -+---------------------+-------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+---------------------+-------------------------+-------------------------------------------------+ -|requestParameters |requestParameters Object |Content of requestParameters object. | -+---------------------+-------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ - -CloudConfiguration Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|lcpCloudRegionId |String |CloudRegion Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|tenantId |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ - -RequestParameters Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|UserParams |Array |The product family Id. | -+-------------------------+------------------+-------------------------------------------------+ - -UserParams Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|name |String |Tag name of attribute | -+-------------------------+------------------+-------------------------------------------------+ -|value |String |Value of the tag | -+-------------------------+------------------+-------------------------------------------------+ - -GET Orchestration Request -++++++++++++++++++++++++++ - -+--------------------+--------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================+ -|URI |/onap/so/infra/serviceInstantiation/orchestrationRequests/v6/{request-id} | -+--------------------+--------------------------------------------------------------+ -|Operation Type |GET | -+--------------------+--------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+--------------------------------------------------------------+ - -Response Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|request |M |1 |request Object |Content of request object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -Request Object - -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+===================+=========+===========+==========================+===========================================+ -|requestId |M |1 |String |Request Id | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|startTime |M |1 |request Object |Start time. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|requestScope |M |1 |request Object |Scope of the request. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|requestType |M |1 |request Object |Type of the request. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|requestDetails |M |1 |requestDetails Object |Type of the request. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|requestStatus |M |1 |requestStatus Object |Type of the request. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+-------------------+--------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+===================+==========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|subscriberInfo |subscriberInfo Object |Content of subscriberInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestParameters |requestParameters Object |Content of requestParameters object. | -+-------------------+--------------------------+-------------------------------------------------+ -|relatedInstanceList|relatedInstanceList Object|Content of relatedInstanceList object. | -+-------------------+--------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object |Content of cloudConfiguration object. | -+-------------------+--------------------------+-------------------------------------------------+ -|project |project Object |Content of project object. | -+-------------------+--------------------------+-------------------------------------------------+ -|owningEntity |owningEntity Object |Content of owningEntity object. | -+-------------------+--------------------------+-------------------------------------------------+ -|platform |platform Object |Content of platform object. | -+-------------------+--------------------------+-------------------------------------------------+ -|lineOfBusiness |lineOfBusiness Object |Content of lineOfBusiness object. | -+-------------------+--------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelInvariantId |String |The Model Invariant Id. | -+-------------------------+------------------+-------------------------------------------------+ -|ModelNameVersionId |String |The modelname Version Id | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelVersion |String |Version of the model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelCustomization Name |String |The Model Customization name | -+-------------------------+------------------+-------------------------------------------------+ -|modelCustomizationUuid |String |The Model Customization UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelVersionId |String |The Model version id | -+-------------------------+------------------+-------------------------------------------------+ -|modelUuid |String |The Model UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInvariantUuid |String |The Model Invariant UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInstanceName |String |The Model Instance name | -+-------------------------+------------------+-------------------------------------------------+ - -SubscriberInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|GlobalSubscriberId |String |Global customer Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|SubscriberName |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ -|billingAccountNumber |String |billingAccountNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|callbackUrl |String |callbackUrl of the request | -+-------------------------+------------------+-------------------------------------------------+ -|correlator |String |correlator of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderNumber |String |orderNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|productFamilyId |String |productFamilyId of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderVersion |String |orderVersion of the request | -+-------------------------+------------------+-------------------------------------------------+ -|instanceName |String |instanceName of the request | -+-------------------------+------------------+-------------------------------------------------+ -|suppressRollback |String |suppressRollback of the request | -+-------------------------+------------------+-------------------------------------------------+ -|requestorId |String |requestorId of the request | -+-------------------------+------------------+-------------------------------------------------+ - -RequestParameters Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|SubscriptionServiceType |String |The service type of the Subscription | -+-------------------------+------------------+-------------------------------------------------+ - -RequestStatus Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|finishTime |String |Time | -+-------------------------+------------------+-------------------------------------------------+ -|requestState |String |state of the request | -+-------------------------+------------------+-------------------------------------------------+ -|statusMessage |String |statusMessage | -+-------------------------+------------------+-------------------------------------------------+ -|percentProgress |String |percentage of progress | -+-------------------------+------------------+-------------------------------------------------+ - -GET Orchestration Requests -++++++++++++++++++++++++++ - -+--------------------+--------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================+ -|URI |/onap/so/infra/serviceInstantiation/orchestrationRequests/v6 | -+--------------------+--------------------------------------------------------------+ -|Operation Type |GET | -+--------------------+--------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+--------------------------------------------------------------+ - -Response Body: - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|requestList |M |1 |Array |Content of request List. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestList : - -+----------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+===========================================+ -|request |M |1 |request Object |Content of request object. | -+----------------+---------+-----------+--------------------------+-------------------------------------------+ - -Request Object - -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+===================+=========+===========+==========================+===========================================+ -|requestId |M |1 |String |Request Id. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|startTime |M |1 |request Object |Start time. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|requestScope |M |1 |request Object |Scope of the request. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|requestType |M |1 |request Object |Type of the request. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|requestDetails |M |1 |requestDetails Object |Type of the request. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ -|requestStatus |M |1 |requestStatus Object |Type of the request. | -+-------------------+---------+-----------+--------------------------+-------------------------------------------+ - -RequestDetails Object - -+-------------------+--------------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+===================+==========================+=================================================+ -|modelInfo |modelInfo Object |Content of modelInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|subscriberInfo |subscriberInfo Object |Content of subscriberInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestInfo |requestInfo Object |Content of requestInfo object. | -+-------------------+--------------------------+-------------------------------------------------+ -|requestParameters |requestParameters Object |Content of requestParameters object. | -+-------------------+--------------------------+-------------------------------------------------+ -|relatedInstanceList|relatedInstanceList Object|Content of relatedInstanceList object. | -+-------------------+--------------------------+-------------------------------------------------+ -|cloudConfiguration |cloudConfiguration Object |Content of cloudConfiguration object. | -+-------------------+--------------------------+-------------------------------------------------+ -|project |project Object |Content of project object. | -+-------------------+--------------------------+-------------------------------------------------+ -|owningEntity |owningEntity Object |Content of owningEntity object. | -+-------------------+--------------------------+-------------------------------------------------+ -|platform |platform Object |Content of platform object. | -+-------------------+--------------------------+-------------------------------------------------+ -|lineOfBusiness |lineOfBusiness Object |Content of lineOfBusiness object. | -+-------------------+--------------------------+-------------------------------------------------+ - -ModelInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|ModelType |String |Type of model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelInvariantId |String |The Model Invariant Id. | -+-------------------------+------------------+-------------------------------------------------+ -|ModelNameVersionId |String |The modelname Version Id | -+-------------------------+------------------+-------------------------------------------------+ -|ModelName |String |Name of the Model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelVersion |String |Version of the model | -+-------------------------+------------------+-------------------------------------------------+ -|ModelCustomization Name |String |The Model Customization name | -+-------------------------+------------------+-------------------------------------------------+ -|modelCustomizationUuid |String |The Model Customization UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelVersionId |String |The Model version id | -+-------------------------+------------------+-------------------------------------------------+ -|modelUuid |String |The Model UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInvariantUuid |String |The Model Invariant UUid | -+-------------------------+------------------+-------------------------------------------------+ -|modelInstanceName |String |The Model Instance name | -+-------------------------+------------------+-------------------------------------------------+ - -SubscriberInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|GlobalSubscriberId |String |Global customer Id (in A&AI) | -+-------------------------+------------------+-------------------------------------------------+ -|SubscriberName |String |Name of the Subscriber | -+-------------------------+------------------+-------------------------------------------------+ - -RequestInfo Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|Source |String |source of the request | -+-------------------------+------------------+-------------------------------------------------+ -|billingAccountNumber |String |billingAccountNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|callbackUrl |String |callbackUrl of the request | -+-------------------------+------------------+-------------------------------------------------+ -|correlator |String |correlator of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderNumber |String |orderNumber of the request | -+-------------------------+------------------+-------------------------------------------------+ -|productFamilyId |String |productFamilyId of the request | -+-------------------------+------------------+-------------------------------------------------+ -|orderVersion |String |orderVersion of the request | -+-------------------------+------------------+-------------------------------------------------+ -|instanceName |String |instanceName of the request | -+-------------------------+------------------+-------------------------------------------------+ -|suppressRollback |String |suppressRollback of the request | -+-------------------------+------------------+-------------------------------------------------+ -|requestorId |String |requestorId of the request | -+-------------------------+------------------+-------------------------------------------------+ - -RequestParameters Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|SubscriptionServiceType |String |The service type of the Subscription | -+-------------------------+------------------+-------------------------------------------------+ - -RequestStatus Object - -+-------------------------+------------------+-------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+=================================================+ -|finishTime |String |Time | -+-------------------------+------------------+-------------------------------------------------+ -|requestState |String |state of the request | -+-------------------------+------------------+-------------------------------------------------+ -|statusMessage |String |statusMessage | -+-------------------------+------------------+-------------------------------------------------+ -|percentProgress |String |percentage of progress | -+-------------------------+------------------+-------------------------------------------------+ - -SDC API --------- - -Get List of Existing Catalog Assets -+++++++++++++++++++++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |sdc/v1/catalog/{assetType}| -+--------------------+--------------------------+ -|Operation Type |GET | -+--------------------+--------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|assetType |M |1 |String |The requested asset type.valid values are resources/services.| -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|service-type |M |1 |String |Service Type | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|service-instance-id|M |1 |String |Service Instance ID | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|X-ECOMP-RequestID |N |request ID.If it is not sent it will be automatically generated by SDC on request receipt| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-InstanceID |Y |Instance ID | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Accept |N |Determines the format of the body of the response. Valid values are : “application/json”| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Response: - -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==================+=========+===========+=======+======================================================================================+ -|uuid |M |1 |String |Global Asset Version Identifier: UUID generated by SDC per each version of the asset. | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|invariantUUID |M |1 |String |UUID generated by SDC per each asset. | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|name |M |1 |String |The name of the asset | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|version |M |1 |String |The asset version in SDC catalog. | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|toscaModelURL |M |1 |String |Relative asset’s URL. Should be used in REST GET API to download the asset’s CSAR. | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|category |M |1 |String |Category of the asset. | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|subcategory |M |1 |String |Sub-category of the asset | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|resourceType |M |1 |String |The type of resource.resource types are VF, VL, CP, VFC, VFCMT, PNF. | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|lifecycleState |M |1 |String |The lifecycle state of the asset | -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ -|lastUpdaterUserId |M |1 |String |UserID of the SDC designer who was the last to update the asset for this major version| -+------------------+---------+-----------+-------+--------------------------------------------------------------------------------------+ - -Get Specific Asset Detailed Metadata -++++++++++++++++++++++++++++++++++++ - -+--------------------+-------------------------------------------+ -|Interface Definition|Description | -+====================+===========================================+ -|URI |/sdc/v1/catalog/{assetType}/{uuid}/metadata| -+--------------------+-------------------------------------------+ -|Operation Type |GET | -+--------------------+-------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=====================================================================================+ -|assetType |M |1 |String |The requested asset type.valid values are resources/services. | -+-------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|uuid |M |1 |String |Global Asset Version Identifier: UUID generated by SDC per each version of the asset.| -+-------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|X-ECOMP-RequestID |N |request ID.If it is not sent it will be automatically generated by SDC on request receipt| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-InstanceID |Y |Instance ID | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Accept |N |Determines the format of the body of the response. Valid values are : “application/json”| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Response: - -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Content|Description | -+====================+=========+=======+======================================================================================+ -|uuid |M |String |Global Asset Version Identifier: UUID generated by SDC per each version of the asset. | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|invariantUUID |M |String |UUID generated by SDC per each asset. | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|name |M |String |The name of the asset | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|version |M |String |The asset version in SDC catalog. | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|toscaModelURL |M |String |Relative asset’s URL. Should be used in REST GET API to download the asset’s CSAR. | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|description |M |String |Short description of the resource | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|lastUpdaterUserId |M |String |UserID of the SDC designer who was the last to update the asset for this major version| -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|lastUpdaterFullName |M |String |UserID of the SDC designer who was the last to update the asset for this major version| -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|category |M |String |Category of the asset | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|subCategory |M |String |Sub-category of the asset. | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|toscaResourceName |M |String |The full name of the asset | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|resourceType |M |String |The type of resource. | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|lifecycleState |M |String |The lifecycle state of the asset | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|resources |N |Object |Category of the asset | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ -|artifacts |M |Object |Category of the asset | -+--------------------+---------+-------+--------------------------------------------------------------------------------------+ - -Resource Object: - -+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Content|Description | | -+=====================+=========+=======+===================================================================================================================+ -|resourceInstanceName |M |String |Logical Resource Instance Name.Unique Identifier of the instance of the specific resource in the service context.| -+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+ -|resourceName |M |String |Resource Name | -+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+ -|resourceInvariantUUID|M |String |The invariant UUID of the resource | -+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+ -|resourceVersion |M |String |Resource Version | -+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+ -|resoucreType |M |String |Resource Type | -+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+ -|resourceUUID |M |String |Global UUID of the resource that specific artifact belongs to | -+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+ -|artifacts |M |Object |Array of resource instance deployment artifacts. | -+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+ - -Artifact Metadata Object: - -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Content |Description | -+=====================+=========+========+===================================================================================================================+ -|artifactName |M |String |Artifact File name | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactLabel |M |String |Identifier of the artifact within the VF / Service. | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactType |M |String |Artifact Type | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactGroupType |M |String |Whether the artifact is informational or deployment. | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactURL |M |String |Relative artifact’s URL. | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactDescription |M |String |Artifact Description | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactTimeout |N |Integer |Artifact Description | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactChecksum |M |String |Base-64 encoded MD5 checksum of the artifact’s payload. | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactUUID |M |String |Global UUID generated by SDC each time when artifact payload is updated. | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|artifactVersion |M |String |Service Version | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ -|generatedFromUUID |N |String |This attribute will be sent only in the case of an artifact generated on basis of other artifact | -+---------------------+---------+--------+-------------------------------------------------------------------------------------------------------------------+ - -Download (CSAR of) Specific Asset -+++++++++++++++++++++++++++++++++ - -+--------------------+-----------------------------------------------------------+ -|Interface Definition|Description | -+====================+===========================================================+ -|URI |/sdc/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}| -+--------------------+-----------------------------------------------------------+ -|Operation Type |GET | -+--------------------+-----------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=====================================================================================+ -|assetType |M |1 |String |The requested asset type.valid values are resources/services. | -+-------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Uuid |M |1 |String |The uuid of the asset as published in the metadata | -+-------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactUUID |M |1 |String |The artifactUUID of the asset as published in the metadata | -+-------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ - -Response: - -+--------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ -|Header name |Qualifier|Description | -+====================+=========+==========================================================================================================================+ -|Content-Type |M |Specifies the downloaded payload format as “ arbitrary data in binary format” .Valid value is : application/octet-stream | -+--------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ -|Content-Length |M |Streamed artifact payload size | -+--------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ -|Content-Disposition |M |Specifies the name of file to store the downloaded artifact’s payload ( RFC 2183) . | -+--------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - -Upload Artifact -+++++++++++++++ - -+--------------------+-----------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+===============================================================================================+ -|URI |/sdc/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceNormalizedName}/artifacts| -+--------------------+-----------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------+ - -Request Parameters: - -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============================+=========+===========+=======+=====================================================================================+ -|assetType |M |1 |String |The requested asset type.valid values are resources/services. | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Uuid |M |1 |String |The uuid of the asset as published in the metadata | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|resourceInstanceNormalizedName|M |1 |String |Normalized name of resource | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ - -Request Body -++++++++++++ - -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============================+=========+===========+=======+=====================================================================================+ -|payloadData |M |1 |String |The data of the artifact after Base64 encoding | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactLabel |M |1 |String |Identifier of the artifact within the VF / Service. | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactName |M |1 |String |The name of the artifact | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactType |M |1 |String |The type of the artifact | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactGroupType |M |1 |String |Whether the artifact is informational or deployment. | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|description |M |1 |String |Description of the artifact | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|X-ECOMP-RequestID |N |request ID.If it is not sent it will be automatically generated by SDC on request receipt| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-InstanceID |Y |Instance ID | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Accept |N |Determines the format of the body of the response. Valid values are : “application/json”| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|USER_ID |Y |The user ID of the DCAE Designer. This user must also have Designer role in SDC | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Content-Type |Y |Valid value is : application/json | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Content-MD5 |Y |The value for this header must be the MD5 checksum over the whole json body | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Response: - -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Content|Description | -+====================+=========+=======+===================================================================================================+ -|artifactName |M |String |Artifact File name | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactType |M |String |Artifact Type | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactURL |M |String |Relative artifact’s URL. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactDescription |M |String |Artifact Description. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactTimeout |N |String |Will be populated only if its value is not 0. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactChecksum |Y |String |Base-64 encoded MD5 checksum of the artifact’s payload. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactUUID |Y |String |Global UUID generated by SDC each time when artifact payload is updated. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactVersion |Y |String |Service Version . | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|generatedFromUUID |N |String |This attribute will be sent only in the case of an artifact generated on basis of other artifact | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ - -Update Artifact -+++++++++++++++ - -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================================================================+ -|URI |/sdc/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceNormalizedName}/artifacts/{artifactUUID}| -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+--------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============================+=========+===========+=======+=====================================================================================+ -|assetType |M |1 |String |The requested asset type.valid values are resources/services. | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Uuid |M |1 |String |The uuid of the asset as published in the metadata | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactUUID |M |1 |String |The uuid of the artifact as published in the response of the upload/update operation | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|resourceInstanceNormalizedName|M |1 |String |Normalized name of resource | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|X-ECOMP-RequestID |N |request ID.If it is not sent it will be automatically generated by SDC on request receipt| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-InstanceID |Y |Instance ID | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Accept |N |Determines the format of the body of the response. Valid values are : “application/json”| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|USER_ID |Y |The user ID of the DCAE Designer. This user must also have Designer role in SDC | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Content-Type |Y |Valid value is : application/json | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Content-MD5 |Y |The value for this header must be the MD5 checksum over the whole json body | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Body: - -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============================+=========+===========+=======+=====================================================================================+ -|payloadData |M |1 |String |The data of the artifact after Base64 encoding | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactLabel |M |1 |String |Identifier of the artifact within the VF / Service. | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactName |M |1 |String |The name of the artifact | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactType |M |1 |String |The type of the artifact | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactGroupType |M |1 |String |Whether the artifact is informational or deployment. | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|description |M |1 |String |Description of the artifact | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ - -Response: - -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Content|Description | -+====================+=========+=======+===================================================================================================+ -|artifactName |M |String |Artifact File name | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactType |M |String |Artifact Type | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactURL |M |String |Relative artifact’s URL. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactDescription |M |String |Artifact Description. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactTimeout |N |String |Will be populated only if its value is not 0. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactChecksum |Y |String |Base-64 encoded MD5 checksum of the artifact’s payload. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactUUID |Y |String |Global UUID generated by SDC each time when artifact payload is updated. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|artifactVersion |Y |String |Service Version . | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|generatedFromUUID |N |String |This attribute will be sent only in the case of an artifact generated on basis of other artifact | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ - -Delete Artifact -+++++++++++++++ - -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================================================================+ -|URI |/sdc/v1/catalog/{assetType}/{uuid}/resourceInstances/{resourceInstanceNormalizedName}/artifacts/{artifactUUID}| -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+--------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============================+=========+===========+=======+=====================================================================================+ -|assetType |M |1 |String |The requested asset type.valid values are resources/services. | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|Uuid |M |1 |String |The uuid of the asset as published in the metadata | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|artifactUUID |M |1 |String |The uuid of the artifact as published in the response of the upload/update operation | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ -|resourceInstanceNormalizedName|M |1 |String |Normalized name of resource | -+------------------------------+---------+-----------+-------+-------------------------------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|X-ECOMP-RequestID |N |request ID.If it is not sent it will be automatically generated by SDC on request receipt| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-InstanceID |Y |Instance ID | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Accept |N |Determines the format of the body of the response. Valid values are : “application/json”| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|USER_ID |Y |The user ID of the DCAE Designer. This user must also have Designer role in SDC | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Response: - -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Content|Description | -+====================+=========+=======+===================================================================================================+ -|artifactUUID |Y |String |Global UUID generated by SDC each time when artifact payload is updated. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ - -Update Lifecycle -++++++++++++++++ - -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================================================================+ -|URI |/sdc/v1/catalog/{assetType}/{uuid}/lifecycleState/{lifecycleOperation} | -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+--------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+------------------------------+---------+-----------+-------+-----------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============================+=========+===========+=======+=====================================================================================================+ -|assetType |M |1 |String |The requested asset type.valid values are resources/services. | -+------------------------------+---------+-----------+-------+-----------------------------------------------------------------------------------------------------+ -|Uuid |M |1 |String |The uuid of the asset as published in the metadata | -+------------------------------+---------+-----------+-------+-----------------------------------------------------------------------------------------------------+ -|lifecycleOperation |M |1 |String |The lifecycle operation to be performed on the asset.Valid values are: Checkin / Checkout / Certify | -+------------------------------+---------+-----------+-------+-----------------------------------------------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|X-ECOMP-RequestID |N |request ID.If it is not sent it will be automatically generated by SDC on request receipt| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-InstanceID |Y |Instance ID | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Accept |N |Determines the format of the body of the response. Valid values are : “application/json”| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|USER_ID |Y |The user ID of the DCAE Designer. This user must also have Designer role in SDC | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Description | -+===================+=========+=========================================================================================+ -|userRemarks |N |Short description (free text) about the asset version being changed | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Response: - -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Content|Description | -+====================+=========+=======+===================================================================================================+ -|uuid |Y |String |UUID generated by SDC per each major version of the asset | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|invariantUUID |Y |String |UUID generated by SDC per each asset. This UUID stays constant for all the asset’s versions | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|name |Y |String |The name of the asset. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|version |Y |String |The asset version in SDC catalog | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|category |Y |String |Category of the asset. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|subcategory |Y |String |Sub-category of the asset. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|resourceType |Y |String |The type of resource. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|lifecycleState |Y |String |The lifecycle state of the asset. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|lastUpdaterUserId |Y |String |User ID of the SDC designer who was the last to update the asset for this major version. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ - -Create Resource -+++++++++++++++ - -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+==============================================================================================================+ -|URI |/sdc/v1/catalog/resources | -+--------------------+--------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+--------------------------------------------------------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|X-ECOMP-RequestID |N |request ID.If it is not sent it will be automatically generated by SDC on request receipt| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-InstanceID |Y |Instance ID | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Accept |N |Determines the format of the body of the response. Valid values are : “application/json”| -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|USER_ID |Y |The user ID of the DCAE Designer. This user must also have Designer role in SDC | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Content-Type |Y |Valid value is : application/json | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Description | -+===================+=========+=========================================================================================+ -|name |Y |The name of the resource | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|description |Y |Short description of the resource | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|resourceType |Y |“VFCMT” / “VF” / “PNF” | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|category |Y |VFCMT category is “Template”. | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|subcategory |Y |VFCMT subcategory is “Monitoring Template”. | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|vendorName |Y |Vendor Name | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|vendorRelease |Y |Vendor Release | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|tags |Y |The tags are used for search options. | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|icon |Y |The icon should be pre-defined in SDC. | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|contactId |Y |The user ID of user responsible for this VFCMT. | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Response: - -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Content|Description | -+====================+=========+=======+===================================================================================================+ -|uuid |Y |String |UUID generated by SDC per each major version of the asset | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|invariantUUID |Y |String |UUID generated by SDC per each asset. This UUID stays constant for all the asset’s versions | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|name |Y |String |The name of the asset. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|version |Y |String |The asset version in SDC catalog | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|category |Y |String |Category of the asset. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|subcategory |Y |String |Sub-category of the asset. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|resourceType |Y |String |The type of resource. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|lifecycleState |Y |String |The lifecycle state of the asset. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ -|lastUpdaterUserId |Y |String |User ID of the SDC designer who was the last to update the asset for this major version. | -+--------------------+---------+-------+---------------------------------------------------------------------------------------------------+ - -UUI API ----------------- -Create E2E service instance -++++++++++++++++++++++++++++ - -+--------------------+-------------------------------------+ -|Interface Definition|Description | -+====================+=====================================+ -|URI |/onap/so/infra/serviceInstantiation/e2eServiceInstances/v3 | -+--------------------+-------------------------------------+ -|Operation Type |POST | -+--------------------+-------------------------------------+ -|Content-Type |application/json | -+--------------------+-------------------------------------+ - -Request Body: - -+---------+---------+-----------+--------------------------+-----------------------------+ -|Attribute|Qualifier|Cardinality|Content |Description | -+=========+=========+===========+==========================+=============================+ -|service |M |1 |Service Object |Content of service object. | -+---------+---------+-----------+--------------------------+-----------------------------+ - -Service Object - -+------------------------------+-----------------+------------------------------------+ -|Attribute |Content |Description | -+==============================+=================+====================================+ -|name |String |Service instance name. | -+------------------------------+-----------------+------------------------------------+ -|description |String |Service instance description | -+------------------------------+-----------------+------------------------------------+ -|serviceUuid |String |Model UUID | -+------------------------------+-----------------+------------------------------------+ -|serviceInvariantUuid |String |Model Invariant UUID | -+------------------------------+-----------------+------------------------------------+ -|gloabalSubscriberId |String |Customer Id | -+------------------------------+-----------------+------------------------------------+ -|serviceType |String |service Type | -+------------------------------+-----------------+------------------------------------+ -|parameters |Object |Parameter Object | -+------------------------------+-----------------+------------------------------------+ - -Parameter Object - -+------------------------------+-----------------+------------------------------------+ -|Attribute |Content |Description | -+==============================+=================+====================================+ -|locationConstraints |List of object |location infor for each vnf | -+------------------------------+-----------------+------------------------------------+ -|resource |List of Resource |resource of service/resource | -+------------------------------+-----------------+------------------------------------+ -|requestInputs |key-value map |input of service/resource -+------------------------------+-----------------+------------------------------------+ - -LocationConstraint Object - -+------------------------------+-----------------+------------------------------------+ -|Attribute |Content |Description | -+==============================+=================+====================================+ -|vnfProfileId |String |Customization id for VNF | -+------------------------------+-----------------+------------------------------------+ -|locationConstraints |Object |DC location info of VNF | -+------------------------------+-----------------+------------------------------------+ - -VnfLocationConstraint Object - -+------------------------------+-----------------+------------------------------------+ -|Attribute |Content |Description | -+==============================+=================+====================================+ -|vimId |String |VIM id from ESR definition | -+------------------------------+-----------------+------------------------------------+ - -Resource Object - -+------------------------------+-----------------+------------------------------------+ -|Attribute |Content |Description | -+==============================+=================+====================================+ -|resourceName |String |The resource name | -+------------------------------+-----------------+------------------------------------+ -|resourceInvariantUuid |String |The resource invariant UUID. | -+------------------------------+-----------------+------------------------------------+ -|resourceUuid |String |The resource UUID. | -+------------------------------+-----------------+------------------------------------+ -|resourceCustomizationUuid |String |The resource customization UUID. | -+------------------------------+-----------------+------------------------------------+ -|parameters |Object |Parameter of resource | -+------------------------------+-----------------+------------------------------------+ - -Response: - -+-------------+---------+-----------+-------+------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+-------------+---------+-----------+-------+------------------------------------------------------------------------+ -|serviceId |M |1 |String |Service instance ID. | -+-------------+---------+-----------+-------+------------------------------------------------------------------------+ -|operationId |M |1 |String |Service Operation ID. | -+-------------+---------+-----------+-------+------------------------------------------------------------------------+ - -Delete E2E service instance -++++++++++++++++++++++++++++ - -+--------------------+-----------------------------------------------+ -|Interface Definition|Description | -+====================+===============================================+ -|URI |/onap/so/infra/serviceInstantiation/e2eServiceInstances/v3/{serviceId}| -+--------------------+-----------------------------------------------+ -|Operation Type |DELETE | -+--------------------+-----------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+----------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+========================================+ -|globalSubscriberId |M |1 |String |The subscriber id. It is defined in AAI | -+-------------------+---------+-----------+-------+----------------------------------------+ -|serviceType |M |1 |String |The service type. It is defined in AAI | -+-------------------+---------+-----------+-------+----------------------------------------+ - -Response: - -+-------------+---------+-----------+-------+------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+-------------+---------+-----------+-------+------------------------------------------------------------------------+ -|operationId |M |1 |String |The operation id. | -+-------------+---------+-----------+-------+------------------------------------------------------------------------+ - -Query E2E service operation result -++++++++++++++++++++++++++ - -+--------------------+------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+========================================================================+ -|URI |/onap/so/infra/serviceInstantiation/e2eServiceInstances/v3/{serviceId}/operations/{operationId}| -+--------------------+------------------------------------------------------------------------+ -|Operation Type |GET | -+--------------------+------------------------------------------------------------------------+ - -Request Parameters: - -+--------------+---------+-----------+-------+--------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============+=========+===========+=======+==============+ -|serviceId |M |1 |Service instance ID. | -+--------------+---------+-----------+-------+--------------+ -|operationId |M |1 |Service Operation ID. | -+--------------+---------+-----------+-------+--------------+ - -Response: - -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|operation |M |1 |String |Operation object identify. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|operationId |M |1 |String |Operation ID. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|operation |M |1 |String |Operation type, create|delete. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|result |M |1 |String |Operation result: finished, error, processing. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|reason |M |1 |String |If failing, need to write fail reason. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|userId |M |1 |String |Operation user ID. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|operationContent |M |1 |String |The status detail of current operation which is being executing. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|progress |M |1 |String |Current operation progress. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|operateAt |M |1 |String |Time that it starts to execute operation. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ -|finishedAt |M |1 |String |Time that it finished executing operation. | -+------------------+---------+-----------+-------+------------------------------------------------------------------------+ - -Inventory APIs ----------------- - -create or update an existing service-instance -+++++++++++++++++++++++++++++++++++++++++++++ - -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+====================================================================================================================================================================+ -|URI |/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}| -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Operation Type |PUT | -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=======================+ -|global-customer-id |M |1 |String |Global Customer ID | -+-------------------+---------+-----------+-------+-----------------------+ -|service-type |M |1 |String |Service Type | -+-------------------+---------+-----------+-------+-----------------------+ -|service-instance-id|M |1 |String |Service Instance ID | -+-------------------+---------+-----------+-------+-----------------------+ - -Response: - -+---------+---------+-----------+-------+-------------------+ -|Attribute|Qualifier|Cardinality|Content|Description | -+---------+---------+-----------+-------+-------------------+ -|HTTP code|M |1 |Integer|HTTP response code | -+---------+---------+-----------+-------+-------------------+ - -delete an existing service-instance -+++++++++++++++++++++++++++++++++++ - -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+====================================================================================================================================================================+ -|URI |/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}| -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=======================+ -|global-customer-id |M |1 |String |Global Customer ID | -+-------------------+---------+-----------+-------+-----------------------+ -|service-type |M |1 |String |Service Type | -+-------------------+---------+-----------+-------+-----------------------+ -|service-instance-id|M |1 |String |Service Instance ID | -+-------------------+---------+-----------+-------+-----------------------+ - -Response: - -+---------+---------+-----------+-------+-------------------+ -|Attribute|Qualifier|Cardinality|Content|Description | -+---------+---------+-----------+-------+-------------------+ -|HTTP code|M |1 |Integer|HTTP response code | -+---------+---------+-----------+-------+-------------------+ - -get service-instances -+++++++++++++++++++++ - -+--------------------+-----------------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=============================================================================================================================+ -|URI |/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances| -+--------------------+-----------------------------------------------------------------------------------------------------------------------------+ -|Operation Type |GET | -+--------------------+-----------------------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=======================+ -|global-customer-id |M |1 |String |Global Customer ID | -+-------------------+---------+-----------+-------+-----------------------+ -|service-type |M |1 |String |Service Type | -+-------------------+---------+-----------+-------+-----------------------+ -|subscriber-name |O |1 |String |Subscriber name | -+-------------------+---------+-----------+-------+-----------------------+ -|subscriber-type |O |1 |String |Subscriber type | -+-------------------+---------+-----------+-------+-----------------------+ - -Response: - -+-----------------+---------+-----------+----------------+-------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+-----------------+---------+-----------+----------------+-------------------+ -|service-instances|M |1 |ServiceInstances|Service Instances | -+-----------------+---------+-----------+----------------+-------------------+ - -get service-instance -++++++++++++++++++++ - -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+====================================================================================================================================================================+ -|URI |/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}| -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Operation Type |GET | -+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=======================+ -|global-customer-id |M |1 |String |Global Customer ID | -+-------------------+---------+-----------+-------+-----------------------+ -|service-type |M |1 |String |Service Type | -+-------------------+---------+-----------+-------+-----------------------+ -|service-instance-id|M |1 |String |Service instance ID | -+-------------------+---------+-----------+-------+-----------------------+ - -Response: - -+-----------------+---------+-----------+----------------+-------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+-----------------+---------+-----------+----------------+-------------------+ -|service-instance |M |1 |ServiceInstance |Service Instance | -+-----------------+---------+-----------+----------------+-------------------+ - -see node definition for valid relationships -+++++++++++++++++++++++++++++++++++++++++++ - -+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+===================================================================================================================================================================================================+ -|URI |/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}/relationship-list/relationship| -+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Operation Type |PUT | -+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=======================+ -|global-customer-id |M |1 |String |Global Customer ID | -+-------------------+---------+-----------+-------+-----------------------+ -|service-type |M |1 |String |Service Type | -+-------------------+---------+-----------+-------+-----------------------+ -|service-instance-id|M |1 |String |Service instance ID | -+-------------------+---------+-----------+-------+-----------------------+ - -Response: - -+---------+---------+-----------+-------+-------------------+ -|Attribute|Qualifier|Cardinality|Content|Description | -+---------+---------+-----------+-------+-------------------+ -|HTTP code|M |1 |Integer|HTTP response code | -+---------+---------+-----------+-------+-------------------+ - -delete an existing relationship -+++++++++++++++++++++++++++++++ - -+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+===================================================================================================================================================================================================+ -|URI |/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}/relationship-list/relationship| -+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=======================+ -|global-customer-id |M |1 |String |Global Customer ID | -+-------------------+---------+-----------+-------+-----------------------+ -|service-type |M |1 |String |Service Type | -+-------------------+---------+-----------+-------+-----------------------+ -|service-instance-id|M |1 |String |Service instance ID | -+-------------------+---------+-----------+-------+-----------------------+ - -Response: - -+---------+---------+-----------+-------+-------------------+ -|Attribute|Qualifier|Cardinality|Content|Description | -+---------+---------+-----------+-------+-------------------+ -|HTTP code|M |1 |Integer|HTTP response code | -+---------+---------+-----------+-------+-------------------+ - - -VFC APIs ---------- - -Create NS -+++++++++++ - -+--------------------+-------------------+ -|Interface Definition|Description | -+====================+===================+ -|URI |/ns | -+--------------------+-------------------+ -|Operation Type |POST | -+--------------------+-------------------+ -|Content-Type |application/json | -+--------------------+-------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=======================+ -|context |M |1 |Object |Context | -+-------------------+---------+-----------+-------+-----------------------+ -|csarId |M |1 |String |csarId | -+-------------------+---------+-----------+-------+-----------------------+ -|nsName |M |1 |String |Name of the NS | -+-------------------+---------+-----------+-------+-----------------------+ -|description |M |1 |String |description | -+-------------------+---------+-----------+-------+-----------------------+ - -Response: - -+-----------------+---------+-----------+----------------+-------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+-----------------+---------+-----------+----------------+-------------------+ -|nsInstanceId |M |1 |String |nsInstanceId | -+-----------------+---------+-----------+----------------+-------------------+ - -Get NS -+++++++ - -+--------------------+-------------------+ -|Interface Definition|Description | -+====================+===================+ -|URI |/ns | -+--------------------+-------------------+ -|Operation Type |GET | -+--------------------+-------------------+ -|Content-Type |application/json | -+--------------------+-------------------+ - -Response: - -+-----------------+---------+-----------+----------------+-------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+-----------------+---------+-----------+----------------+-------------------+ -|nsInstanceId |M |1 |String |nsInstanceId | -+-----------------+---------+-----------+----------------+-------------------+ -|nsName |M |1 |String |The name of ns | -+-----------------+---------+-----------+----------------+-------------------+ -|description |M |1 |String |description | -+-----------------+---------+-----------+----------------+-------------------+ -|nsdId |M |1 |String |ID of ns | -+-----------------+---------+-----------+----------------+-------------------+ -|vnfInfo |M |1 |Array |Vnf information | -+-----------------+---------+-----------+----------------+-------------------+ -|vlInfo |M |1 |Array |vl information | -+-----------------+---------+-----------+----------------+-------------------+ -|vnffgInfo |M |1 |Array |vnffg information | -+-----------------+---------+-----------+----------------+-------------------+ -|nsState |M |1 |String |state of ns | -+-----------------+---------+-----------+----------------+-------------------+ - -vnfInfo Object: - -+-----------------+---------+-----------+----------------+-------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+-----------------+---------+-----------+----------------+-------------------+ -|vnfInstanceId |M |1 |String |vnfInstanceId | -+-----------------+---------+-----------+----------------+-------------------+ -|vnfInstanceName |M |1 |String |vnfInstanceName | -+-----------------+---------+-----------+----------------+-------------------+ -|vnfdId |M |1 |String |vnfdId | -+-----------------+---------+-----------+----------------+-------------------+ - -vlInfo Object: - -+----------------------+---------+-----------+----------------+-------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+----------------------+---------+-----------+----------------+-------------------+ -|vlInstanceId |M |1 |String |vlInstanceId | -+----------------------+---------+-----------+----------------+-------------------+ -|vlInstanceName |M |1 |String |vlInstanceName | -+----------------------+---------+-----------+----------------+-------------------+ -|vldId |M |1 |String |vldId | -+----------------------+---------+-----------+----------------+-------------------+ -|relatedCpInstanceId |M |1 |Array |relatedCpInstanceId| -+----------------------+---------+-----------+----------------+-------------------+ - -relatedCpInstanceId Array: - -+----------------------+---------+-----------+----------------+-------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+----------------------+---------+-----------+----------------+-------------------+ -|cpInstanceId |M |1 |String |cpInstanceId | -+----------------------+---------+-----------+----------------+-------------------+ -|cpInstanceName |M |1 |String |cpInstanceName | -+----------------------+---------+-----------+----------------+-------------------+ -|cpdId |M |1 |String |cpdId | -+----------------------+---------+-----------+----------------+-------------------+ - -vnffgInfo Array: - -+----------------------+---------+-----------+----------------+-------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+----------------------+---------+-----------+----------------+-------------------+ -|vnffgInstanceId |M |1 |String |vnffgInstanceId | -+----------------------+---------+-----------+----------------+-------------------+ -|vnfId |M |1 |String |vnfId | -+----------------------+---------+-----------+----------------+-------------------+ -|pnfId |M |1 |String |pnfId | -+----------------------+---------+-----------+----------------+-------------------+ -|virtualLinkId |M |1 |Array |virtualLinkId | -+----------------------+---------+-----------+----------------+-------------------+ -|cpId |M |1 |Array |cpId | -+----------------------+---------+-----------+----------------+-------------------+ -|nfp |M |1 |Array |nfp | -+----------------------+---------+-----------+----------------+-------------------+ - -Instantiate NS -+++++++++++++++ - -+--------------------+-------------------------------------+ -|Interface Definition|Description | -+====================+=====================================+ -|URI |/ns/{nsInstanceId}/Instantiate | -+--------------------+-------------------------------------+ -|Operation Type |POST | -+--------------------+-------------------------------------+ -|Content-Type |application/json | -+--------------------+-------------------------------------+ - -Request Parameters: - -+----------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+======================+=========+===========+=======+=======================+ -|LocationConstraints |M |1 |Array |LocationConstraints | -+----------------------+---------+-----------+-------+-----------------------+ -|additionalParamForNs |M |1 |String |additionalParamForNs | -+----------------------+---------+-----------+-------+-----------------------+ -|nsInstanceId |M |1 |String |nsInstanceId | -+----------------------+---------+-----------+-------+-----------------------+ - -LocationConstraints Array: - -+----------------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+======================+=========+===========+=======+=======================+ -|vnfProfileId |M |1 |String |vnfProfileId | -+----------------------+---------+-----------+-------+-----------------------+ -|vimid |M |1 |String |vimid | -+----------------------+---------+-----------+-------+-----------------------+ - -Response: - -+--------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============+=========+===========+=======+=======================+ -|jobId |M |1 |String |jobId | -+--------------+---------+-----------+-------+-----------------------+ - -Terminate NS -+++++++++++++++ - -+--------------------+-------------------------------------+ -|Interface Definition|Description | -+====================+=====================================+ -|URI |/ns/{ns_instance_id}/terminate | -+--------------------+-------------------------------------+ -|Operation Type |POST | -+--------------------+-------------------------------------+ -|Content-Type |application/json | -+--------------------+-------------------------------------+ - -Request Parameters: - -+----------------------------+---------+-----------+-------+-----------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+============================+=========+===========+=======+=============================+ -|terminationType |M |1 |String |terminationType | -+----------------------------+---------+-----------+-------+-----------------------------+ -|gracefulTerminationTimeout |M |1 |String |gracefulTerminationTimeout | -+----------------------------+---------+-----------+-------+-----------------------------+ -|nsInstanceId |M |1 |String |nsInstanceId | -+----------------------------+---------+-----------+-------+-----------------------------+ - -Response: - -+--------------+---------+-----------+-------+-----------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+==============+=========+===========+=======+=======================+ -|jobId |M |1 |String |jobId | -+--------------+---------+-----------+-------+-----------------------+ - -Delete NS -+++++++++++++++ - -+--------------------+-------------------------------------+ -|Interface Definition|Description | -+====================+=====================================+ -|URI |/ns/{ns_instance_id} | -+--------------------+-------------------------------------+ -|Operation Type |DELETE | -+--------------------+-------------------------------------+ - -Request Parameters: - -+----------------------------+---------+-----------+-------+-----------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+============================+=========+===========+=======+=============================+ -|nsInstanceId |M |1 |String |nsInstanceId | -+----------------------------+---------+-----------+-------+-----------------------------+ - -MultiVIM API ----------------- -Get token -++++++++++ - -https://developer.openstack.org/api-ref/identity/v3/#password-authentication-with-unscoped-authorization - -+--------------------+-----------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+===============================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/identity/v3/auth/tokens | -+--------------------+-----------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================+=========+===========+==========================+================================================================================================================================================+ -|nocatalog |O |1 |string |The authentication response excludes the service catalog. By default, the response includes the service catalog. | -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|name |O |1 |string |The user name. Required if you do not specify the ID of the user. If you specify the user name, you must also specify the domain, by ID or name.| -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|auth |M |1 |object |An auth object. | -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|user |M |1 |object |A user object. | -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|scope |O |1 |string |The authorization scope, including either a project or a domain | -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|password |M |1 |object |The password object, contains the authentication information. | -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|id |O |1 |string |The ID of the user. Required if you do not specify the user name. | -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|identity |M |1 |object |An identity object. | -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -|methods |M |1 |array |The authentication method. For password authentication, specify password. | -+----------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ - -Response: - -+-------------------------+------------------+--------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+==========================================================================+ -|X-Subject-Token |String |The authentication token. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|domain |object |A domain object, containing: | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|region_id |String |The ID of the region that contains the service endpoint. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|methods |array |The authentication method. For password authentication, specify password. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|roles |array |A list of role objects, each containing: | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|url |String |The endpoint URL. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|region |String |The geographic location of the service endpoint. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|token |object |A token object. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|expires_at |String |The date and time when the token expires. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|project |object |A project object, containing: | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|issued_at |String |The date and time when the token was issued. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|catalog |array |A catalog object. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|extras |object |A set of metadata key and value pairs, if any. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|user |object |A user object. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|audit_ids |array |A list of one or two audit IDs. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|interface |String |The interface type, which describes the visibility of the endpoint. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|endpoints |array |A list of endpoint objects. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|type |String |The endpoint type. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|id |String |The ID of the user. Required if you do not specify the user name. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|name |String |The user name. | -+-------------------------+------------------+--------------------------------------------------------------------------+ - -Create stack -+++++++++++++ - -https://developer.openstack.org/api-ref/orchestration/v1/#create-stack - -+--------------------+-----------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+===============================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/heat/v1/{tenant-id}/stacks | -+--------------------+-----------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------+ - -Request Body: - -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+==================+=========+===========+==========================+=================================================================================================+ -|tenant_id |M |1 |string |The UUID of the tenant. A tenant is also known as a project. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|disable_rollback |O |1 |boolean |Enables or disables deletion of all stack resources when stack creation fails. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|environment |O |1 |object |A JSON environment for the stack. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|files |O |1 |object |Supplies the contents of files referenced in the template or the environment. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|parameters |O |1 |object |Supplies arguments for parameters defined in the stack template. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|stack_name |M |1 |string |A name for the stack. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|tags |O |1 |string |One or more simple string tags to associate with the stack. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|template |O |1 |object |The stack template on which to perform the operation. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|template_url |O |1 |string |A URI to the location containing the stack template on which to perform the operation. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|timeout_mins |O |1 |integer |The timeout for stack creation in minutes. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Response: - -+-------------------------+------------------+--------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+==========================================================================+ -|location |String |For asynchronous resource operations. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|X-Openstack-Reqeuest-Id |object |A domain object, containing: | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|stack |String |The ID of the region that contains the service endpoint. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|id |String |The authentication method. For password authentication, specify password. | -+-------------------------+------------------+--------------------------------------------------------------------------+ -|links |String |The authentication method. For password authentication, specify password. | -+-------------------------+------------------+--------------------------------------------------------------------------+ - -Get stack -+++++++++++++ - -https://developer.openstack.org/api-ref/orchestration/v1/#show-stack-details - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/heat/v1/{tenant-id}/stacks/{stack-name}/{stack-id} | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |GET | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+==================+=========+===========+==========================+=================================================================================================+ -|tenant_id |M |1 |string |The UUID of the tenant. A tenant is also known as a project. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|stack_name |M |1 |string |The name of a stack. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|stack_id |M |1 |string |The UUID of the stack. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|resolve_outputs |O |1 |boolean |A boolean indicating whether the outputs section of a stack should be resolved. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Response: - -+-------------------------+------------------+------------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+==============================================================================+ -|X-Openstack-Reqeuest-Id |String |A unique ID for tracking service request. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|stack |Object |The stack object. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|capabilities |array |List of stack capabilities for stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|creation_time |String |The date and time when the resource was created. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|deletion_time |String |The date and time when the resource was (soft-) deleted. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|description |String |The description of the stack resource. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|disable_rollback |boolean |Whether deletion of all stack resources when stack creation fails is enabled. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|id |String |The UUID of the stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|links |array |A list of URLs for the stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|notification_topics |array |List of notification topics for stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|outputs |array |A list of stack outputs. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|parameters |object | A group of key-value pairs | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|parent |String |The stack ID of the parent stack, if this is a nested stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|stack_name |String |A name for the stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|stack_owner |String |The owner of the stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|stack_status |String |The status of the stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|stack_status_reason |String |The reason for the current status of the stack. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|stack_user_project_id |String |The project UUID of the stack user. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|tags |array |The stack tags. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|template_description |String |The description of the stack template. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|timeout_mins |integer |The timeout for stack creation in minutes. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|updated_time |String |The date and time when the object was updated. | -+-------------------------+------------------+------------------------------------------------------------------------------+ - -Delete stack -+++++++++++++ - -https://developer.openstack.org/api-ref/orchestration/v1/#show-stack-details - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/heat/v1/{tenant-id}/stacks/{stack-name}/{stack-id} | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+==================+=========+===========+==========================+=================================================================================================+ -|tenant_id |M |1 |string |The UUID of the tenant. A tenant is also known as a project. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|stack_name |M |1 |string |The name of a stack. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|stack_id |M |1 |string |The UUID of the stack. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Create server -+++++++++++++ - -https://developer.openstack.org/api-ref/compute/#create-server - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/nova/v2.37/{tenant_id}/servers | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+================================================+=========+===========+==========================+=================================================================================================+ -|server |M |1 |object |A server object. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|name |M |1 |string |The server name. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|flavorRef |M |1 |string |The flavor reference, as an ID (including a UUID) or full URL | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|imageRef |M |1 |string |The UUID of the image to use for your server instance | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|security_groups |O |1 |array |One or more security groups. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|metadata |O |1 |object |Metadata key and value pairs. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|accessIPv4 |O |1 |string |IPv4 address that should be used to access this server. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|accessIPv6 |O |1 |string |IPv6 address that should be used to access this server. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|adminPass |O |1 |string |The administrative password of the server. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|user_data |O |1 |string |Configuration information or scripts to use upon launch. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|availability_zone |O |1 |string |The availability zone from which to launch the server. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|networks |M |1 |object |A networks object. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|networks.uuid |O |1 |string |To provision the server instance with a NIC for a network | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|networks.port |O |1 |string |To provision the server instance with a NIC for an already existing port | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|networks.fixed_ip |O |1 |string |A fixed IPv4 address for the NIC | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|networks.tag |O |1 |string |A device role tag that can be applied to a network interface. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|personality |O |1 |array |The file path and contents, text only, to inject into the server at launch. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2 |O |1 |array |Enables fine grained control of the block device mapping for an instance. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.device_name |M |1 |string |A path to the device for the volume that you want to use to boot the server. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.source_type |M |1 |string |The source type of the volume. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.destination_type |O |1 |string |Defines where the volume comes from. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.delete_on_termination |O |1 |string |To delete the boot volume when the server is destroyed, specify true. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.guest_format |M |1 |string |Specifies the guest server disk file system format, such as ephemeral or swap. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.boot_index |M |1 |string |Defines the order in which a hypervisor tries devices | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.uuid |O |1 |string |This is the uuid of source resource. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.tag |O |1 |string |A device role tag that can be applied to a block device. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|block_device_mapping_v2.disk_bus |O |1 |string |Disk bus type, some hypervisors (currently only libvirt) support specify this parameter | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|config_drive |O |1 |boolean |Indicates whether a configuration drive enables metadata injection. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|key_name |O |1 |string |Key pair name. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|os:scheduler_hints |O |1 |object |The dictionary of data to send to the scheduler. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|OS-DCF:diskConfig |O |1 |string |Controls how the API partitions the disk when you create, rebuild, or resize servers. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|description |O |1 |string |A free form description of the server. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|tags |O |1 |array |A list of tags. | -+------------------------------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Response: - -+-------------------------+------------------+------------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=========================+==================+==============================================================================+ -|Location |String |The location URL of the server. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|server |object |A server object. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|id |String |The UUID of the server. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|links |array |Links to the resources in question. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|OS-DCF:diskConfig |String |Disk configuration. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|security_groups |array |One or more security groups objects. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|security_groups.name |String |The security group name. | -+-------------------------+------------------+------------------------------------------------------------------------------+ -|adminPass |String |The administrative password for the server. | -+-------------------------+------------------+------------------------------------------------------------------------------+ - -Delete server -+++++++++++++ - -https://developer.openstack.org/api-ref/compute/#delete-server - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/nova/v2.1/{tenant_id}/servers/{server_id} | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+==================+=========+===========+==========================+=================================================================================================+ -|server_id |M |1 |string |The UUID of the server. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Create Keypair -+++++++++++++++ - -https://developer.openstack.org/api-ref/compute/#create-or-import-keypair - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/nova/v2.1/{tenant_id}/os-keypairs | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+==================+=========+===========+==========================+=================================================================================================+ -|keypair |M |1 |Object |Keypair object | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|name |M |1 |string |A name for the keypair which will be used to reference it later. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|public_key |O |1 |string |The public ssh key to import. If you omit this value, a keypair is generated for you. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|type |O |1 |string |The type of the keypair. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|user_id |O |1 |string |The user_id for a keypair. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Response: - -+-----------------+------------------+------------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=================+==================+==============================================================================+ -|keypair |object |Keypair object | -+-----------------+------------------+------------------------------------------------------------------------------+ -|name |String |A name for the keypair which will be used to reference it later. | -+-----------------+------------------+------------------------------------------------------------------------------+ -|public_key |String |The keypair public key. | -+-----------------+------------------+------------------------------------------------------------------------------+ -|fingerprint |String |The fingerprint for the keypair. | -+-----------------+------------------+------------------------------------------------------------------------------+ -|user_id |String |The user_id for a keypair. | -+-----------------+------------------+------------------------------------------------------------------------------+ -|private_key |String |If you do not provide a public key on create | -+-----------------+------------------+------------------------------------------------------------------------------+ -|type |String |The type of the keypair. | -+-----------------+------------------+------------------------------------------------------------------------------+ - -Delete Keypair -+++++++++++++++ - -https://developer.openstack.org/api-ref/compute/#delete-keypair - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/nova/v2.1/{tenant_id}/os-keypairs/{keypair-id} | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+==================+=========+===========+==========================+=================================================================================================+ -|keypair_name |M |1 |String |The keypair name. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|user_id |O |1 |String |This allows administrative users to operate key-pairs of specified user ID. | -+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Create Network -+++++++++++++++ - -https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail#create-network - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/networks | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+=================================================================================================+ -|network |M |1 |Object |A network object. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|admin_state_up |O |1 |boolean |The administrative state of the network, which is up (true) or down (false). | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|dns_domain |O |1 |string |A valid DNS domain. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|mtu |O |1 |integer |The maximum transmission unit (MTU) value to address fragmentation. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|name |O |1 |string |Human-readable name of the network. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|port_security_enabled |O |1 |boolean |The port security status of the network. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|project_id |O |1 |string |The ID of the project that owns the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|provider:network_type |O |1 |string |The type of physical network that this network should be mapped to. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|provider:physical_network |O |1 |string |The physical network where this network should be implemented. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|provider:segmentation_id |O |1 |integer |The ID of the isolated segment on the physical network. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|qos_policy_id |O |1 |string |The ID of the QoS policy. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|router:external |O |1 |boolean |Indicates whether this network can provide floating IPs via a router. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|segments |O |1 |array |A list of provider segment objects. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|shared |O |1 |boolean |Indicates whether this network is shared across all tenants. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|tenant_id |O |1 |string |The ID of the project that owns the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|vlan_transparent |O |1 |boolean |Indicates the VLAN transparency mode of the network, | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|description |O |1 |string |A human-readable description for the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|is_default |O |1 |boolean |The network is default or not. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|availability_zone_hints |O |1 |array |The availability zone candidate for the network. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Response: - -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=============================+==================+==============================================================================+ -|network |object |A network object. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|admin_state_up |boolean |The administrative state of the network, which is up (true) or down (false). | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|availability_zone_hints |array |The availability zone candidate for the network. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|availability_zones |array |The availability zone for the network. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|created_at |String |Time at which the resource has been created (in UTC ISO8601 format). | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|dns_domain |String |A valid DNS domain. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|id |String |The ID of the network. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|ipv4_address_scope |String |The ID of the IPv4 address scope that the network is associated with. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|ipv6_address_scope |String |The ID of the IPv6 address scope that the network is associated with. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|mtu |integer |The maximum transmission unit (MTU) value to address fragmentation. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|name |String |Human-readable name of the network. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|port_security_enabled |boolean |The port security status of the network. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|project_id |String |The ID of the project. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|provider:network_type |String |The type of physical network that this network is mapped to. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|provider:physical_network |String |The physical network where this network is implemented. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|provider:segmentation_id |integer |The ID of the isolated segment on the physical network. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|qos_policy_id |String |The ID of the QoS policy. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|revision_number |integer |The revision number of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|router:external |boolean |Indicates whether this network can provide floating IPs via a router. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|segments |array |A list of provider segment objects. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|shared |boolean |Indicates whether this network is shared across all tenants. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|status |String |The network status. Values are ACTIVE, DOWN, BUILD or ERROR. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|subnets |array |The associated subnets. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|tenant_id |String |The ID of the project. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|updated_at |String |Time at which the resource has been updated (in UTC ISO8601 format). | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|vlan_transparent |boolean |Indicates the VLAN transparency mode of the network. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|description |String |A human-readable description for the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|is_default |boolean |The network is default pool or not. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ - -Delete Network -+++++++++++++++ - -https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail#delete-network - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/networks/{network-id} | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+==============================================================+ -|network_id |M |1 |String |The ID of the network. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ - -Create Subnet -+++++++++++++++ - -https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail,create-subnet-detail#create-subnet - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/subnets | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+=================================================================================================+ -|subnet |M |1 |string |A subnet object. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|tenant_id |O |1 |string |The ID of the project that owns the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|project_id |O |1 |string |The ID of the project that owns the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|name |O |1 |string |Human-readable name of the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|enable_dhcp |O |1 |boolean |Indicates whether dhcp is enabled or disabled for the subnet. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|network_id |M |1 |string |The ID of the network to which the subnet belongs. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|dns_nameservers |O |1 |array |List of dns name servers associated with the subnet. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|allocation_pools |O |1 |array |Allocation pools with start and end IP addresses for this subnet. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|host_routes |O |1 |array |Additional routes for the subnet. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|ip_version |M |1 |integer |The IP protocol version. Value is 4 or 6. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|gateway_ip |O |1 |string |Gateway IP of this subnet. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|cidr |M |1 |string |The CIDR of the subnet. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|description |O |1 |string |A human-readable description for the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|ipv6_address_mode |O |1 |string |The IPv6 address modes specifies mechanisms for assigning IP addresses. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|ipv6_ra_mode |O |1 |string |The IPv6 router advertisement specifies whether the networking service | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|segment_id |O |1 |string |The ID of a network segment the subnet is associated with. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|subnetpool_id |O |1 |string |The ID of the subnet pool associated with the subnet. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|use_default_subnetpool |O |1 |boolean |Whether to allocate this subnet from the default subnet pool. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|service_types |O |1 |array |The service types associated with the subnet. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Response: - -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=============================+==================+==============================================================================+ -|subnet |string |A subnet object. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|id |string |The ID of the subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|tenant_id |string |The ID of the project. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|project_id |string |The ID of the project. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|name |String |Human-readable name of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|enable_dhcp |boolean |Indicates whether dhcp is enabled or disabled for the subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|network_id |String |The ID of the network to which the subnet belongs. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|dns_nameservers |array |List of dns name servers associated with the subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|allocation_pools |array |Allocation pools with start and end IP addresses for this subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|host_routes |array |Additional routes for the subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|ip_version |integer |The IP protocol version. Value is 4 or 6. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|gateway_ip |string |Gateway IP of this subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|cidr |string |The CIDR of the subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|created_at |string |Time at which the subnet has been created. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|description |string |A human-readable description for the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|ipv6_address_mode |string |The IPv6 address modes specifies mechanisms for assigning IP addresses. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|ipv6_ra_mode |string |The IPv6 router advertisement specifies whether the networking service | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|revision_number |integer |The revision number of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|service_types |string |The service types associated with the subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|subnetpool_id |string |The ID of the subnet pool associated with the subnet. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|segment_id |string |The ID of a network segment the subnet is associated with. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|updated_at |string |Time at which the subnet has been updated. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ - -Delete Subnet -+++++++++++++++ - -https://developer.openstack.org/api-ref/networking/v2/?expanded=create-network-detail,delete-subnet-detail#delete-subnet - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/subnets/{subnet-id} | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+==============================================================+ -|subnet_id |M |1 |String |The ID of the subnet. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ - -Create Port -+++++++++++++++ - -https://developer.openstack.org/api-ref/networking/v2/#create-port - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/ports | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+=================================================================================================+ -|port |M |1 |object |A port object. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|admin_state_up |O |1 |boolean |The administrative state of the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|allowed_address_pairs |O |1 |array |A set of zero or more allowed address pairs. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|binding:host_id |O |1 |string |The ID of the host where the port resides. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|binding:profile |O |1 |string |A dictionary that enables the application running on the specific host | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|binding:vnic_type |O |1 |string |The type of vNIC which this port should be attached to. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|description |O |1 |string |A human-readable description for the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|device_id |O |1 |string |The ID of the device that uses this port. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|device_owner |O |1 |string |The entity type that uses this port. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|dns_domain |O |1 |string |A valid DNS domain. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|dns_name |O |1 |string |A valid DNS name. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|extra_dhcp_opts |O |1 |array |A set of zero or more extra DHCP option pairs. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|fixed_ips |O |1 |array |The IP addresses for the port. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|mac_address |O |1 |string |The MAC address of the port. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|name |O |1 |string |Human-readable name of the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|network_id |M |1 |string |The ID of the attached network. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|port_security_enabled |O |1 |boolean |The port security status. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|project_id |O |1 |string |The ID of the project that owns the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|qos_policy_id |O |1 |string |QoS policy associated with the port. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|security_groups |O |1 |array |The IDs of security groups applied to the port. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ -|tenant_id |O |1 |string |The ID of the project that owns the resource. | -+----------------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+ - -Response: - -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=============================+==================+==============================================================================+ -|port |object |A port object. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|admin_state_up |boolean |The administrative state of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|allowed_address_pairs |array |A set of zero or more allowed address pairs. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|binding:host_id |string |The ID of the host where the port resides. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|binding:profile |String |A dictionary that enables the application running on the specific host | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|binding:vif_details |object |A dictionary which contains additional information on the port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|binding:vif_type |String |The type of which mechanism is used for the port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|binding:vnic_type |string |The type of vNIC which this port should be attached to. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|created_at |string |Time at which port has been created. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|data_plane_status |string |Status of the underlying data plane of a port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|description |string |A human-readable description for the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|device_id |string |The ID of the device that uses this port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|device_owner |string |The entity type that uses this port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|dns_assignment |object |Data assigned to a port by the Networking internal DNS | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|dns_domain |string |A valid DNS domain. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|dns_name |string |A valid DNS name. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|extra_dhcp_opts |array |A set of zero or more extra DHCP option pairs. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|fixed_ips |array |The IP addresses for the port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|id |string |The ID of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|ip_allocation |string |Indicates when ports use either deferred, immediate or no IP allocation (none)| -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|mac_address |string |The MAC address of the port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|name |string |Human-readable name of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|network_id |string |The ID of the attached network. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|port_security_enabled |boolean |The port security status. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|project_id |string |The ID of the project. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|revision_number |integer |The revision number of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|qos_policy_id |string |The ID of the QoS policy associated with the port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|security_groups |array |The IDs of security groups applied to the port. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|status |string |The port status. Values are ACTIVE, DOWN, BUILD and ERROR. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|tenant_id |string |The ID of the project. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|updated_at |string |Time at which port has been updated. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ - -Delete Port -+++++++++++++++ - -https://developer.openstack.org/api-ref/network/v2/#delete-port - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/ports/{port-id} | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+==============================================================+ -|port_id |M |1 |String |The ID of the port. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ - -Create Security Group -++++++++++++++++++++++ - -https://developer.openstack.org/api-ref/network/v2/#create-security-group - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-groups | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+==============================================================+ -|security_group |M |1 |object |A security_group object. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|tenant_id |M |1 |string |The ID of the project. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|project_id |M |1 |string |The ID of the project. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|description |O |1 |string |A human-readable description for the resource. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|name |M |1 |string |Human-readable name of the resource. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ - -Response: - -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=============================+==================+==============================================================================+ -|security_group |object |A security_group object. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|id |string |The ID of the security group. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|tenant_id |string |The ID of the project. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|project_id |string |The ID of the project. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|created_at |string |Time at which the resource has been created (in UTC ISO8601 format). | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|updated_at |string |Time at which the resource has been updated (in UTC ISO8601 format). | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|revision_number |integer |The revision number of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|name |string |Human-readable name of the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|description |string |A human-readable description for the resource. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ -|security_group_rules |array |A list of security_group_rule objects. | -+-----------------------------+------------------+------------------------------------------------------------------------------+ - -Delete security group -++++++++++++++++++++++ - -https://developer.openstack.org/api-ref/network/v2/#delete-security-group - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-groups/{security-group-id} | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+==============================================================+ -|security_group_id |M |1 |String |The ID of the security group. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ - -Create Security Group Rule -++++++++++++++++++++++++++ - -https://developer.openstack.org/api-ref/network/v2/#create-security-group-rule - -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=======================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-group-rules | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Operation Type |POST | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+-----------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+================================================================================================+ -|security_group_rule |M |1 |object |A security_group_rule object. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|remote_group_id |O |1 |string |The remote group UUID to associate with this security group rule. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|direction |M |1 |string |Ingress or egress, which is the direction in which the metering rule is applied. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|protocol |M |1 |string |The IP protocol can be represented by a string, an integer, or null. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|ethertype |O |1 |string |Must be IPv4 or IPv6, and addresses represented in CIDR must match the ingress or egress rules. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|port_range_max |O |1 |integer |The maximum port number in the range that is matched by the security group rule. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|security_group_id |M |1 |string |The security group ID to associate with this security group rule. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|port_range_min |O |1 |integer |The minimum port number in the range that is matched by the security group rule. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|remote_ip_prefix |M |1 |string |The remote IP prefix to associate with this metering rule packet. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ -|description |O |1 |string |A human-readable description for the resource. Default is an empty string. | -+----------------------------+---------+-----------+--------------------------+------------------------------------------------------------------------------------------------+ - -Response: - -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|Attribute |Content |Description | -+=============================+==================+=================================================================================================+ -|security_group_rule |object |A security_group_rule object. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|remote_group_id |string |The remote group UUID to associate with this security group rule. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|direction |string |Ingress or egress, which is the direction in which the metering rule is applied. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|protocol |string |The IP protocol can be represented by a string, an integer, or null. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|ethertype |string |Must be IPv4 or IPv6, and addresses represented in CIDR must match the ingress or egress rules. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|port_range_max |integer |The maximum port number in the range that is matched by the security group rule. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|security_group_id |string |The security group ID to associate with this security group rule. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|tenant_id |string |The ID of the project. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|project_id |string |The ID of the project. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|port_range_min |integer |The minimum port number in the range that is matched by the security group rule. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|remote_ip_prefix |string |The remote IP prefix to associate with this metering rule packet. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|revision_number |integer |The revision number of the resource. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|id |string |The ID of the security group rule. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ -|description |string |A human-readable description for the resource. | -+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+ - -Delete security group -++++++++++++++++++++++ - -https://developer.openstack.org/api-ref/networking/v2/#delete-security-group-rule - -+--------------------+---------------------------------------------------------------------------------------------------------------------------------+ -|Interface Definition|Description | -+====================+=================================================================================================================================+ -|URI |http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-group-rules/{security-group-rule-id} | -+--------------------+---------------------------------------------------------------------------------------------------------------------------------+ -|Operation Type |DELETE | -+--------------------+---------------------------------------------------------------------------------------------------------------------------------+ -|Content-Type |application/json | -+--------------------+---------------------------------------------------------------------------------------------------------------------------------+ - -Request Body: - -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content |Description | -+============================+=========+===========+==========================+==============================================================+ -|security_group_rule_id |M |1 |String |The ID of the security group rule. | -+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+ - -Policy API ----------- - -Create a dictionary item -++++++++++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/createDictionaryItem | -+--------------------+--------------------------+ -|Operation Type |PUT | -+--------------------+--------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|dictionory |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|dictionaryJson |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|dictionaryType |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestId |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Create Policy -+++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/createPolicy | -+--------------------+--------------------------+ -|Operation Type |PUT | -+--------------------+--------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|attributes |M |1 |Object |set of attributes in key value pair | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|configBody |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|configBodyType |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|configName |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|ecompName |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyClass |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyConfigType |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyDescription |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyName |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |M |1 |String |request ID | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Delete Policy -+++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/deletePolicy | -+--------------------+--------------------------+ -|Operation Type |DELETE | -+--------------------+--------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|deleteCondition |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|pdpGroup |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyComponent |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyName |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyType |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |M |1 |String |request ID | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Get Configuration -+++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/getConfig | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|configAttributes |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|configName |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|ecompName |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyName |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|unique |M |1 |Boolean| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |M |1 |String |request ID | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Get Decision -++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/getDecision | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|decisionAttributes |M |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|ecompComponentName |M |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |M |1 |String |request ID | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Response Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|decision |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|details |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Get Dictionary Items -++++++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/getDictionaryItems | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|dictionary |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|dictionaryJson |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|dictionaryType |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |M |1 |String |request ID | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Response Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|dictionaryData |N |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|dictionaryJson |N |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|responseCode |N |1 |Integer| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|responseMessage |N |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Get Metrics -+++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/getMetrics | -+--------------------+--------------------------+ -|Operation Type |GET | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Response Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|metricsTotal |N |1 |Integer| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|papMetrics |N |1 |Integer| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|pdpMetrics |N |1 |Integer| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|responseCode |N |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|responseMessage |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -Get Notification -++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/getNotification | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Response Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|metricsTotal |N |1 |Integer| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|papMetrics |N |1 |Integer| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|pdpMetrics |N |1 |Integer| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|responseCode |N |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|responseMessage |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -List Configuration -++++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/listConfiguration | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|configAttributes |N |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|configName |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|ecompName |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyName |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|unique |N |1 |Boolean| | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Import policy -+++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/policyEngineImport | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|importParameterJson|Y |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|file |Y |1 |File | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Push Policy -+++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/pushPolicy | -+--------------------+--------------------------+ -|Operation Type |PUT | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|pdpGroup |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyName |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyType |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Send Event -++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/sendEvent | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|eventAttributes |N |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Send Heartbeat -++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/sendEvent | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|notificationTopic |Y |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Stop Notification -+++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/stopNotification | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|notificationTopic |Y |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Update Dictionary -+++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/updateDictionaryItem | -+--------------------+--------------------------+ -|Operation Type |PUT | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|dictionary |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|dictionaryJson |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|dictionaryType |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - -Update Policy -+++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/updatePolicy | -+--------------------+--------------------------+ -|Operation Type |PUT | -+--------------------+--------------------------+ - -Request Headers: - -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Header Name |Qualifier|Description | -+===================+=========+=========================================================================================+ -|ClientAuth |Y |encoded client authentication details | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|X-ECOMP-RequestID |N |Request ID to track the requests | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Environment |Y |execution environments | -+-------------------+---------+-----------------------------------------------------------------------------------------+ -|Authorization |Y |Base64 encoded username:password | -+-------------------+---------+-----------------------------------------------------------------------------------------+ - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Qualifier|Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|attributes |N |1 |Object | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|configBody |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|configBodyType |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|configName |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|ecompName |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyClass |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyConfigType |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyDescription |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|policyName |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|requestID |N |1 |String | | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - -HTTP Response Code: - -+------------------+---------------------+ -|HTTP CODE |Description | -+==================+=====================+ -|200 |successful | -+------------------+---------------------+ -|400 |Invalid Request | -+------------------+---------------------+ -|401 |Unauthorized | -+------------------+---------------------+ -|500 |Error | -+------------------+---------------------+ - - -OOF/HAS create update API -+++++++++++++++++++++++++ - -+--------------------+--------------------------+ -|Interface Definition|Description | -+====================+==========================+ -|URI |/api/oof/v1/placement | -+--------------------+--------------------------+ -|Operation Type |POST | -+--------------------+--------------------------+ - - -Request Parameters: - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|requestInfo |Y |1 |Object |The content of the RequestInfo object. | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|placementInfo |Y |1 |Object |The Content of the PlacementInfo object. | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|licenseInfo |N |1 |Object |The Content of the LicenseInfo object. | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|serviceInfo |Y |1 |Object |The Content of the ServiceInfo object. | -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ - - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|transactionId |Y |1 |String |A unique ID to track an ONAP transaction. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|requestId |Y |1 |String |A unique ID to track multiple requests. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|callbackUrl |Y |1 |String |The end point of a callback service where recommendations are posted. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|callbackHeader |N |1 |String |The header information a client expecting in a async callback. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|sourceId |Y |1 |String |The unique ID of a client making an optimization call. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|requestType |Y |1 |String |The type of a request | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|numSolutions |N |1 |Integer|Expected number of solutions. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|optimizers |Y |1..N |List of Strings|A list of optimization services. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|timeout |N |1 |Integer|A tolerance window (in secs) for expecting solutions. Default is 600 secs.| -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - - -PlacementInfo Object - -+-------------------+---------+-----------+-------+-------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=============================================================+ -|requestParameters |C |1 |String |A JSON object conaining service and customer-specific data. A client or service designer is required to specify the parameters of interest for a given service and their location in the JSON blob through optimization query policies. This attribute is only required if a request contains service or customer-specific information.| -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|placementDemands |Y |1..N |List of PlacementDemand Object|The resource information for a placement service.| -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|subscriberInfo |N |1 |Object |The information of a service subscriber. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - -PlacementDemand Object - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|resourceModuleName |Y |1 |String |A resource name as defined in a service model. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|serviceResourceId |Y |1 |String |A unique resource Id with a local scope between client and OOF. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|tenantId |N |1 |String |A tenant Id as defined in the ordering system. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|resourceModelInfo |Y |1 |Object |Resource model information as defined in SDC. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|existingCandidates |N |1..N |List of Candidates Objects | The existing placement information of a resource. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|excludedCandidates |N |1..N |List of Candidates Objects |Candidates that need to be excluded from solutions.| -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|requiredCandidates |N |1..N |List of Candidates Objects |Candidates that must be included in solutions. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - - -SubscriberInfo Object - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|globalSubscriberId |Y |1 |String |An ID of a subscriber. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|subscriberName |Y |1.N |String |The name of a subscriber. If the name is not known, the value must be 'unknown'.| -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|subscriberCommonSiteId |N |1 |String |Id representing a subscriber location. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - -ModelMetaData Object - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|modelInvariantId |Y |1 |String |A model invariant Id as defined in a service model. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|modelVersionId |Y |1 |String |A unique model Id as defined in a service model. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|modelName |N |1 |String |A model name as defined in a service model. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|modelType |N |1 |String |A model type as defined in a service model. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|modelVersion |N |1 |String |A model version as defined in a service model. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|modelCustomizationName |N |1 |String |A model customization name as defined in a service model. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - - -Candidates Object - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|identifierType |Y |1 |String |The type of a candidate. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|identifiers |Y |1..N |List |A list of identifiers. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|cloudOwner |C |1 |String |The name of a cloud owner. Only required if identifierType is cloud_region_id.| -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - - -ServiceInfo Object - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|serviceInstanceId |Y |1 |String |A service instance id associated with a request. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|modelInfo |Y |1 |ModelMetaData Object |A list of identifiers. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|serviceName |Y |1 |String |The name of a service | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - -LicenseInfo Object - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|licenseDemands |Y |1..N |List of LicenseDemands Object |A list of resources for license selection. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - -LicenseDemand Object - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|resourceModuleName |Y |1 |String |A resource name as defined in a service model. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|serviceResourceId |Y |1 |String |A unique resource Id with a local scope between client and OOF. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|resourceModelInfo |Y |1 |ModelMetaData Object |Resource model information as defined in a service model.| -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|existingLicenses |N |1 |LicenseModel Object |Existing license information assigned to a resource. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - -LicenseModel Object - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|entitlementPoolUUID|Y |1..N |List |Entitlement pool UUIDs associated with a resource. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|licenseKeyGroupUUID|Y |1..N |List |License key groups associated with a resource. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ - - -Response Body - -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|Attribute |Required |Cardinality|Content|Description | -+===================+=========+===========+=======+=======================================================================+ -|requestId |Y |1 |String |A unique Id for an ONAP transaction. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|transactionId |Y |1 |String |A unique ID to track multiple requests associated with a transaction. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|statusMessage |N |1 |String |Reasoning if a requestStatus is failed. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ -|requestStatus |Y |1 |String |The status of a request. | -+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
\ No newline at end of file diff --git a/docs/api/swagger/swagger.html.html b/docs/api/swagger/swagger.html.html deleted file mode 100644 index dc6064bb80..0000000000 --- a/docs/api/swagger/swagger.html.html +++ /dev/null @@ -1,19377 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta http-equiv="X-UA-Compatible" content="IE=edge" /> - <title>SO Casablanca APIs</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <meta charset="UTF-8" /> - <script> -/*! jQuery v3.1.0 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?a<0?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0, -r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Y,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:X.test(c)?JSON.parse(c):c)}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=V.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var $=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,_=new RegExp("^(?:([+-])=|)("+$+")([a-z%]*)$","i"),aa=["Top","Right","Bottom","Left"],ba=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ca=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function da(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&_.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ea={};function fa(a){var b,c=a.ownerDocument,d=a.nodeName,e=ea[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ea[d]=e,e)}function ga(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=V.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&ba(d)&&(e[f]=fa(d))):"none"!==c&&(e[f]="none",V.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ga(this,!0)},hide:function(){return ga(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){ba(this)?r(this).show():r(this).hide()})}});var ha=/^(?:checkbox|radio)$/i,ia=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;c<d;c++)V.set(a[c],"globalEval",!b||V.get(b[c],"globalEval"))}var na=/<|&#?\w+;/;function oa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(na.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ia.exec(f)||["",""])[1].toLowerCase(),i=ka[h]||ka._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;c<h;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==va()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===va()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&r.nodeName(this,"input"))return this.click(),!1},_default:function(a){return r.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ta:ua,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:ua,isPropagationStopped:ua,isImmediatePropagationStopped:ua,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ta,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ta,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ta,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&qa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ra.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return wa(this,a,b,c,d)},one:function(a,b,c,d){return wa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=ua),this.each(function(){r.event.remove(this,a,c,b)})}});var xa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/<script|<style|<link/i,za=/checked\s*(?:[^=]|=\s*.checked.)/i,Aa=/^true\/(.*)/,Ba=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ga(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ha.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ha(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,la(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ea),l=0;l<i;l++)j=h[l],ja.test(j.type||"")&&!V.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ba,""),k))}return a}function Ia(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(la(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&ma(la(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(xa,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;d<e;d++)Ga(f[d],g[d]);if(b)if(c)for(f=f||la(a),g=g||la(h),d=0,e=f.length;d<e;d++)Fa(f[d],g[d]);else Fa(a,h);return g=la(h,"script"),g.length>0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(la(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(la(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ja=/^margin/,Ka=new RegExp("^("+$+")(?!px)[a-z%]+$","i"),La=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",pa.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,pa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Ma(a,b,c){var d,e,f,g,h=a.style;return c=c||La(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ka.test(g)&&Ja.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Na(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Oa=/^(none|table(?!-c[ea]).+)/,Pa={position:"absolute",visibility:"hidden",display:"block"},Qa={letterSpacing:"0",fontWeight:"400"},Ra=["Webkit","Moz","ms"],Sa=d.createElement("div").style;function Ta(a){if(a in Sa)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ra.length;while(c--)if(a=Ra[c]+b,a in Sa)return a}function Ua(a,b,c){var d=_.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Va(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+aa[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+aa[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+aa[f]+"Width",!0,e))):(g+=r.css(a,"padding"+aa[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+aa[f]+"Width",!0,e)));return g}function Wa(a,b,c){var d,e=!0,f=La(a),g="border-box"===r.css(a,"boxSizing",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),d<=0||null==d){if(d=Ma(a,b,f),(d<0||null==d)&&(d=a.style[b]),Ka.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Va(a,b,c||(g?"border":"content"),e,f)+"px"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ma(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=_.exec(c))&&e[1]&&(c=da(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ma(a,b,d)),"normal"===e&&b in Qa&&(e=Qa[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Oa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Wa(a,b,d):ca(a,Pa,function(){return Wa(a,b,d)})},set:function(a,c,d){var e,f=d&&La(a),g=d&&Va(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=_.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ua(a,c,g)}}}),r.cssHooks.marginLeft=Na(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Ma(a,"marginLeft"))||a.getBoundingClientRect().left-ca(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+aa[d]+b]=f[d]||f[d-2]||f[0];return e}},Ja.test(a)||(r.cssHooks[a+b].set=Ua)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=La(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function eb(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&ba(a),q=V.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],$a.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=V.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ga([a],!0),j=a.style.display||j,k=r.css(a,"display"),ga([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=V.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ga([a],!0),m.done(function(){p||ga([a]),V.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=db(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function fb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],r.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function gb(a,b,c){var d,e,f=0,g=gb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||bb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||bb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(fb(k,j.opts.specialEasing);f<g;f++)if(d=gb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,db,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}r.Animation=r.extend(gb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return da(c.elem,a,_.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(K);for(var c,d=0,e=a.length;d<e;d++)c=a[d],gb.tweeners[c]=gb.tweeners[c]||[],gb.tweeners[c].unshift(b)},prefilters:[eb],prefilter:function(a,b){b?gb.prefilters.unshift(a):gb.prefilters.push(a)}}),r.speed=function(a,b,c){var e=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off||d.hidden?e.duration=0:e.duration="number"==typeof e.duration?e.duration:e.duration in r.fx.speeds?r.fx.speeds[e.duration]:r.fx.speeds._default,null!=e.queue&&e.queue!==!0||(e.queue="fx"),e.old=e.complete,e.complete=function(){r.isFunction(e.old)&&e.old.call(this),e.queue&&r.dequeue(this,e.queue)},e},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(ba).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=gb(this,r.extend({},a),f);(e||V.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=V.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&_a.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=V.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(cb(b,!0),a,d,e)}}),r.each({slideDown:cb("show"),slideUp:cb("hide"),slideToggle:cb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(Ya=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),Ya=void 0},r.fx.timer=function(a){r.timers.push(a),a()?r.fx.start():r.timers.pop()},r.fx.interval=13,r.fx.start=function(){Za||(Za=a.requestAnimationFrame?a.requestAnimationFrame(ab):a.setInterval(r.fx.tick,r.fx.interval))},r.fx.stop=function(){a.cancelAnimationFrame?a.cancelAnimationFrame(Za):a.clearInterval(Za),Za=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var hb,ib=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K); -if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i<h;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,"optgroup"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Qb=[],Rb=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Qb.pop()||r.expando+"_"+rb++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Rb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Rb.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Rb,"$1"+e):b.jsonp!==!1&&(b.url+=(sb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Qb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=B.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=oa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=r.trim(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length};function Sb(a){return r.isWindow(a)?a:9===a.nodeType&&a.defaultView}r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=Sb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),r.nodeName(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||pa})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return S(this,function(a,d,e){var f=Sb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Na(o.pixelPosition,function(a,c){if(c)return c=Ma(a,b),Ka.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return S(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.parseJSON=JSON.parse,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Tb=a.jQuery,Ub=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Ub),b&&a.jQuery===r&&(a.jQuery=Tb),r},b||(a.jQuery=a.$=r),r}); -</script> - - <script> -!function(){var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function S(a){function d(e){var b=e.charCodeAt(0);if(b!==92)return b;var a=e.charAt(1);return(b=r[a])?b:"0"<=a&&a<="7"?parseInt(e.substring(1),8):a==="u"||a==="x"?parseInt(e.substring(2),16):e.charCodeAt(1)}function g(e){if(e<32)return(e<16?"\\x0":"\\x")+e.toString(16);e=String.fromCharCode(e);return e==="\\"||e==="-"||e==="]"||e==="^"?"\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),e=[],a= -b[0]==="^",c=["["];a&&c.push("^");for(var a=a?1:0,f=b.length;a<f;++a){var h=b[a];if(/\\[bdsw]/i.test(h))c.push(h);else{var h=d(h),l;a+2<f&&"-"===b[a+1]?(l=d(b[a+2]),a+=2):l=h;e.push([h,l]);l<65||h>122||(l<65||h>90||e.push([Math.max(65,h)|32,Math.min(l,90)|32]),l<97||h>122||e.push([Math.max(97,h)&-33,Math.min(l,122)&-33]))}}e.sort(function(e,a){return e[0]-a[0]||a[1]-e[1]});b=[];f=[];for(a=0;a<e.length;++a)h=e[a],h[0]<=f[1]+1?f[1]=Math.max(f[1],h[1]):b.push(f=h);for(a=0;a<b.length;++a)h=b[a],c.push(g(h[0])), -h[1]>h[0]&&(h[1]+1>h[0]&&c.push("-"),c.push(g(h[1])));c.push("]");return c.join("")}function s(e){for(var a=e.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),c=a.length,d=[],f=0,h=0;f<c;++f){var l=a[f];l==="("?++h:"\\"===l.charAt(0)&&(l=+l.substring(1))&&(l<=h?d[l]=-1:a[f]=g(l))}for(f=1;f<d.length;++f)-1===d[f]&&(d[f]=++x);for(h=f=0;f<c;++f)l=a[f],l==="("?(++h,d[h]||(a[f]="(?:")):"\\"===l.charAt(0)&&(l=+l.substring(1))&&l<=h&& -(a[f]="\\"+d[l]);for(f=0;f<c;++f)"^"===a[f]&&"^"!==a[f+1]&&(a[f]="");if(e.ignoreCase&&m)for(f=0;f<c;++f)l=a[f],e=l.charAt(0),l.length>=2&&e==="["?a[f]=b(l):e!=="\\"&&(a[f]=l.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var x=0,m=!1,j=!1,k=0,c=a.length;k<c;++k){var i=a[k];if(i.ignoreCase)j=!0;else if(/[a-z]/i.test(i.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){m=!0;j=!1;break}}for(var r={b:8,t:9,n:10,v:11, -f:12,r:13},n=[],k=0,c=a.length;k<c;++k){i=a[k];if(i.global||i.multiline)throw Error(""+i);n.push("(?:"+s(i)+")")}return RegExp(n.join("|"),j?"gi":"g")}function T(a,d){function g(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)g(c);c=a.nodeName.toLowerCase();if("br"===c||"li"===c)s[j]="\n",m[j<<1]=x++,m[j++<<1|1]=a}}else if(c==3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\r\n?/g,"\n"):c.replace(/[\t\n\r ]+/g," "),s[j]=c,m[j<<1]=x,x+=c.length,m[j++<<1|1]= -a)}var b=/(?:^|\s)nocode(?:\s|$)/,s=[],x=0,m=[],j=0;g(a);return{a:s.join("").replace(/\n$/,""),d:m}}function H(a,d,g,b){d&&(a={a:d,e:a},g(a),b.push.apply(b,a.g))}function U(a){for(var d=void 0,g=a.firstChild;g;g=g.nextSibling)var b=g.nodeType,d=b===1?d?a:g:b===3?V.test(g.nodeValue)?a:d:d;return d===a?void 0:d}function C(a,d){function g(a){for(var j=a.e,k=[j,"pln"],c=0,i=a.a.match(s)||[],r={},n=0,e=i.length;n<e;++n){var z=i[n],w=r[z],t=void 0,f;if(typeof w==="string")f=!1;else{var h=b[z.charAt(0)]; -if(h)t=z.match(h[1]),w=h[0];else{for(f=0;f<x;++f)if(h=d[f],t=z.match(h[1])){w=h[0];break}t||(w="pln")}if((f=w.length>=5&&"lang-"===w.substring(0,5))&&!(t&&typeof t[1]==="string"))f=!1,w="src";f||(r[z]=w)}h=c;c+=z.length;if(f){f=t[1];var l=z.indexOf(f),B=l+f.length;t[2]&&(B=z.length-t[2].length,l=B-f.length);w=w.substring(5);H(j+h,z.substring(0,l),g,k);H(j+h+l,f,I(w,f),k);H(j+h+B,z.substring(B),g,k)}else k.push(j+h,w)}a.g=k}var b={},s;(function(){for(var g=a.concat(d),j=[],k={},c=0,i=g.length;c<i;++c){var r= -g[c],n=r[3];if(n)for(var e=n.length;--e>=0;)b[n.charAt(e)]=r;r=r[1];n=""+r;k.hasOwnProperty(n)||(j.push(r),k[n]=q)}j.push(/[\S\s]/);s=S(j)})();var x=d.length;return g}function v(a){var d=[],g=[];a.tripleQuotedStrings?d.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?d.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):d.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,q])):d.push(["com", -/^#[^\n\r]*/,q,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,q]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));if(b=a.regexLiterals){var s=(b=b>1?"":"\n\r")?".":"[\\S\\s]";g.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+s+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+ -s+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&g.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&g.push(["kwd",RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),q]);d.push(["pln",/^\s+/,q," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");g.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/, -q],["pun",RegExp(b),q]);return C(d,g)}function J(a,d,g){function b(a){var c=a.nodeType;if(c==1&&!x.test(a.className))if("br"===a.nodeName)s(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&g){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(j.createTextNode(d),a.nextSibling),s(a),c||a.parentNode.removeChild(a)}}function s(a){function b(a,c){var d= -c?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=b(e,1),g=a.nextSibling;e.appendChild(d);for(var i=g;i;i=g)g=i.nextSibling,e.appendChild(i)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var x=/(?:^|\s)nocode(?:\s|$)/,m=/\r\n?|\n/,j=a.ownerDocument,k=j.createElement("li");a.firstChild;)k.appendChild(a.firstChild);for(var c=[k],i=0;i<c.length;++i)b(c[i]);d===(d|0)&&c[0].setAttribute("value",d);var r=j.createElement("ol"); -r.className="linenums";for(var d=Math.max(0,d-1|0)||0,i=0,n=c.length;i<n;++i)k=c[i],k.className="L"+(i+d)%10,k.firstChild||k.appendChild(j.createTextNode("\u00a0")),r.appendChild(k);a.appendChild(r)}function p(a,d){for(var g=d.length;--g>=0;){var b=d[g];F.hasOwnProperty(b)?D.console&&console.warn("cannot override language handler %s",b):F[b]=a}}function I(a,d){if(!a||!F.hasOwnProperty(a))a=/^\s*</.test(d)?"default-markup":"default-code";return F[a]}function K(a){var d=a.h;try{var g=T(a.c,a.i),b=g.a; -a.a=b;a.d=g.d;a.e=0;I(d,b)(a);var s=/\bMSIE\s(\d+)/.exec(navigator.userAgent),s=s&&+s[1]<=8,d=/\n/g,x=a.a,m=x.length,g=0,j=a.d,k=j.length,b=0,c=a.g,i=c.length,r=0;c[i]=m;var n,e;for(e=n=0;e<i;)c[e]!==c[e+2]?(c[n++]=c[e++],c[n++]=c[e++]):e+=2;i=n;for(e=n=0;e<i;){for(var p=c[e],w=c[e+1],t=e+2;t+2<=i&&c[t+1]===w;)t+=2;c[n++]=p;c[n++]=w;e=t}c.length=n;var f=a.c,h;if(f)h=f.style.display,f.style.display="none";try{for(;b<k;){var l=j[b+2]||m,B=c[r+2]||m,t=Math.min(l,B),A=j[b+1],G;if(A.nodeType!==1&&(G=x.substring(g, -t))){s&&(G=G.replace(d,"\r"));A.nodeValue=G;var L=A.ownerDocument,o=L.createElement("span");o.className=c[r+1];var v=A.parentNode;v.replaceChild(o,A);o.appendChild(A);g<l&&(j[b+1]=A=L.createTextNode(x.substring(t,l)),v.insertBefore(A,o.nextSibling))}g=t;g>=l&&(b+=2);g>=B&&(r+=2)}}finally{if(f)f.style.display=h}}catch(u){D.console&&console.log(u&&u.stack||u)}}var D=window,y=["break,continue,do,else,for,if,return,while"],E=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],M=[E,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],N=[E,"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"], -O=[N,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],E=[E,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],P=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -Q=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],W=[y,"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],R=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/, -V=/\S/,X=v({keywords:[M,O,E,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",P,Q,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),F={};p(X,["default-code"]);p(C([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-", -/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);p(C([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/], -["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);p(C([],[["atv",/^[\S\s]+/]]),["uq.val"]);p(v({keywords:M,hashComments:!0,cStyleComments:!0,types:R}),["c","cc","cpp","cxx","cyc","m"]);p(v({keywords:"null,true,false"}),["json"]);p(v({keywords:O,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:R}), -["cs"]);p(v({keywords:N,cStyleComments:!0}),["java"]);p(v({keywords:y,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);p(v({keywords:P,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);p(v({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);p(v({keywords:Q, -hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);p(v({keywords:E,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);p(v({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);p(v({keywords:W,cStyleComments:!0,multilineStrings:!0}),["rc","rs","rust"]); -p(C([],[["str",/^[\S\s]+/]]),["regex"]);var Y=D.PR={createSimpleLexer:C,registerLangHandler:p,sourceDecorator:v,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:D.prettyPrintOne=function(a,d,g){var b=document.createElement("div");b.innerHTML="<pre>"+a+"</pre>";b=b.firstChild;g&&J(b,g,!0);K({h:d,j:g,c:b,i:1}); -return b.innerHTML},prettyPrint:D.prettyPrint=function(a,d){function g(){for(var b=D.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;i<p.length&&c.now()<b;i++){for(var d=p[i],j=h,k=d;k=k.previousSibling;){var m=k.nodeType,o=(m===7||m===8)&&k.nodeValue;if(o?!/^\??prettify\b/.test(o):m!==3||/\S/.test(k.nodeValue))break;if(o){j={};o.replace(/\b(\w+)=([\w%+\-.:]+)/g,function(a,b,c){j[b]=c});break}}k=d.className;if((j!==h||e.test(k))&&!v.test(k)){m=!1;for(o=d.parentNode;o;o=o.parentNode)if(f.test(o.tagName)&& -o.className&&e.test(o.className)){m=!0;break}if(!m){d.className+=" prettyprinted";m=j.lang;if(!m){var m=k.match(n),y;if(!m&&(y=U(d))&&t.test(y.tagName))m=y.className.match(n);m&&(m=m[1])}if(w.test(d.tagName))o=1;else var o=d.currentStyle,u=s.defaultView,o=(o=o?o.whiteSpace:u&&u.getComputedStyle?u.getComputedStyle(d,q).getPropertyValue("white-space"):0)&&"pre"===o.substring(0,3);u=j.linenums;if(!(u=u==="true"||+u))u=(u=k.match(/\blinenums\b(?::(\d+))?/))?u[1]&&u[1].length?+u[1]:!0:!1;u&&J(d,u,o);r= -{h:m,c:d,j:u,i:o};K(r)}}}i<p.length?setTimeout(g,250):"function"===typeof a&&a()}for(var b=d||document.body,s=b.ownerDocument||document,b=[b.getElementsByTagName("pre"),b.getElementsByTagName("code"),b.getElementsByTagName("xmp")],p=[],m=0;m<b.length;++m)for(var j=0,k=b[m].length;j<k;++j)p.push(b[m][j]);var b=q,c=Date;c.now||(c={now:function(){return+new Date}});var i=0,r,n=/\blang(?:uage)?-([\w.]+)(?!\S)/,e=/\bprettyprint\b/,v=/\bprettyprinted\b/,w=/pre|xmp/i,t=/^code$/i,f=/^(?:pre|code|xmp)$/i, -h={};g()}};typeof define==="function"&&define.amd&&define("google-code-prettify",[],function(){return Y})})();}() -</script> - - <script> -/*! -* Bootstrap.js by @fat & @mdo -* Copyright 2013 Twitter, Inc. -* http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('<div class="dropdown-backdrop"/>').insertBefore(e(this)).on("click",r),s.toggleClass("open")),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery); -</script> - - <script> -/** - * marked - a markdown parser - * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) - * https://github.com/chjj/marked - */ -(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]||""});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].split(/ *\| */)}this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[2]==="="?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"hr"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"blockquote_start"});cap=cap[0].replace(/^ *> ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\d+\.) +/,"");if(~item.indexOf("\n ")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp("^ {1,"+space+"}","gm"),""):item.replace(/^ {1,4}/gm,"")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&(cap[1]==="pre"||cap[1]==="script"||cap[1]==="style"),text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */)}this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:"paragraph",text:cap[1].charAt(cap[1].length-1)==="\n"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"text",text:cap[0]});continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return this.tokens};var inline={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};inline._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;inline._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^<a /i.test(cap[0])){this.inLink=true}else if(this.inLink&&/^<\/a>/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(cap[0]):escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.text(escape(this.smartypants(cap[0])));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){if(!this.options.mangle)return text;var out="",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"<pre><code>"+(escaped?code:escape(code,true))+"\n</code></pre>"}return'<pre><code class="'+this.options.langPrefix+escape(lang,true)+'">'+(escaped?code:escape(code,true))+"\n</code></pre>\n"};Renderer.prototype.blockquote=function(quote){return"<blockquote>\n"+quote+"</blockquote>\n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"<h"+level+' id="'+this.options.headerPrefix+raw.toLowerCase().replace(/[^\w]+/g,"-")+'">'+text+"</h"+level+">\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"</"+type+">\n"};Renderer.prototype.listitem=function(text){return"<li>"+text+"</li>\n"};Renderer.prototype.paragraph=function(text){return"<p>"+text+"</p>\n"};Renderer.prototype.table=function(header,body){return"<table>\n"+"<thead>\n"+header+"</thead>\n"+"<tbody>\n"+body+"</tbody>\n"+"</table>\n"};Renderer.prototype.tablerow=function(content){return"<tr>\n"+content+"</tr>\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"</"+type+">\n"};Renderer.prototype.strong=function(text){return"<strong>"+text+"</strong>"};Renderer.prototype.em=function(text){return"<em>"+text+"</em>"};Renderer.prototype.codespan=function(text){return"<code>"+text+"</code>"};Renderer.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"};Renderer.prototype.del=function(text){return"<del>"+text+"</del>"};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0){return""}}var out='<a href="'+href+'"';if(title){out+=' title="'+title+'"'}out+=">"+text+"</a>";return out};Renderer.prototype.image=function(href,title,text){var out='<img src="'+href+'" alt="'+text+'"';if(title){out+=' title="'+title+'"'}out+=this.options.xhtml?"/>":">";return out};Renderer.prototype.text=function(text){return text};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i<this.token.header.length;i++){flags={header:true,align:this.token.align[i]};cell+=this.renderer.tablecell(this.inline.output(this.token.header[i]),{header:true,align:this.token.align[i]})}header+=this.renderer.tablerow(cell);for(i=0;i<this.token.cells.length;i++){row=this.token.cells[i];cell="";for(j=0;j<row.length;j++){cell+=this.renderer.tablecell(this.inline.output(row[j]),{header:false,align:this.token.align[j]})}body+=this.renderer.tablerow(cell)}return this.renderer.table(header,body)}case"blockquote_start":{var body="";while(this.next().type!=="blockquote_end"){body+=this.tok()}return this.renderer.blockquote(body)}case"list_start":{var body="",ordered=this.token.ordered;while(this.next().type!=="list_end"){body+=this.tok()}return this.renderer.list(body,ordered)}case"list_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.token.type==="text"?this.parseText():this.tok()}return this.renderer.listitem(body)}case"loose_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.tok()}return this.renderer.listitem(body)}case"html":{var html=!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;return this.renderer.html(html)}case"paragraph":{return this.renderer.paragraph(this.inline.output(this.token.text))}case"text":{return this.renderer.paragraph(this.parseText())}}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target){if(Object.prototype.hasOwnProperty.call(target,key)){obj[key]=target[key]}}}return obj}function marked(src,opt,callback){if(callback||typeof opt==="function"){if(!callback){callback=opt;opt=null}opt=merge({},marked.defaults,opt||{});var highlight=opt.highlight,tokens,pending,i=0;try{tokens=Lexer.lex(src,opt)}catch(e){return callback(e)}pending=tokens.length;var done=function(err){if(err){opt.highlight=highlight;return callback(err)}var out;try{out=Parser.parse(tokens,opt)}catch(e){err=e}opt.highlight=highlight;return err?callback(err):callback(null,out)};if(!highlight||highlight.length<3){return done()}delete opt.highlight;if(!pending)return done();for(;i<tokens.length;i++){(function(token){if(token.type!=="code"){return--pending||done()}return highlight(token.text,token.lang,function(err,code){if(err)return done(err);if(code==null||code===token.text){return--pending||done()}token.text=code;token.escaped=true;--pending||done()})})(tokens[i])}return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+="\nPlease report this to https://github.com/chjj/marked.";if((opt||marked.defaults).silent){return"<p>An error occurred:</p><pre>"+escape(e.message+"",true)+"</pre>"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); -</script> - - <script> - $( document ).ready(function() { - marked.setOptions({ - renderer: new marked.Renderer(), - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - smartLists: true, - smartypants: false - }); - - var textFile = null; - - /// Function to be used to download a text json schema - function makeTextFile(text) { - - var data = new Blob([text], {type: 'text/plain'}); - - // If we are replacing a previously generated file we need to - // manually revoke the object URL to avoid memory leaks. - if (textFile !== null) { - window.URL.revokeObjectURL(textFile); - } - - textFile = window.URL.createObjectURL(data); - - var a = document.createElement("a"); - document.body.appendChild(a); - a.style = "display: none"; - a.href = textFile; - a.download = 'schema.txt'; - a.click(); - - return textFile; - }; - - /// TODO: Implement resizing for expanding within iframe - function callResize() { - window.parent.postMessage('resize', "*"); - } - - function processMarked() { - $(".marked").each(function() { - $(this).html(marked($(this).html())); - }); - } - - // Bootstrap Scrollspy - $(this).scrollspy({ target: '#scrollingNav', offset: 18 }); - - // Content-Scroll on Navigation click. - $('.sidenav').find('a').on('click', function(e) { - e.preventDefault(); - var id = $(this).attr('href'); - if ($(id).length > 0) - $('html,body').animate({ scrollTop: parseInt($(id).offset().top) }, 400); - window.location.hash = $(this).attr('href'); - }); - - // Quickjump on Pageload to hash position. - if(window.location.hash) { - var id = window.location.hash; - if ($(id).length > 0) - $('html,body').animate({ scrollTop: parseInt($(id).offset().top) }, 0); - } - - - function initDynamic() { - // tabs - $('.nav-tabs-examples a').click(function (e) { - e.preventDefault(); - $(this).tab('show'); - }); - - - $('.nav-tabs-examples').find('a:first').tab('show'); - - // call scrollspy refresh method - $(window).scrollspy('refresh'); - } - - initDynamic(); - - // Pre- / Code-Format - prettyPrint(); - - //Convert elements with "marked" class to markdown - processMarked(); - }); - </script> - <style type="text/css"> - -/*! - * Bootstrap v2.3.2 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} - - /* Pretty printing styles. Used with prettify.js. */ -/* Vim sunburst theme by David Leibovic */ -pre .str { - color: #65B042; -} -/* string - green */ -pre .kwd { - color: #E28964; -} -/* keyword - dark pink */ -pre .com { - color: #AEAEAE; - font-style: italic; -} -/* comment - gray */ -pre .typ { - color: #89bdff; -} -/* type - light blue */ -pre .lit { - color: #3387CC; -} -/* literal - blue */ -pre .pun { - color: #fff; -} -/* punctuation - white */ -pre .pln { - color: #fff; -} -/* plaintext - white */ -pre .tag { - color: #89bdff; -} -/* html/xml tag - light blue */ -pre .atn { - color: #bdb76b; -} -/* html/xml attribute name - khaki */ -pre .atv { - color: #65B042; -} -/* html/xml attribute value - green */ -pre .dec { - color: #3387CC; -} -/* decimal - blue */ -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; - color: #AEAEAE; -} -/* IE indents via margin-left */ -li.L0, -li.L1, -li.L2, -li.L3, -li.L5, -li.L6, -li.L7, -li.L8 { - list-style-type: none; -} -/* Alternate shading for lines */ -@media print { - pre .str { - color: #060; - } - pre .kwd { - color: #006; - font-weight: bold; - } - pre .com { - color: #600; - font-style: italic; - } - pre .typ { - color: #404; - font-weight: bold; - } - pre .lit { - color: #044; - } - pre .pun { - color: #440; - } - pre .pln { - color: #000; - } - pre .tag { - color: #006; - font-weight: bold; - } - pre .atn { - color: #404; - } - pre .atv { - color: #060; - } -} - /* ------------------------------------------------------------------------------------------ - * Content - * ------------------------------------------------------------------------------------------ */ - -@import url('https://fonts.googleapis.com/css?family=Source+Code+Pro'); -* { - font-family: 'Source Code Pro', sans-serif; -} -body { - min-width: 980px; -} - -body, p, a, div, th, td { - font-family: "Source Sans Pro", sans-serif; - font-weight: 400; - font-size: 16px; - text-shadow: none !important; -} - -td.code { - font-size: 14px; - font-family: "Source Code Pro", monospace; - font-style: normal; - font-weight: 400; -} - -#content { - padding-top: 16px; - z-Index: -1; - margin-left: 270px; -} - -p { - color: #808080; -} - -h1 { - font-family: "Source Sans Pro Semibold", sans-serif; - font-weight: normal; - font-size: 44px; - line-height: 50px; - margin: 0 0 10px 0; - padding: 0; -} - -h2 { - font-family: "Source Sans Pro", sans-serif; - font-weight: normal; - font-size: 24px; - line-height: 40px; - margin: 0 0 20px 0; - padding: 0; -} - -section { - border-top: 1px solid #ebebeb; - padding: 30px 0; -} - -section h1 { - font-family: "Source Sans Pro", sans-serif; - font-weight: 700; - font-size: 32px; - line-height: 40px; - padding-bottom: 14px; - margin: 0 0 20px 0; - padding: 0; -} - -article { - padding: 14px 0 30px 0; -} - -article h1 { - font-family: "Source Sans Pro Bold", sans-serif; - font-weight: 600; - font-size: 24px; - line-height: 26px; -} - -article h2 { - font-family: "Source Sans Pro", sans-serif; - font-weight: 600; - font-size: 18px; - line-height: 24px; - margin: 0 0 10px 0; -} - -article h3 { - font-family: "Source Sans Pro", sans-serif; - font-weight: 600; - font-size: 16px; - line-height: 18px; - margin: 0 0 10px 0; -} - -article h4 { - font-family: "Source Sans Pro", sans-serif; - font-weight: 600; - font-size: 14px; - line-height: 16px; - margin: 0 0 8px 0; -} - -table { - border-collapse: collapse; - width: 100%; - margin: 0 0 20px 0; -} - -th { - background-color: #f5f5f5; - text-align: left; - font-family: "Source Sans Pro", sans-serif; - font-weight: 700; - padding: 4px 8px; - border: #e0e0e0 1px solid; -} - -td { - vertical-align: top; - padding: 2px 8px; - border: #e0e0e0 1px solid; -} - -#generator .content { - color: #b0b0b0; - border-top: 1px solid #ebebeb; - padding: 10px 0; -} - -.label-optional { - float: right; -} - -.open-left { - right: 0; - left: auto; -} - -/* ------------------------------------------------------------------------------------------ - * apidoc - intro - * ------------------------------------------------------------------------------------------ */ - -#apidoc .apidoc { - border-top: 1px solid #ebebeb; - padding: 30px 0; -} - -#apidoc h1 { - font-family: "Source Sans Pro", sans-serif; - font-weight: 700; - font-size: 32px; - line-height: 40px; - padding-bottom: 14px; - margin: 0 0 20px 0; - padding: 0; -} - -#apidoc h2 { - font-family: "Source Sans Pro Bold", sans-serif; - font-weight: 600; - font-size: 22px; - line-height: 26px; - padding-top: 14px; -} - -/* ------------------------------------------------------------------------------------------ - * pre / code - * ------------------------------------------------------------------------------------------ */ -pre { - background-color: #292b36; - color: #ffffff; - padding: 10px; - border-radius: 6px; - position: relative; - margin: 10px 0 20px 0; -} - -code.language-text { - word-wrap: break-word; -} - -pre.language-json { - overflow: auto; -} - -pre.language-html { - margin: 40px 0 20px 0; -} - -pre.language-html:before { - content: attr(data-type); - position: absolute; - top: -30px; - left: 0; - font-family: "Source Sans Pro", sans-serif; - font-weight: 600; - font-size: 15px; - display: inline-block; - padding: 2px 5px; - border-radius: 6px; - text-transform: uppercase; - background-color: #3387CC; - color: #ffffff; -} - -pre.language-html[data-type="get"]:before { - background-color: green; -} - -pre.language-html[data-type="put"]:before { - background-color: #e5c500; -} - -pre.language-html[data-type="post"]:before { - background-color: #4070ec; -} - -pre.language-html[data-type="delete"]:before { - background-color: #ed0039; -} - -pre.language-api .str { - color: #ffffff; -} - -pre.language-api .pln, -pre.language-api .pun { - color: #65B042; -} - -pre code { - display: block; - font-size: 14px; - font-family: "Source Code Pro", monospace; - font-style: normal; - font-weight: 400; -} - -pre code.sample-request-response-json { - white-space: pre-wrap; - max-height: 500px; - overflow: auto; -} - -/* ------------------------------------------------------------------------------------------ - * Sidenav - * ------------------------------------------------------------------------------------------ */ -.sidenav { - width: 228px; - margin: 0; - padding: 20px; - position: fixed; - top: 0; - left: 0; - bottom: 0; - overflow-x: hidden; - overflow-y: auto; - background-color: #f5f5f5; - z-index: 10; -} - -.sidenav > li > a { - display: block; - width: 192px; - margin: 0; - padding: 2px 11px; - border: 0; - border-left: transparent 4px solid; - border-right: transparent 4px solid; - font-family: "Source Sans Pro", sans-serif; - font-weight: 400; - font-size: 14px; -} - -.sidenav > li.nav-header > a { - padding: 5px 15px; - border: 1px solid #e5e5e5; - width: 190px; - font-family: "Source Sans Pro", sans-serif; - font-weight: 700; - font-size: 16px; - background-color: #4c8eca; - color: #fff; -} - -.sidenav > li.nav-header.active > a { - background-color: #4c8eca; - color: #fff; -} - - -00427D - -.sidenav > .active > a { - position: relative; - z-index: 2; -} - -.sidenav > li > a:hover { - background-color: #ffffff; -} - -.sidenav > li.has-modifications a { - border-right: #60d060 4px solid; -} - -.sidenav > li.is-new a { - border-left: #e5e5e5 4px solid; -} - - - -/* ------------------------------------------------------------------------------------------ - * Tabs - * ------------------------------------------------------------------------------------------ */ -ul.nav-tabs { - margin: 0; -} - -/* ------------------------------------------------------------------------------------------ - * Print - * ------------------------------------------------------------------------------------------ */ - -@media print { - - #sidenav, - #version, - #versions, - section .version, - section .versions { - display: none; - } - - #content { - margin-left: 0; - } - - a { - text-decoration: none; - color: inherit; - } - - a:after { - content: " [" attr(href) "] "; - } - - p { - color: #000000 - } - - pre { - background-color: #ffffff; - color: #000000; - padding: 10px; - border: #808080 1px solid; - border-radius: 6px; - position: relative; - margin: 10px 0 20px 0; - } - -} /* /@media print */ - - -.doc-chapter -{ -display:none; -background-color: #eee; -border-radius: 1px; -padding: 10px; -margin-bottom: 20px; -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/*! - * json-schema-view-js - * https://github.com/mohsen1/json-schema-view-js#readme - * Version: 0.4.1 - 2015-11-12T17:19:27.615Z - * License: MIT - */.json-schema-view .toggle-handle:after,.json-schema-view.json-schema-view-dark .toggle-handle:after,json-schema-view .toggle-handle:after,json-schema-view[json-schema-view-dark] .toggle-handle:after{content:"\25BC"}.json-schema-view .title,.json-schema-view.json-schema-view-dark .title,json-schema-view .title,json-schema-view[json-schema-view-dark] .title{font-weight:700;cursor:pointer}.json-schema-view,json-schema-view{font-family:monospace;font-size:0;display:table-cell}.json-schema-view>*,json-schema-view>*{font-size:14px}.json-schema-view .toggle-handle,json-schema-view .toggle-handle{cursor:pointer;margin:auto .3em;font-size:10px;display:inline-block;transform-origin:50% 40%;transition:transform 150ms ease-in}.json-schema-view .toggle-handle,.json-schema-view .toggle-handle:hover,json-schema-view .toggle-handle,json-schema-view .toggle-handle:hover{text-decoration:none;color:#333}.json-schema-view .description,json-schema-view .description{color:gray;font-style:italic} - .pattern { - color: blue; - } - .default { - color: black; - } - .required { - color:black; - } - .json-schema-view .title,.json-schema-view .title:hover,json-schema-view .title,json-schema-view .title:hover{text-decoration:none;color:#333}.json-schema-view .brace,.json-schema-view .bracket,.json-schema-view .title,json-schema-view .brace,json-schema-view .bracket,json-schema-view .title{color:#333}.json-schema-view .property,json-schema-view .property{font-size:0;display:table-row}.json-schema-view .property>*,json-schema-view .property>*{font-size:14px;padding:.2em}.json-schema-view .name,json-schema-view .name{color:#00f;display:table-cell;vertical-align:top}.json-schema-view .type,json-schema-view .type{color:green}.json-schema-view .type-any,json-schema-view .type-any{color:#33f}.json-schema-view .required,json-schema-view .required{color:red}.json-schema-view .inner,json-schema-view .inner{padding-left:18px}.json-schema-view.collapsed .description,.json-schema-view.collapsed .property,json-schema-view.collapsed .description,json-schema-view.collapsed .property{display:none}.json-schema-view.collapsed .closeing.brace,json-schema-view.collapsed .closeing.brace{display:inline-block}.json-schema-view.collapsed .toggle-handle,json-schema-view.collapsed .toggle-handle{transform:rotate(-90deg)}.json-schema-view.json-schema-view-dark,json-schema-view[json-schema-view-dark]{font-family:monospace;font-size:0;display:table-cell}.json-schema-view.json-schema-view-dark>*,json-schema-view[json-schema-view-dark]>*{font-size:14px}.json-schema-view.json-schema-view-dark .toggle-handle,json-schema-view[json-schema-view-dark] .toggle-handle{cursor:pointer;margin:auto .3em;font-size:10px;display:inline-block;transform-origin:50% 40%;transition:transform 150ms ease-in}.json-schema-view.json-schema-view-dark .toggle-handle,.json-schema-view.json-schema-view-dark .toggle-handle:hover,json-schema-view[json-schema-view-dark] .toggle-handle,json-schema-view[json-schema-view-dark] .toggle-handle:hover{text-decoration:none;color:#eee}.json-schema-view.json-schema-view-dark .description,json-schema-view[json-schema-view-dark] .description{color:gray;font-style:italic}.json-schema-view.json-schema-view-dark .title,.json-schema-view.json-schema-view-dark .title:hover,json-schema-view[json-schema-view-dark] .title,json-schema-view[json-schema-view-dark] .title:hover{text-decoration:none;color:#eee}.json-schema-view.json-schema-view-dark .brace,.json-schema-view.json-schema-view-dark .bracket,.json-schema-view.json-schema-view-dark .title,json-schema-view[json-schema-view-dark] .brace,json-schema-view[json-schema-view-dark] .bracket,json-schema-view[json-schema-view-dark] .title{color:#eee}.json-schema-view.json-schema-view-dark .property,json-schema-view[json-schema-view-dark] .property{font-size:0;display:table-row}.json-schema-view.json-schema-view-dark .property>*,json-schema-view[json-schema-view-dark] .property>*{font-size:14px;padding:.2em}.json-schema-view.json-schema-view-dark .name,json-schema-view[json-schema-view-dark] .name{color:#add8e6;display:table-cell;vertical-align:top}.json-schema-view.json-schema-view-dark .type,json-schema-view[json-schema-view-dark] .type{color:#90ee90}.json-schema-view.json-schema-view-dark .type-any,json-schema-view[json-schema-view-dark] .type-any{color:#d4ebf2}.json-schema-view.json-schema-view-dark .required,json-schema-view[json-schema-view-dark] .required{color:#fe0000}.json-schema-view.json-schema-view-dark .inner,json-schema-view[json-schema-view-dark] .inner{padding-left:18px}.json-schema-view.json-schema-view-dark.collapsed .description,.json-schema-view.json-schema-view-dark.collapsed .property,json-schema-view[json-schema-view-dark].collapsed .description,json-schema-view[json-schema-view-dark].collapsed .property{display:none}.json-schema-view.json-schema-view-dark.collapsed .closeing.brace,json-schema-view[json-schema-view-dark].collapsed .closeing.brace{display:inline-block}.json-schema-view.json-schema-view-dark.collapsed .toggle-handle,json-schema-view[json-schema-view-dark].collapsed .toggle-handle{transform:rotate(-90deg)} - - </style> -</head> -<body> - <script> - // Script section to load models into a JS Var - var defs = {} - </script> - - <div class="container-fluid"> - <div class="row-fluid"> - <div id="sidenav" class="span2"> - <nav id="scrollingNav"> - <ul class="sidenav nav nav-list"> - <!-- Logo Area --> - <!--<div style="width: 80%; background-color: #4c8eca; color: white; padding: 20px; text-align: center; margin-bottom: 20px; "> - - API Docs 2 - - </div> - --> - <li class="nav-fixed nav-header active" data-group="_"><a href="#api-_">API Summary</a></li> - - <li class="nav-header" data-group="E2eServiceInstances"><a href="#api-E2eServiceInstances">API Methods - E2eServiceInstances</a></li> - <li data-group="E2eServiceInstances" data-name="compareModelwithTargetVersion" class=""> - <a href="#api-E2eServiceInstances-compareModelwithTargetVersion">compareModelwithTargetVersion</a> - </li> - <li data-group="E2eServiceInstances" data-name="createE2EServiceInstance" class=""> - <a href="#api-E2eServiceInstances-createE2EServiceInstance">createE2EServiceInstance</a> - </li> - <li data-group="E2eServiceInstances" data-name="deleteE2EServiceInstance" class=""> - <a href="#api-E2eServiceInstances-deleteE2EServiceInstance">deleteE2EServiceInstance</a> - </li> - <li data-group="E2eServiceInstances" data-name="getE2EServiceInstances" class=""> - <a href="#api-E2eServiceInstances-getE2EServiceInstances">getE2EServiceInstances</a> - </li> - <li data-group="E2eServiceInstances" data-name="scaleE2EServiceInstance" class=""> - <a href="#api-E2eServiceInstances-scaleE2EServiceInstance">scaleE2EServiceInstance</a> - </li> - <li data-group="E2eServiceInstances" data-name="updateE2EServiceInstance" class=""> - <a href="#api-E2eServiceInstances-updateE2EServiceInstance">updateE2EServiceInstance</a> - </li> - <li class="nav-header" data-group="Globalhealthcheck"><a href="#api-Globalhealthcheck">API Methods - Globalhealthcheck</a></li> - <li data-group="Globalhealthcheck" data-name="globalHealthcheck" class=""> - <a href="#api-Globalhealthcheck-globalHealthcheck">globalHealthcheck</a> - </li> - <li class="nav-header" data-group="Nodehealthcheck"><a href="#api-Nodehealthcheck">API Methods - Nodehealthcheck</a></li> - <li data-group="Nodehealthcheck" data-name="nodeHealthcheck" class=""> - <a href="#api-Nodehealthcheck-nodeHealthcheck">nodeHealthcheck</a> - </li> - <li class="nav-header" data-group="OnapsoinfracloudResources"><a href="#api-OnapsoinfracloudResources">API Methods - OnapsoinfracloudResources</a></li> - <li data-group="OnapsoinfracloudResources" data-name="activateOperationEnvironment" class=""> - <a href="#api-OnapsoinfracloudResources-activateOperationEnvironment">activateOperationEnvironment</a> - </li> - <li data-group="OnapsoinfracloudResources" data-name="createOperationEnvironment" class=""> - <a href="#api-OnapsoinfracloudResources-createOperationEnvironment">createOperationEnvironment</a> - </li> - <li data-group="OnapsoinfracloudResources" data-name="deactivateOperationEnvironment" class=""> - <a href="#api-OnapsoinfracloudResources-deactivateOperationEnvironment">deactivateOperationEnvironment</a> - </li> - <li class="nav-header" data-group="OnapsoinfracloudResourcesRequests"><a href="#api-OnapsoinfracloudResourcesRequests">API Methods - OnapsoinfracloudResourcesRequests</a></li> - <li data-group="OnapsoinfracloudResourcesRequests" data-name="getOperationEnvironmentStatusFilter" class=""> - <a href="#api-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter">getOperationEnvironmentStatusFilter</a> - </li> - <li data-group="OnapsoinfracloudResourcesRequests" data-name="unlockOrchestrationRequestForReqId" class=""> - <a href="#api-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId">unlockOrchestrationRequestForReqId</a> - </li> - <li class="nav-header" data-group="OnapsoinframodelDistributions"><a href="#api-OnapsoinframodelDistributions">API Methods - OnapsoinframodelDistributions</a></li> - <li data-group="OnapsoinframodelDistributions" data-name="updateModelDistributionStatus" class=""> - <a href="#api-OnapsoinframodelDistributions-updateModelDistributionStatus">updateModelDistributionStatus</a> - </li> - <li class="nav-header" data-group="OnapsoinfraorchestrationRequests"><a href="#api-OnapsoinfraorchestrationRequests">API Methods - OnapsoinfraorchestrationRequests</a></li> - <li data-group="OnapsoinfraorchestrationRequests" data-name="getOrchestrationRequest" class=""> - <a href="#api-OnapsoinfraorchestrationRequests-getOrchestrationRequest">getOrchestrationRequest</a> - </li> - <li data-group="OnapsoinfraorchestrationRequests" data-name="getOrchestrationRequestForReqId" class=""> - <a href="#api-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId">getOrchestrationRequestForReqId</a> - </li> - <li data-group="OnapsoinfraorchestrationRequests" data-name="unlockOrchestrationRequest" class=""> - <a href="#api-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest">unlockOrchestrationRequest</a> - </li> - <li class="nav-header" data-group="OnapsoinfraserviceInstantiation"><a href="#api-OnapsoinfraserviceInstantiation">API Methods - OnapsoinfraserviceInstantiation</a></li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="activatePort" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-activatePort">activatePort</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="activateServiceInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-activateServiceInstance">activateServiceInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="addRelationships" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-addRelationships">addRelationships</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="applyUpdatedConfig" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-applyUpdatedConfig">applyUpdatedConfig</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="assignServiceInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-assignServiceInstance">assignServiceInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="createNetworkInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-createNetworkInstance">createNetworkInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="createPortConfiguration" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-createPortConfiguration">createPortConfiguration</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="createServiceInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-createServiceInstance">createServiceInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="createVfModuleInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-createVfModuleInstance">createVfModuleInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="createVnfInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-createVnfInstance">createVnfInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="createVolumeGroupInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-createVolumeGroupInstance">createVolumeGroupInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deactivateAndCloudDeleteVfModuleInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance">deactivateAndCloudDeleteVfModuleInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deactivatePort" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deactivatePort">deactivatePort</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deactivateServiceInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deactivateServiceInstance">deactivateServiceInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deleteNetworkInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deleteNetworkInstance">deleteNetworkInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deletePortConfiguration" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deletePortConfiguration">deletePortConfiguration</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deleteServiceInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deleteServiceInstance">deleteServiceInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deleteVfModuleInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deleteVfModuleInstance">deleteVfModuleInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deleteVnfInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deleteVnfInstance">deleteVnfInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="deleteVolumeGroupInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance">deleteVolumeGroupInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="disablePort" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-disablePort">disablePort</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="enablePort" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-enablePort">enablePort</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="inPlaceSoftwareUpdate" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate">inPlaceSoftwareUpdate</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="removeRelationships" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-removeRelationships">removeRelationships</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="replaceVfModuleInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-replaceVfModuleInstance">replaceVfModuleInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="replaceVnfInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-replaceVnfInstance">replaceVnfInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="scaleOutVfModule" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-scaleOutVfModule">scaleOutVfModule</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="unassignServiceInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-unassignServiceInstance">unassignServiceInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="updateNetworkInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-updateNetworkInstance">updateNetworkInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="updateVfModuleInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-updateVfModuleInstance">updateVfModuleInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="updateVnfInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-updateVnfInstance">updateVnfInstance</a> - </li> - <li data-group="OnapsoinfraserviceInstantiation" data-name="updateVolumeGroupInstance" class=""> - <a href="#api-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance">updateVolumeGroupInstance</a> - </li> - <li class="nav-header" data-group="Onapsoinfratasks"><a href="#api-Onapsoinfratasks">API Methods - Onapsoinfratasks</a></li> - <li data-group="Onapsoinfratasks" data-name="queryFilters" class=""> - <a href="#api-Onapsoinfratasks-queryFilters">queryFilters</a> - </li> - </ul> - </nav> - </div> - <div id="content"> - <div id="project"> - <div class="pull-left"> - <h1>SO Casablanca APIs</h1> - </div> - <div class="clearfix"></div> - </div> - <div id="header"> - <div id="api-_"> - <h2 id="welcome-to-apidoc">API and SDK Documentation</h2> - <div class="app-desc">Version: 3.1.2</div> - <hr> - <div>No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)</div> - </div> - </div> - <div id="sections"> - <section id="api-E2eServiceInstances"> - <h1>E2eServiceInstances</h1> - <div id="api-E2eServiceInstances-compareModelwithTargetVersion"> - <article id="api-E2eServiceInstances-compareModelwithTargetVersion-0" data-group="User" data-name="compareModelwithTargetVersion" data-version="0"> - <div class="pull-left"> - <h1>compareModelwithTargetVersion</h1> - <p>Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId </p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/modeldifferences</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-curl">Curl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-java">Java</a></li> - <li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-android">Android</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-csharp">C#</a></li> - <li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-php">PHP</a></li> - <li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-perl">Perl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-compareModelwithTargetVersion-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/modeldifferences"</code></pre> - </div> - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.E2eServiceInstancesApi; - -import java.io.File; -import java.util.*; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String serviceId = serviceId_example; // String | - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.compareModelwithTargetVersion(serviceId, version, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#compareModelwithTargetVersion"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.E2eServiceInstancesApi; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String serviceId = serviceId_example; // String | - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.compareModelwithTargetVersion(serviceId, version, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#compareModelwithTargetVersion"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *serviceId = serviceId_example; // -String *version = version_example; // -String *body = body_example; // (optional) - -E2eServiceInstancesApi *apiInstance = [[E2eServiceInstancesApi alloc] init]; - -// Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId -[apiInstance compareModelwithTargetVersionWith:serviceId - version:version - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.E2eServiceInstancesApi() - -var serviceId = serviceId_example; // {String} - -var version = version_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.compareModelwithTargetVersion(serviceId, version, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class compareModelwithTargetVersionExample - { - public void main() - { - - var apiInstance = new E2eServiceInstancesApi(); - var serviceId = serviceId_example; // String | - var version = version_example; // String | - var body = body_example; // String | (optional) - - try - { - // Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId - apiInstance.compareModelwithTargetVersion(serviceId, version, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling E2eServiceInstancesApi.compareModelwithTargetVersion: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\E2eServiceInstancesApi(); -$serviceId = serviceId_example; // String | -$version = version_example; // String | -$body = body_example; // String | - -try { - $api_instance->compareModelwithTargetVersion($serviceId, $version, $body); -} catch (Exception $e) { - echo 'Exception when calling E2eServiceInstancesApi->compareModelwithTargetVersion: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::E2eServiceInstancesApi; - -my $api_instance = WWW::SwaggerClient::E2eServiceInstancesApi->new(); -my $serviceId = serviceId_example; # String | -my $version = version_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->compareModelwithTargetVersion(serviceId => $serviceId, version => $version, body => $body); -}; -if ($@) { - warn "Exception when calling E2eServiceInstancesApi->compareModelwithTargetVersion: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-compareModelwithTargetVersion-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.E2eServiceInstancesApi() -serviceId = serviceId_example # String | -version = version_example # String | -body = body_example # String | (optional) - -try: - # Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId - api_instance.compare_modelwith_target_version(serviceId, version, body=body) -except ApiException as e: - print("Exception when calling E2eServiceInstancesApi->compareModelwithTargetVersion: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">serviceId*</td> -<td> - - - <div id="d2e199_compareModelwithTargetVersion_serviceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_compareModelwithTargetVersion_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_compareModelwithTargetVersion_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_compareModelwithTargetVersion_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-E2eServiceInstances-createE2EServiceInstance"> - <article id="api-E2eServiceInstances-createE2EServiceInstance-0" data-group="User" data-name="createE2EServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>createE2EServiceInstance</h1> - <p>Create an E2E Service Instance on a version provided</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/e2eServiceInstances/{version}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-createE2EServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-E2eServiceInstances-createE2EServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/e2eServiceInstances/{version}"</code></pre> - </div> - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.E2eServiceInstancesApi; - -import java.io.File; -import java.util.*; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.createE2EServiceInstance(version, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#createE2EServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.E2eServiceInstancesApi; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.createE2EServiceInstance(version, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#createE2EServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *body = body_example; // (optional) - -E2eServiceInstancesApi *apiInstance = [[E2eServiceInstancesApi alloc] init]; - -// Create an E2E Service Instance on a version provided -[apiInstance createE2EServiceInstanceWith:version - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.E2eServiceInstancesApi() - -var version = version_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.createE2EServiceInstance(version, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class createE2EServiceInstanceExample - { - public void main() - { - - var apiInstance = new E2eServiceInstancesApi(); - var version = version_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create an E2E Service Instance on a version provided - apiInstance.createE2EServiceInstance(version, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling E2eServiceInstancesApi.createE2EServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\E2eServiceInstancesApi(); -$version = version_example; // String | -$body = body_example; // String | - -try { - $api_instance->createE2EServiceInstance($version, $body); -} catch (Exception $e) { - echo 'Exception when calling E2eServiceInstancesApi->createE2EServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::E2eServiceInstancesApi; - -my $api_instance = WWW::SwaggerClient::E2eServiceInstancesApi->new(); -my $version = version_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->createE2EServiceInstance(version => $version, body => $body); -}; -if ($@) { - warn "Exception when calling E2eServiceInstancesApi->createE2EServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-createE2EServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.E2eServiceInstancesApi() -version = version_example # String | -body = body_example # String | (optional) - -try: - # Create an E2E Service Instance on a version provided - api_instance.create_e2_e_service_instance(version, body=body) -except ApiException as e: - print("Exception when calling E2eServiceInstancesApi->createE2EServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_createE2EServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_createE2EServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_createE2EServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-E2eServiceInstances-deleteE2EServiceInstance"> - <article id="api-E2eServiceInstances-deleteE2EServiceInstance-0" data-group="User" data-name="deleteE2EServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>deleteE2EServiceInstance</h1> - <p>Delete E2E Service Instance on a specified version and serviceId</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/onap/so/infra/e2eServiceInstances/{version}/{serviceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-deleteE2EServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X DELETE "https://localhost/onap/so/infra/e2eServiceInstances/{version}/{serviceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.E2eServiceInstancesApi; - -import java.io.File; -import java.util.*; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String version = version_example; // String | - String serviceId = serviceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteE2EServiceInstance(version, serviceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#deleteE2EServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.E2eServiceInstancesApi; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String version = version_example; // String | - String serviceId = serviceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteE2EServiceInstance(version, serviceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#deleteE2EServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceId = serviceId_example; // -String *body = body_example; // (optional) - -E2eServiceInstancesApi *apiInstance = [[E2eServiceInstancesApi alloc] init]; - -// Delete E2E Service Instance on a specified version and serviceId -[apiInstance deleteE2EServiceInstanceWith:version - serviceId:serviceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.E2eServiceInstancesApi() - -var version = version_example; // {String} - -var serviceId = serviceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deleteE2EServiceInstance(version, serviceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deleteE2EServiceInstanceExample - { - public void main() - { - - var apiInstance = new E2eServiceInstancesApi(); - var version = version_example; // String | - var serviceId = serviceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Delete E2E Service Instance on a specified version and serviceId - apiInstance.deleteE2EServiceInstance(version, serviceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling E2eServiceInstancesApi.deleteE2EServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\E2eServiceInstancesApi(); -$version = version_example; // String | -$serviceId = serviceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deleteE2EServiceInstance($version, $serviceId, $body); -} catch (Exception $e) { - echo 'Exception when calling E2eServiceInstancesApi->deleteE2EServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::E2eServiceInstancesApi; - -my $api_instance = WWW::SwaggerClient::E2eServiceInstancesApi->new(); -my $version = version_example; # String | -my $serviceId = serviceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deleteE2EServiceInstance(version => $version, serviceId => $serviceId, body => $body); -}; -if ($@) { - warn "Exception when calling E2eServiceInstancesApi->deleteE2EServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-deleteE2EServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.E2eServiceInstancesApi() -version = version_example # String | -serviceId = serviceId_example # String | -body = body_example # String | (optional) - -try: - # Delete E2E Service Instance on a specified version and serviceId - api_instance.delete_e2_e_service_instance(version, serviceId, body=body) -except ApiException as e: - print("Exception when calling E2eServiceInstancesApi->deleteE2EServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deleteE2EServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceId*</td> -<td> - - - <div id="d2e199_deleteE2EServiceInstance_serviceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deleteE2EServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deleteE2EServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-E2eServiceInstances-getE2EServiceInstances"> - <article id="api-E2eServiceInstances-getE2EServiceInstances-0" data-group="User" data-name="getE2EServiceInstances" data-version="0"> - <div class="pull-left"> - <h1>getE2EServiceInstances</h1> - <p>Find e2eServiceInstances Requests for a given serviceId and operationId</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/operations/{operationId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-curl">Curl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-java">Java</a></li> - <li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-android">Android</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-csharp">C#</a></li> - <li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-php">PHP</a></li> - <li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-perl">Perl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-getE2EServiceInstances-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-E2eServiceInstances-getE2EServiceInstances-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X GET "https://localhost/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/operations/{operationId}"</code></pre> - </div> - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.E2eServiceInstancesApi; - -import java.io.File; -import java.util.*; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String serviceId = serviceId_example; // String | - String version = version_example; // String | - String operationId = operationId_example; // String | - try { - apiInstance.getE2EServiceInstances(serviceId, version, operationId); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#getE2EServiceInstances"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.E2eServiceInstancesApi; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String serviceId = serviceId_example; // String | - String version = version_example; // String | - String operationId = operationId_example; // String | - try { - apiInstance.getE2EServiceInstances(serviceId, version, operationId); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#getE2EServiceInstances"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *serviceId = serviceId_example; // -String *version = version_example; // -String *operationId = operationId_example; // - -E2eServiceInstancesApi *apiInstance = [[E2eServiceInstancesApi alloc] init]; - -// Find e2eServiceInstances Requests for a given serviceId and operationId -[apiInstance getE2EServiceInstancesWith:serviceId - version:version - operationId:operationId - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.E2eServiceInstancesApi() - -var serviceId = serviceId_example; // {String} - -var version = version_example; // {String} - -var operationId = operationId_example; // {String} - - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.getE2EServiceInstances(serviceId, version, operationId, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class getE2EServiceInstancesExample - { - public void main() - { - - var apiInstance = new E2eServiceInstancesApi(); - var serviceId = serviceId_example; // String | - var version = version_example; // String | - var operationId = operationId_example; // String | - - try - { - // Find e2eServiceInstances Requests for a given serviceId and operationId - apiInstance.getE2EServiceInstances(serviceId, version, operationId); - } - catch (Exception e) - { - Debug.Print("Exception when calling E2eServiceInstancesApi.getE2EServiceInstances: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\E2eServiceInstancesApi(); -$serviceId = serviceId_example; // String | -$version = version_example; // String | -$operationId = operationId_example; // String | - -try { - $api_instance->getE2EServiceInstances($serviceId, $version, $operationId); -} catch (Exception $e) { - echo 'Exception when calling E2eServiceInstancesApi->getE2EServiceInstances: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::E2eServiceInstancesApi; - -my $api_instance = WWW::SwaggerClient::E2eServiceInstancesApi->new(); -my $serviceId = serviceId_example; # String | -my $version = version_example; # String | -my $operationId = operationId_example; # String | - -eval { - $api_instance->getE2EServiceInstances(serviceId => $serviceId, version => $version, operationId => $operationId); -}; -if ($@) { - warn "Exception when calling E2eServiceInstancesApi->getE2EServiceInstances: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-getE2EServiceInstances-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.E2eServiceInstancesApi() -serviceId = serviceId_example # String | -version = version_example # String | -operationId = operationId_example # String | - -try: - # Find e2eServiceInstances Requests for a given serviceId and operationId - api_instance.get_e2_e_service_instances(serviceId, version, operationId) -except ApiException as e: - print("Exception when calling E2eServiceInstancesApi->getE2EServiceInstances: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">serviceId*</td> -<td> - - - <div id="d2e199_getE2EServiceInstances_serviceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_getE2EServiceInstances_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">operationId*</td> -<td> - - - <div id="d2e199_getE2EServiceInstances_operationId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-E2eServiceInstances-scaleE2EServiceInstance"> - <article id="api-E2eServiceInstances-scaleE2EServiceInstance-0" data-group="User" data-name="scaleE2EServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>scaleE2EServiceInstance</h1> - <p>Scale E2E Service Instance on a specified version</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/scale</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-scaleE2EServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/scale"</code></pre> - </div> - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.E2eServiceInstancesApi; - -import java.io.File; -import java.util.*; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String version = version_example; // String | - String serviceId = serviceId_example; // String | - String body = body_example; // String | - try { - apiInstance.scaleE2EServiceInstance(version, serviceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#scaleE2EServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.E2eServiceInstancesApi; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String version = version_example; // String | - String serviceId = serviceId_example; // String | - String body = body_example; // String | - try { - apiInstance.scaleE2EServiceInstance(version, serviceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#scaleE2EServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceId = serviceId_example; // -String *body = body_example; // (optional) - -E2eServiceInstancesApi *apiInstance = [[E2eServiceInstancesApi alloc] init]; - -// Scale E2E Service Instance on a specified version -[apiInstance scaleE2EServiceInstanceWith:version - serviceId:serviceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.E2eServiceInstancesApi() - -var version = version_example; // {String} - -var serviceId = serviceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.scaleE2EServiceInstance(version, serviceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class scaleE2EServiceInstanceExample - { - public void main() - { - - var apiInstance = new E2eServiceInstancesApi(); - var version = version_example; // String | - var serviceId = serviceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Scale E2E Service Instance on a specified version - apiInstance.scaleE2EServiceInstance(version, serviceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling E2eServiceInstancesApi.scaleE2EServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\E2eServiceInstancesApi(); -$version = version_example; // String | -$serviceId = serviceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->scaleE2EServiceInstance($version, $serviceId, $body); -} catch (Exception $e) { - echo 'Exception when calling E2eServiceInstancesApi->scaleE2EServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::E2eServiceInstancesApi; - -my $api_instance = WWW::SwaggerClient::E2eServiceInstancesApi->new(); -my $version = version_example; # String | -my $serviceId = serviceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->scaleE2EServiceInstance(version => $version, serviceId => $serviceId, body => $body); -}; -if ($@) { - warn "Exception when calling E2eServiceInstancesApi->scaleE2EServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-scaleE2EServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.E2eServiceInstancesApi() -version = version_example # String | -serviceId = serviceId_example # String | -body = body_example # String | (optional) - -try: - # Scale E2E Service Instance on a specified version - api_instance.scale_e2_e_service_instance(version, serviceId, body=body) -except ApiException as e: - print("Exception when calling E2eServiceInstancesApi->scaleE2EServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_scaleE2EServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceId*</td> -<td> - - - <div id="d2e199_scaleE2EServiceInstance_serviceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_scaleE2EServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_scaleE2EServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-E2eServiceInstances-updateE2EServiceInstance"> - <article id="api-E2eServiceInstances-updateE2EServiceInstance-0" data-group="User" data-name="updateE2EServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>updateE2EServiceInstance</h1> - <p>Update an E2E Service Instance on a version provided and serviceId</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="put"><code><span class="pln">/onap/so/infra/e2eServiceInstances/{version}/{serviceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-E2eServiceInstances-updateE2EServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X PUT "https://localhost/onap/so/infra/e2eServiceInstances/{version}/{serviceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.E2eServiceInstancesApi; - -import java.io.File; -import java.util.*; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String version = version_example; // String | - String serviceId = serviceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateE2EServiceInstance(version, serviceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#updateE2EServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.E2eServiceInstancesApi; - -public class E2eServiceInstancesApiExample { - - public static void main(String[] args) { - E2eServiceInstancesApi apiInstance = new E2eServiceInstancesApi(); - String version = version_example; // String | - String serviceId = serviceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateE2EServiceInstance(version, serviceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling E2eServiceInstancesApi#updateE2EServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceId = serviceId_example; // -String *body = body_example; // (optional) - -E2eServiceInstancesApi *apiInstance = [[E2eServiceInstancesApi alloc] init]; - -// Update an E2E Service Instance on a version provided and serviceId -[apiInstance updateE2EServiceInstanceWith:version - serviceId:serviceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.E2eServiceInstancesApi() - -var version = version_example; // {String} - -var serviceId = serviceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.updateE2EServiceInstance(version, serviceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class updateE2EServiceInstanceExample - { - public void main() - { - - var apiInstance = new E2eServiceInstancesApi(); - var version = version_example; // String | - var serviceId = serviceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Update an E2E Service Instance on a version provided and serviceId - apiInstance.updateE2EServiceInstance(version, serviceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling E2eServiceInstancesApi.updateE2EServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\E2eServiceInstancesApi(); -$version = version_example; // String | -$serviceId = serviceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->updateE2EServiceInstance($version, $serviceId, $body); -} catch (Exception $e) { - echo 'Exception when calling E2eServiceInstancesApi->updateE2EServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::E2eServiceInstancesApi; - -my $api_instance = WWW::SwaggerClient::E2eServiceInstancesApi->new(); -my $version = version_example; # String | -my $serviceId = serviceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->updateE2EServiceInstance(version => $version, serviceId => $serviceId, body => $body); -}; -if ($@) { - warn "Exception when calling E2eServiceInstancesApi->updateE2EServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-E2eServiceInstances-updateE2EServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.E2eServiceInstancesApi() -version = version_example # String | -serviceId = serviceId_example # String | -body = body_example # String | (optional) - -try: - # Update an E2E Service Instance on a version provided and serviceId - api_instance.update_e2_e_service_instance(version, serviceId, body=body) -except ApiException as e: - print("Exception when calling E2eServiceInstancesApi->updateE2EServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_updateE2EServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceId*</td> -<td> - - - <div id="d2e199_updateE2EServiceInstance_serviceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_updateE2EServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_updateE2EServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - <section id="api-Globalhealthcheck"> - <h1>Globalhealthcheck</h1> - <div id="api-Globalhealthcheck-globalHealthcheck"> - <article id="api-Globalhealthcheck-globalHealthcheck-0" data-group="User" data-name="globalHealthcheck" data-version="0"> - <div class="pull-left"> - <h1>globalHealthcheck</h1> - <p>Performing global health check</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/globalhealthcheck</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-Globalhealthcheck-globalHealthcheck-0-curl">Curl</a></li> - <li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-java">Java</a></li> - <li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-android">Android</a></li> - <!--<li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-csharp">C#</a></li> - <li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-php">PHP</a></li> - <li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-perl">Perl</a></li> - <li class=""><a href="#examples-Globalhealthcheck-globalHealthcheck-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-Globalhealthcheck-globalHealthcheck-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X GET "https://localhost/globalhealthcheck?enableBpmn="</code></pre> - </div> - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.GlobalhealthcheckApi; - -import java.io.File; -import java.util.*; - -public class GlobalhealthcheckApiExample { - - public static void main(String[] args) { - - GlobalhealthcheckApi apiInstance = new GlobalhealthcheckApi(); - Boolean enableBpmn = true; // Boolean | - try { - apiInstance.globalHealthcheck(enableBpmn); - } catch (ApiException e) { - System.err.println("Exception when calling GlobalhealthcheckApi#globalHealthcheck"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.GlobalhealthcheckApi; - -public class GlobalhealthcheckApiExample { - - public static void main(String[] args) { - GlobalhealthcheckApi apiInstance = new GlobalhealthcheckApi(); - Boolean enableBpmn = true; // Boolean | - try { - apiInstance.globalHealthcheck(enableBpmn); - } catch (ApiException e) { - System.err.println("Exception when calling GlobalhealthcheckApi#globalHealthcheck"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-objc"> - <pre class="prettyprint"><code class="language-cpp">Boolean *enableBpmn = true; // (optional) (default to true) - -GlobalhealthcheckApi *apiInstance = [[GlobalhealthcheckApi alloc] init]; - -// Performing global health check -[apiInstance globalHealthcheckWith:enableBpmn - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.GlobalhealthcheckApi() - -var opts = { - 'enableBpmn': true // {Boolean} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.globalHealthcheck(opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class globalHealthcheckExample - { - public void main() - { - - var apiInstance = new GlobalhealthcheckApi(); - var enableBpmn = true; // Boolean | (optional) (default to true) - - try - { - // Performing global health check - apiInstance.globalHealthcheck(enableBpmn); - } - catch (Exception e) - { - Debug.Print("Exception when calling GlobalhealthcheckApi.globalHealthcheck: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\GlobalhealthcheckApi(); -$enableBpmn = true; // Boolean | - -try { - $api_instance->globalHealthcheck($enableBpmn); -} catch (Exception $e) { - echo 'Exception when calling GlobalhealthcheckApi->globalHealthcheck: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::GlobalhealthcheckApi; - -my $api_instance = WWW::SwaggerClient::GlobalhealthcheckApi->new(); -my $enableBpmn = true; # Boolean | - -eval { - $api_instance->globalHealthcheck(enableBpmn => $enableBpmn); -}; -if ($@) { - warn "Exception when calling GlobalhealthcheckApi->globalHealthcheck: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-Globalhealthcheck-globalHealthcheck-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.GlobalhealthcheckApi() -enableBpmn = true # Boolean | (optional) (default to true) - -try: - # Performing global health check - api_instance.global_healthcheck(enableBpmn=enableBpmn) -except ApiException as e: - print("Exception when calling GlobalhealthcheckApi->globalHealthcheck: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - - - - - <div class="methodsubtabletitle">Query parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">enableBpmn</td> -<td> - - - <div id="d2e199_globalHealthcheck_enableBpmn"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - Boolean - </span> - - </div> - </div> - </div> -</td> -</tr> - - </table> - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - <section id="api-Nodehealthcheck"> - <h1>Nodehealthcheck</h1> - <div id="api-Nodehealthcheck-nodeHealthcheck"> - <article id="api-Nodehealthcheck-nodeHealthcheck-0" data-group="User" data-name="nodeHealthcheck" data-version="0"> - <div class="pull-left"> - <h1>nodeHealthcheck</h1> - <p>Performing node health check</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/nodehealthcheck</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-curl">Curl</a></li> - <li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-java">Java</a></li> - <li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-android">Android</a></li> - <!--<li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-csharp">C#</a></li> - <li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-php">PHP</a></li> - <li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-perl">Perl</a></li> - <li class=""><a href="#examples-Nodehealthcheck-nodeHealthcheck-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-Nodehealthcheck-nodeHealthcheck-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X GET "https://localhost/nodehealthcheck"</code></pre> - </div> - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.NodehealthcheckApi; - -import java.io.File; -import java.util.*; - -public class NodehealthcheckApiExample { - - public static void main(String[] args) { - - NodehealthcheckApi apiInstance = new NodehealthcheckApi(); - try { - apiInstance.nodeHealthcheck(); - } catch (ApiException e) { - System.err.println("Exception when calling NodehealthcheckApi#nodeHealthcheck"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.NodehealthcheckApi; - -public class NodehealthcheckApiExample { - - public static void main(String[] args) { - NodehealthcheckApi apiInstance = new NodehealthcheckApi(); - try { - apiInstance.nodeHealthcheck(); - } catch (ApiException e) { - System.err.println("Exception when calling NodehealthcheckApi#nodeHealthcheck"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-objc"> - <pre class="prettyprint"><code class="language-cpp"> -NodehealthcheckApi *apiInstance = [[NodehealthcheckApi alloc] init]; - -// Performing node health check -[apiInstance nodeHealthcheckWithCompletionHandler: - ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.NodehealthcheckApi() - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.nodeHealthcheck(callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class nodeHealthcheckExample - { - public void main() - { - - var apiInstance = new NodehealthcheckApi(); - - try - { - // Performing node health check - apiInstance.nodeHealthcheck(); - } - catch (Exception e) - { - Debug.Print("Exception when calling NodehealthcheckApi.nodeHealthcheck: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\NodehealthcheckApi(); - -try { - $api_instance->nodeHealthcheck(); -} catch (Exception $e) { - echo 'Exception when calling NodehealthcheckApi->nodeHealthcheck: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::NodehealthcheckApi; - -my $api_instance = WWW::SwaggerClient::NodehealthcheckApi->new(); - -eval { - $api_instance->nodeHealthcheck(); -}; -if ($@) { - warn "Exception when calling NodehealthcheckApi->nodeHealthcheck: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-Nodehealthcheck-nodeHealthcheck-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NodehealthcheckApi() - -try: - # Performing node health check - api_instance.node_healthcheck() -except ApiException as e: - print("Exception when calling NodehealthcheckApi->nodeHealthcheck: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - - - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - <section id="api-OnapsoinfracloudResources"> - <h1>OnapsoinfracloudResources</h1> - <div id="api-OnapsoinfracloudResources-activateOperationEnvironment"> - <article id="api-OnapsoinfracloudResources-activateOperationEnvironment-0" data-group="User" data-name="activateOperationEnvironment" data-version="0"> - <div class="pull-left"> - <h1>activateOperationEnvironment</h1> - <p>Activate an Operational Environment</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/activate</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-activateOperationEnvironment-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/activate"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfracloudResourcesApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfracloudResourcesApiExample { - - public static void main(String[] args) { - - OnapsoinfracloudResourcesApi apiInstance = new OnapsoinfracloudResourcesApi(); - String version = version_example; // String | - String operationalEnvironmentId = operationalEnvironmentId_example; // String | - String body = body_example; // String | - try { - apiInstance.activateOperationEnvironment(version, operationalEnvironmentId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesApi#activateOperationEnvironment"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfracloudResourcesApi; - -public class OnapsoinfracloudResourcesApiExample { - - public static void main(String[] args) { - OnapsoinfracloudResourcesApi apiInstance = new OnapsoinfracloudResourcesApi(); - String version = version_example; // String | - String operationalEnvironmentId = operationalEnvironmentId_example; // String | - String body = body_example; // String | - try { - apiInstance.activateOperationEnvironment(version, operationalEnvironmentId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesApi#activateOperationEnvironment"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *operationalEnvironmentId = operationalEnvironmentId_example; // -String *body = body_example; // (optional) - -OnapsoinfracloudResourcesApi *apiInstance = [[OnapsoinfracloudResourcesApi alloc] init]; - -// Activate an Operational Environment -[apiInstance activateOperationEnvironmentWith:version - operationalEnvironmentId:operationalEnvironmentId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfracloudResourcesApi() - -var version = version_example; // {String} - -var operationalEnvironmentId = operationalEnvironmentId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.activateOperationEnvironment(version, operationalEnvironmentId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class activateOperationEnvironmentExample - { - public void main() - { - - var apiInstance = new OnapsoinfracloudResourcesApi(); - var version = version_example; // String | - var operationalEnvironmentId = operationalEnvironmentId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Activate an Operational Environment - apiInstance.activateOperationEnvironment(version, operationalEnvironmentId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfracloudResourcesApi.activateOperationEnvironment: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfracloudResourcesApi(); -$version = version_example; // String | -$operationalEnvironmentId = operationalEnvironmentId_example; // String | -$body = body_example; // String | - -try { - $api_instance->activateOperationEnvironment($version, $operationalEnvironmentId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfracloudResourcesApi->activateOperationEnvironment: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfracloudResourcesApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfracloudResourcesApi->new(); -my $version = version_example; # String | -my $operationalEnvironmentId = operationalEnvironmentId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->activateOperationEnvironment(version => $version, operationalEnvironmentId => $operationalEnvironmentId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfracloudResourcesApi->activateOperationEnvironment: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-activateOperationEnvironment-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfracloudResourcesApi() -version = version_example # String | -operationalEnvironmentId = operationalEnvironmentId_example # String | -body = body_example # String | (optional) - -try: - # Activate an Operational Environment - api_instance.activate_operation_environment(version, operationalEnvironmentId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfracloudResourcesApi->activateOperationEnvironment: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_activateOperationEnvironment_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">operationalEnvironmentId*</td> -<td> - - - <div id="d2e199_activateOperationEnvironment_operationalEnvironmentId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_activateOperationEnvironment_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_activateOperationEnvironment_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfracloudResources-createOperationEnvironment"> - <article id="api-OnapsoinfracloudResources-createOperationEnvironment-0" data-group="User" data-name="createOperationEnvironment" data-version="0"> - <div class="pull-left"> - <h1>createOperationEnvironment</h1> - <p>Create an Operational Environment</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/cloudResources/{version}/operationalEnvironments</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-createOperationEnvironment-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/cloudResources/{version}/operationalEnvironments"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfracloudResourcesApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfracloudResourcesApiExample { - - public static void main(String[] args) { - - OnapsoinfracloudResourcesApi apiInstance = new OnapsoinfracloudResourcesApi(); - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.createOperationEnvironment(version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesApi#createOperationEnvironment"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfracloudResourcesApi; - -public class OnapsoinfracloudResourcesApiExample { - - public static void main(String[] args) { - OnapsoinfracloudResourcesApi apiInstance = new OnapsoinfracloudResourcesApi(); - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.createOperationEnvironment(version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesApi#createOperationEnvironment"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *body = body_example; // (optional) - -OnapsoinfracloudResourcesApi *apiInstance = [[OnapsoinfracloudResourcesApi alloc] init]; - -// Create an Operational Environment -[apiInstance createOperationEnvironmentWith:version - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfracloudResourcesApi() - -var version = version_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.createOperationEnvironment(version, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class createOperationEnvironmentExample - { - public void main() - { - - var apiInstance = new OnapsoinfracloudResourcesApi(); - var version = version_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create an Operational Environment - apiInstance.createOperationEnvironment(version, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfracloudResourcesApi.createOperationEnvironment: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfracloudResourcesApi(); -$version = version_example; // String | -$body = body_example; // String | - -try { - $api_instance->createOperationEnvironment($version, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfracloudResourcesApi->createOperationEnvironment: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfracloudResourcesApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfracloudResourcesApi->new(); -my $version = version_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->createOperationEnvironment(version => $version, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfracloudResourcesApi->createOperationEnvironment: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-createOperationEnvironment-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfracloudResourcesApi() -version = version_example # String | -body = body_example # String | (optional) - -try: - # Create an Operational Environment - api_instance.create_operation_environment(version, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfracloudResourcesApi->createOperationEnvironment: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_createOperationEnvironment_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_createOperationEnvironment_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_createOperationEnvironment_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfracloudResources-deactivateOperationEnvironment"> - <article id="api-OnapsoinfracloudResources-deactivateOperationEnvironment-0" data-group="User" data-name="deactivateOperationEnvironment" data-version="0"> - <div class="pull-left"> - <h1>deactivateOperationEnvironment</h1> - <p>Deactivate an Operational Environment</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/deactivate</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/deactivate"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfracloudResourcesApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfracloudResourcesApiExample { - - public static void main(String[] args) { - - OnapsoinfracloudResourcesApi apiInstance = new OnapsoinfracloudResourcesApi(); - String version = version_example; // String | - String operationalEnvironmentId = operationalEnvironmentId_example; // String | - String body = body_example; // String | - try { - apiInstance.deactivateOperationEnvironment(version, operationalEnvironmentId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesApi#deactivateOperationEnvironment"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfracloudResourcesApi; - -public class OnapsoinfracloudResourcesApiExample { - - public static void main(String[] args) { - OnapsoinfracloudResourcesApi apiInstance = new OnapsoinfracloudResourcesApi(); - String version = version_example; // String | - String operationalEnvironmentId = operationalEnvironmentId_example; // String | - String body = body_example; // String | - try { - apiInstance.deactivateOperationEnvironment(version, operationalEnvironmentId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesApi#deactivateOperationEnvironment"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *operationalEnvironmentId = operationalEnvironmentId_example; // -String *body = body_example; // (optional) - -OnapsoinfracloudResourcesApi *apiInstance = [[OnapsoinfracloudResourcesApi alloc] init]; - -// Deactivate an Operational Environment -[apiInstance deactivateOperationEnvironmentWith:version - operationalEnvironmentId:operationalEnvironmentId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfracloudResourcesApi() - -var version = version_example; // {String} - -var operationalEnvironmentId = operationalEnvironmentId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deactivateOperationEnvironment(version, operationalEnvironmentId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deactivateOperationEnvironmentExample - { - public void main() - { - - var apiInstance = new OnapsoinfracloudResourcesApi(); - var version = version_example; // String | - var operationalEnvironmentId = operationalEnvironmentId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Deactivate an Operational Environment - apiInstance.deactivateOperationEnvironment(version, operationalEnvironmentId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfracloudResourcesApi.deactivateOperationEnvironment: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfracloudResourcesApi(); -$version = version_example; // String | -$operationalEnvironmentId = operationalEnvironmentId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deactivateOperationEnvironment($version, $operationalEnvironmentId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfracloudResourcesApi->deactivateOperationEnvironment: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfracloudResourcesApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfracloudResourcesApi->new(); -my $version = version_example; # String | -my $operationalEnvironmentId = operationalEnvironmentId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deactivateOperationEnvironment(version => $version, operationalEnvironmentId => $operationalEnvironmentId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfracloudResourcesApi->deactivateOperationEnvironment: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResources-deactivateOperationEnvironment-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfracloudResourcesApi() -version = version_example # String | -operationalEnvironmentId = operationalEnvironmentId_example # String | -body = body_example # String | (optional) - -try: - # Deactivate an Operational Environment - api_instance.deactivate_operation_environment(version, operationalEnvironmentId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfracloudResourcesApi->deactivateOperationEnvironment: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deactivateOperationEnvironment_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">operationalEnvironmentId*</td> -<td> - - - <div id="d2e199_deactivateOperationEnvironment_operationalEnvironmentId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deactivateOperationEnvironment_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deactivateOperationEnvironment_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - <section id="api-OnapsoinfracloudResourcesRequests"> - <h1>OnapsoinfracloudResourcesRequests</h1> - <div id="api-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter"> - <article id="api-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0" data-group="User" data-name="getOperationEnvironmentStatusFilter" data-version="0"> - <div class="pull-left"> - <h1>getOperationEnvironmentStatusFilter</h1> - <p>Get status of an Operational Environment based on filter criteria</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/onap/so/infra/cloudResourcesRequests/{version}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X GET "https://localhost/onap/so/infra/cloudResourcesRequests/{version}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfracloudResourcesRequestsApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfracloudResourcesRequestsApiExample { - - public static void main(String[] args) { - - OnapsoinfracloudResourcesRequestsApi apiInstance = new OnapsoinfracloudResourcesRequestsApi(); - String version = version_example; // String | - try { - apiInstance.getOperationEnvironmentStatusFilter(version); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesRequestsApi#getOperationEnvironmentStatusFilter"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfracloudResourcesRequestsApi; - -public class OnapsoinfracloudResourcesRequestsApiExample { - - public static void main(String[] args) { - OnapsoinfracloudResourcesRequestsApi apiInstance = new OnapsoinfracloudResourcesRequestsApi(); - String version = version_example; // String | - try { - apiInstance.getOperationEnvironmentStatusFilter(version); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesRequestsApi#getOperationEnvironmentStatusFilter"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // - -OnapsoinfracloudResourcesRequestsApi *apiInstance = [[OnapsoinfracloudResourcesRequestsApi alloc] init]; - -// Get status of an Operational Environment based on filter criteria -[apiInstance getOperationEnvironmentStatusFilterWith:version - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfracloudResourcesRequestsApi() - -var version = version_example; // {String} - - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.getOperationEnvironmentStatusFilter(version, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class getOperationEnvironmentStatusFilterExample - { - public void main() - { - - var apiInstance = new OnapsoinfracloudResourcesRequestsApi(); - var version = version_example; // String | - - try - { - // Get status of an Operational Environment based on filter criteria - apiInstance.getOperationEnvironmentStatusFilter(version); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfracloudResourcesRequestsApi.getOperationEnvironmentStatusFilter: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfracloudResourcesRequestsApi(); -$version = version_example; // String | - -try { - $api_instance->getOperationEnvironmentStatusFilter($version); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfracloudResourcesRequestsApi->getOperationEnvironmentStatusFilter: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfracloudResourcesRequestsApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfracloudResourcesRequestsApi->new(); -my $version = version_example; # String | - -eval { - $api_instance->getOperationEnvironmentStatusFilter(version => $version); -}; -if ($@) { - warn "Exception when calling OnapsoinfracloudResourcesRequestsApi->getOperationEnvironmentStatusFilter: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-getOperationEnvironmentStatusFilter-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfracloudResourcesRequestsApi() -version = version_example # String | - -try: - # Get status of an Operational Environment based on filter criteria - api_instance.get_operation_environment_status_filter(version) -except ApiException as e: - print("Exception when calling OnapsoinfracloudResourcesRequestsApi->getOperationEnvironmentStatusFilter: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_getOperationEnvironmentStatusFilter_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId"> - <article id="api-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0" data-group="User" data-name="unlockOrchestrationRequestForReqId" data-version="0"> - <div class="pull-left"> - <h1>unlockOrchestrationRequestForReqId</h1> - <p>Unlock CloudOrchestration requests for a specified requestId</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/cloudResourcesRequests/{version}/{requestId}/unlock</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/cloudResourcesRequests/{version}/{requestId}/unlock"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfracloudResourcesRequestsApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfracloudResourcesRequestsApiExample { - - public static void main(String[] args) { - - OnapsoinfracloudResourcesRequestsApi apiInstance = new OnapsoinfracloudResourcesRequestsApi(); - String requestId = requestId_example; // String | - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.unlockOrchestrationRequestForReqId(requestId, version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesRequestsApi#unlockOrchestrationRequestForReqId"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfracloudResourcesRequestsApi; - -public class OnapsoinfracloudResourcesRequestsApiExample { - - public static void main(String[] args) { - OnapsoinfracloudResourcesRequestsApi apiInstance = new OnapsoinfracloudResourcesRequestsApi(); - String requestId = requestId_example; // String | - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.unlockOrchestrationRequestForReqId(requestId, version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfracloudResourcesRequestsApi#unlockOrchestrationRequestForReqId"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *requestId = requestId_example; // -String *version = version_example; // -String *body = body_example; // (optional) - -OnapsoinfracloudResourcesRequestsApi *apiInstance = [[OnapsoinfracloudResourcesRequestsApi alloc] init]; - -// Unlock CloudOrchestration requests for a specified requestId -[apiInstance unlockOrchestrationRequestForReqIdWith:requestId - version:version - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfracloudResourcesRequestsApi() - -var requestId = requestId_example; // {String} - -var version = version_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.unlockOrchestrationRequestForReqId(requestId, version, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class unlockOrchestrationRequestForReqIdExample - { - public void main() - { - - var apiInstance = new OnapsoinfracloudResourcesRequestsApi(); - var requestId = requestId_example; // String | - var version = version_example; // String | - var body = body_example; // String | (optional) - - try - { - // Unlock CloudOrchestration requests for a specified requestId - apiInstance.unlockOrchestrationRequestForReqId(requestId, version, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfracloudResourcesRequestsApi.unlockOrchestrationRequestForReqId: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfracloudResourcesRequestsApi(); -$requestId = requestId_example; // String | -$version = version_example; // String | -$body = body_example; // String | - -try { - $api_instance->unlockOrchestrationRequestForReqId($requestId, $version, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfracloudResourcesRequestsApi->unlockOrchestrationRequestForReqId: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfracloudResourcesRequestsApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfracloudResourcesRequestsApi->new(); -my $requestId = requestId_example; # String | -my $version = version_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->unlockOrchestrationRequestForReqId(requestId => $requestId, version => $version, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfracloudResourcesRequestsApi->unlockOrchestrationRequestForReqId: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfracloudResourcesRequests-unlockOrchestrationRequestForReqId-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfracloudResourcesRequestsApi() -requestId = requestId_example # String | -version = version_example # String | -body = body_example # String | (optional) - -try: - # Unlock CloudOrchestration requests for a specified requestId - api_instance.unlock_orchestration_request_for_req_id(requestId, version, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfracloudResourcesRequestsApi->unlockOrchestrationRequestForReqId: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">requestId*</td> -<td> - - - <div id="d2e199_unlockOrchestrationRequestForReqId_requestId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_unlockOrchestrationRequestForReqId_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_unlockOrchestrationRequestForReqId_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_unlockOrchestrationRequestForReqId_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - <section id="api-OnapsoinframodelDistributions"> - <h1>OnapsoinframodelDistributions</h1> - <div id="api-OnapsoinframodelDistributions-updateModelDistributionStatus"> - <article id="api-OnapsoinframodelDistributions-updateModelDistributionStatus-0" data-group="User" data-name="updateModelDistributionStatus" data-version="0"> - <div class="pull-left"> - <h1>updateModelDistributionStatus</h1> - <p>Update model distribution status</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/modelDistributions/{version}/distributions/{distributionId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/modelDistributions/{version}/distributions/{distributionId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinframodelDistributionsApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinframodelDistributionsApiExample { - - public static void main(String[] args) { - - OnapsoinframodelDistributionsApi apiInstance = new OnapsoinframodelDistributionsApi(); - String version = version_example; // String | - String distributionId = distributionId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateModelDistributionStatus(version, distributionId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinframodelDistributionsApi#updateModelDistributionStatus"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinframodelDistributionsApi; - -public class OnapsoinframodelDistributionsApiExample { - - public static void main(String[] args) { - OnapsoinframodelDistributionsApi apiInstance = new OnapsoinframodelDistributionsApi(); - String version = version_example; // String | - String distributionId = distributionId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateModelDistributionStatus(version, distributionId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinframodelDistributionsApi#updateModelDistributionStatus"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *distributionId = distributionId_example; // -String *body = body_example; // (optional) - -OnapsoinframodelDistributionsApi *apiInstance = [[OnapsoinframodelDistributionsApi alloc] init]; - -// Update model distribution status -[apiInstance updateModelDistributionStatusWith:version - distributionId:distributionId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinframodelDistributionsApi() - -var version = version_example; // {String} - -var distributionId = distributionId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.updateModelDistributionStatus(version, distributionId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class updateModelDistributionStatusExample - { - public void main() - { - - var apiInstance = new OnapsoinframodelDistributionsApi(); - var version = version_example; // String | - var distributionId = distributionId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Update model distribution status - apiInstance.updateModelDistributionStatus(version, distributionId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinframodelDistributionsApi.updateModelDistributionStatus: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinframodelDistributionsApi(); -$version = version_example; // String | -$distributionId = distributionId_example; // String | -$body = body_example; // String | - -try { - $api_instance->updateModelDistributionStatus($version, $distributionId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinframodelDistributionsApi->updateModelDistributionStatus: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinframodelDistributionsApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinframodelDistributionsApi->new(); -my $version = version_example; # String | -my $distributionId = distributionId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->updateModelDistributionStatus(version => $version, distributionId => $distributionId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinframodelDistributionsApi->updateModelDistributionStatus: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinframodelDistributions-updateModelDistributionStatus-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinframodelDistributionsApi() -version = version_example # String | -distributionId = distributionId_example # String | -body = body_example # String | (optional) - -try: - # Update model distribution status - api_instance.update_model_distribution_status(version, distributionId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinframodelDistributionsApi->updateModelDistributionStatus: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_updateModelDistributionStatus_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">distributionId*</td> -<td> - - - <div id="d2e199_updateModelDistributionStatus_distributionId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_updateModelDistributionStatus_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_updateModelDistributionStatus_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - <section id="api-OnapsoinfraorchestrationRequests"> - <h1>OnapsoinfraorchestrationRequests</h1> - <div id="api-OnapsoinfraorchestrationRequests-getOrchestrationRequest"> - <article id="api-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0" data-group="User" data-name="getOrchestrationRequest" data-version="0"> - <div class="pull-left"> - <h1>getOrchestrationRequest</h1> - <p>Find Orchestrated Requests for a URI Information</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/onap/so/infra/orchestrationRequests/{version}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X GET "https://localhost/onap/so/infra/orchestrationRequests/{version}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraorchestrationRequestsApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraorchestrationRequestsApiExample { - - public static void main(String[] args) { - - OnapsoinfraorchestrationRequestsApi apiInstance = new OnapsoinfraorchestrationRequestsApi(); - String version = version_example; // String | - try { - apiInstance.getOrchestrationRequest(version); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraorchestrationRequestsApi#getOrchestrationRequest"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraorchestrationRequestsApi; - -public class OnapsoinfraorchestrationRequestsApiExample { - - public static void main(String[] args) { - OnapsoinfraorchestrationRequestsApi apiInstance = new OnapsoinfraorchestrationRequestsApi(); - String version = version_example; // String | - try { - apiInstance.getOrchestrationRequest(version); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraorchestrationRequestsApi#getOrchestrationRequest"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // - -OnapsoinfraorchestrationRequestsApi *apiInstance = [[OnapsoinfraorchestrationRequestsApi alloc] init]; - -// Find Orchestrated Requests for a URI Information -[apiInstance getOrchestrationRequestWith:version - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraorchestrationRequestsApi() - -var version = version_example; // {String} - - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.getOrchestrationRequest(version, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class getOrchestrationRequestExample - { - public void main() - { - - var apiInstance = new OnapsoinfraorchestrationRequestsApi(); - var version = version_example; // String | - - try - { - // Find Orchestrated Requests for a URI Information - apiInstance.getOrchestrationRequest(version); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraorchestrationRequestsApi.getOrchestrationRequest: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraorchestrationRequestsApi(); -$version = version_example; // String | - -try { - $api_instance->getOrchestrationRequest($version); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraorchestrationRequestsApi->getOrchestrationRequest: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraorchestrationRequestsApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraorchestrationRequestsApi->new(); -my $version = version_example; # String | - -eval { - $api_instance->getOrchestrationRequest(version => $version); -}; -if ($@) { - warn "Exception when calling OnapsoinfraorchestrationRequestsApi->getOrchestrationRequest: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequest-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraorchestrationRequestsApi() -version = version_example # String | - -try: - # Find Orchestrated Requests for a URI Information - api_instance.get_orchestration_request(version) -except ApiException as e: - print("Exception when calling OnapsoinfraorchestrationRequestsApi->getOrchestrationRequest: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_getOrchestrationRequest_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId"> - <article id="api-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0" data-group="User" data-name="getOrchestrationRequestForReqId" data-version="0"> - <div class="pull-left"> - <h1>getOrchestrationRequestForReqId</h1> - <p>Find Orchestrated Requests for a given requestId</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/onap/so/infra/orchestrationRequests/{version}/{requestId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X GET "https://localhost/onap/so/infra/orchestrationRequests/{version}/{requestId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraorchestrationRequestsApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraorchestrationRequestsApiExample { - - public static void main(String[] args) { - - OnapsoinfraorchestrationRequestsApi apiInstance = new OnapsoinfraorchestrationRequestsApi(); - String requestId = requestId_example; // String | - String version = version_example; // String | - try { - apiInstance.getOrchestrationRequestForReqId(requestId, version); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraorchestrationRequestsApi#getOrchestrationRequestForReqId"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraorchestrationRequestsApi; - -public class OnapsoinfraorchestrationRequestsApiExample { - - public static void main(String[] args) { - OnapsoinfraorchestrationRequestsApi apiInstance = new OnapsoinfraorchestrationRequestsApi(); - String requestId = requestId_example; // String | - String version = version_example; // String | - try { - apiInstance.getOrchestrationRequestForReqId(requestId, version); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraorchestrationRequestsApi#getOrchestrationRequestForReqId"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *requestId = requestId_example; // -String *version = version_example; // - -OnapsoinfraorchestrationRequestsApi *apiInstance = [[OnapsoinfraorchestrationRequestsApi alloc] init]; - -// Find Orchestrated Requests for a given requestId -[apiInstance getOrchestrationRequestForReqIdWith:requestId - version:version - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraorchestrationRequestsApi() - -var requestId = requestId_example; // {String} - -var version = version_example; // {String} - - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.getOrchestrationRequestForReqId(requestId, version, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class getOrchestrationRequestForReqIdExample - { - public void main() - { - - var apiInstance = new OnapsoinfraorchestrationRequestsApi(); - var requestId = requestId_example; // String | - var version = version_example; // String | - - try - { - // Find Orchestrated Requests for a given requestId - apiInstance.getOrchestrationRequestForReqId(requestId, version); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraorchestrationRequestsApi.getOrchestrationRequestForReqId: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraorchestrationRequestsApi(); -$requestId = requestId_example; // String | -$version = version_example; // String | - -try { - $api_instance->getOrchestrationRequestForReqId($requestId, $version); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraorchestrationRequestsApi->getOrchestrationRequestForReqId: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraorchestrationRequestsApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraorchestrationRequestsApi->new(); -my $requestId = requestId_example; # String | -my $version = version_example; # String | - -eval { - $api_instance->getOrchestrationRequestForReqId(requestId => $requestId, version => $version); -}; -if ($@) { - warn "Exception when calling OnapsoinfraorchestrationRequestsApi->getOrchestrationRequestForReqId: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-getOrchestrationRequestForReqId-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraorchestrationRequestsApi() -requestId = requestId_example # String | -version = version_example # String | - -try: - # Find Orchestrated Requests for a given requestId - api_instance.get_orchestration_request_for_req_id(requestId, version) -except ApiException as e: - print("Exception when calling OnapsoinfraorchestrationRequestsApi->getOrchestrationRequestForReqId: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">requestId*</td> -<td> - - - <div id="d2e199_getOrchestrationRequestForReqId_requestId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_getOrchestrationRequestForReqId_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest"> - <article id="api-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0" data-group="User" data-name="unlockOrchestrationRequest" data-version="0"> - <div class="pull-left"> - <h1>unlockOrchestrationRequest</h1> - <p>Unlock Orchestrated Requests for a given requestId</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/orchestrationRequests/{version}/{requestId}/unlock</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/orchestrationRequests/{version}/{requestId}/unlock"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraorchestrationRequestsApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraorchestrationRequestsApiExample { - - public static void main(String[] args) { - - OnapsoinfraorchestrationRequestsApi apiInstance = new OnapsoinfraorchestrationRequestsApi(); - String requestId = requestId_example; // String | - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.unlockOrchestrationRequest(requestId, version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraorchestrationRequestsApi#unlockOrchestrationRequest"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraorchestrationRequestsApi; - -public class OnapsoinfraorchestrationRequestsApiExample { - - public static void main(String[] args) { - OnapsoinfraorchestrationRequestsApi apiInstance = new OnapsoinfraorchestrationRequestsApi(); - String requestId = requestId_example; // String | - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.unlockOrchestrationRequest(requestId, version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraorchestrationRequestsApi#unlockOrchestrationRequest"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *requestId = requestId_example; // -String *version = version_example; // -String *body = body_example; // (optional) - -OnapsoinfraorchestrationRequestsApi *apiInstance = [[OnapsoinfraorchestrationRequestsApi alloc] init]; - -// Unlock Orchestrated Requests for a given requestId -[apiInstance unlockOrchestrationRequestWith:requestId - version:version - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraorchestrationRequestsApi() - -var requestId = requestId_example; // {String} - -var version = version_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.unlockOrchestrationRequest(requestId, version, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class unlockOrchestrationRequestExample - { - public void main() - { - - var apiInstance = new OnapsoinfraorchestrationRequestsApi(); - var requestId = requestId_example; // String | - var version = version_example; // String | - var body = body_example; // String | (optional) - - try - { - // Unlock Orchestrated Requests for a given requestId - apiInstance.unlockOrchestrationRequest(requestId, version, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraorchestrationRequestsApi.unlockOrchestrationRequest: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraorchestrationRequestsApi(); -$requestId = requestId_example; // String | -$version = version_example; // String | -$body = body_example; // String | - -try { - $api_instance->unlockOrchestrationRequest($requestId, $version, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraorchestrationRequestsApi->unlockOrchestrationRequest: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraorchestrationRequestsApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraorchestrationRequestsApi->new(); -my $requestId = requestId_example; # String | -my $version = version_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->unlockOrchestrationRequest(requestId => $requestId, version => $version, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraorchestrationRequestsApi->unlockOrchestrationRequest: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraorchestrationRequests-unlockOrchestrationRequest-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraorchestrationRequestsApi() -requestId = requestId_example # String | -version = version_example # String | -body = body_example # String | (optional) - -try: - # Unlock Orchestrated Requests for a given requestId - api_instance.unlock_orchestration_request(requestId, version, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraorchestrationRequestsApi->unlockOrchestrationRequest: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">requestId*</td> -<td> - - - <div id="d2e199_unlockOrchestrationRequest_requestId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_unlockOrchestrationRequest_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_unlockOrchestrationRequest_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_unlockOrchestrationRequest_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - <section id="api-OnapsoinfraserviceInstantiation"> - <h1>OnapsoinfraserviceInstantiation</h1> - <div id="api-OnapsoinfraserviceInstantiation-activatePort"> - <article id="api-OnapsoinfraserviceInstantiation-activatePort-0" data-group="User" data-name="activatePort" data-version="0"> - <div class="pull-left"> - <h1>activatePort</h1> - <p>Activate Port Mirroring</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activatePort-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.activatePort(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#activatePort"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.activatePort(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#activatePort"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *configurationInstanceId = configurationInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Activate Port Mirroring -[apiInstance activatePortWith:version - serviceInstanceId:serviceInstanceId - configurationInstanceId:configurationInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var configurationInstanceId = configurationInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.activatePort(version, serviceInstanceId, configurationInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class activatePortExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var configurationInstanceId = configurationInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Activate Port Mirroring - apiInstance.activatePort(version, serviceInstanceId, configurationInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.activatePort: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$configurationInstanceId = configurationInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->activatePort($version, $serviceInstanceId, $configurationInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->activatePort: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $configurationInstanceId = configurationInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->activatePort(version => $version, serviceInstanceId => $serviceInstanceId, configurationInstanceId => $configurationInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->activatePort: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activatePort-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -configurationInstanceId = configurationInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Activate Port Mirroring - api_instance.activate_port(version, serviceInstanceId, configurationInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->activatePort: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_activatePort_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_activatePort_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">configurationInstanceId*</td> -<td> - - - <div id="d2e199_activatePort_configurationInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_activatePort_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_activatePort_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-activateServiceInstance"> - <article id="api-OnapsoinfraserviceInstantiation-activateServiceInstance-0" data-group="User" data-name="activateServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>activateServiceInstance</h1> - <p>Activate provided Service Instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/activate</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/activate"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.activateServiceInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#activateServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.activateServiceInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#activateServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Activate provided Service Instance -[apiInstance activateServiceInstanceWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.activateServiceInstance(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class activateServiceInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Activate provided Service Instance - apiInstance.activateServiceInstance(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.activateServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->activateServiceInstance($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->activateServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->activateServiceInstance(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->activateServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-activateServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Activate provided Service Instance - api_instance.activate_service_instance(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->activateServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_activateServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_activateServiceInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_activateServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_activateServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-addRelationships"> - <article id="api-OnapsoinfraserviceInstantiation-addRelationships-0" data-group="User" data-name="addRelationships" data-version="0"> - <div class="pull-left"> - <h1>addRelationships</h1> - <p>Add Relationships to a Service Instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/addRelationships</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-addRelationships-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/addRelationships"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.addRelationships(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#addRelationships"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.addRelationships(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#addRelationships"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Add Relationships to a Service Instance -[apiInstance addRelationshipsWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.addRelationships(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class addRelationshipsExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Add Relationships to a Service Instance - apiInstance.addRelationships(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.addRelationships: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->addRelationships($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->addRelationships: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->addRelationships(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->addRelationships: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-addRelationships-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Add Relationships to a Service Instance - api_instance.add_relationships(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->addRelationships: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_addRelationships_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_addRelationships_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_addRelationships_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_addRelationships_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-applyUpdatedConfig"> - <article id="api-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0" data-group="User" data-name="applyUpdatedConfig" data-version="0"> - <div class="pull-left"> - <h1>applyUpdatedConfig</h1> - <p>Apply updated configuration</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.applyUpdatedConfig(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#applyUpdatedConfig"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.applyUpdatedConfig(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#applyUpdatedConfig"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Apply updated configuration -[apiInstance applyUpdatedConfigWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.applyUpdatedConfig(version, serviceInstanceId, vnfInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class applyUpdatedConfigExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Apply updated configuration - apiInstance.applyUpdatedConfig(version, serviceInstanceId, vnfInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.applyUpdatedConfig: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->applyUpdatedConfig($version, $serviceInstanceId, $vnfInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->applyUpdatedConfig: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->applyUpdatedConfig(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->applyUpdatedConfig: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-applyUpdatedConfig-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Apply updated configuration - api_instance.apply_updated_config(version, serviceInstanceId, vnfInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->applyUpdatedConfig: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_applyUpdatedConfig_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_applyUpdatedConfig_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_applyUpdatedConfig_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_applyUpdatedConfig_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_applyUpdatedConfig_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-assignServiceInstance"> - <article id="api-OnapsoinfraserviceInstantiation-assignServiceInstance-0" data-group="User" data-name="assignServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>assignServiceInstance</h1> - <p>Assign Service Instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/assign</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/assign"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.assignServiceInstance(version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#assignServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.assignServiceInstance(version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#assignServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Assign Service Instance -[apiInstance assignServiceInstanceWith:version - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.assignServiceInstance(version, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class assignServiceInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var body = body_example; // String | (optional) - - try - { - // Assign Service Instance - apiInstance.assignServiceInstance(version, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.assignServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$body = body_example; // String | - -try { - $api_instance->assignServiceInstance($version, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->assignServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->assignServiceInstance(version => $version, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->assignServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-assignServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -body = body_example # String | (optional) - -try: - # Assign Service Instance - api_instance.assign_service_instance(version, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->assignServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_assignServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_assignServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_assignServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-createNetworkInstance"> - <article id="api-OnapsoinfraserviceInstantiation-createNetworkInstance-0" data-group="User" data-name="createNetworkInstance" data-version="0"> - <div class="pull-left"> - <h1>createNetworkInstance</h1> - <p>Create NetworkInstance on a specified version and serviceInstance </p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createNetworkInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createNetworkInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createNetworkInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createNetworkInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Create NetworkInstance on a specified version and serviceInstance -[apiInstance createNetworkInstanceWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.createNetworkInstance(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class createNetworkInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create NetworkInstance on a specified version and serviceInstance - apiInstance.createNetworkInstance(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.createNetworkInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->createNetworkInstance($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->createNetworkInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->createNetworkInstance(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->createNetworkInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createNetworkInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Create NetworkInstance on a specified version and serviceInstance - api_instance.create_network_instance(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->createNetworkInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_createNetworkInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_createNetworkInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_createNetworkInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_createNetworkInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-createPortConfiguration"> - <article id="api-OnapsoinfraserviceInstantiation-createPortConfiguration-0" data-group="User" data-name="createPortConfiguration" data-version="0"> - <div class="pull-left"> - <h1>createPortConfiguration</h1> - <p>Create Port Mirroring Configuration</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createPortConfiguration(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createPortConfiguration"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createPortConfiguration(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createPortConfiguration"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Create Port Mirroring Configuration -[apiInstance createPortConfigurationWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.createPortConfiguration(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class createPortConfigurationExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create Port Mirroring Configuration - apiInstance.createPortConfiguration(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.createPortConfiguration: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->createPortConfiguration($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->createPortConfiguration: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->createPortConfiguration(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->createPortConfiguration: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createPortConfiguration-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Create Port Mirroring Configuration - api_instance.create_port_configuration(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->createPortConfiguration: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_createPortConfiguration_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_createPortConfiguration_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_createPortConfiguration_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_createPortConfiguration_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-createServiceInstance"> - <article id="api-OnapsoinfraserviceInstantiation-createServiceInstance-0" data-group="User" data-name="createServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>createServiceInstance</h1> - <p>Create a Service Instance on a version provided</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.createServiceInstance(version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String body = body_example; // String | - try { - apiInstance.createServiceInstance(version, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Create a Service Instance on a version provided -[apiInstance createServiceInstanceWith:version - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.createServiceInstance(version, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class createServiceInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create a Service Instance on a version provided - apiInstance.createServiceInstance(version, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.createServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$body = body_example; // String | - -try { - $api_instance->createServiceInstance($version, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->createServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->createServiceInstance(version => $version, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->createServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -body = body_example # String | (optional) - -try: - # Create a Service Instance on a version provided - api_instance.create_service_instance(version, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->createServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_createServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_createServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_createServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-createVfModuleInstance"> - <article id="api-OnapsoinfraserviceInstantiation-createVfModuleInstance-0" data-group="User" data-name="createVfModuleInstance" data-version="0"> - <div class="pull-left"> - <h1>createVfModuleInstance</h1> - <p>Create VfModule on a specified version, serviceInstance and vnfInstance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createVfModuleInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createVfModuleInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Create VfModule on a specified version, serviceInstance and vnfInstance -[apiInstance createVfModuleInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.createVfModuleInstance(version, serviceInstanceId, vnfInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class createVfModuleInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create VfModule on a specified version, serviceInstance and vnfInstance - apiInstance.createVfModuleInstance(version, serviceInstanceId, vnfInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.createVfModuleInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->createVfModuleInstance($version, $serviceInstanceId, $vnfInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->createVfModuleInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->createVfModuleInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->createVfModuleInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVfModuleInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Create VfModule on a specified version, serviceInstance and vnfInstance - api_instance.create_vf_module_instance(version, serviceInstanceId, vnfInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->createVfModuleInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_createVfModuleInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_createVfModuleInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_createVfModuleInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_createVfModuleInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_createVfModuleInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-createVnfInstance"> - <article id="api-OnapsoinfraserviceInstantiation-createVnfInstance-0" data-group="User" data-name="createVnfInstance" data-version="0"> - <div class="pull-left"> - <h1>createVnfInstance</h1> - <p>Create VNF on a specified version and serviceInstance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createVnfInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createVnfInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createVnfInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createVnfInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Create VNF on a specified version and serviceInstance -[apiInstance createVnfInstanceWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.createVnfInstance(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class createVnfInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create VNF on a specified version and serviceInstance - apiInstance.createVnfInstance(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.createVnfInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->createVnfInstance($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->createVnfInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->createVnfInstance(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->createVnfInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVnfInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Create VNF on a specified version and serviceInstance - api_instance.create_vnf_instance(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->createVnfInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_createVnfInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_createVnfInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_createVnfInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_createVnfInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-createVolumeGroupInstance"> - <article id="api-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0" data-group="User" data-name="createVolumeGroupInstance" data-version="0"> - <div class="pull-left"> - <h1>createVolumeGroupInstance</h1> - <p>Create VolumeGroup on a specified version, serviceInstance, vnfInstance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createVolumeGroupInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.createVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#createVolumeGroupInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Create VolumeGroup on a specified version, serviceInstance, vnfInstance -[apiInstance createVolumeGroupInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.createVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class createVolumeGroupInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create VolumeGroup on a specified version, serviceInstance, vnfInstance - apiInstance.createVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.createVolumeGroupInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->createVolumeGroupInstance($version, $serviceInstanceId, $vnfInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->createVolumeGroupInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->createVolumeGroupInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->createVolumeGroupInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-createVolumeGroupInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Create VolumeGroup on a specified version, serviceInstance, vnfInstance - api_instance.create_volume_group_instance(version, serviceInstanceId, vnfInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->createVolumeGroupInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_createVolumeGroupInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_createVolumeGroupInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_createVolumeGroupInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_createVolumeGroupInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_createVolumeGroupInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance"> - <article id="api-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0" data-group="User" data-name="deactivateAndCloudDeleteVfModuleInstance" data-version="0"> - <div class="pull-left"> - <h1>deactivateAndCloudDeleteVfModuleInstance</h1> - <p>Deactivate and Cloud Delete VfModule instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deactivateAndCloudDeleteVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deactivateAndCloudDeleteVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deactivateAndCloudDeleteVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deactivateAndCloudDeleteVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *vfmoduleInstanceId = vfmoduleInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Deactivate and Cloud Delete VfModule instance -[apiInstance deactivateAndCloudDeleteVfModuleInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - vfmoduleInstanceId:vfmoduleInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var vfmoduleInstanceId = vfmoduleInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deactivateAndCloudDeleteVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deactivateAndCloudDeleteVfModuleInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Deactivate and Cloud Delete VfModule instance - apiInstance.deactivateAndCloudDeleteVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deactivateAndCloudDeleteVfModuleInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$vfmoduleInstanceId = vfmoduleInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deactivateAndCloudDeleteVfModuleInstance($version, $serviceInstanceId, $vnfInstanceId, $vfmoduleInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deactivateAndCloudDeleteVfModuleInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $vfmoduleInstanceId = vfmoduleInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deactivateAndCloudDeleteVfModuleInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, vfmoduleInstanceId => $vfmoduleInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deactivateAndCloudDeleteVfModuleInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateAndCloudDeleteVfModuleInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -vfmoduleInstanceId = vfmoduleInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Deactivate and Cloud Delete VfModule instance - api_instance.deactivate_and_cloud_delete_vf_module_instance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deactivateAndCloudDeleteVfModuleInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deactivateAndCloudDeleteVfModuleInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deactivateAndCloudDeleteVfModuleInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_deactivateAndCloudDeleteVfModuleInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vfmoduleInstanceId*</td> -<td> - - - <div id="d2e199_deactivateAndCloudDeleteVfModuleInstance_vfmoduleInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deactivateAndCloudDeleteVfModuleInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deactivateAndCloudDeleteVfModuleInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deactivatePort"> - <article id="api-OnapsoinfraserviceInstantiation-deactivatePort-0" data-group="User" data-name="deactivatePort" data-version="0"> - <div class="pull-left"> - <h1>deactivatePort</h1> - <p>Deactivate Port Mirroring</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivatePort-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deactivatePort(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deactivatePort"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deactivatePort(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deactivatePort"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *configurationInstanceId = configurationInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Deactivate Port Mirroring -[apiInstance deactivatePortWith:version - serviceInstanceId:serviceInstanceId - configurationInstanceId:configurationInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var configurationInstanceId = configurationInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deactivatePort(version, serviceInstanceId, configurationInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deactivatePortExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var configurationInstanceId = configurationInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Deactivate Port Mirroring - apiInstance.deactivatePort(version, serviceInstanceId, configurationInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deactivatePort: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$configurationInstanceId = configurationInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deactivatePort($version, $serviceInstanceId, $configurationInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deactivatePort: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $configurationInstanceId = configurationInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deactivatePort(version => $version, serviceInstanceId => $serviceInstanceId, configurationInstanceId => $configurationInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deactivatePort: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivatePort-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -configurationInstanceId = configurationInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Deactivate Port Mirroring - api_instance.deactivate_port(version, serviceInstanceId, configurationInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deactivatePort: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deactivatePort_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deactivatePort_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">configurationInstanceId*</td> -<td> - - - <div id="d2e199_deactivatePort_configurationInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deactivatePort_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deactivatePort_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deactivateServiceInstance"> - <article id="api-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0" data-group="User" data-name="deactivateServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>deactivateServiceInstance</h1> - <p>Deactivate provided Service Instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/deactivate</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/deactivate"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deactivateServiceInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deactivateServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deactivateServiceInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deactivateServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Deactivate provided Service Instance -[apiInstance deactivateServiceInstanceWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deactivateServiceInstance(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deactivateServiceInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Deactivate provided Service Instance - apiInstance.deactivateServiceInstance(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deactivateServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deactivateServiceInstance($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deactivateServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deactivateServiceInstance(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deactivateServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deactivateServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Deactivate provided Service Instance - api_instance.deactivate_service_instance(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deactivateServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deactivateServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deactivateServiceInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deactivateServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deactivateServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deleteNetworkInstance"> - <article id="api-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0" data-group="User" data-name="deleteNetworkInstance" data-version="0"> - <div class="pull-left"> - <h1>deleteNetworkInstance</h1> - <p>Delete provided Network instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X DELETE "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String networkInstanceId = networkInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteNetworkInstance(version, serviceInstanceId, networkInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteNetworkInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String networkInstanceId = networkInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteNetworkInstance(version, serviceInstanceId, networkInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteNetworkInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *networkInstanceId = networkInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Delete provided Network instance -[apiInstance deleteNetworkInstanceWith:version - serviceInstanceId:serviceInstanceId - networkInstanceId:networkInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var networkInstanceId = networkInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deleteNetworkInstance(version, serviceInstanceId, networkInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deleteNetworkInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var networkInstanceId = networkInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Delete provided Network instance - apiInstance.deleteNetworkInstance(version, serviceInstanceId, networkInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deleteNetworkInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$networkInstanceId = networkInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deleteNetworkInstance($version, $serviceInstanceId, $networkInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deleteNetworkInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $networkInstanceId = networkInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deleteNetworkInstance(version => $version, serviceInstanceId => $serviceInstanceId, networkInstanceId => $networkInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deleteNetworkInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteNetworkInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -networkInstanceId = networkInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Delete provided Network instance - api_instance.delete_network_instance(version, serviceInstanceId, networkInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deleteNetworkInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deleteNetworkInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deleteNetworkInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">networkInstanceId*</td> -<td> - - - <div id="d2e199_deleteNetworkInstance_networkInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deleteNetworkInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deleteNetworkInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deletePortConfiguration"> - <article id="api-OnapsoinfraserviceInstantiation-deletePortConfiguration-0" data-group="User" data-name="deletePortConfiguration" data-version="0"> - <div class="pull-left"> - <h1>deletePortConfiguration</h1> - <p>Delete provided Port</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X DELETE "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deletePortConfiguration(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deletePortConfiguration"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deletePortConfiguration(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deletePortConfiguration"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *configurationInstanceId = configurationInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Delete provided Port -[apiInstance deletePortConfigurationWith:version - serviceInstanceId:serviceInstanceId - configurationInstanceId:configurationInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var configurationInstanceId = configurationInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deletePortConfiguration(version, serviceInstanceId, configurationInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deletePortConfigurationExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var configurationInstanceId = configurationInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Delete provided Port - apiInstance.deletePortConfiguration(version, serviceInstanceId, configurationInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deletePortConfiguration: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$configurationInstanceId = configurationInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deletePortConfiguration($version, $serviceInstanceId, $configurationInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deletePortConfiguration: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $configurationInstanceId = configurationInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deletePortConfiguration(version => $version, serviceInstanceId => $serviceInstanceId, configurationInstanceId => $configurationInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deletePortConfiguration: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deletePortConfiguration-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -configurationInstanceId = configurationInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Delete provided Port - api_instance.delete_port_configuration(version, serviceInstanceId, configurationInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deletePortConfiguration: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deletePortConfiguration_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deletePortConfiguration_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">configurationInstanceId*</td> -<td> - - - <div id="d2e199_deletePortConfiguration_configurationInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deletePortConfiguration_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deletePortConfiguration_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deleteServiceInstance"> - <article id="api-OnapsoinfraserviceInstantiation-deleteServiceInstance-0" data-group="User" data-name="deleteServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>deleteServiceInstance</h1> - <p>Delete provided Service Instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X DELETE "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteServiceInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteServiceInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Delete provided Service Instance -[apiInstance deleteServiceInstanceWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deleteServiceInstance(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deleteServiceInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Delete provided Service Instance - apiInstance.deleteServiceInstance(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deleteServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deleteServiceInstance($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deleteServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deleteServiceInstance(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deleteServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Delete provided Service Instance - api_instance.delete_service_instance(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deleteServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deleteServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deleteServiceInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deleteServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deleteServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deleteVfModuleInstance"> - <article id="api-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0" data-group="User" data-name="deleteVfModuleInstance" data-version="0"> - <div class="pull-left"> - <h1>deleteVfModuleInstance</h1> - <p>Delete provided VfModule instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X DELETE "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *vfmoduleInstanceId = vfmoduleInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Delete provided VfModule instance -[apiInstance deleteVfModuleInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - vfmoduleInstanceId:vfmoduleInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var vfmoduleInstanceId = vfmoduleInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deleteVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deleteVfModuleInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Delete provided VfModule instance - apiInstance.deleteVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deleteVfModuleInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$vfmoduleInstanceId = vfmoduleInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deleteVfModuleInstance($version, $serviceInstanceId, $vnfInstanceId, $vfmoduleInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deleteVfModuleInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $vfmoduleInstanceId = vfmoduleInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deleteVfModuleInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, vfmoduleInstanceId => $vfmoduleInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deleteVfModuleInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVfModuleInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -vfmoduleInstanceId = vfmoduleInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Delete provided VfModule instance - api_instance.delete_vf_module_instance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deleteVfModuleInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deleteVfModuleInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deleteVfModuleInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_deleteVfModuleInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vfmoduleInstanceId*</td> -<td> - - - <div id="d2e199_deleteVfModuleInstance_vfmoduleInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deleteVfModuleInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deleteVfModuleInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deleteVnfInstance"> - <article id="api-OnapsoinfraserviceInstantiation-deleteVnfInstance-0" data-group="User" data-name="deleteVnfInstance" data-version="0"> - <div class="pull-left"> - <h1>deleteVnfInstance</h1> - <p>Delete provided VNF instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X DELETE "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteVnfInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteVnfInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Delete provided VNF instance -[apiInstance deleteVnfInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deleteVnfInstance(version, serviceInstanceId, vnfInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deleteVnfInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Delete provided VNF instance - apiInstance.deleteVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deleteVnfInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deleteVnfInstance($version, $serviceInstanceId, $vnfInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deleteVnfInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deleteVnfInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deleteVnfInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVnfInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Delete provided VNF instance - api_instance.delete_vnf_instance(version, serviceInstanceId, vnfInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deleteVnfInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deleteVnfInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deleteVnfInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_deleteVnfInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deleteVnfInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deleteVnfInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance"> - <article id="api-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0" data-group="User" data-name="deleteVolumeGroupInstance" data-version="0"> - <div class="pull-left"> - <h1>deleteVolumeGroupInstance</h1> - <p>Delete provided VolumeGroup instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="delete"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X DELETE "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String volumeGroupInstanceId = volumeGroupInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteVolumeGroupInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String volumeGroupInstanceId = volumeGroupInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.deleteVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#deleteVolumeGroupInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *volumeGroupInstanceId = volumeGroupInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Delete provided VolumeGroup instance -[apiInstance deleteVolumeGroupInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - volumeGroupInstanceId:volumeGroupInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var volumeGroupInstanceId = volumeGroupInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.deleteVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class deleteVolumeGroupInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var volumeGroupInstanceId = volumeGroupInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Delete provided VolumeGroup instance - apiInstance.deleteVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.deleteVolumeGroupInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$volumeGroupInstanceId = volumeGroupInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->deleteVolumeGroupInstance($version, $serviceInstanceId, $vnfInstanceId, $volumeGroupInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->deleteVolumeGroupInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $volumeGroupInstanceId = volumeGroupInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->deleteVolumeGroupInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, volumeGroupInstanceId => $volumeGroupInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->deleteVolumeGroupInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-deleteVolumeGroupInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -volumeGroupInstanceId = volumeGroupInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Delete provided VolumeGroup instance - api_instance.delete_volume_group_instance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->deleteVolumeGroupInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_deleteVolumeGroupInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_deleteVolumeGroupInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_deleteVolumeGroupInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">volumeGroupInstanceId*</td> -<td> - - - <div id="d2e199_deleteVolumeGroupInstance_volumeGroupInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_deleteVolumeGroupInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_deleteVolumeGroupInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-disablePort"> - <article id="api-OnapsoinfraserviceInstantiation-disablePort-0" data-group="User" data-name="disablePort" data-version="0"> - <div class="pull-left"> - <h1>disablePort</h1> - <p>Disable Port Mirroring</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-disablePort-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.disablePort(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#disablePort"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.disablePort(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#disablePort"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *configurationInstanceId = configurationInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Disable Port Mirroring -[apiInstance disablePortWith:version - serviceInstanceId:serviceInstanceId - configurationInstanceId:configurationInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var configurationInstanceId = configurationInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.disablePort(version, serviceInstanceId, configurationInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class disablePortExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var configurationInstanceId = configurationInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Disable Port Mirroring - apiInstance.disablePort(version, serviceInstanceId, configurationInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.disablePort: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$configurationInstanceId = configurationInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->disablePort($version, $serviceInstanceId, $configurationInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->disablePort: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $configurationInstanceId = configurationInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->disablePort(version => $version, serviceInstanceId => $serviceInstanceId, configurationInstanceId => $configurationInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->disablePort: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-disablePort-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -configurationInstanceId = configurationInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Disable Port Mirroring - api_instance.disable_port(version, serviceInstanceId, configurationInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->disablePort: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_disablePort_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_disablePort_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">configurationInstanceId*</td> -<td> - - - <div id="d2e199_disablePort_configurationInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_disablePort_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_disablePort_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-enablePort"> - <article id="api-OnapsoinfraserviceInstantiation-enablePort-0" data-group="User" data-name="enablePort" data-version="0"> - <div class="pull-left"> - <h1>enablePort</h1> - <p>Enable Port Mirroring</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-enablePort-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.enablePort(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#enablePort"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String configurationInstanceId = configurationInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.enablePort(version, serviceInstanceId, configurationInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#enablePort"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *configurationInstanceId = configurationInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Enable Port Mirroring -[apiInstance enablePortWith:version - serviceInstanceId:serviceInstanceId - configurationInstanceId:configurationInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var configurationInstanceId = configurationInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.enablePort(version, serviceInstanceId, configurationInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class enablePortExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var configurationInstanceId = configurationInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Enable Port Mirroring - apiInstance.enablePort(version, serviceInstanceId, configurationInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.enablePort: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$configurationInstanceId = configurationInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->enablePort($version, $serviceInstanceId, $configurationInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->enablePort: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $configurationInstanceId = configurationInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->enablePort(version => $version, serviceInstanceId => $serviceInstanceId, configurationInstanceId => $configurationInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->enablePort: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-enablePort-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -configurationInstanceId = configurationInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Enable Port Mirroring - api_instance.enable_port(version, serviceInstanceId, configurationInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->enablePort: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_enablePort_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_enablePort_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">configurationInstanceId*</td> -<td> - - - <div id="d2e199_enablePort_configurationInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_enablePort_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_enablePort_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate"> - <article id="api-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0" data-group="User" data-name="inPlaceSoftwareUpdate" data-version="0"> - <div class="pull-left"> - <h1>inPlaceSoftwareUpdate</h1> - <p>Perform VNF software update</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.inPlaceSoftwareUpdate(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#inPlaceSoftwareUpdate"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.inPlaceSoftwareUpdate(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#inPlaceSoftwareUpdate"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Perform VNF software update -[apiInstance inPlaceSoftwareUpdateWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.inPlaceSoftwareUpdate(version, serviceInstanceId, vnfInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class inPlaceSoftwareUpdateExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Perform VNF software update - apiInstance.inPlaceSoftwareUpdate(version, serviceInstanceId, vnfInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.inPlaceSoftwareUpdate: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->inPlaceSoftwareUpdate($version, $serviceInstanceId, $vnfInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->inPlaceSoftwareUpdate: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->inPlaceSoftwareUpdate(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->inPlaceSoftwareUpdate: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-inPlaceSoftwareUpdate-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Perform VNF software update - api_instance.in_place_software_update(version, serviceInstanceId, vnfInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->inPlaceSoftwareUpdate: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_inPlaceSoftwareUpdate_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_inPlaceSoftwareUpdate_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_inPlaceSoftwareUpdate_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_inPlaceSoftwareUpdate_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_inPlaceSoftwareUpdate_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-removeRelationships"> - <article id="api-OnapsoinfraserviceInstantiation-removeRelationships-0" data-group="User" data-name="removeRelationships" data-version="0"> - <div class="pull-left"> - <h1>removeRelationships</h1> - <p>Remove Relationships from Service Instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/removeRelationships</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-removeRelationships-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/removeRelationships"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.removeRelationships(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#removeRelationships"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.removeRelationships(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#removeRelationships"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Remove Relationships from Service Instance -[apiInstance removeRelationshipsWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.removeRelationships(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class removeRelationshipsExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Remove Relationships from Service Instance - apiInstance.removeRelationships(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.removeRelationships: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->removeRelationships($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->removeRelationships: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->removeRelationships(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->removeRelationships: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-removeRelationships-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Remove Relationships from Service Instance - api_instance.remove_relationships(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->removeRelationships: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_removeRelationships_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_removeRelationships_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_removeRelationships_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_removeRelationships_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-replaceVfModuleInstance"> - <article id="api-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0" data-group="User" data-name="replaceVfModuleInstance" data-version="0"> - <div class="pull-left"> - <h1>replaceVfModuleInstance</h1> - <p>Create VfModule on a specified version, serviceInstance and vnfInstance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.replaceVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#replaceVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.replaceVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#replaceVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *vfmoduleInstanceId = vfmoduleInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Create VfModule on a specified version, serviceInstance and vnfInstance -[apiInstance replaceVfModuleInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - vfmoduleInstanceId:vfmoduleInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var vfmoduleInstanceId = vfmoduleInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.replaceVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class replaceVfModuleInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Create VfModule on a specified version, serviceInstance and vnfInstance - apiInstance.replaceVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.replaceVfModuleInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$vfmoduleInstanceId = vfmoduleInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->replaceVfModuleInstance($version, $serviceInstanceId, $vnfInstanceId, $vfmoduleInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->replaceVfModuleInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $vfmoduleInstanceId = vfmoduleInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->replaceVfModuleInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, vfmoduleInstanceId => $vfmoduleInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->replaceVfModuleInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVfModuleInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -vfmoduleInstanceId = vfmoduleInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Create VfModule on a specified version, serviceInstance and vnfInstance - api_instance.replace_vf_module_instance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->replaceVfModuleInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_replaceVfModuleInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_replaceVfModuleInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_replaceVfModuleInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vfmoduleInstanceId*</td> -<td> - - - <div id="d2e199_replaceVfModuleInstance_vfmoduleInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_replaceVfModuleInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_replaceVfModuleInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-replaceVnfInstance"> - <article id="api-OnapsoinfraserviceInstantiation-replaceVnfInstance-0" data-group="User" data-name="replaceVnfInstance" data-version="0"> - <div class="pull-left"> - <h1>replaceVnfInstance</h1> - <p>Replace provided VNF instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.replaceVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#replaceVnfInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.replaceVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#replaceVnfInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Replace provided VNF instance -[apiInstance replaceVnfInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.replaceVnfInstance(version, serviceInstanceId, vnfInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class replaceVnfInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Replace provided VNF instance - apiInstance.replaceVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.replaceVnfInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->replaceVnfInstance($version, $serviceInstanceId, $vnfInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->replaceVnfInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->replaceVnfInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->replaceVnfInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-replaceVnfInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Replace provided VNF instance - api_instance.replace_vnf_instance(version, serviceInstanceId, vnfInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->replaceVnfInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_replaceVnfInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_replaceVnfInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_replaceVnfInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_replaceVnfInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_replaceVnfInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-scaleOutVfModule"> - <article id="api-OnapsoinfraserviceInstantiation-scaleOutVfModule-0" data-group="User" data-name="scaleOutVfModule" data-version="0"> - <div class="pull-left"> - <h1>scaleOutVfModule</h1> - <p>VF Auto Scale Out</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.scaleOutVfModule(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#scaleOutVfModule"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.scaleOutVfModule(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#scaleOutVfModule"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// VF Auto Scale Out -[apiInstance scaleOutVfModuleWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.scaleOutVfModule(version, serviceInstanceId, vnfInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class scaleOutVfModuleExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // VF Auto Scale Out - apiInstance.scaleOutVfModule(version, serviceInstanceId, vnfInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.scaleOutVfModule: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->scaleOutVfModule($version, $serviceInstanceId, $vnfInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->scaleOutVfModule: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->scaleOutVfModule(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->scaleOutVfModule: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-scaleOutVfModule-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -body = body_example # String | (optional) - -try: - # VF Auto Scale Out - api_instance.scale_out_vf_module(version, serviceInstanceId, vnfInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->scaleOutVfModule: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_scaleOutVfModule_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_scaleOutVfModule_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_scaleOutVfModule_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_scaleOutVfModule_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_scaleOutVfModule_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-unassignServiceInstance"> - <article id="api-OnapsoinfraserviceInstantiation-unassignServiceInstance-0" data-group="User" data-name="unassignServiceInstance" data-version="0"> - <div class="pull-left"> - <h1>unassignServiceInstance</h1> - <p>Unassign Service Instance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="post"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/unassign</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X POST "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/unassign"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.unassignServiceInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#unassignServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.unassignServiceInstance(version, serviceInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#unassignServiceInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Unassign Service Instance -[apiInstance unassignServiceInstanceWith:version - serviceInstanceId:serviceInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.unassignServiceInstance(version, serviceInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class unassignServiceInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Unassign Service Instance - apiInstance.unassignServiceInstance(version, serviceInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.unassignServiceInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->unassignServiceInstance($version, $serviceInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->unassignServiceInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->unassignServiceInstance(version => $version, serviceInstanceId => $serviceInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->unassignServiceInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-unassignServiceInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Unassign Service Instance - api_instance.unassign_service_instance(version, serviceInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->unassignServiceInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_unassignServiceInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_unassignServiceInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_unassignServiceInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_unassignServiceInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-updateNetworkInstance"> - <article id="api-OnapsoinfraserviceInstantiation-updateNetworkInstance-0" data-group="User" data-name="updateNetworkInstance" data-version="0"> - <div class="pull-left"> - <h1>updateNetworkInstance</h1> - <p>Update VolumeGroup on a specified version, serviceInstance, networkInstance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="put"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X PUT "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String networkInstanceId = networkInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateNetworkInstance(version, serviceInstanceId, networkInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#updateNetworkInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String networkInstanceId = networkInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateNetworkInstance(version, serviceInstanceId, networkInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#updateNetworkInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *networkInstanceId = networkInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Update VolumeGroup on a specified version, serviceInstance, networkInstance -[apiInstance updateNetworkInstanceWith:version - serviceInstanceId:serviceInstanceId - networkInstanceId:networkInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var networkInstanceId = networkInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.updateNetworkInstance(version, serviceInstanceId, networkInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class updateNetworkInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var networkInstanceId = networkInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Update VolumeGroup on a specified version, serviceInstance, networkInstance - apiInstance.updateNetworkInstance(version, serviceInstanceId, networkInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.updateNetworkInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$networkInstanceId = networkInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->updateNetworkInstance($version, $serviceInstanceId, $networkInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->updateNetworkInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $networkInstanceId = networkInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->updateNetworkInstance(version => $version, serviceInstanceId => $serviceInstanceId, networkInstanceId => $networkInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->updateNetworkInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateNetworkInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -networkInstanceId = networkInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Update VolumeGroup on a specified version, serviceInstance, networkInstance - api_instance.update_network_instance(version, serviceInstanceId, networkInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->updateNetworkInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_updateNetworkInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_updateNetworkInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">networkInstanceId*</td> -<td> - - - <div id="d2e199_updateNetworkInstance_networkInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_updateNetworkInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_updateNetworkInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-updateVfModuleInstance"> - <article id="api-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0" data-group="User" data-name="updateVfModuleInstance" data-version="0"> - <div class="pull-left"> - <h1>updateVfModuleInstance</h1> - <p>Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="put"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X PUT "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#updateVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#updateVfModuleInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *vfmoduleInstanceId = vfmoduleInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule -[apiInstance updateVfModuleInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - vfmoduleInstanceId:vfmoduleInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var vfmoduleInstanceId = vfmoduleInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.updateVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class updateVfModuleInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var vfmoduleInstanceId = vfmoduleInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule - apiInstance.updateVfModuleInstance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.updateVfModuleInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$vfmoduleInstanceId = vfmoduleInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->updateVfModuleInstance($version, $serviceInstanceId, $vnfInstanceId, $vfmoduleInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->updateVfModuleInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $vfmoduleInstanceId = vfmoduleInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->updateVfModuleInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, vfmoduleInstanceId => $vfmoduleInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->updateVfModuleInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVfModuleInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -vfmoduleInstanceId = vfmoduleInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule - api_instance.update_vf_module_instance(version, serviceInstanceId, vnfInstanceId, vfmoduleInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->updateVfModuleInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_updateVfModuleInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_updateVfModuleInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_updateVfModuleInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vfmoduleInstanceId*</td> -<td> - - - <div id="d2e199_updateVfModuleInstance_vfmoduleInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_updateVfModuleInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_updateVfModuleInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-updateVnfInstance"> - <article id="api-OnapsoinfraserviceInstantiation-updateVnfInstance-0" data-group="User" data-name="updateVnfInstance" data-version="0"> - <div class="pull-left"> - <h1>updateVnfInstance</h1> - <p>Update VNF on a specified version, serviceInstance and vnfInstance</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="put"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X PUT "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#updateVnfInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#updateVnfInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Update VNF on a specified version, serviceInstance and vnfInstance -[apiInstance updateVnfInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.updateVnfInstance(version, serviceInstanceId, vnfInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class updateVnfInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Update VNF on a specified version, serviceInstance and vnfInstance - apiInstance.updateVnfInstance(version, serviceInstanceId, vnfInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.updateVnfInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->updateVnfInstance($version, $serviceInstanceId, $vnfInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->updateVnfInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->updateVnfInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->updateVnfInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVnfInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Update VNF on a specified version, serviceInstance and vnfInstance - api_instance.update_vnf_instance(version, serviceInstanceId, vnfInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->updateVnfInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_updateVnfInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_updateVnfInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_updateVnfInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_updateVnfInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_updateVnfInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - <div id="api-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance"> - <article id="api-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0" data-group="User" data-name="updateVolumeGroupInstance" data-version="0"> - <div class="pull-left"> - <h1>updateVolumeGroupInstance</h1> - <p>Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="put"><code><span class="pln">/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-curl">Curl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-java">Java</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-android">Android</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-csharp">C#</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-php">PHP</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-perl">Perl</a></li> - <li class=""><a href="#examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X PUT "https://localhost/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}"</code></pre> - </div> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String volumeGroupInstanceId = volumeGroupInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#updateVolumeGroupInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfraserviceInstantiationApi; - -public class OnapsoinfraserviceInstantiationApiExample { - - public static void main(String[] args) { - OnapsoinfraserviceInstantiationApi apiInstance = new OnapsoinfraserviceInstantiationApi(); - String version = version_example; // String | - String serviceInstanceId = serviceInstanceId_example; // String | - String vnfInstanceId = vnfInstanceId_example; // String | - String volumeGroupInstanceId = volumeGroupInstanceId_example; // String | - String body = body_example; // String | - try { - apiInstance.updateVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, body); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfraserviceInstantiationApi#updateVolumeGroupInstance"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *serviceInstanceId = serviceInstanceId_example; // -String *vnfInstanceId = vnfInstanceId_example; // -String *volumeGroupInstanceId = volumeGroupInstanceId_example; // -String *body = body_example; // (optional) - -OnapsoinfraserviceInstantiationApi *apiInstance = [[OnapsoinfraserviceInstantiationApi alloc] init]; - -// Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup -[apiInstance updateVolumeGroupInstanceWith:version - serviceInstanceId:serviceInstanceId - vnfInstanceId:vnfInstanceId - volumeGroupInstanceId:volumeGroupInstanceId - body:body - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfraserviceInstantiationApi() - -var version = version_example; // {String} - -var serviceInstanceId = serviceInstanceId_example; // {String} - -var vnfInstanceId = vnfInstanceId_example; // {String} - -var volumeGroupInstanceId = volumeGroupInstanceId_example; // {String} - -var opts = { - 'body': body_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.updateVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class updateVolumeGroupInstanceExample - { - public void main() - { - - var apiInstance = new OnapsoinfraserviceInstantiationApi(); - var version = version_example; // String | - var serviceInstanceId = serviceInstanceId_example; // String | - var vnfInstanceId = vnfInstanceId_example; // String | - var volumeGroupInstanceId = volumeGroupInstanceId_example; // String | - var body = body_example; // String | (optional) - - try - { - // Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup - apiInstance.updateVolumeGroupInstance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, body); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfraserviceInstantiationApi.updateVolumeGroupInstance: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfraserviceInstantiationApi(); -$version = version_example; // String | -$serviceInstanceId = serviceInstanceId_example; // String | -$vnfInstanceId = vnfInstanceId_example; // String | -$volumeGroupInstanceId = volumeGroupInstanceId_example; // String | -$body = body_example; // String | - -try { - $api_instance->updateVolumeGroupInstance($version, $serviceInstanceId, $vnfInstanceId, $volumeGroupInstanceId, $body); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfraserviceInstantiationApi->updateVolumeGroupInstance: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfraserviceInstantiationApi->new(); -my $version = version_example; # String | -my $serviceInstanceId = serviceInstanceId_example; # String | -my $vnfInstanceId = vnfInstanceId_example; # String | -my $volumeGroupInstanceId = volumeGroupInstanceId_example; # String | -my $body = WWW::SwaggerClient::Object::String->new(); # String | - -eval { - $api_instance->updateVolumeGroupInstance(version => $version, serviceInstanceId => $serviceInstanceId, vnfInstanceId => $vnfInstanceId, volumeGroupInstanceId => $volumeGroupInstanceId, body => $body); -}; -if ($@) { - warn "Exception when calling OnapsoinfraserviceInstantiationApi->updateVolumeGroupInstance: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-OnapsoinfraserviceInstantiation-updateVolumeGroupInstance-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfraserviceInstantiationApi() -version = version_example # String | -serviceInstanceId = serviceInstanceId_example # String | -vnfInstanceId = vnfInstanceId_example # String | -volumeGroupInstanceId = volumeGroupInstanceId_example # String | -body = body_example # String | (optional) - -try: - # Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup - api_instance.update_volume_group_instance(version, serviceInstanceId, vnfInstanceId, volumeGroupInstanceId, body=body) -except ApiException as e: - print("Exception when calling OnapsoinfraserviceInstantiationApi->updateVolumeGroupInstance: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_updateVolumeGroupInstance_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">serviceInstanceId*</td> -<td> - - - <div id="d2e199_updateVolumeGroupInstance_serviceInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">vnfInstanceId*</td> -<td> - - - <div id="d2e199_updateVolumeGroupInstance_vnfInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">volumeGroupInstanceId*</td> -<td> - - - <div id="d2e199_updateVolumeGroupInstance_volumeGroupInstanceId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - <div class="methodsubtabletitle">Body parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">body </td> -<td> - - -<script> -$(document).ready(function() { - var schemaWrapper = { - "in" : "body", - "name" : "body", - "required" : false, - "schema" : { - "type" : "string" - } -}; - var schema = schemaWrapper.schema; - if (schema.$ref != null) { - schema = defsParser.$refs.get(schema.$ref); - } else { - schemaWrapper.definitions = Object.assign({}, defs); - $RefParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - } - - var view = new JSONSchemaView(schema,2,{isBodyParam: true}); - var result = $('#d2e199_updateVolumeGroupInstance_body'); - result.empty(); - result.append(view.render()); -}); -</script> -<div id="d2e199_updateVolumeGroupInstance_body"></div> -</td> -</tr> - - </table> - - - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - <section id="api-Onapsoinfratasks"> - <h1>Onapsoinfratasks</h1> - <div id="api-Onapsoinfratasks-queryFilters"> - <article id="api-Onapsoinfratasks-queryFilters-0" data-group="User" data-name="queryFilters" data-version="0"> - <div class="pull-left"> - <h1>queryFilters</h1> - <p>Finds Manual Tasks</p> - </div> - <div class="pull-right"></div> - <div class="clearfix"></div> - <p></p> - <p class="marked"></p> - <p></p> - <br /> - <pre class="prettyprint language-html prettyprinted" data-type="get"><code><span class="pln">/onap/so/infra/tasks/{version}</span></code></pre> - <p> - <h3>Usage and SDK Samples</h3> - </p> - <ul class="nav nav-tabs nav-tabs-examples"> - <li class="active"><a href="#examples-Onapsoinfratasks-queryFilters-0-curl">Curl</a></li> - <li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-java">Java</a></li> - <li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-android">Android</a></li> - <!--<li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-groovy">Groovy</a></li>--> - <li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-objc">Obj-C</a></li> - <li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-javascript">JavaScript</a></li> - <!--<li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-angular">Angular</a></li>--> - <li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-csharp">C#</a></li> - <li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-php">PHP</a></li> - <li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-perl">Perl</a></li> - <li class=""><a href="#examples-Onapsoinfratasks-queryFilters-0-python">Python</a></li> - </ul> - - <div class="tab-content"> - <div class="tab-pane active" id="examples-Onapsoinfratasks-queryFilters-0-curl"> - <pre class="prettyprint"><code class="language-bsh">curl -X GET "https://localhost/onap/so/infra/tasks/{version}?taskId=&originalRequestId=&subscriptionServiceType=&nfRole=&buildingBlockName=&originalRequestDate=&originalRequestorId="</code></pre> - </div> - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-java"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.*; -import io.swagger.client.auth.*; -import io.swagger.client.model.*; -import io.swagger.client.api.OnapsoinfratasksApi; - -import java.io.File; -import java.util.*; - -public class OnapsoinfratasksApiExample { - - public static void main(String[] args) { - - OnapsoinfratasksApi apiInstance = new OnapsoinfratasksApi(); - String version = version_example; // String | - String taskId = taskId_example; // String | - String originalRequestId = originalRequestId_example; // String | - String subscriptionServiceType = subscriptionServiceType_example; // String | - String nfRole = nfRole_example; // String | - String buildingBlockName = buildingBlockName_example; // String | - String originalRequestDate = originalRequestDate_example; // String | - String originalRequestorId = originalRequestorId_example; // String | - try { - apiInstance.queryFilters(version, taskId, originalRequestId, subscriptionServiceType, nfRole, buildingBlockName, originalRequestDate, originalRequestorId); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfratasksApi#queryFilters"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-android"> - <pre class="prettyprint"><code class="language-java">import io.swagger.client.api.OnapsoinfratasksApi; - -public class OnapsoinfratasksApiExample { - - public static void main(String[] args) { - OnapsoinfratasksApi apiInstance = new OnapsoinfratasksApi(); - String version = version_example; // String | - String taskId = taskId_example; // String | - String originalRequestId = originalRequestId_example; // String | - String subscriptionServiceType = subscriptionServiceType_example; // String | - String nfRole = nfRole_example; // String | - String buildingBlockName = buildingBlockName_example; // String | - String originalRequestDate = originalRequestDate_example; // String | - String originalRequestorId = originalRequestorId_example; // String | - try { - apiInstance.queryFilters(version, taskId, originalRequestId, subscriptionServiceType, nfRole, buildingBlockName, originalRequestDate, originalRequestorId); - } catch (ApiException e) { - System.err.println("Exception when calling OnapsoinfratasksApi#queryFilters"); - e.printStackTrace(); - } - } -}</code></pre> - </div> - <!-- - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-groovy"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div> --> - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-objc"> - <pre class="prettyprint"><code class="language-cpp">String *version = version_example; // -String *taskId = taskId_example; // (optional) -String *originalRequestId = originalRequestId_example; // (optional) -String *subscriptionServiceType = subscriptionServiceType_example; // (optional) -String *nfRole = nfRole_example; // (optional) -String *buildingBlockName = buildingBlockName_example; // (optional) -String *originalRequestDate = originalRequestDate_example; // (optional) -String *originalRequestorId = originalRequestorId_example; // (optional) - -OnapsoinfratasksApi *apiInstance = [[OnapsoinfratasksApi alloc] init]; - -// Finds Manual Tasks -[apiInstance queryFiltersWith:version - taskId:taskId - originalRequestId:originalRequestId - subscriptionServiceType:subscriptionServiceType - nfRole:nfRole - buildingBlockName:buildingBlockName - originalRequestDate:originalRequestDate - originalRequestorId:originalRequestorId - completionHandler: ^(NSError* error) { - if (error) { - NSLog(@"Error: %@", error); - } - }]; -</code></pre> - </div> - - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-javascript"> - <pre class="prettyprint"><code class="language-js">var SoCasablancaApIs = require('so_casablanca_ap_is'); - -var api = new SoCasablancaApIs.OnapsoinfratasksApi() - -var version = version_example; // {String} - -var opts = { - 'taskId': taskId_example, // {String} - 'originalRequestId': originalRequestId_example, // {String} - 'subscriptionServiceType': subscriptionServiceType_example, // {String} - 'nfRole': nfRole_example, // {String} - 'buildingBlockName': buildingBlockName_example, // {String} - 'originalRequestDate': originalRequestDate_example, // {String} - 'originalRequestorId': originalRequestorId_example // {String} -}; - -var callback = function(error, data, response) { - if (error) { - console.error(error); - } else { - console.log('API called successfully.'); - } -}; -api.queryFilters(version, opts, callback); -</code></pre> - </div> - - <!--<div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-angular"> - <pre class="prettyprint language-json prettyprinted" data-type="json"><code>Coming Soon!</code></pre> - </div>--> - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-csharp"> - <pre class="prettyprint"><code class="language-cs">using System; -using System.Diagnostics; -using IO.Swagger.Api; -using IO.Swagger.Client; -using IO.Swagger.Model; - -namespace Example -{ - public class queryFiltersExample - { - public void main() - { - - var apiInstance = new OnapsoinfratasksApi(); - var version = version_example; // String | - var taskId = taskId_example; // String | (optional) - var originalRequestId = originalRequestId_example; // String | (optional) - var subscriptionServiceType = subscriptionServiceType_example; // String | (optional) - var nfRole = nfRole_example; // String | (optional) - var buildingBlockName = buildingBlockName_example; // String | (optional) - var originalRequestDate = originalRequestDate_example; // String | (optional) - var originalRequestorId = originalRequestorId_example; // String | (optional) - - try - { - // Finds Manual Tasks - apiInstance.queryFilters(version, taskId, originalRequestId, subscriptionServiceType, nfRole, buildingBlockName, originalRequestDate, originalRequestorId); - } - catch (Exception e) - { - Debug.Print("Exception when calling OnapsoinfratasksApi.queryFilters: " + e.Message ); - } - } - } -} -</code></pre> - </div> - - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-php"> - <pre class="prettyprint"><code class="language-php"><?php -require_once(__DIR__ . '/vendor/autoload.php'); - -$api_instance = new Swagger\Client\Api\OnapsoinfratasksApi(); -$version = version_example; // String | -$taskId = taskId_example; // String | -$originalRequestId = originalRequestId_example; // String | -$subscriptionServiceType = subscriptionServiceType_example; // String | -$nfRole = nfRole_example; // String | -$buildingBlockName = buildingBlockName_example; // String | -$originalRequestDate = originalRequestDate_example; // String | -$originalRequestorId = originalRequestorId_example; // String | - -try { - $api_instance->queryFilters($version, $taskId, $originalRequestId, $subscriptionServiceType, $nfRole, $buildingBlockName, $originalRequestDate, $originalRequestorId); -} catch (Exception $e) { - echo 'Exception when calling OnapsoinfratasksApi->queryFilters: ', $e->getMessage(), PHP_EOL; -} -?></code></pre> - </div> - - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-perl"> - <pre class="prettyprint"><code class="language-perl">use Data::Dumper; -use WWW::SwaggerClient::Configuration; -use WWW::SwaggerClient::OnapsoinfratasksApi; - -my $api_instance = WWW::SwaggerClient::OnapsoinfratasksApi->new(); -my $version = version_example; # String | -my $taskId = taskId_example; # String | -my $originalRequestId = originalRequestId_example; # String | -my $subscriptionServiceType = subscriptionServiceType_example; # String | -my $nfRole = nfRole_example; # String | -my $buildingBlockName = buildingBlockName_example; # String | -my $originalRequestDate = originalRequestDate_example; # String | -my $originalRequestorId = originalRequestorId_example; # String | - -eval { - $api_instance->queryFilters(version => $version, taskId => $taskId, originalRequestId => $originalRequestId, subscriptionServiceType => $subscriptionServiceType, nfRole => $nfRole, buildingBlockName => $buildingBlockName, originalRequestDate => $originalRequestDate, originalRequestorId => $originalRequestorId); -}; -if ($@) { - warn "Exception when calling OnapsoinfratasksApi->queryFilters: $@\n"; -}</code></pre> - </div> - - <div class="tab-pane" id="examples-Onapsoinfratasks-queryFilters-0-python"> - <pre class="prettyprint"><code class="language-python">from __future__ import print_statement -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.OnapsoinfratasksApi() -version = version_example # String | -taskId = taskId_example # String | (optional) -originalRequestId = originalRequestId_example # String | (optional) -subscriptionServiceType = subscriptionServiceType_example # String | (optional) -nfRole = nfRole_example # String | (optional) -buildingBlockName = buildingBlockName_example # String | (optional) -originalRequestDate = originalRequestDate_example # String | (optional) -originalRequestorId = originalRequestorId_example # String | (optional) - -try: - # Finds Manual Tasks - api_instance.query_filters(version, taskId=taskId, originalRequestId=originalRequestId, subscriptionServiceType=subscriptionServiceType, nfRole=nfRole, buildingBlockName=buildingBlockName, originalRequestDate=originalRequestDate, originalRequestorId=originalRequestorId) -except ApiException as e: - print("Exception when calling OnapsoinfratasksApi->queryFilters: %s\n" % e)</code></pre> - </div> - </div> - - <h2>Parameters</h2> - - <div class="methodsubtabletitle">Path parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">version*</td> -<td> - - - <div id="d2e199_queryFilters_version"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - <div class="inner required"> - Required - </div> - </div> - </div> -</td> -</tr> - - </table> - - - - - <div class="methodsubtabletitle">Query parameters</div> - <table id="methodsubtable"> - <tr> - <th width="150px">Name</th> - <th>Description</th> - </tr> - <tr><td style="width:150px;">taskId</td> -<td> - - - <div id="d2e199_queryFilters_taskId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">originalRequestId</td> -<td> - - - <div id="d2e199_queryFilters_originalRequestId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">subscriptionServiceType</td> -<td> - - - <div id="d2e199_queryFilters_subscriptionServiceType"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">nfRole</td> -<td> - - - <div id="d2e199_queryFilters_nfRole"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">buildingBlockName</td> -<td> - - - <div id="d2e199_queryFilters_buildingBlockName"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">originalRequestDate</td> -<td> - - - <div id="d2e199_queryFilters_originalRequestDate"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - </div> - </div> -</td> -</tr> - - <tr><td style="width:150px;">originalRequestorId</td> -<td> - - - <div id="d2e199_queryFilters_originalRequestorId"> - <div class="json-schema-view"> - <div class="primitive"> - <span class="type"> - String - </span> - - </div> - </div> - </div> -</td> -</tr> - - </table> - - <h2>Responses</h2> - <h3> Status: default - successful operation </h3> - - <ul class="nav nav-tabs nav-tabs-examples" > - </ul> - - <div class="tab-content" style='margin-bottom: 10px;'> - </div> - - </article> - </div> - <hr> - </section> - </div> - <div id="footer"> - <div id="api-_footer"> - <p>Suggestions, contact, support and error reporting; - <div class="app-desc">Information URL: <a href="https://helloreverb.com">https://helloreverb.com</a></div> - <div class="app-desc">Contact Info: <a href="hello@helloreverb.com">hello@helloreverb.com</a></div> - </p> - <div class="license-info">All rights reserved</div> - <div class="license-url">http://apache.org/licenses/LICENSE-2.0.html</div> - </div> - </div> - <div id="generator"> - <div class="content"> - Generated 2018-09-26T06:32:35.799Z - </div> - </div> - </div> - </div> - </div> - <script> -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define("JSONFormatter", [], factory); - else if(typeof exports === 'object') - exports["JSONFormatter"] = factory(); - else - root["JSONFormatter"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist"; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(1); - - -/***/ }, -/* 1 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - __webpack_require__(2); - var helpers_ts_1 = __webpack_require__(6); - var DATE_STRING_REGEX = /(^\d{1,4}[\.|\\/|-]\d{1,2}[\.|\\/|-]\d{1,4})(\s*(?:0?[1-9]:[0-5]|1(?=[012])\d:[0-5])\d\s*[ap]m)?$/; - var PARTIAL_DATE_REGEX = /\d{2}:\d{2}:\d{2} GMT-\d{4}/; - var JSON_DATE_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/; - // When toggleing, don't animated removal or addition of more than a few items - var MAX_ANIMATED_TOGGLE_ITEMS = 10; - var requestAnimationFrame = window.requestAnimationFrame || function (cb) { cb(); return 0; }; - ; - var _defaultConfig = { - hoverPreviewEnabled: false, - hoverPreviewArrayCount: 100, - hoverPreviewFieldCount: 5, - animateOpen: true, - animateClose: true, - theme: null - }; - module.exports = (function () { - /** - * @param {object} json The JSON object you want to render. It has to be an - * object or array. Do NOT pass raw JSON string. - * - * @param {number} [open=1] his number indicates up to how many levels the - * rendered tree should expand. Set it to `0` to make the whole tree collapsed - * or set it to `Infinity` to expand the tree deeply - * - * @param {object} [config=defaultConfig] - - * defaultConfig = { - * hoverPreviewEnabled: false, - * hoverPreviewArrayCount: 100, - * hoverPreviewFieldCount: 5 - * } - * - * Available configurations: - * #####Hover Preview - * * `hoverPreviewEnabled`: enable preview on hover - * * `hoverPreviewArrayCount`: number of array items to show in preview Any - * array larger than this number will be shown as `Array[XXX]` where `XXX` - * is length of the array. - * * `hoverPreviewFieldCount`: number of object properties to show for object - * preview. Any object with more properties that thin number will be - * truncated. - * - * @param {string} [key=undefined] The key that this object in it's parent - * context - */ - function JSONFormatter(json, open, config, key) { - if (open === void 0) { open = 1; } - if (config === void 0) { config = _defaultConfig; } - this.json = json; - this.open = open; - this.config = config; - this.key = key; - // Hold the open state after the toggler is used - this._isOpen = null; - // Setting default values for config object - if (this.config.hoverPreviewEnabled === undefined) { - this.config.hoverPreviewEnabled = _defaultConfig.hoverPreviewEnabled; - } - if (this.config.hoverPreviewArrayCount === undefined) { - this.config.hoverPreviewArrayCount = _defaultConfig.hoverPreviewArrayCount; - } - if (this.config.hoverPreviewFieldCount === undefined) { - this.config.hoverPreviewFieldCount = _defaultConfig.hoverPreviewFieldCount; - } - } - Object.defineProperty(JSONFormatter.prototype, "isOpen", { - /* - * is formatter open? - */ - get: function () { - if (this._isOpen !== null) { - return this._isOpen; - } - else { - return this.open > 0; - } - }, - /* - * set open state (from toggler) - */ - set: function (value) { - this._isOpen = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "isDate", { - /* - * is this a date string? - */ - get: function () { - return (this.type === 'string') && - (DATE_STRING_REGEX.test(this.json) || - JSON_DATE_REGEX.test(this.json) || - PARTIAL_DATE_REGEX.test(this.json)); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "isUrl", { - /* - * is this a URL string? - */ - get: function () { - return this.type === 'string' && (this.json.indexOf('http') === 0); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "isArray", { - /* - * is this an array? - */ - get: function () { - return Array.isArray(this.json); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "isObject", { - /* - * is this an object? - * Note: In this context arrays are object as well - */ - get: function () { - return helpers_ts_1.isObject(this.json); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "isEmptyObject", { - /* - * is this an empty object with no properties? - */ - get: function () { - return !this.keys.length && !this.isArray; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "isEmpty", { - /* - * is this an empty object or array? - */ - get: function () { - return this.isEmptyObject || (this.keys && !this.keys.length && this.isArray); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "hasKey", { - /* - * did we receive a key argument? - * This means that the formatter was called as a sub formatter of a parent formatter - */ - get: function () { - return typeof this.key !== 'undefined'; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "constructorName", { - /* - * if this is an object, get constructor function name - */ - get: function () { - return helpers_ts_1.getObjectName(this.json); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "type", { - /* - * get type of this value - * Possible values: all JavaScript primitive types plus "array" and "null" - */ - get: function () { - return helpers_ts_1.getType(this.json); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(JSONFormatter.prototype, "keys", { - /* - * get object keys - * If there is an empty key we pad it wit quotes to make it visible - */ - get: function () { - if (this.isObject) { - return Object.keys(this.json).map(function (key) { return key ? key : '""'; }); - } - else { - return []; - } - }, - enumerable: true, - configurable: true - }); - /** - * Toggles `isOpen` state - * - */ - JSONFormatter.prototype.toggleOpen = function () { - this.isOpen = !this.isOpen; - if (this.element) { - if (this.isOpen) { - this.appendChildren(this.config.animateOpen); - } - else { - this.removeChildren(this.config.animateClose); - } - this.element.classList.toggle(helpers_ts_1.cssClass('open')); - } - }; - /** - * Open all children up to a certain depth. - * Allows actions such as expand all/collapse all - * - */ - JSONFormatter.prototype.openAtDepth = function (depth) { - if (depth === void 0) { depth = 1; } - if (depth < 0) { - return; - } - this.open = depth; - this.isOpen = (depth !== 0); - if (this.element) { - this.removeChildren(false); - if (depth === 0) { - this.element.classList.remove(helpers_ts_1.cssClass('open')); - } - else { - this.appendChildren(this.config.animateOpen); - this.element.classList.add(helpers_ts_1.cssClass('open')); - } - } - }; - /** - * Generates inline preview - * - * @returns {string} - */ - JSONFormatter.prototype.getInlinepreview = function () { - var _this = this; - if (this.isArray) { - // if array length is greater then 100 it shows "Array[101]" - if (this.json.length > this.config.hoverPreviewArrayCount) { - return "Array[" + this.json.length + "]"; - } - else { - return "[" + this.json.map(helpers_ts_1.getPreview).join(', ') + "]"; - } - } - else { - var keys = this.keys; - // the first five keys (like Chrome Developer Tool) - var narrowKeys = keys.slice(0, this.config.hoverPreviewFieldCount); - // json value schematic information - var kvs = narrowKeys.map(function (key) { return (key + ":" + helpers_ts_1.getPreview(_this.json[key])); }); - // if keys count greater then 5 then show ellipsis - var ellipsis = keys.length >= this.config.hoverPreviewFieldCount ? '…' : ''; - return "{" + kvs.join(', ') + ellipsis + "}"; - } - }; - /** - * Renders an HTML element and installs event listeners - * - * @returns {HTMLDivElement} - */ - JSONFormatter.prototype.render = function () { - // construct the root element and assign it to this.element - this.element = helpers_ts_1.createElement('div', 'row'); - // construct the toggler link - var togglerLink = helpers_ts_1.createElement('a', 'toggler-link'); - // if this is an object we need a wrapper span (toggler) - if (this.isObject) { - togglerLink.appendChild(helpers_ts_1.createElement('span', 'toggler')); - } - // if this is child of a parent formatter we need to append the key - if (this.hasKey) { - togglerLink.appendChild(helpers_ts_1.createElement('span', 'key', this.key + ":")); - } - // Value for objects and arrays - if (this.isObject) { - // construct the value holder element - var value = helpers_ts_1.createElement('span', 'value'); - // we need a wrapper span for objects - var objectWrapperSpan = helpers_ts_1.createElement('span'); - // get constructor name and append it to wrapper span - var constructorName = helpers_ts_1.createElement('span', 'constructor-name', this.constructorName); - objectWrapperSpan.appendChild(constructorName); - // if it's an array append the array specific elements like brackets and length - if (this.isArray) { - var arrayWrapperSpan = helpers_ts_1.createElement('span'); - arrayWrapperSpan.appendChild(helpers_ts_1.createElement('span', 'bracket', '[')); - arrayWrapperSpan.appendChild(helpers_ts_1.createElement('span', 'number', (this.json.length))); - arrayWrapperSpan.appendChild(helpers_ts_1.createElement('span', 'bracket', ']')); - objectWrapperSpan.appendChild(arrayWrapperSpan); - } - // append object wrapper span to toggler link - value.appendChild(objectWrapperSpan); - togglerLink.appendChild(value); - } - else { - // make a value holder element - var value = this.isUrl ? helpers_ts_1.createElement('a') : helpers_ts_1.createElement('span'); - // add type and other type related CSS classes - value.classList.add(helpers_ts_1.cssClass(this.type)); - if (this.isDate) { - value.classList.add(helpers_ts_1.cssClass('date')); - } - if (this.isUrl) { - value.classList.add(helpers_ts_1.cssClass('url')); - value.setAttribute('href', this.json); - } - // Append value content to value element - var valuePreview = helpers_ts_1.getValuePreview(this.json, this.json); - value.appendChild(document.createTextNode(valuePreview)); - // append the value element to toggler link - togglerLink.appendChild(value); - } - // if hover preview is enabled, append the inline preview element - if (this.isObject && this.config.hoverPreviewEnabled) { - var preview = helpers_ts_1.createElement('span', 'preview-text'); - preview.appendChild(document.createTextNode(this.getInlinepreview())); - togglerLink.appendChild(preview); - } - // construct a children element - var children = helpers_ts_1.createElement('div', 'children'); - // set CSS classes for children - if (this.isObject) { - children.classList.add(helpers_ts_1.cssClass('object')); - } - if (this.isArray) { - children.classList.add(helpers_ts_1.cssClass('array')); - } - if (this.isEmpty) { - children.classList.add(helpers_ts_1.cssClass('empty')); - } - // set CSS classes for root element - if (this.config && this.config.theme) { - this.element.classList.add(helpers_ts_1.cssClass(this.config.theme)); - } - if (this.isOpen) { - this.element.classList.add(helpers_ts_1.cssClass('open')); - } - // append toggler and children elements to root element - this.element.appendChild(togglerLink); - this.element.appendChild(children); - // if formatter is set to be open call appendChildren - if (this.isObject && this.isOpen) { - this.appendChildren(); - } - // add event listener for toggling - if (this.isObject) { - togglerLink.addEventListener('click', this.toggleOpen.bind(this)); - } - return this.element; - }; - /** - * Appends all the children to children element - * Animated option is used when user triggers this via a click - */ - JSONFormatter.prototype.appendChildren = function (animated) { - var _this = this; - if (animated === void 0) { animated = false; } - var children = this.element.querySelector("div." + helpers_ts_1.cssClass('children')); - if (!children || this.isEmpty) { - return; - } - if (animated) { - var index_1 = 0; - var addAChild_1 = function () { - var key = _this.keys[index_1]; - var formatter = new JSONFormatter(_this.json[key], _this.open - 1, _this.config, key); - children.appendChild(formatter.render()); - index_1 += 1; - if (index_1 < _this.keys.length) { - if (index_1 > MAX_ANIMATED_TOGGLE_ITEMS) { - addAChild_1(); - } - else { - requestAnimationFrame(addAChild_1); - } - } - }; - requestAnimationFrame(addAChild_1); - } - else { - this.keys.forEach(function (key) { - var formatter = new JSONFormatter(_this.json[key], _this.open - 1, _this.config, key); - children.appendChild(formatter.render()); - }); - } - }; - /** - * Removes all the children from children element - * Animated option is used when user triggers this via a click - */ - JSONFormatter.prototype.removeChildren = function (animated) { - if (animated === void 0) { animated = false; } - var childrenElement = this.element.querySelector("div." + helpers_ts_1.cssClass('children')); - if (animated) { - var childrenRemoved_1 = 0; - var removeAChild_1 = function () { - if (childrenElement && childrenElement.children.length) { - childrenElement.removeChild(childrenElement.children[0]); - childrenRemoved_1 += 1; - if (childrenRemoved_1 > MAX_ANIMATED_TOGGLE_ITEMS) { - removeAChild_1(); - } - else { - requestAnimationFrame(removeAChild_1); - } - } - }; - requestAnimationFrame(removeAChild_1); - } - else { - if (childrenElement) { - childrenElement.innerHTML = ''; - } - } - }; - return JSONFormatter; - }()); - - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - // style-loader: Adds some css to the DOM by adding a <style> tag - - // load the styles - var content = __webpack_require__(3); - if(typeof content === 'string') content = [[module.id, content, '']]; - // add the styles to the DOM - var update = __webpack_require__(5)(content, {"sourceMap":true}); - if(content.locals) module.exports = content.locals; - // Hot Module Replacement - if(false) { - // When the styles change, update the <style> tags - if(!content.locals) { - module.hot.accept("!!./../node_modules/css-loader/index.js?sourceMap!./../node_modules/less-loader/index.js?sourceMap!./style.less", function() { - var newContent = require("!!./../node_modules/css-loader/index.js?sourceMap!./../node_modules/less-loader/index.js?sourceMap!./style.less"); - if(typeof newContent === 'string') newContent = [[module.id, newContent, '']]; - update(newContent); - }); - } - // When the module is disposed, remove the <style> tags - module.hot.dispose(function() { update(); }); - } - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - exports = module.exports = __webpack_require__(4)(); - // imports - - - // module - exports.push([module.id, ".json-formatter-row {\n font-family: monospace;\n}\n.json-formatter-row,\n.json-formatter-row a,\n.json-formatter-row a:hover {\n color: black;\n text-decoration: none;\n}\n.json-formatter-row .json-formatter-row {\n margin-left: 1rem;\n}\n.json-formatter-row .json-formatter-children.json-formatter-empty {\n opacity: 0.5;\n margin-left: 1rem;\n}\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\n display: none;\n}\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\n content: \"No properties\";\n}\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\n content: \"[]\";\n}\n.json-formatter-row .json-formatter-string {\n color: green;\n white-space: pre;\n word-wrap: break-word;\n}\n.json-formatter-row .json-formatter-number {\n color: blue;\n}\n.json-formatter-row .json-formatter-boolean {\n color: red;\n}\n.json-formatter-row .json-formatter-null {\n color: #855A00;\n}\n.json-formatter-row .json-formatter-undefined {\n color: #ca0b69;\n}\n.json-formatter-row .json-formatter-function {\n color: #FF20ED;\n}\n.json-formatter-row .json-formatter-date {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.json-formatter-row .json-formatter-url {\n text-decoration: underline;\n color: blue;\n cursor: pointer;\n}\n.json-formatter-row .json-formatter-bracket {\n color: blue;\n}\n.json-formatter-row .json-formatter-key {\n color: #00008B;\n cursor: pointer;\n padding-right: 0.2rem;\n}\n.json-formatter-row .json-formatter-constructor-name {\n cursor: pointer;\n}\n.json-formatter-row .json-formatter-toggler {\n line-height: 1.2rem;\n font-size: 0.7rem;\n vertical-align: middle;\n opacity: 0.6;\n cursor: pointer;\n padding-right: 0.2rem;\n}\n.json-formatter-row .json-formatter-toggler:after {\n display: inline-block;\n transition: transform 100ms ease-in;\n content: \"\\25BA\";\n}\n.json-formatter-row > a > .json-formatter-preview-text {\n opacity: 0;\n transition: opacity 0.15s ease-in;\n font-style: italic;\n}\n.json-formatter-row:hover > a > .json-formatter-preview-text {\n opacity: 0.6;\n}\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\n transform: rotate(90deg);\n}\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\n display: inline-block;\n}\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\n display: none;\n}\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\n display: block;\n}\n.json-formatter-dark.json-formatter-row {\n font-family: monospace;\n}\n.json-formatter-dark.json-formatter-row,\n.json-formatter-dark.json-formatter-row a,\n.json-formatter-dark.json-formatter-row a:hover {\n color: white;\n text-decoration: none;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-row {\n margin-left: 1rem;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\n opacity: 0.5;\n margin-left: 1rem;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\n display: none;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\n content: \"No properties\";\n}\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\n content: \"[]\";\n}\n.json-formatter-dark.json-formatter-row .json-formatter-string {\n color: #31F031;\n white-space: pre;\n word-wrap: break-word;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-number {\n color: #66C2FF;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\n color: #EC4242;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-null {\n color: #EEC97D;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\n color: #ef8fbe;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-function {\n color: #FD48CB;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-date {\n background-color: rgba(255, 255, 255, 0.05);\n}\n.json-formatter-dark.json-formatter-row .json-formatter-url {\n text-decoration: underline;\n color: #027BFF;\n cursor: pointer;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\n color: #9494FF;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-key {\n color: #23A0DB;\n cursor: pointer;\n padding-right: 0.2rem;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-constructor-name {\n cursor: pointer;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\n line-height: 1.2rem;\n font-size: 0.7rem;\n vertical-align: middle;\n opacity: 0.6;\n cursor: pointer;\n padding-right: 0.2rem;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\n display: inline-block;\n transition: transform 100ms ease-in;\n content: \"\\25BA\";\n}\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\n opacity: 0;\n transition: opacity 0.15s ease-in;\n font-style: italic;\n}\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\n opacity: 0.6;\n}\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\n transform: rotate(90deg);\n}\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\n display: inline-block;\n}\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\n display: none;\n}\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\n display: block;\n}\n", "", {"version":3,"sources":["/./src/style.less","/./src/style.less"],"names":[],"mappings":"AA0GA;EA3FE,uBAAA;CCbD;ADcC;;;EACE,aAAA;EACA,sBAAA;CCVH;ADkGD;EApFI,kBAAA;CCXH;ADeG;EACE,aAAA;EACA,kBAAA;CCbL;ADeK;EAAU,cAAA;CCZf;ADaK;EAAgC,yBAAA;CCVrC;ADWK;EAA+B,cAAA;CCRpC;ADkFD;EArEI,aAAA;EACA,iBAAA;EACA,sBAAA;CCVH;AD6ED;EAjE2B,YAAA;CCT1B;AD0ED;EAhE4B,WAAA;CCP3B;ADuED;EA/DyB,eAAA;CCLxB;ADoED;EA9D8B,eAAA;CCH7B;ADiED;EA7D6B,eAAA;CCD5B;AD8DD;EA5DyB,sCAAA;CCCxB;AD2DD;EA1DI,2BAAA;EACA,YAAA;EACA,gBAAA;CCEH;ADsDD;EArD4B,YAAA;CCE3B;ADmDD;EAnDI,eAAA;EACA,gBAAA;EACA,sBAAA;CCGH;AD8CD;EA9CI,gBAAA;CCGH;AD2CD;EA1CI,oBAAA;EACA,kBAAA;EACA,uBAAA;EACA,aAAA;EACA,gBAAA;EACA,sBAAA;CCEH;ADAG;EACE,sBAAA;EACA,oCAAA;EACA,iBAAA;CCEL;AD8BD;EA1BI,WAAA;EACA,kCAAA;EACA,mBAAA;CCDH;ADGC;EACE,aAAA;CCDH;ADKC;EAEI,yBAAA;CCJL;ADEC;EAKI,sBAAA;CCJL;ADDC;EAQI,cAAA;CCJL;ADMG;EACE,eAAA;CCJL;ADeD;EAhGE,uBAAA;CCoFD;ADnFC;;;EACE,aAAA;EACA,sBAAA;CCuFH;ADMD;EAzFI,kBAAA;CCsFH;ADlFG;EACE,aAAA;EACA,kBAAA;CCoFL;ADlFK;EAAU,cAAA;CCqFf;ADpFK;EAAgC,yBAAA;CCuFrC;ADtFK;EAA+B,cAAA;CCyFpC;ADVD;EA1EI,eAAA;EACA,iBAAA;EACA,sBAAA;CCuFH;ADfD;EAtE2B,eAAA;CCwF1B;ADlBD;EArE4B,eAAA;CC0F3B;ADrBD;EApEyB,eAAA;CC4FxB;ADxBD;EAnE8B,eAAA;CC8F7B;AD3BD;EAlE6B,eAAA;CCgG5B;AD9BD;EAjEyB,4CAAA;CCkGxB;ADjCD;EA/DI,2BAAA;EACA,eAAA;EACA,gBAAA;CCmGH;ADtCD;EA1D4B,eAAA;CCmG3B;ADzCD;EAxDI,eAAA;EACA,gBAAA;EACA,sBAAA;CCoGH;AD9CD;EAnDI,gBAAA;CCoGH;ADjDD;EA/CI,oBAAA;EACA,kBAAA;EACA,uBAAA;EACA,aAAA;EACA,gBAAA;EACA,sBAAA;CCmGH;ADjGG;EACE,sBAAA;EACA,oCAAA;EACA,iBAAA;CCmGL;AD9DD;EA/BI,WAAA;EACA,kCAAA;EACA,mBAAA;CCgGH;AD9FC;EACE,aAAA;CCgGH;AD5FC;EAEI,yBAAA;CC6FL;AD/FC;EAKI,sBAAA;CC6FL;ADlGC;EAQI,cAAA;CC6FL;AD3FG;EACE,eAAA;CC6FL","file":"style.less","sourcesContent":[".theme(\n @default-color: black,\n @string-color: green,\n @number-color: blue,\n @boolean-color: red,\n @null-color: #855A00,\n @undefined-color: rgb(202, 11, 105),\n @function-color: #FF20ED,\n @rotate-time: 100ms,\n @toggler-opacity: 0.6,\n @toggler-color: #45376F,\n @bracket-color: blue,\n @key-color: #00008B,\n @url-color: blue ){\n\n font-family: monospace;\n &, a, a:hover {\n color: @default-color;\n text-decoration: none;\n }\n\n .json-formatter-row {\n margin-left: 1rem;\n }\n\n .json-formatter-children {\n &.json-formatter-empty {\n opacity: 0.5;\n margin-left: 1rem;\n\n &:after { display: none; }\n &.json-formatter-object:after { content: \"No properties\"; }\n &.json-formatter-array:after { content: \"[]\"; }\n }\n }\n\n .json-formatter-string {\n color: @string-color;\n white-space: pre;\n word-wrap: break-word;\n }\n .json-formatter-number { color: @number-color; }\n .json-formatter-boolean { color: @boolean-color; }\n .json-formatter-null { color: @null-color; }\n .json-formatter-undefined { color: @undefined-color; }\n .json-formatter-function { color: @function-color; }\n .json-formatter-date { background-color: fade(@default-color, 5%); }\n .json-formatter-url {\n text-decoration: underline;\n color: @url-color;\n cursor: pointer;\n }\n\n .json-formatter-bracket { color: @bracket-color; }\n .json-formatter-key {\n color: @key-color;\n cursor: pointer;\n padding-right: 0.2rem;\n }\n .json-formatter-constructor-name {\n cursor: pointer;\n }\n\n .json-formatter-toggler {\n line-height: 1.2rem;\n font-size: 0.7rem;\n vertical-align: middle;\n opacity: @toggler-opacity;\n cursor: pointer;\n padding-right: 0.2rem;\n\n &:after {\n display: inline-block;\n transition: transform @rotate-time ease-in;\n content: \"►\";\n }\n }\n\n // Inline preview on hover (optional)\n > a > .json-formatter-preview-text {\n opacity: 0;\n transition: opacity .15s ease-in;\n font-style: italic;\n }\n &:hover > a > .json-formatter-preview-text {\n opacity: 0.6;\n }\n\n // Open state\n &.json-formatter-open {\n > .json-formatter-toggler-link .json-formatter-toggler:after{\n transform: rotate(90deg);\n }\n > .json-formatter-children:after {\n display: inline-block;\n }\n > a > .json-formatter-preview-text {\n display: none;\n }\n &.json-formatter-empty:after {\n display: block;\n }\n }\n}\n\n// Default theme\n.json-formatter-row {\n .theme();\n}\n\n// Dark theme\n.json-formatter-dark.json-formatter-row {\n .theme(\n @default-color: white,\n @string-color: #31F031,\n @number-color: #66C2FF,\n @boolean-color: #EC4242,\n @null-color: #EEC97D,\n @undefined-color: rgb(239, 143, 190),\n @function-color: #FD48CB,\n @rotate-time: 100ms,\n @toggler-opacity: 0.6,\n @toggler-color: #45376F,\n @bracket-color: #9494FF,\n @key-color: #23A0DB,\n @url-color: #027BFF);\n}\n",".json-formatter-row {\n font-family: monospace;\n}\n.json-formatter-row,\n.json-formatter-row a,\n.json-formatter-row a:hover {\n color: black;\n text-decoration: none;\n}\n.json-formatter-row .json-formatter-row {\n margin-left: 1rem;\n}\n.json-formatter-row .json-formatter-children.json-formatter-empty {\n opacity: 0.5;\n margin-left: 1rem;\n}\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\n display: none;\n}\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\n content: \"No properties\";\n}\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\n content: \"[]\";\n}\n.json-formatter-row .json-formatter-string {\n color: green;\n white-space: pre;\n word-wrap: break-word;\n}\n.json-formatter-row .json-formatter-number {\n color: blue;\n}\n.json-formatter-row .json-formatter-boolean {\n color: red;\n}\n.json-formatter-row .json-formatter-null {\n color: #855A00;\n}\n.json-formatter-row .json-formatter-undefined {\n color: #ca0b69;\n}\n.json-formatter-row .json-formatter-function {\n color: #FF20ED;\n}\n.json-formatter-row .json-formatter-date {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.json-formatter-row .json-formatter-url {\n text-decoration: underline;\n color: blue;\n cursor: pointer;\n}\n.json-formatter-row .json-formatter-bracket {\n color: blue;\n}\n.json-formatter-row .json-formatter-key {\n color: #00008B;\n cursor: pointer;\n padding-right: 0.2rem;\n}\n.json-formatter-row .json-formatter-constructor-name {\n cursor: pointer;\n}\n.json-formatter-row .json-formatter-toggler {\n line-height: 1.2rem;\n font-size: 0.7rem;\n vertical-align: middle;\n opacity: 0.6;\n cursor: pointer;\n padding-right: 0.2rem;\n}\n.json-formatter-row .json-formatter-toggler:after {\n display: inline-block;\n transition: transform 100ms ease-in;\n content: \"►\";\n}\n.json-formatter-row > a > .json-formatter-preview-text {\n opacity: 0;\n transition: opacity 0.15s ease-in;\n font-style: italic;\n}\n.json-formatter-row:hover > a > .json-formatter-preview-text {\n opacity: 0.6;\n}\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\n transform: rotate(90deg);\n}\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\n display: inline-block;\n}\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\n display: none;\n}\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\n display: block;\n}\n.json-formatter-dark.json-formatter-row {\n font-family: monospace;\n}\n.json-formatter-dark.json-formatter-row,\n.json-formatter-dark.json-formatter-row a,\n.json-formatter-dark.json-formatter-row a:hover {\n color: white;\n text-decoration: none;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-row {\n margin-left: 1rem;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\n opacity: 0.5;\n margin-left: 1rem;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\n display: none;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\n content: \"No properties\";\n}\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\n content: \"[]\";\n}\n.json-formatter-dark.json-formatter-row .json-formatter-string {\n color: #31F031;\n white-space: pre;\n word-wrap: break-word;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-number {\n color: #66C2FF;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\n color: #EC4242;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-null {\n color: #EEC97D;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\n color: #ef8fbe;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-function {\n color: #FD48CB;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-date {\n background-color: rgba(255, 255, 255, 0.05);\n}\n.json-formatter-dark.json-formatter-row .json-formatter-url {\n text-decoration: underline;\n color: #027BFF;\n cursor: pointer;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\n color: #9494FF;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-key {\n color: #23A0DB;\n cursor: pointer;\n padding-right: 0.2rem;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-constructor-name {\n cursor: pointer;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\n line-height: 1.2rem;\n font-size: 0.7rem;\n vertical-align: middle;\n opacity: 0.6;\n cursor: pointer;\n padding-right: 0.2rem;\n}\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\n display: inline-block;\n transition: transform 100ms ease-in;\n content: \"►\";\n}\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\n opacity: 0;\n transition: opacity 0.15s ease-in;\n font-style: italic;\n}\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\n opacity: 0.6;\n}\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\n transform: rotate(90deg);\n}\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\n display: inline-block;\n}\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\n display: none;\n}\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\n display: block;\n}\n"],"sourceRoot":"webpack://"}]); - - // exports - - -/***/ }, -/* 4 */ -/***/ function(module, exports) { - - /* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra - */ - // css base code, injected by the css-loader - module.exports = function() { - var list = []; - - // return the list of modules as css string - list.toString = function toString() { - var result = []; - for(var i = 0; i < this.length; i++) { - var item = this[i]; - if(item[2]) { - result.push("@media " + item[2] + "{" + item[1] + "}"); - } else { - result.push(item[1]); - } - } - return result.join(""); - }; - - // import a list of modules into the list - list.i = function(modules, mediaQuery) { - if(typeof modules === "string") - modules = [[null, modules, ""]]; - var alreadyImportedModules = {}; - for(var i = 0; i < this.length; i++) { - var id = this[i][0]; - if(typeof id === "number") - alreadyImportedModules[id] = true; - } - for(i = 0; i < modules.length; i++) { - var item = modules[i]; - // skip already imported module - // this implementation is not 100% perfect for weird media query combinations - // when a module is imported multiple times with different media queries. - // I hope this will never occur (Hey this way we have smaller bundles) - if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) { - if(mediaQuery && !item[2]) { - item[2] = mediaQuery; - } else if(mediaQuery) { - item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"; - } - list.push(item); - } - } - }; - return list; - }; - - -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - - /* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra - */ - var stylesInDom = {}, - memoize = function(fn) { - var memo; - return function () { - if (typeof memo === "undefined") memo = fn.apply(this, arguments); - return memo; - }; - }, - isOldIE = memoize(function() { - return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase()); - }), - getHeadElement = memoize(function () { - return document.head || document.getElementsByTagName("head")[0]; - }), - singletonElement = null, - singletonCounter = 0, - styleElementsInsertedAtTop = []; - - module.exports = function(list, options) { - if(false) { - if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); - } - - options = options || {}; - // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> - // tags it will allow on a page - if (typeof options.singleton === "undefined") options.singleton = isOldIE(); - - // By default, add <style> tags to the bottom of <head>. - if (typeof options.insertAt === "undefined") options.insertAt = "bottom"; - - var styles = listToStyles(list); - addStylesToDom(styles, options); - - return function update(newList) { - var mayRemove = []; - for(var i = 0; i < styles.length; i++) { - var item = styles[i]; - var domStyle = stylesInDom[item.id]; - domStyle.refs--; - mayRemove.push(domStyle); - } - if(newList) { - var newStyles = listToStyles(newList); - addStylesToDom(newStyles, options); - } - for(var i = 0; i < mayRemove.length; i++) { - var domStyle = mayRemove[i]; - if(domStyle.refs === 0) { - for(var j = 0; j < domStyle.parts.length; j++) - domStyle.parts[j](); - delete stylesInDom[domStyle.id]; - } - } - }; - } - - function addStylesToDom(styles, options) { - for(var i = 0; i < styles.length; i++) { - var item = styles[i]; - var domStyle = stylesInDom[item.id]; - if(domStyle) { - domStyle.refs++; - for(var j = 0; j < domStyle.parts.length; j++) { - domStyle.parts[j](item.parts[j]); - } - for(; j < item.parts.length; j++) { - domStyle.parts.push(addStyle(item.parts[j], options)); - } - } else { - var parts = []; - for(var j = 0; j < item.parts.length; j++) { - parts.push(addStyle(item.parts[j], options)); - } - stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts}; - } - } - } - - function listToStyles(list) { - var styles = []; - var newStyles = {}; - for(var i = 0; i < list.length; i++) { - var item = list[i]; - var id = item[0]; - var css = item[1]; - var media = item[2]; - var sourceMap = item[3]; - var part = {css: css, media: media, sourceMap: sourceMap}; - if(!newStyles[id]) - styles.push(newStyles[id] = {id: id, parts: [part]}); - else - newStyles[id].parts.push(part); - } - return styles; - } - - function insertStyleElement(options, styleElement) { - var head = getHeadElement(); - var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1]; - if (options.insertAt === "top") { - if(!lastStyleElementInsertedAtTop) { - head.insertBefore(styleElement, head.firstChild); - } else if(lastStyleElementInsertedAtTop.nextSibling) { - head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling); - } else { - head.appendChild(styleElement); - } - styleElementsInsertedAtTop.push(styleElement); - } else if (options.insertAt === "bottom") { - head.appendChild(styleElement); - } else { - throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'."); - } - } - - function removeStyleElement(styleElement) { - styleElement.parentNode.removeChild(styleElement); - var idx = styleElementsInsertedAtTop.indexOf(styleElement); - if(idx >= 0) { - styleElementsInsertedAtTop.splice(idx, 1); - } - } - - function createStyleElement(options) { - var styleElement = document.createElement("style"); - styleElement.type = "text/css"; - insertStyleElement(options, styleElement); - return styleElement; - } - - function createLinkElement(options) { - var linkElement = document.createElement("link"); - linkElement.rel = "stylesheet"; - insertStyleElement(options, linkElement); - return linkElement; - } - - function addStyle(obj, options) { - var styleElement, update, remove; - - if (options.singleton) { - var styleIndex = singletonCounter++; - styleElement = singletonElement || (singletonElement = createStyleElement(options)); - update = applyToSingletonTag.bind(null, styleElement, styleIndex, false); - remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true); - } else if(obj.sourceMap && - typeof URL === "function" && - typeof URL.createObjectURL === "function" && - typeof URL.revokeObjectURL === "function" && - typeof Blob === "function" && - typeof btoa === "function") { - styleElement = createLinkElement(options); - update = updateLink.bind(null, styleElement); - remove = function() { - removeStyleElement(styleElement); - if(styleElement.href) - URL.revokeObjectURL(styleElement.href); - }; - } else { - styleElement = createStyleElement(options); - update = applyToTag.bind(null, styleElement); - remove = function() { - removeStyleElement(styleElement); - }; - } - - update(obj); - - return function updateStyle(newObj) { - if(newObj) { - if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) - return; - update(obj = newObj); - } else { - remove(); - } - }; - } - - var replaceText = (function () { - var textStore = []; - - return function (index, replacement) { - textStore[index] = replacement; - return textStore.filter(Boolean).join('\n'); - }; - })(); - - function applyToSingletonTag(styleElement, index, remove, obj) { - var css = remove ? "" : obj.css; - - if (styleElement.styleSheet) { - styleElement.styleSheet.cssText = replaceText(index, css); - } else { - var cssNode = document.createTextNode(css); - var childNodes = styleElement.childNodes; - if (childNodes[index]) styleElement.removeChild(childNodes[index]); - if (childNodes.length) { - styleElement.insertBefore(cssNode, childNodes[index]); - } else { - styleElement.appendChild(cssNode); - } - } - } - - function applyToTag(styleElement, obj) { - var css = obj.css; - var media = obj.media; - - if(media) { - styleElement.setAttribute("media", media) - } - - if(styleElement.styleSheet) { - styleElement.styleSheet.cssText = css; - } else { - while(styleElement.firstChild) { - styleElement.removeChild(styleElement.firstChild); - } - styleElement.appendChild(document.createTextNode(css)); - } - } - - function updateLink(linkElement, obj) { - var css = obj.css; - var sourceMap = obj.sourceMap; - - if(sourceMap) { - // https://developer.mozilla.org/en/docs/Web/API/WindowBase64/Base64_encoding_and_decoding - css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */"; - } - - var blob = new Blob([css], { type: "text/css" }); - - var oldSrc = linkElement.href; - - linkElement.href = URL.createObjectURL(blob); - - if(oldSrc) - URL.revokeObjectURL(oldSrc); - } - - -/***/ }, -/* 6 */ -/***/ function(module, exports) { - - "use strict"; - /* - * Escapes `"` characters from string - */ - function escapeString(str) { - return str.replace('"', '\"'); - } - /* - * Determines if a value is an object - */ - function isObject(value) { - var type = typeof value; - return !!value && (type == 'object'); - } - exports.isObject = isObject; - /* - * Gets constructor name of an object. - * - */ - function getObjectName(object) { - if (object === undefined) { - return ''; - } - if (object === null || (typeof object === 'object' && !object.constructor)) { - return 'Object'; - } - var funcNameRegex = /function ([^(]*)/; - var results = (funcNameRegex).exec((object).constructor.toString()); - if (results && results.length > 1) { - return results[1]; - } else { - return ''; - } - } - exports.getObjectName = getObjectName; - /* - * Gets type of an object. Returns "null" for null objects - */ - function getType(object) { - if (object === null) { - return 'null'; - } - return typeof object; - } - exports.getType = getType; - /* - * Generates inline preview for a JavaScript object based on a value - */ - function getValuePreview(object, value) { - var type = getType(object); - if (type === 'null' || type === 'undefined') { - return type; - } - if (type === 'string') { - value = '"' + escapeString(value) + '"'; - } - if (type === 'function') { - // Remove content of the function - return object.toString() - .replace(/[\r\n]/g, '') - .replace(/\{.*\}/, '') + '{…}'; - } - return value; - } - exports.getValuePreview = getValuePreview; - /* - * Generates inline preview for a JavaScript object - */ - function getPreview(object) { - var value = ''; - if (isObject(object)) { - value = getObjectName(object); - if (Array.isArray(object)) - value += '[' + object.length + ']'; - } - else { - value = getValuePreview(object, object); - } - return value; - } - exports.getPreview = getPreview; - /* - * Generates a prefixed CSS class name - */ - function cssClass(className) { - return "json-formatter-" + className; - } - exports.cssClass = cssClass; - /* - * Creates a new DOM element with given type and class - * TODO: move me to helpers - */ - function createElement(type, className, content) { - var el = document.createElement(type); - if (className) { - el.classList.add(cssClass(className)); - } - if (content !== undefined) { - if (content instanceof Node) { - el.appendChild(content); - } - else { - el.appendChild(document.createTextNode(String(content))); - } - } - return el; - } - exports.createElement = createElement; - - -/***/ } -/******/ ]) -}); -; -//# sourceMappingURL=json-formatter.js.map - -</script> - - <script> - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSONSchemaView = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ -'use strict'; -/* - * Converts anyOf, allOf and oneOf to human readable string -*/ -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.convertXOf = convertXOf; -exports._if = _if; - -function convertXOf(type) { - return type.substring(0, 3) + ' of'; -} - -/* - * if condition for ES6 template strings - * to be used only in template string - * - * @example mystr = `Random is ${_if(Math.random() > 0.5)`greater than 0.5`` - * - * @param {boolean} condition - * - * @returns {function} the template function -*/ - -function _if(condition) { - return condition ? normal : empty; -} - -function empty() { - return ''; -} -function normal(template) { - for (var _len = arguments.length, expressions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - expressions[_key - 1] = arguments[_key]; - } - - return template.slice(1).reduce(function (accumulator, part, i) { - return accumulator + expressions[i] + part; - }, template[0]); -} - -},{}],2:[function(require,module,exports){ -'use strict'; - -/* globals JSONSchemaView */ - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -var _templateObject = _taggedTemplateLiteral(['\n <div class="any">\n ', '\n\n <span class="type type-any"><any></span>\n\n ', '\n\t\t \n\t\t ', '\n\t\t ', '\n\t\t ', '\n </div>\n '], ['\n <div class="any">\n ', '\n\n <span class="type type-any"><any></span>\n\n ', '\n\t\t \n\t\t ', '\n\t\t ', '\n\t\t ', '\n </div>\n ']), - _templateObject2 = _taggedTemplateLiteral(['\n <a class="title"><span class="toggle-handle"></span>', ' </a>\n '], ['\n <a class="title"><span class="toggle-handle"></span>', ' </a>\n ']), - _templateObject3 = _taggedTemplateLiteral(['\n <div class="inner description marked">', '</div>\n '], ['\n <div class="inner description marked">', '</div>\n ']), - _templateObject4 = _taggedTemplateLiteral(['\n <div class="inner required">Required: ', '</div>\n '], ['\n <div class="inner required">Required: ', '</div>\n ']), - _templateObject5 = _taggedTemplateLiteral(['\n <div class="inner default">Default: ', '</div>\n '], ['\n <div class="inner default">Default: ', '</div>\n ']), - _templateObject6 = _taggedTemplateLiteral(['\n <div class="inner pattern">Pattern: ', '</div>\n '], ['\n <div class="inner pattern">Pattern: ', '</div>\n ']), - _templateObject7 = _taggedTemplateLiteral(['\n <div class="primitive">\n ', '\n\n <span class="type">', '</span>\n\n \n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\t\t \n\t\t \n\t\t \n\t\t ', '\n\t\t ', '\n\t\t ', '\n\n ', '\n\n ', '\n ', '\n ', '\n </div>\n '], ['\n <div class="primitive">\n ', '\n\n <span class="type">', '</span>\n\n \n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\n ', '\n\t\t \n\t\t \n\t\t \n\t\t ', '\n\t\t ', '\n\t\t ', '\n\n ', '\n\n ', '\n ', '\n ', '\n </div>\n ']), - _templateObject8 = _taggedTemplateLiteral(['\n <span class="format">(', ')</span>\n '], ['\n <span class="format">(', ')</span>\n ']), - _templateObject9 = _taggedTemplateLiteral(['\n <span class="range minimum">minimum:', '</span>\n '], ['\n <span class="range minimum">minimum:', '</span>\n ']), - _templateObject10 = _taggedTemplateLiteral(['\n <span class="range exclusiveMinimum">(ex)minimum:', '</span>\n '], ['\n <span class="range exclusiveMinimum">(ex)minimum:', '</span>\n ']), - _templateObject11 = _taggedTemplateLiteral(['\n <span class="range maximum">maximum:', '</span>\n '], ['\n <span class="range maximum">maximum:', '</span>\n ']), - _templateObject12 = _taggedTemplateLiteral(['\n <span class="range exclusiveMaximum">(ex)maximum:', '</span>\n '], ['\n <span class="range exclusiveMaximum">(ex)maximum:', '</span>\n ']), - _templateObject13 = _taggedTemplateLiteral(['\n <span class="range minLength">minLength:', '</span>\n '], ['\n <span class="range minLength">minLength:', '</span>\n ']), - _templateObject14 = _taggedTemplateLiteral(['\n <span class="range maxLength">maxLength:', '</span>\n '], ['\n <span class="range maxLength">maxLength:', '</span>\n ']), - _templateObject15 = _taggedTemplateLiteral(['\n <div class="inner required">Required</div>\n '], ['\n <div class="inner required">Required</div>\n ']), - _templateObject16 = _taggedTemplateLiteral(['\n ', '\n '], ['\n ', '\n ']), - _templateObject17 = _taggedTemplateLiteral(['', ''], ['', '']), - _templateObject18 = _taggedTemplateLiteral(['\n <div class="array">\n <a class="title"><span class="toggle-handle"></span>', '<span class="opening bracket">[</span>', '</a>\n ', '\n <div class="inner">\n ', '\n </div>\n\n ', '\n\n ', '\n ', '\n ', '\n\n ', '\n </div>\n '], ['\n <div class="array">\n <a class="title"><span class="toggle-handle"></span>', '<span class="opening bracket">[</span>', '</a>\n ', '\n <div class="inner">\n ', '\n </div>\n\n ', '\n\n ', '\n ', '\n ', '\n\n ', '\n </div>\n ']), - _templateObject19 = _taggedTemplateLiteral(['<span class="closing bracket">]</span>'], ['<span class="closing bracket">]</span>']), - _templateObject20 = _taggedTemplateLiteral(['\n <span>\n <span title="items range">(', '..', ')</span>\n ', '\n </span>\n '], ['\n <span>\n <span title="items range">(', '..', ')</span>\n ', '\n </span>\n ']), - _templateObject21 = _taggedTemplateLiteral(['<span title="unique" class="uniqueItems">♦</span>'], ['<span title="unique" class="uniqueItems">♦</span>']), - _templateObject22 = _taggedTemplateLiteral(['\n <div class="description">', '</div>\n '], ['\n <div class="description">', '</div>\n ']), - _templateObject23 = _taggedTemplateLiteral(['\n <span class="closing bracket">]</span>\n '], ['\n <span class="closing bracket">]</span>\n ']), - _templateObject24 = _taggedTemplateLiteral(['\n <div class="object">\n <a class="title"><span\n class="toggle-handle"></span>', ' <span\n class="opening brace">{</span>', '</a>\n\n <div class="inner">\n ', '\n <!-- children go here -->\n\t\t \n\t\t ', '\n\t\t ', '\n\t\t \n\t\t\t', '\n </div>\n\n ', '\n\n ', '\n ', '\n ', '\n\n ', '\n </div>\n '], ['\n <div class="object">\n <a class="title"><span\n class="toggle-handle"></span>', ' <span\n class="opening brace">{</span>', '</a>\n\n <div class="inner">\n ', '\n <!-- children go here -->\n\t\t \n\t\t ', '\n\t\t ', '\n\t\t \n\t\t\t', '\n </div>\n\n ', '\n\n ', '\n ', '\n ', '\n\n ', '\n </div>\n ']), - _templateObject25 = _taggedTemplateLiteral(['\n <span class="closing brace" ng-if="isCollapsed">}</span>\n '], ['\n <span class="closing brace" ng-if="isCollapsed">}</span>\n ']), - _templateObject26 = _taggedTemplateLiteral(['\n <div class="required">Required: ', '</div>\n '], ['\n <div class="required">Required: ', '</div>\n ']), - _templateObject266 = _taggedTemplateLiteral(['\n <div class="required">Required: ', '</div>\n '], ['\n <div class="required">Required: ', '</div>\n ']), - _templateObject27 = _taggedTemplateLiteral(['\n <div class="default">Default: ', '</div>\n '], ['\n <div class="default">Default: ', '</div>\n ']), - _templateObject28 = _taggedTemplateLiteral(['\n <div class="pattern">Pattern: ', '</div>\n '], ['\n <div class="pattern">Pattern: ', '</div>\n ']), - _templateObject29 = _taggedTemplateLiteral(['\n <span class="closing brace">}</span>\n '], ['\n <span class="closing brace">}</span>\n ']), - _templateObject30 = _taggedTemplateLiteral(['\n <div class="inner enums">\n <b>Enum:</b>\n </div>\n '], ['\n <div class="inner enums">\n <b>Enum:</b>\n </div>\n ']); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - -function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -var _helpersJs = require('./helpers.js'); - -/** - * @class JSONSchemaView - * - * A pure JavaScript component for rendering JSON Schema in HTML. -*/ - -var JSONSchemaView = (function () { - - /** - * @param {object} schema The JSON Schema object - * - * @param {number} [open=1] his number indicates up to how many levels the - * rendered tree should expand. Set it to `0` to make the whole tree collapsed - * or set it to `Infinity` to expand the tree deeply - * @param {object} options. - * theme {string}: one of the following options: ['dark'] - */ - - function JSONSchemaView(schema, open) { - var _this = this; - - var options = arguments.length <= 2 || arguments[2] === undefined ? { theme: null } : arguments[2]; - - _classCallCheck(this, JSONSchemaView); - - this.schema = schema; //console.log(schema); - this.open = open; - this.options = options; - this.isCollapsed = open <= 0; - - // if schema is an empty object which means any JOSN - this.isAny = typeof schema === 'object' && !Array.isArray(schema) && !Object.keys(schema).filter(function (k) { - return ['title', 'description'].indexOf(k) === -1; - }).length; - - // Determine if a schema is an array - this.isArray = !this.isAny && this.schema && this.schema.type === 'array'; - - this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf); - - // Determine if a schema is a primitive - this.isPrimitive = !this.isAny && !this.isArray && !this.isObject; - - // - this.showToggle = this.schema.description || this.schema.title || this.isPrimitive && (this.schema.minimum || this.schema.maximum || this.schema.exclusiveMinimum || this.schema.exclusiveMaximum); - - // populate isRequired property down to properties - if (this.schema && Array.isArray(this.schema.required)) { - this.schema.required.forEach(function (requiredProperty) { - if (typeof _this.schema.properties[requiredProperty] === 'object') { - _this.schema.properties[requiredProperty].isRequired = true; - } - }); - } - } - - /* - * Returns the template with populated properties. - * This template does not have the children - */ - - _createClass(JSONSchemaView, [{ - key: 'template', - value: function template() { - if (!this.schema) { - return ''; - } - - return ('\n <!-- Any -->\n ' + (0, _helpersJs._if)(this.isAny)(_templateObject, (0, _helpersJs._if)(this.showToggle)(_templateObject2, this.schema.title || ''), (0, _helpersJs._if)(this.schema.description && !this.isCollapsed)(_templateObject3, marked(this.schema.description || "")), (0, _helpersJs._if)(this.schema.required && !this.isCollapsed)(_templateObject4, this.schema.required), (0, _helpersJs._if)(this.schema['default'] && !this.isCollapsed)(_templateObject5, this.schema['default']), (0, _helpersJs._if)(this.schema.pattern && !this.isCollapsed)(_templateObject6, this.schema.pattern)) + '\n\n <!-- Primitive -->\n ' + (0, _helpersJs._if)(this.isPrimitive)(_templateObject7, (0, _helpersJs._if)(this.showToggle)(_templateObject2, this.schema.title || ''), this.schema.type, (0, _helpersJs._if)(!this.isCollapsed && this.schema.format)(_templateObject8, this.schema.format), (0, _helpersJs._if)(!this.isCollapsed && this.schema.minimum)(_templateObject9, this.schema.minimum), (0, _helpersJs._if)(!this.isCollapsed && this.schema.exclusiveMinimum)(_templateObject10, this.schema.exclusiveMinimum), (0, _helpersJs._if)(!this.isCollapsed && this.schema.maximum)(_templateObject11, this.schema.maximum), (0, _helpersJs._if)(!this.isCollapsed && this.schema.exclusiveMaximum)(_templateObject12, this.schema.exclusiveMaximum), (0, _helpersJs._if)(!this.isCollapsed && this.schema.minLength)(_templateObject13, this.schema.minLength), (0, _helpersJs._if)(!this.isCollapsed && this.schema.maxLength)(_templateObject14, this.schema.maxLength), (0, _helpersJs._if)(this.schema.description && !this.isCollapsed)(_templateObject3, marked(this.schema.description || "")), (0, _helpersJs._if)(this.schema.required && !this.isCollapsed)(_templateObject15), (0, _helpersJs._if)(this.schema['default'] && !this.isCollapsed)(_templateObject5, this.schema['default']), (0, _helpersJs._if)(this.schema.pattern && !this.isCollapsed)(_templateObject6, this.schema.pattern), (0, _helpersJs._if)(!this.isCollapsed && this.schema['enum'])(_templateObject16, this['enum'](this.schema, this.isCollapsed, this.open)), (0, _helpersJs._if)(this.schema.allOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'allOf')), (0, _helpersJs._if)(this.schema.oneOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'oneOf')), (0, _helpersJs._if)(this.schema.anyOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'anyOf'))) + '\n\n\n <!-- Array -->\n ' + (0, _helpersJs._if)(this.isArray)(_templateObject18, this.schema.title || '', (0, _helpersJs._if)(this.isCollapsed)(_templateObject19), (0, _helpersJs._if)(!this.isCollapsed && (this.schema.uniqueItems || this.schema.minItems || this.schema.maxItems))(_templateObject20, this.schema.minItems || 0, this.schema.maxItems || '∞', (0, _helpersJs._if)(!this.isCollapsed && this.schema.uniqueItems)(_templateObject21)), (0, _helpersJs._if)(!this.isCollapsed && this.schema.description)(_templateObject22, marked(this.schema.description || "")), (0, _helpersJs._if)(!this.isCollapsed && this.schema['enum'])(_templateObject16, this['enum'](this.schema, this.isCollapsed, this.open)), (0, _helpersJs._if)(this.schema.allOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'allOf')), (0, _helpersJs._if)(this.schema.oneOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'oneOf')), (0, _helpersJs._if)(this.schema.anyOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'anyOf')), (0, _helpersJs._if)(!this.isCollapsed)(_templateObject23)) + '\n\n <!-- Object -->\n ' + (0, _helpersJs._if)(!this.isPrimitive && !this.isArray && !this.isAny)(_templateObject24, this.schema.title || '', (0, _helpersJs._if)(this.isCollapsed)(_templateObject25), (0, _helpersJs._if)(!this.isCollapsed && this.schema.description)(_templateObject22, marked(this.schema.description || "")), - - (0, _helpersJs._if)(this.schema.required && !this.isCollapsed && this.options.isBodyParam != true)(_templateObject26, this.schema.required), - (0, _helpersJs._if)(this.schema.required && !this.isCollapsed && this.options.isBodyParam == true)(_templateObject266, this.schema.required), - - (0, _helpersJs._if)(this.schema['default'] && !this.isCollapsed)(_templateObject27, this.schema['default']),(0, _helpersJs._if)(!this.isCollapsed)(_templateObject29), - (0, _helpersJs._if)(!this.isCollapsed && this.schema.pattern)(_templateObject28, this.schema.pattern), - (0, _helpersJs._if)(!this.isCollapsed && this.schema['enum'])(_templateObject16, this['enum'](this.schema, this.isCollapsed, this.open)), (0, _helpersJs._if)(this.schema.allOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'allOf')), (0, _helpersJs._if)(this.schema.oneOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'oneOf')), (0, _helpersJs._if)(this.schema.anyOf && !this.isCollapsed)(_templateObject17, this.xOf(this.schema, 'anyOf'))) + '\n').replace(/\s*\n/g, '\n').replace(/(\<\!\-\-).+/g, '').trim(); - } - - /* - * Template for oneOf, anyOf and allOf - */ - }, { - key: 'xOf', - value: function xOf(schema, type) { - return '\n <div class="inner ' + type + '">\n <b>' + (0, _helpersJs.convertXOf)(type) + ':</b>\n </div>\n '; - } - - /* - * Template for enums - */ - }, { - key: 'enum', - value: function _enum(schema, isCollapsed, open) { - return '\n ' + (0, _helpersJs._if)(!isCollapsed && schema['enum'])(_templateObject30) + '\n '; - } - - /* - * Toggles the 'collapsed' state - */ - }, { - key: 'toggle', - value: function toggle() { - this.isCollapsed = !this.isCollapsed; - this.render(); - } - - /* - * Renders the element and returns it - */ - }, { - key: 'render', - value: function render() { - if (!this.element) { - this.element = document.createElement('div'); - this.element.classList.add('json-schema-view'); - } - - if (this.isCollapsed) { - this.element.classList.add('collapsed'); - } else { - this.element.classList.remove('collapsed'); - } - - if (this.options.theme) { - this.element.classList.add('json-schema-view-' + this.options.theme); - } - - this.element.innerHTML = this.template(); - - if (!this.schema) { - return this.element; - } - - if (!this.isCollapsed) { - this.appendChildren(this.element); - } - - // add event listener for toggling - if (this.element.querySelector('a.title')) { - this.element.querySelector('a.title').addEventListener('click', this.toggle.bind(this)); - } - return this.element; - } - - /* - * Appends children to given element based on current schema - */ - }, { - key: 'appendChildren', - value: function appendChildren(element) { - var _this2 = this; - - var inner = element.querySelector('.inner'); - - if (!inner) { - return; - } - - if (this.schema['enum']) { - var tempDiv = document.createElement('span');; - tempDiv.classList.add('inner'); - tempDiv.innerHTML = '<code>' + this.schema['enum'].join('</code>, <code>') + '</code>'; - element.querySelector('.enums.inner').appendChild(tempDiv); - } - - if (this.isArray) { - var view = new JSONSchemaView(this.schema.items, Infinity); - inner.appendChild(view.render()); - } - - if (typeof this.schema.properties === 'object') { - Object.keys(this.schema.properties).forEach(function (propertyName) { - var property = _this2.schema.properties[propertyName]; - var tempDiv = document.createElement('div');; - tempDiv.innerHTML = '<div class="property">\n <span class="name">' + propertyName + ':</span>\n </div>'; - var view = new JSONSchemaView(property, _this2.open - 1); - tempDiv.querySelector('.property').appendChild(view.render()); - - inner.appendChild(tempDiv.querySelector('.property')); - }); - } - - if (this.schema.allOf) { - appendXOf.call(this, 'allOf'); - } - if (this.schema.oneOf) { - appendXOf.call(this, 'oneOf'); - } - if (this.schema.anyOf) { - appendXOf.call(this, 'anyOf'); - } - - function appendXOf(type) { - var _this3 = this; - - var innerAllOf = element.querySelector('.inner.' + type); - - this.schema[type].forEach(function (schema) { - var inner = document.createElement('div'); - inner.classList.add('inner'); - var view = new JSONSchemaView(schema, _this3.open - 1); - inner.appendChild(view.render()); - innerAllOf.appendChild(inner); - }); - } - } - }]); - - return JSONSchemaView; -})(); - -exports['default'] = JSONSchemaView; -module.exports = exports['default']; - -},{"./helpers.js":1}]},{},[2])(2) -}); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJDOi9Vc2Vycy9qYW1lc2hpL0Rlc2t0b3AvanNvbi1zY2hlbWEtdmlldy1qcy1tYXN0ZXIvc3JjL2hlbHBlcnMuanMiLCJDOi9Vc2Vycy9qYW1lc2hpL0Rlc2t0b3AvanNvbi1zY2hlbWEtdmlldy1qcy1tYXN0ZXIvc3JjL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUEsWUFBWSxDQUFDOzs7Ozs7Ozs7O0FBSU4sU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0NBQ3JDOzs7Ozs7Ozs7Ozs7O0FBWU0sU0FBUyxHQUFHLENBQUMsU0FBUyxFQUFFO0FBQzdCLFNBQU8sU0FBUyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7Q0FDbkM7O0FBQ0QsU0FBUyxLQUFLLEdBQUU7QUFDZCxTQUFPLEVBQUUsQ0FBQztDQUNYO0FBQ0QsU0FBUyxNQUFNLENBQUUsUUFBUSxFQUFrQjtvQ0FBYixXQUFXO0FBQVgsZUFBVzs7O0FBQ3ZDLFNBQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBSztBQUN4RCxXQUFPLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0dBQzVDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakI7OztBQzVCRCxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5QkFPTixjQUFjOzs7Ozs7OztJQVFBLGNBQWM7Ozs7Ozs7Ozs7OztBQVd0QixXQVhRLGNBQWMsQ0FXckIsTUFBTSxFQUFFLElBQUksRUFBMkI7OztRQUF6QixPQUFPLHlEQUFHLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQzs7MEJBWDlCLGNBQWM7O0FBWS9CLFFBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFFBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFFBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFFBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQzs7O0FBRzdCLFFBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUNyQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQ3RCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDbkIsTUFBTSxDQUFDLFVBQUEsQ0FBQzthQUFHLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDOzs7QUFHakUsUUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7O0FBRTFFLFFBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQSxBQUFDLENBQUM7OztBQUd0QixRQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7QUFHbEUsUUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQ2hCLElBQUksQ0FBQyxXQUFXLEtBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFBLEFBQUMsQUFDOUIsQ0FBQzs7O0FBR0osUUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUN0RCxVQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBQSxnQkFBZ0IsRUFBSTtBQUMvQyxZQUFJLE9BQU8sTUFBSyxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ2hFLGdCQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQzVEO09BQ0YsQ0FBQyxDQUFDO0tBQ0o7R0FDRjs7Ozs7OztlQXREa0IsY0FBYzs7V0E0RHpCLG9CQUFHO0FBQ1QsVUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDaEIsZUFBTyxFQUFFLENBQUM7T0FDWDs7QUFFRCxhQUFPLGtDQUVILG9CQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBRVgsb0JBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFDa0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxHQUs3RSxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUc5RCxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBRWxFLG9CQUFJLElBQUksQ0FBQyxNQUFNLFdBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQ0QsSUFBSSxDQUFDLE1BQU0sV0FBUSxHQUU5RCxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLDhDQU03RCxvQkFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUVqQixvQkFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUNrQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLEdBR3hELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUlyQyxvQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUcxQyxvQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBR3pELG9CQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG9CQUNILElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBRy9FLG9CQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FHekQsb0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsb0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FHL0Usb0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUcvRCxvQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBRy9ELG9CQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBSzdELG9CQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFHL0Msb0JBQUksSUFBSSxDQUFDLE1BQU0sV0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFDRCxJQUFJLENBQUMsTUFBTSxXQUFRLEdBRTlELG9CQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FHekQsb0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLFFBQUssQ0FBQyxvQkFDeEMsSUFBSSxRQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FHckQsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FDNUUsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FDNUUsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsNENBTWhGLG9CQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBRXVDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBeUMsb0JBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFDekksb0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBLEFBQUMsQ0FBQyxvQkFFdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEdBQUcsRUFDcEYsb0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLHNCQUlqRCxvQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsb0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUlwRCxvQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sUUFBSyxDQUFDLG9CQUN4QyxJQUFJLFFBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUdyRCxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUM1RSxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUM1RSxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUU1RSxvQkFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsNkRBTzFCLG9CQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUduQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQ3RCLG9CQUFJLElBQUksQ0FBQyxXQUFXLENBQUMscUJBS25ELG9CQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBSXpELG9CQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FFbEUsb0JBQUksSUFBSSxDQUFDLE1BQU0sV0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFDUCxJQUFJLENBQUMsTUFBTSxXQUFRLEdBRzFELG9CQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFDSixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FJckQsb0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLFFBQUssQ0FBQyxvQkFDeEMsSUFBSSxRQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FHckQsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FDNUUsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FDNUUsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FFNUUsb0JBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDZCQUtoQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDM0Q7Ozs7Ozs7V0FLRSxhQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDaEIsNENBQ3NCLElBQUksdUJBQ2pCLDJCQUFXLElBQUksQ0FBQywrQkFFdkI7S0FDSDs7Ozs7OztXQUtHLGVBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7QUFDOUIsMEJBQ0ksb0JBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxRQUFLLENBQUMsK0JBS2xDO0tBQ0g7Ozs7Ozs7V0FLSyxrQkFBRztBQUNQLFVBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3JDLFVBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNmOzs7Ozs7O1dBS0ssa0JBQUc7QUFDUCxVQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNqQixZQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0MsWUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7T0FDaEQ7O0FBRUQsVUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3BCLFlBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztPQUN6QyxNQUFNO0FBQ0wsWUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQzVDOztBQUVELFVBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsWUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyx1QkFBcUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUcsQ0FBQztPQUN0RTs7QUFFRCxVQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7O0FBRXpDLFVBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2hCLGVBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztPQUNyQjs7QUFFRCxVQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNyQixZQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUNuQzs7O0FBR0QsVUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUN6QyxZQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUN6RjtBQUNELGFBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNyQjs7Ozs7OztXQUthLHdCQUFDLE9BQU8sRUFBRTs7O0FBQ3RCLFVBQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7O0FBRTlDLFVBQUksQ0FBQyxLQUFLLEVBQUU7QUFDVixlQUFPO09BQ1I7O0FBRUQsVUFBSSxJQUFJLENBQUMsTUFBTSxRQUFLLEVBQUU7QUFDcEIsWUFBTSxTQUFTLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sUUFBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckUsWUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3ZDLG1CQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQyxlQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztPQUVoRTs7QUFFRCxVQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDaEIsWUFBTSxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUNqRSxhQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO09BQ2xDOztBQUVELFVBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7QUFDOUMsY0FBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLFlBQVksRUFBSTtBQUMxRCxjQUFNLFFBQVEsR0FBRyxPQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdEQsY0FBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQy9DLGlCQUFPLENBQUMsU0FBUyw2REFDTSxZQUFZLDZCQUM1QixDQUFDO0FBQ1IsY0FBTSxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELGlCQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzs7QUFFOUQsZUFBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDdkQsQ0FBQyxDQUFDO09BQ0o7O0FBRUQsVUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtBQUFFLGlCQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztPQUFFO0FBQ3pELFVBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFBRSxpQkFBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FBRTtBQUN6RCxVQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQUUsaUJBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQUU7O0FBRXpELGVBQVMsU0FBUyxDQUFDLElBQUksRUFBRTs7O0FBQ3ZCLFlBQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxhQUFhLGFBQVcsSUFBSSxDQUFHLENBQUM7O0FBRTNELFlBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsTUFBTSxFQUFJO0FBQ2xDLGNBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsZUFBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsY0FBTSxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGVBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDakMsb0JBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0IsQ0FBQyxDQUFDO09BQ0o7S0FDRjs7O1NBOVZrQixjQUFjOzs7cUJBQWQsY0FBYyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIndXNlIHN0cmljdCc7XG4vKlxuICogQ29udmVydHMgYW55T2YsIGFsbE9mIGFuZCBvbmVPZiB0byBodW1hbiByZWFkYWJsZSBzdHJpbmdcbiovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFhPZih0eXBlKSB7XG4gIHJldHVybiB0eXBlLnN1YnN0cmluZygwLCAzKSArICcgb2YnO1xufVxuXG4vKlxuICogaWYgY29uZGl0aW9uIGZvciBFUzYgdGVtcGxhdGUgc3RyaW5nc1xuICogdG8gYmUgdXNlZCBvbmx5IGluIHRlbXBsYXRlIHN0cmluZ1xuICpcbiAqIEBleGFtcGxlIG15c3RyID0gYFJhbmRvbSBpcyAke19pZihNYXRoLnJhbmRvbSgpID4gMC41KWBncmVhdGVyIHRoYW4gMC41YGBcbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbmRpdGlvblxuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gdGhlIHRlbXBsYXRlIGZ1bmN0aW9uXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIF9pZihjb25kaXRpb24pIHtcbiAgcmV0dXJuIGNvbmRpdGlvbiA/IG5vcm1hbCA6IGVtcHR5O1xufVxuZnVuY3Rpb24gZW1wdHkoKXtcbiAgcmV0dXJuICcnO1xufVxuZnVuY3Rpb24gbm9ybWFsICh0ZW1wbGF0ZSwgLi4uZXhwcmVzc2lvbnMpIHtcbiAgcmV0dXJuIHRlbXBsYXRlLnNsaWNlKDEpLnJlZHVjZSgoYWNjdW11bGF0b3IsIHBhcnQsIGkpID0+IHtcbiAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBleHByZXNzaW9uc1tpXSArIHBhcnQ7XG4gIH0sIHRlbXBsYXRlWzBdKTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbHMgSlNPTlNjaGVtYVZpZXcgKi9cblxuaW1wb3J0IHtcbiAgY29udmVydFhPZixcbiAgX2lmXG59IGZyb20gJy4vaGVscGVycy5qcyc7XG5cblxuLyoqXG4gKiBAY2xhc3MgSlNPTlNjaGVtYVZpZXdcbiAqXG4gKiBBIHB1cmUgSmF2YVNjcmlwdCBjb21wb25lbnQgZm9yIHJlbmRlcmluZyBKU09OIFNjaGVtYSBpbiBIVE1MLlxuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpTT05TY2hlbWFWaWV3IHtcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSBUaGUgSlNPTiBTY2hlbWEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3Blbj0xXSBoaXMgbnVtYmVyIGluZGljYXRlcyB1cCB0byBob3cgbWFueSBsZXZlbHMgdGhlXG4gICAqIHJlbmRlcmVkIHRyZWUgc2hvdWxkIGV4cGFuZC4gU2V0IGl0IHRvIGAwYCB0byBtYWtlIHRoZSB3aG9sZSB0cmVlIGNvbGxhcHNlZFxuICAgKiBvciBzZXQgaXQgdG8gYEluZmluaXR5YCB0byBleHBhbmQgdGhlIHRyZWUgZGVlcGx5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLlxuICAgKiAgdGhlbWUge3N0cmluZ306IG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6IFsnZGFyayddXG4gICovXG4gIGNvbnN0cnVjdG9yKHNjaGVtYSwgb3Blbiwgb3B0aW9ucyA9IHt0aGVtZTogbnVsbH0pIHtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICB0aGlzLm9wZW4gPSBvcGVuO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IG9wZW4gPD0gMDtcblxuICAgIC8vIGlmIHNjaGVtYSBpcyBhbiBlbXB0eSBvYmplY3Qgd2hpY2ggbWVhbnMgYW55IEpPU05cbiAgICB0aGlzLmlzQW55ID0gdHlwZW9mIHNjaGVtYSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHNjaGVtYSkgJiZcbiAgICAgICFPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICAuZmlsdGVyKGs9PiBbJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJ10uaW5kZXhPZihrKSA9PT0gLTEpLmxlbmd0aDtcblxuICAgIC8vIERldGVybWluZSBpZiBhIHNjaGVtYSBpcyBhbiBhcnJheVxuICAgIHRoaXMuaXNBcnJheSA9ICF0aGlzLmlzQW55ICYmIHRoaXMuc2NoZW1hICYmIHRoaXMuc2NoZW1hLnR5cGUgPT09ICdhcnJheSc7XG5cbiAgICB0aGlzLmlzT2JqZWN0ID0gdGhpcy5zY2hlbWEgJiZcbiAgICAgICh0aGlzLnNjaGVtYS50eXBlID09PSAnb2JqZWN0JyB8fFxuICAgICAgIHRoaXMuc2NoZW1hLnByb3BlcnRpZXMgfHxcbiAgICAgICB0aGlzLnNjaGVtYS5hbnlPZiB8fFxuICAgICAgIHRoaXMuc2NoZW1hLm9uZW9mIHx8XG4gICAgICAgdGhpcy5zY2hlbWEuYWxsT2YpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIGEgc2NoZW1hIGlzIGEgcHJpbWl0aXZlXG4gICAgdGhpcy5pc1ByaW1pdGl2ZSA9ICF0aGlzLmlzQW55ICYmICF0aGlzLmlzQXJyYXkgJiYgIXRoaXMuaXNPYmplY3Q7XG5cbiAgICAvL1xuICAgIHRoaXMuc2hvd1RvZ2dsZSA9IHRoaXMuc2NoZW1hLmRlc2NyaXB0aW9uIHx8XG4gICAgICB0aGlzLnNjaGVtYS50aXRsZSB8fFxuICAgICAgKHRoaXMuaXNQcmltaXRpdmUgJiYgKFxuICAgICAgICB0aGlzLnNjaGVtYS5taW5pbXVtIHx8XG4gICAgICAgIHRoaXMuc2NoZW1hLm1heGltdW0gfHxcbiAgICAgICAgdGhpcy5zY2hlbWEuZXhjbHVzaXZlTWluaW11bSB8fFxuICAgICAgICB0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKVxuICAgICAgKTtcblxuICAgIC8vIHBvcHVsYXRlIGlzUmVxdWlyZWQgcHJvcGVydHkgZG93biB0byBwcm9wZXJ0aWVzXG4gICAgaWYgKHRoaXMuc2NoZW1hICYmIEFycmF5LmlzQXJyYXkodGhpcy5zY2hlbWEucmVxdWlyZWQpKSB7XG4gICAgICB0aGlzLnNjaGVtYS5yZXF1aXJlZC5mb3JFYWNoKHJlcXVpcmVkUHJvcGVydHkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbcmVxdWlyZWRQcm9wZXJ0eV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWEucHJvcGVydGllc1tyZXF1aXJlZFByb3BlcnR5XS5pc1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUmV0dXJucyB0aGUgdGVtcGxhdGUgd2l0aCBwb3B1bGF0ZWQgcHJvcGVydGllcy5cbiAgICogVGhpcyB0ZW1wbGF0ZSBkb2VzIG5vdCBoYXZlIHRoZSBjaGlsZHJlblxuICAqL1xuICB0ZW1wbGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuc2NoZW1hKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcbiAgICAgIDwhLS0gQW55IC0tPlxuICAgICAgJHtfaWYodGhpcy5pc0FueSlgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbnlcIj5cbiAgICAgICAgICAke19pZih0aGlzLnNob3dUb2dnbGUpYFxuICAgICAgICAgICAgPGEgY2xhc3M9XCJ0aXRsZVwiPjxzcGFuIGNsYXNzPVwidG9nZ2xlLWhhbmRsZVwiPjwvc3Bhbj4ke3RoaXMuc2NoZW1hLnRpdGxlIHx8ICcnfSA8L2E+XG4gICAgICAgICAgYH1cblxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHlwZSB0eXBlLWFueVwiPiZsdDthbnkmZ3Q7PC9zcGFuPlxuXG4gICAgICAgICAgJHtfaWYodGhpcy5zY2hlbWEuZGVzY3JpcHRpb24gJiYgIXRoaXMuaXNDb2xsYXBzZWQpYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubmVyIGRlc2NyaXB0aW9uXCI+JHt0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbn08L2Rpdj5cbiAgICAgICAgICBgfVxuXHRcdCBcblx0XHQgICR7X2lmKHRoaXMuc2NoZW1hLnJlcXVpcmVkICYmICF0aGlzLmlzQ29sbGFwc2VkKWBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lciByZXF1aXJlZFwiPlJlcXVpcmVkOiAke3RoaXMuc2NoZW1hLnJlcXVpcmVkfTwvZGl2PlxuICAgICAgICAgIGB9XG5cdFx0ICAke19pZih0aGlzLnNjaGVtYS5kZWZhdWx0ICYmICF0aGlzLmlzQ29sbGFwc2VkKWBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lciBkZWZhdWx0XCI+RGVmYXVsdDogJHt0aGlzLnNjaGVtYS5kZWZhdWx0fTwvZGl2PlxuICAgICAgICAgIGB9XG5cdFx0ICAgJHtfaWYodGhpcy5zY2hlbWEucGF0dGVybiAmJiAhdGhpcy5pc0NvbGxhcHNlZClgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5uZXIgcGF0dGVyblwiPlBhdHRlcm46ICR7dGhpcy5zY2hlbWEucGF0dGVybn08L2Rpdj5cbiAgICAgICAgICBgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIGB9XG5cbiAgICAgIDwhLS0gUHJpbWl0aXZlIC0tPlxuICAgICAgJHtfaWYodGhpcy5pc1ByaW1pdGl2ZSlgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmltaXRpdmVcIj5cbiAgICAgICAgICAke19pZih0aGlzLnNob3dUb2dnbGUpYFxuICAgICAgICAgICAgPGEgY2xhc3M9XCJ0aXRsZVwiPjxzcGFuIGNsYXNzPVwidG9nZ2xlLWhhbmRsZVwiPjwvc3Bhbj4ke3RoaXMuc2NoZW1hLnRpdGxlIHx8ICcnfSA8L2E+XG4gICAgICAgICAgYH1cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0eXBlXCI+JHt0aGlzLnNjaGVtYS50eXBlfTwvc3Bhbj5cblxuICAgICAgICAgXG5cbiAgICAgICAgICAke19pZighdGhpcy5pc0NvbGxhcHNlZCAmJiB0aGlzLnNjaGVtYS5mb3JtYXQpYFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtYXRcIj4oJHt0aGlzLnNjaGVtYS5mb3JtYXR9KTwvc3Bhbj5cbiAgICAgICAgICBgfVxuXG4gICAgICAgICAgJHtfaWYoIXRoaXMuaXNDb2xsYXBzZWQgJiYgdGhpcy5zY2hlbWEubWluaW11bSlgXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhbmdlIG1pbmltdW1cIj5taW5pbXVtOiR7dGhpcy5zY2hlbWEubWluaW11bX08L3NwYW4+XG4gICAgICAgICAgYH1cblxuICAgICAgICAgICR7X2lmKCF0aGlzLmlzQ29sbGFwc2VkICYmIHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pYFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYW5nZSBleGNsdXNpdmVNaW5pbXVtXCI+KGV4KW1pbmltdW06JHt0aGlzLnNjaGVtYS5leGNsdXNpdmVNaW5pbXVtfTwvc3Bhbj5cbiAgICAgICAgICBgfVxuXG4gICAgICAgICAgJHtfaWYoIXRoaXMuaXNDb2xsYXBzZWQgJiYgdGhpcy5zY2hlbWEubWF4aW11bSlgXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhbmdlIG1heGltdW1cIj5tYXhpbXVtOiR7dGhpcy5zY2hlbWEubWF4aW11bX08L3NwYW4+XG4gICAgICAgICAgYH1cblxuICAgICAgICAgICR7X2lmKCF0aGlzLmlzQ29sbGFwc2VkICYmIHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pYFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYW5nZSBleGNsdXNpdmVNYXhpbXVtXCI+KGV4KW1heGltdW06JHt0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtfTwvc3Bhbj5cbiAgICAgICAgICBgfVxuXG4gICAgICAgICAgJHtfaWYoIXRoaXMuaXNDb2xsYXBzZWQgJiYgdGhpcy5zY2hlbWEubWluTGVuZ3RoKWBcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFuZ2UgbWluTGVuZ3RoXCI+bWluTGVuZ3RoOiR7dGhpcy5zY2hlbWEubWluTGVuZ3RofTwvc3Bhbj5cbiAgICAgICAgICBgfVxuXG4gICAgICAgICAgJHtfaWYoIXRoaXMuaXNDb2xsYXBzZWQgJiYgdGhpcy5zY2hlbWEubWF4TGVuZ3RoKWBcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFuZ2UgbWF4TGVuZ3RoXCI+bWF4TGVuZ3RoOiR7dGhpcy5zY2hlbWEubWF4TGVuZ3RofTwvc3Bhbj5cbiAgICAgICAgICBgfVxuXG4gICAgICAgICAgJHtfaWYodGhpcy5zY2hlbWEuZGVzY3JpcHRpb24gJiYgIXRoaXMuaXNDb2xsYXBzZWQpYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubmVyIGRlc2NyaXB0aW9uXCI+JHt0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbn08L2Rpdj5cbiAgICAgICAgICBgfVxuXHRcdCAgXG5cdFx0IFxuXHRcdCAgXG5cdFx0ICAgJHtfaWYodGhpcy5zY2hlbWEucmVxdWlyZWQgJiYgIXRoaXMuaXNDb2xsYXBzZWQpYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubmVyIHJlcXVpcmVkXCI+UmVxdWlyZWQ8L2Rpdj5cbiAgICAgICAgICBgfVxuXHRcdCAgJHtfaWYodGhpcy5zY2hlbWEuZGVmYXVsdCAmJiAhdGhpcy5pc0NvbGxhcHNlZClgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5uZXIgZGVmYXVsdFwiPkRlZmF1bHQ6ICR7dGhpcy5zY2hlbWEuZGVmYXVsdH08L2Rpdj5cbiAgICAgICAgICBgfVxuXHRcdCAgICR7X2lmKHRoaXMuc2NoZW1hLnBhdHRlcm4gJiYgIXRoaXMuaXNDb2xsYXBzZWQpYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubmVyIHBhdHRlcm5cIj5QYXR0ZXJuOiAke3RoaXMuc2NoZW1hLnBhdHRlcm59PC9kaXY+XG4gICAgICAgICAgYH1cblxuICAgICAgICAgICR7X2lmKCF0aGlzLmlzQ29sbGFwc2VkICYmIHRoaXMuc2NoZW1hLmVudW0pYFxuICAgICAgICAgICAgJHt0aGlzLmVudW0odGhpcy5zY2hlbWEsIHRoaXMuaXNDb2xsYXBzZWQsIHRoaXMub3Blbil9XG4gICAgICAgICAgYH1cblxuICAgICAgICAgICR7X2lmKHRoaXMuc2NoZW1hLmFsbE9mICYmICF0aGlzLmlzQ29sbGFwc2VkKWAke3RoaXMueE9mKHRoaXMuc2NoZW1hLCAnYWxsT2YnKX1gfVxuICAgICAgICAgICR7X2lmKHRoaXMuc2NoZW1hLm9uZU9mICYmICF0aGlzLmlzQ29sbGFwc2VkKWAke3RoaXMueE9mKHRoaXMuc2NoZW1hLCAnb25lT2YnKX1gfVxuICAgICAgICAgICR7X2lmKHRoaXMuc2NoZW1hLmFueU9mICYmICF0aGlzLmlzQ29sbGFwc2VkKWAke3RoaXMueE9mKHRoaXMuc2NoZW1hLCAnYW55T2YnKX1gfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIGB9XG5cblxuICAgICAgPCEtLSBBcnJheSAtLT5cbiAgICAgICR7X2lmKHRoaXMuaXNBcnJheSlgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcnJheVwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwidGl0bGVcIj48c3BhbiBjbGFzcz1cInRvZ2dsZS1oYW5kbGVcIj48L3NwYW4+JHt0aGlzLnNjaGVtYS50aXRsZSB8fCAnJ308c3BhbiBjbGFzcz1cIm9wZW5pbmcgYnJhY2tldFwiPls8L3NwYW4+JHtfaWYodGhpcy5pc0NvbGxhcHNlZClgPHNwYW4gY2xhc3M9XCJjbG9zaW5nIGJyYWNrZXRcIj5dPC9zcGFuPmB9PC9hPlxuICAgICAgICAgICR7X2lmKCF0aGlzLmlzQ29sbGFwc2VkICYmICh0aGlzLnNjaGVtYS51bmlxdWVJdGVtcyB8fCB0aGlzLnNjaGVtYS5taW5JdGVtcyB8fCB0aGlzLnNjaGVtYS5tYXhJdGVtcykpYFxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPHNwYW4gdGl0bGU9XCJpdGVtcyByYW5nZVwiPigke3RoaXMuc2NoZW1hLm1pbkl0ZW1zIHx8IDB9Li4ke3RoaXMuc2NoZW1hLm1heEl0ZW1zIHx8ICfiiJ4nfSk8L3NwYW4+XG4gICAgICAgICAgICAke19pZighdGhpcy5pc0NvbGxhcHNlZCAmJiB0aGlzLnNjaGVtYS51bmlxdWVJdGVtcylgPHNwYW4gdGl0bGU9XCJ1bmlxdWVcIiBjbGFzcz1cInVuaXF1ZUl0ZW1zXCI+4pmmPC9zcGFuPmB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIGB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlubmVyXCI+XG4gICAgICAgICAgICAke19pZighdGhpcy5pc0NvbGxhcHNlZCAmJiB0aGlzLnNjaGVtYS5kZXNjcmlwdGlvbilgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7dGhpcy5zY2hlbWEuZGVzY3JpcHRpb259PC9kaXY+XG4gICAgICAgICAgICBgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgJHtfaWYoIXRoaXMuaXNDb2xsYXBzZWQgJiYgdGhpcy5zY2hlbWEuZW51bSlgXG4gICAgICAgICAgICAke3RoaXMuZW51bSh0aGlzLnNjaGVtYSwgdGhpcy5pc0NvbGxhcHNlZCwgdGhpcy5vcGVuKX1cbiAgICAgICAgICBgfVxuXG4gICAgICAgICAgJHtfaWYodGhpcy5zY2hlbWEuYWxsT2YgJiYgIXRoaXMuaXNDb2xsYXBzZWQpYCR7dGhpcy54T2YodGhpcy5zY2hlbWEsICdhbGxPZicpfWB9XG4gICAgICAgICAgJHtfaWYodGhpcy5zY2hlbWEub25lT2YgJiYgIXRoaXMuaXNDb2xsYXBzZWQpYCR7dGhpcy54T2YodGhpcy5zY2hlbWEsICdvbmVPZicpfWB9XG4gICAgICAgICAgJHtfaWYodGhpcy5zY2hlbWEuYW55T2YgJiYgIXRoaXMuaXNDb2xsYXBzZWQpYCR7dGhpcy54T2YodGhpcy5zY2hlbWEsICdhbnlPZicpfWB9XG5cbiAgICAgICAgICAke19pZighdGhpcy5pc0NvbGxhcHNlZClgXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zaW5nIGJyYWNrZXRcIj5dPC9zcGFuPlxuICAgICAgICAgIGB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgYH1cblxuICAgICAgPCEtLSBPYmplY3QgLS0+XG4gICAgICAke19pZighdGhpcy5pc1ByaW1pdGl2ZSAmJiAhdGhpcy5pc0FycmF5ICYmICF0aGlzLmlzQW55KWBcbiAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdFwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwidGl0bGVcIj48c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaGFuZGxlXCI+PC9zcGFuPiR7dGhpcy5zY2hlbWEudGl0bGUgfHwgJyd9IDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cIm9wZW5pbmcgYnJhY2VcIj57PC9zcGFuPiR7X2lmKHRoaXMuaXNDb2xsYXBzZWQpYFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNsb3NpbmcgYnJhY2VcIiBuZy1pZj1cImlzQ29sbGFwc2VkXCI+fTwvc3Bhbj5cbiAgICAgICAgICBgfTwvYT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxuICAgICAgICAgICAgJHtfaWYoIXRoaXMuaXNDb2xsYXBzZWQgJiYgdGhpcy5zY2hlbWEuZGVzY3JpcHRpb24pYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj4ke3RoaXMuc2NoZW1hLmRlc2NyaXB0aW9ufTwvZGl2PlxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIDwhLS0gY2hpbGRyZW4gZ28gaGVyZSAtLT5cblx0XHQgIFxuXHRcdCAgICR7X2lmKHRoaXMuc2NoZW1hLnJlcXVpcmVkICYmICF0aGlzLmlzQ29sbGFwc2VkKWBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXF1aXJlZFwiPkRlZmF1bHQgRmllbGRzOiAke3RoaXMuc2NoZW1hLnJlcXVpcmVkfTwvZGl2PlxuICAgICAgICAgIGB9XG5cdFx0ICAke19pZih0aGlzLnNjaGVtYS5kZWZhdWx0ICYmICF0aGlzLmlzQ29sbGFwc2VkKWBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWZhdWx0XCI+RGVmYXVsdDogJHt0aGlzLnNjaGVtYS5kZWZhdWx0fTwvZGl2PlxuICAgICAgICAgIGB9XG5cdFx0ICBcblx0XHRcdCR7X2lmKCF0aGlzLmlzQ29sbGFwc2VkICYmIHRoaXMuc2NoZW1hLnBhdHRlcm4pYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF0dGVyblwiPlBhdHRlcm46ICR7dGhpcy5zY2hlbWEucGF0dGVybn08L2Rpdj5cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAke19pZighdGhpcy5pc0NvbGxhcHNlZCAmJiB0aGlzLnNjaGVtYS5lbnVtKWBcbiAgICAgICAgICAgICR7dGhpcy5lbnVtKHRoaXMuc2NoZW1hLCB0aGlzLmlzQ29sbGFwc2VkLCB0aGlzLm9wZW4pfVxuICAgICAgICAgIGB9XG5cbiAgICAgICAgICAke19pZih0aGlzLnNjaGVtYS5hbGxPZiAmJiAhdGhpcy5pc0NvbGxhcHNlZClgJHt0aGlzLnhPZih0aGlzLnNjaGVtYSwgJ2FsbE9mJyl9YH1cbiAgICAgICAgICAke19pZih0aGlzLnNjaGVtYS5vbmVPZiAmJiAhdGhpcy5pc0NvbGxhcHNlZClgJHt0aGlzLnhPZih0aGlzLnNjaGVtYSwgJ29uZU9mJyl9YH1cbiAgICAgICAgICAke19pZih0aGlzLnNjaGVtYS5hbnlPZiAmJiAhdGhpcy5pc0NvbGxhcHNlZClgJHt0aGlzLnhPZih0aGlzLnNjaGVtYSwgJ2FueU9mJyl9YH1cblxuICAgICAgICAgICR7X2lmKCF0aGlzLmlzQ29sbGFwc2VkKWBcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNsb3NpbmcgYnJhY2VcIj59PC9zcGFuPlxuICAgICAgICAgIGB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgYH1cbmAucmVwbGFjZSgvXFxzKlxcbi9nLCAnXFxuJykucmVwbGFjZSgvKFxcPFxcIVxcLVxcLSkuKy9nLCAnJykudHJpbSgpO1xuICB9XG5cbiAgLypcbiAgICogVGVtcGxhdGUgZm9yIG9uZU9mLCBhbnlPZiBhbmQgYWxsT2ZcbiAgKi9cbiAgeE9mKHNjaGVtYSwgdHlwZSkge1xuICAgIHJldHVybiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5uZXIgJHt0eXBlfVwiPlxuICAgICAgICA8Yj4ke2NvbnZlcnRYT2YodHlwZSl9OjwvYj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICAvKlxuICAgKiBUZW1wbGF0ZSBmb3IgZW51bXNcbiAgKi9cbiAgZW51bShzY2hlbWEsIGlzQ29sbGFwc2VkLCBvcGVuKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICR7X2lmKCFpc0NvbGxhcHNlZCAmJiBzY2hlbWEuZW51bSlgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lciBlbnVtc1wiPlxuICAgICAgICAgIDxiPkVudW06PC9iPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGB9XG4gICAgYDtcbiAgfVxuXG4gIC8qXG4gICAqIFRvZ2dsZXMgdGhlICdjb2xsYXBzZWQnIHN0YXRlXG4gICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIC8qXG4gICAqIFJlbmRlcnMgdGhlIGVsZW1lbnQgYW5kIHJldHVybnMgaXRcbiAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdqc29uLXNjaGVtYS12aWV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2NvbGxhcHNlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudGhlbWUpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGBqc29uLXNjaGVtYS12aWV3LSR7dGhpcy5vcHRpb25zLnRoZW1lfWApO1xuICAgIH1cblxuICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnRlbXBsYXRlKCk7XG5cbiAgICBpZiAoIXRoaXMuc2NoZW1hKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0NvbGxhcHNlZCkge1xuICAgICAgdGhpcy5hcHBlbmRDaGlsZHJlbih0aGlzLmVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIGFkZCBldmVudCBsaXN0ZW5lciBmb3IgdG9nZ2xpbmdcbiAgICBpZiAodGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EudGl0bGUnKSkge1xuICAgICAgdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EudGl0bGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMudG9nZ2xlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50O1xuICB9XG5cbiAgLypcbiAgICogQXBwZW5kcyBjaGlsZHJlbiB0byBnaXZlbiBlbGVtZW50IGJhc2VkIG9uIGN1cnJlbnQgc2NoZW1hXG4gICovXG4gIGFwcGVuZENoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICBjb25zdCBpbm5lciA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmlubmVyJyk7XG5cbiAgICBpZiAoIWlubmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2NoZW1hLmVudW0pIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBKU09ORm9ybWF0dGVyKHRoaXMuc2NoZW1hLmVudW0sIHRoaXMub3BlbiAtIDEpO1xuICAgICAgY29uc3QgZm9ybWF0dGVyRWwgPSBmb3JtYXR0ZXIucmVuZGVyKCk7XG4gICAgICBmb3JtYXR0ZXJFbC5jbGFzc0xpc3QuYWRkKCdpbm5lcicpO1xuICAgICAgZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZW51bXMuaW5uZXInKS5hcHBlbmRDaGlsZChmb3JtYXR0ZXJFbCk7XG5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0FycmF5KSB7XG4gICAgICBjb25zdCB2aWV3ID0gbmV3IEpTT05TY2hlbWFWaWV3KHRoaXMuc2NoZW1hLml0ZW1zLCB0aGlzLm9wZW4gLSAxKVxuICAgICAgaW5uZXIuYXBwZW5kQ2hpbGQodmlldy5yZW5kZXIoKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvcGVydGllcykuZm9yRWFjaChwcm9wZXJ0eU5hbWUgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOztcbiAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cInByb3BlcnR5XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYW1lXCI+JHtwcm9wZXJ0eU5hbWV9Ojwvc3Bhbj5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBKU09OU2NoZW1hVmlldyhwcm9wZXJ0eSwgdGhpcy5vcGVuIC0gMSk7XG4gICAgICAgIHRlbXBEaXYucXVlcnlTZWxlY3RvcignLnByb3BlcnR5JykuYXBwZW5kQ2hpbGQodmlldy5yZW5kZXIoKSk7XG5cbiAgICAgICAgaW5uZXIuYXBwZW5kQ2hpbGQodGVtcERpdi5xdWVyeVNlbGVjdG9yKCcucHJvcGVydHknKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY2hlbWEuYWxsT2YpIHsgYXBwZW5kWE9mLmNhbGwodGhpcywgJ2FsbE9mJyk7IH1cbiAgICBpZiAodGhpcy5zY2hlbWEub25lT2YpIHsgYXBwZW5kWE9mLmNhbGwodGhpcywgJ29uZU9mJyk7IH1cbiAgICBpZiAodGhpcy5zY2hlbWEuYW55T2YpIHsgYXBwZW5kWE9mLmNhbGwodGhpcywgJ2FueU9mJyk7IH1cblxuICAgIGZ1bmN0aW9uIGFwcGVuZFhPZih0eXBlKSB7XG4gICAgICBjb25zdCBpbm5lckFsbE9mID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKGAuaW5uZXIuJHt0eXBlfWApO1xuXG4gICAgICB0aGlzLnNjaGVtYVt0eXBlXS5mb3JFYWNoKHNjaGVtYSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyLmNsYXNzTGlzdC5hZGQoJ2lubmVyJyk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgSlNPTlNjaGVtYVZpZXcoc2NoZW1hLCB0aGlzLm9wZW4gLSAxKTtcbiAgICAgICAgaW5uZXIuYXBwZW5kQ2hpbGQodmlldy5yZW5kZXIoKSk7XG4gICAgICAgIGlubmVyQWxsT2YuYXBwZW5kQ2hpbGQoaW5uZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0= - -</script> - - <script> -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.$RefParser = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ -/** ! - * JSON Schema $Ref Parser v3.1.2 - * - * @link https://github.com/BigstickCarpet/json-schema-ref-parser - * @license MIT - */ -"use strict";function bundle(e,r){debug("Bundling $ref pointers in %s",e.$refs._root$Ref.path);var t=[];crawl(e,"schema",e.$refs._root$Ref.path+"#","#",t,e.$refs,r),remap(t)}function crawl(e,r,t,f,n,i,a){var o=null===r?e:e[r];if(o&&"object"==typeof o)if($Ref.is$Ref(o))inventory$Ref(e,r,t,f,n,i,a);else{var l=Object.keys(o),u=l.indexOf("definitions");u>0&&l.splice(0,0,l.splice(u,1)[0]),l.forEach(function(e){var r=Pointer.join(t,e),l=Pointer.join(f,e),u=o[e];$Ref.is$Ref(u)?inventory$Ref(o,e,t,l,n,i,a):crawl(o,e,r,l,n,i,a)})}}function inventory$Ref(e,r,t,f,n,i,a){if(!n.some(function(t){return t.parent===e&&t.key===r})){var o=null===r?e:e[r],l=url.resolve(t,o.$ref),u=i._resolve(l,a),h=Pointer.parse(f).length,s=url.stripHash(u.path),$=url.getHash(u.path),c=s!==i._root$Ref.path,p=$Ref.isExtended$Ref(o);n.push({$ref:o,parent:e,key:r,pathFromRoot:f,depth:h,file:s,hash:$,value:u.value,circular:u.circular,extended:p,external:c}),crawl(u.value,null,u.path,f,n,i,a)}}function remap(e){e.sort(function(e,r){return e.file!==r.file?e.file<r.file?-1:1:e.hash!==r.hash?e.hash<r.hash?-1:1:e.circular!==r.circular?e.circular?-1:1:e.extended!==r.extended?e.extended?1:-1:e.depth!==r.depth?e.depth-r.depth:r.pathFromRoot.lastIndexOf("/definitions")-e.pathFromRoot.lastIndexOf("/definitions")});var r,t,f;e.forEach(function(e){debug('Re-mapping $ref pointer "%s" at %s',e.$ref.$ref,e.pathFromRoot),e.external?e.file===r&&e.hash===t?e.$ref.$ref=f:e.file===r&&0===e.hash.indexOf(t+"/")?e.$ref.$ref=Pointer.join(f,Pointer.parse(e.hash)):(r=e.file,t=e.hash,f=e.pathFromRoot,e.$ref=e.parent[e.key]=$Ref.dereference(e.$ref,e.value),e.circular&&(e.$ref.$ref=e.pathFromRoot)):e.$ref.$ref=e.hash,debug(" new value: %s",e.$ref&&e.$ref.$ref?e.$ref.$ref:"[object Object]")})}var $Ref=require("./ref"),Pointer=require("./pointer"),debug=require("./util/debug"),url=require("./util/url");module.exports=bundle; - -},{"./pointer":10,"./ref":11,"./util/debug":16,"./util/url":19}],2:[function(require,module,exports){ -"use strict";function dereference(e,r){debug("Dereferencing $ref pointers in %s",e.$refs._root$Ref.path);var c=crawl(e.schema,e.$refs._root$Ref.path,"#",[],e.$refs,r);e.$refs.circular=c.circular,e.schema=c.value}function crawl(e,r,c,u,f,i){var n,a={value:e,circular:!1};return e&&"object"==typeof e&&(u.push(e),$Ref.isAllowed$Ref(e,i)?(n=dereference$Ref(e,r,c,u,f,i),a.circular=n.circular,a.value=n.value):Object.keys(e).forEach(function(l){var o=Pointer.join(r,l),t=Pointer.join(c,l),d=e[l],$=!1;$Ref.isAllowed$Ref(d,i)?(n=dereference$Ref(d,o,t,u,f,i),$=n.circular,e[l]=n.value):-1===u.indexOf(d)?(n=crawl(d,o,t,u,f,i),$=n.circular,e[l]=n.value):$=foundCircularReference(o,f,i),a.circular=a.circular||$}),u.pop()),a}function dereference$Ref(e,r,c,u,f,i){debug('Dereferencing $ref pointer "%s" at %s',e.$ref,r);var n=url.resolve(r,e.$ref),a=f._resolve(n,i),l=a.circular,o=l||-1!==u.indexOf(a.value);o&&foundCircularReference(r,f,i);var t=$Ref.dereference(e,a.value);if(!o){var d=crawl(t,a.path,c,u,f,i);o=d.circular,t=d.value}return o&&!l&&"ignore"===i.dereference.circular&&(t=e),l&&(t.$ref=c),{circular:o,value:t}}function foundCircularReference(e,r,c){if(r.circular=!0,!c.dereference.circular)throw ono.reference("Circular $ref pointer found at %s",e);return!0}var $Ref=require("./ref"),Pointer=require("./pointer"),ono=require("ono"),debug=require("./util/debug"),url=require("./util/url");module.exports=dereference; - -},{"./pointer":10,"./ref":11,"./util/debug":16,"./util/url":19,"ono":69}],3:[function(require,module,exports){ -(function (Buffer){ -"use strict";function $RefParser(){this.schema=null,this.$refs=new $Refs}function normalizeArgs(e){var r,t,a,s;return e=Array.prototype.slice.call(e),"function"==typeof e[e.length-1]&&(s=e.pop()),"string"==typeof e[0]?(r=e[0],"object"==typeof e[2]?(t=e[1],a=e[2]):(t=void 0,a=e[1])):(r="",t=e[0],a=e[1]),a instanceof Options||(a=new Options(a)),{path:r,schema:t,options:a,callback:s}}var Promise=require("./util/promise"),Options=require("./options"),$Refs=require("./refs"),parse=require("./parse"),resolveExternal=require("./resolve-external"),bundle=require("./bundle"),dereference=require("./dereference"),url=require("./util/url"),maybe=require("call-me-maybe"),ono=require("ono");module.exports=$RefParser,module.exports.YAML=require("./util/yaml"),$RefParser.parse=function(e,r,t){var a=this,s=new a;return s.parse.apply(s,arguments)},$RefParser.prototype.parse=function(e,r,t){var a,s=normalizeArgs(arguments);if(!s.path&&!s.schema){var n=ono("Expected a file path, URL, or object. Got %s",s.path||s.schema);return maybe(s.callback,Promise.reject(n))}this.schema=null,this.$refs=new $Refs,url.isFileSystemPath(s.path)&&(s.path=url.fromFileSystemPath(s.path)),s.path=url.resolve(url.cwd(),s.path),s.schema&&"object"==typeof s.schema?(this.$refs._add(s.path,s.schema),a=Promise.resolve(s.schema)):a=parse(s.path,this.$refs,s.options);var o=this;return a.then(function(e){if(!e||"object"!=typeof e||Buffer.isBuffer(e))throw ono.syntax('"%s" is not a valid JSON Schema',o.$refs._root$Ref.path||e);return o.schema=e,maybe(s.callback,Promise.resolve(o.schema))})["catch"](function(e){return maybe(s.callback,Promise.reject(e))})},$RefParser.resolve=function(e,r,t){var a=this,s=new a;return s.resolve.apply(s,arguments)},$RefParser.prototype.resolve=function(e,r,t){var a=this,s=normalizeArgs(arguments);return this.parse(s.path,s.schema,s.options).then(function(){return resolveExternal(a,s.options)}).then(function(){return maybe(s.callback,Promise.resolve(a.$refs))})["catch"](function(e){return maybe(s.callback,Promise.reject(e))})},$RefParser.bundle=function(e,r,t){var a=this,s=new a;return s.bundle.apply(s,arguments)},$RefParser.prototype.bundle=function(e,r,t){var a=this,s=normalizeArgs(arguments);return this.resolve(s.path,s.schema,s.options).then(function(){return bundle(a,s.options),maybe(s.callback,Promise.resolve(a.schema))})["catch"](function(e){return maybe(s.callback,Promise.reject(e))})},$RefParser.dereference=function(e,r,t){var a=this,s=new a;return s.dereference.apply(s,arguments)},$RefParser.prototype.dereference=function(e,r,t){var a=this,s=normalizeArgs(arguments);return this.resolve(s.path,s.schema,s.options).then(function(){return dereference(a,s.options),maybe(s.callback,Promise.resolve(a.schema))})["catch"](function(e){return maybe(s.callback,Promise.reject(e))})}; - -}).call(this,{"isBuffer":require("../node_modules/is-buffer/index.js")}) - -},{"../node_modules/is-buffer/index.js":36,"./bundle":1,"./dereference":2,"./options":4,"./parse":5,"./refs":12,"./resolve-external":13,"./util/promise":18,"./util/url":19,"./util/yaml":20,"call-me-maybe":27,"ono":69}],4:[function(require,module,exports){ -"use strict";function $RefParserOptions(e){merge(this,$RefParserOptions.defaults),merge(this,e)}function merge(e,r){if(isMergeable(r))for(var s=Object.keys(r),a=0;a<s.length;a++){var t=s[a],i=r[t],o=e[t];isMergeable(i)?e[t]=merge(o||{},i):void 0!==i&&(e[t]=i)}return e}function isMergeable(e){return e&&"object"==typeof e&&!Array.isArray(e)&&!(e instanceof RegExp)&&!(e instanceof Date)}var jsonParser=require("./parsers/json"),yamlParser=require("./parsers/yaml"),textParser=require("./parsers/text"),binaryParser=require("./parsers/binary"),fileResolver=require("./resolvers/file"),httpResolver=require("./resolvers/http"),zschemaValidator=require("./validators/z-schema");module.exports=$RefParserOptions,$RefParserOptions.defaults={parse:{json:jsonParser,yaml:yamlParser,text:textParser,binary:binaryParser},resolve:{file:fileResolver,http:httpResolver,external:!0},dereference:{circular:!0},validate:{zschema:zschemaValidator}}; - -},{"./parsers/binary":6,"./parsers/json":7,"./parsers/text":8,"./parsers/yaml":9,"./resolvers/file":14,"./resolvers/http":15,"./validators/z-schema":21}],5:[function(require,module,exports){ -(function (Buffer){ -"use strict";function parse(r,e,n){try{r=url.stripHash(r);var t=e._add(r),u={url:r,extension:url.getExtension(r)};return readFile(u,n).then(function(r){return t.pathType=r.plugin.name,u.data=r.result,parseFile(u,n)}).then(function(r){return t.value=r.result,r.result})}catch(i){return Promise.reject(i)}}function readFile(r,e){return new Promise(function(n,t){function u(e){t(!e||e instanceof SyntaxError?ono.syntax('Unable to resolve $ref pointer "%s"',r.url):e)}debug("Reading %s",r.url);var i=plugins.all(e.resolve);i=plugins.filter(i,"canRead",r),plugins.sort(i),plugins.run(i,"read",r).then(n,u)})}function parseFile(r,e){return new Promise(function(n,t){function u(e){!e.plugin.allowEmpty&&isEmpty(e.result)?t(ono.syntax('Error parsing "%s" as %s. \nParsed value is empty',r.url,e.plugin.name)):n(e)}function i(e){e?(e=e instanceof Error?e:new Error(e),t(ono.syntax(e,"Error parsing %s",r.url))):t(ono.syntax("Unable to parse %s",r.url))}debug("Parsing %s",r.url);var s=plugins.all(e.parse),l=plugins.filter(s,"canParse",r),o=l.length>0?l:s;plugins.sort(o),plugins.run(o,"parse",r).then(u,i)})}function isEmpty(r){return void 0===r||"object"==typeof r&&0===Object.keys(r).length||"string"==typeof r&&0===r.trim().length||Buffer.isBuffer(r)&&0===r.length}var ono=require("ono"),debug=require("./util/debug"),url=require("./util/url"),plugins=require("./util/plugins"),Promise=require("./util/promise");module.exports=parse; - -}).call(this,{"isBuffer":require("../node_modules/is-buffer/index.js")}) - -},{"../node_modules/is-buffer/index.js":36,"./util/debug":16,"./util/plugins":17,"./util/promise":18,"./util/url":19,"ono":69}],6:[function(require,module,exports){ -(function (Buffer){ -"use strict";var BINARY_REGEXP=/\.(jpeg|jpg|gif|png|bmp|ico)$/i;module.exports={order:400,allowEmpty:!0,canParse:function(r){return Buffer.isBuffer(r.data)&&BINARY_REGEXP.test(r.url)},parse:function(r){return Buffer.isBuffer(r.data)?r.data:new Buffer(r.data)}}; - -}).call(this,require("buffer").Buffer) - -},{"buffer":25}],7:[function(require,module,exports){ -(function (Buffer){ -"use strict";var Promise=require("../util/promise");module.exports={order:100,allowEmpty:!0,canParse:".json",parse:function(r){return new Promise(function(e,t){var i=r.data;Buffer.isBuffer(i)&&(i=i.toString()),e("string"==typeof i?0===i.trim().length?void 0:JSON.parse(i):i)})}}; - -}).call(this,{"isBuffer":require("../../node_modules/is-buffer/index.js")}) - -},{"../../node_modules/is-buffer/index.js":36,"../util/promise":18}],8:[function(require,module,exports){ -(function (Buffer){ -"use strict";var TEXT_REGEXP=/\.(txt|htm|html|md|xml|js|min|map|css|scss|less|svg)$/i;module.exports={order:300,allowEmpty:!0,encoding:"utf8",canParse:function(t){return("string"==typeof t.data||Buffer.isBuffer(t.data))&&TEXT_REGEXP.test(t.url)},parse:function(t){if("string"==typeof t.data)return t.data;if(Buffer.isBuffer(t.data))return t.data.toString(this.encoding);throw new Error("data is not text")}}; - -}).call(this,{"isBuffer":require("../../node_modules/is-buffer/index.js")}) - -},{"../../node_modules/is-buffer/index.js":36}],9:[function(require,module,exports){ -(function (Buffer){ -"use strict";var Promise=require("../util/promise"),YAML=require("../util/yaml");module.exports={order:200,allowEmpty:!0,canParse:[".yaml",".yml",".json"],parse:function(r){return new Promise(function(e,t){var i=r.data;Buffer.isBuffer(i)&&(i=i.toString()),e("string"==typeof i?YAML.parse(i):i)})}}; - -}).call(this,{"isBuffer":require("../../node_modules/is-buffer/index.js")}) - -},{"../../node_modules/is-buffer/index.js":36,"../util/promise":18,"../util/yaml":20}],10:[function(require,module,exports){ -"use strict";function Pointer(e,r){this.$ref=e,this.path=r,this.value=void 0,this.circular=!1}function resolveIf$Ref(e,r){if($Ref.isAllowed$Ref(e.value,r)){var t=url.resolve(e.path,e.value.$ref);if(t!==e.path){var s=e.$ref.$refs._resolve(t,r);return $Ref.isExtended$Ref(e.value)?e.value=$Ref.dereference(e.value,s.value):(e.$ref=s.$ref,e.path=s.path,e.value=s.value),!0}e.circular=!0}}function setValue(e,r,t){if(!e.value||"object"!=typeof e.value)throw ono.syntax('Error assigning $ref pointer "%s". \nCannot set "%s" of a non-object.',e.path,r);return"-"===r&&Array.isArray(e.value)?e.value.push(t):e.value[r]=t,t}module.exports=Pointer;var $Ref=require("./ref"),url=require("./util/url"),ono=require("ono"),slashes=/\//g,tildes=/~/g,escapedSlash=/~1/g,escapedTilde=/~0/g;Pointer.prototype.resolve=function(e,r){var t=Pointer.parse(this.path);this.value=e;for(var s=0;s<t.length;s++){resolveIf$Ref(this,r)&&(this.path=Pointer.join(this.path,t.slice(s)));var i=t[s];if(void 0===this.value[i])throw ono.syntax('Error resolving $ref pointer "%s". \nToken "%s" does not exist.',this.path,i);this.value=this.value[i]}return resolveIf$Ref(this,r),this},Pointer.prototype.set=function(e,r,t){var s,i=Pointer.parse(this.path);if(0===i.length)return this.value=r,r;this.value=e;for(var a=0;a<i.length-1;a++)resolveIf$Ref(this,t),s=i[a],this.value&&void 0!==this.value[s]?this.value=this.value[s]:this.value=setValue(this,s,{});return resolveIf$Ref(this,t),s=i[i.length-1],setValue(this,s,r),e},Pointer.parse=function(e){var r=url.getHash(e).substr(1);if(!r)return[];r=r.split("/");for(var t=0;t<r.length;t++)r[t]=decodeURI(r[t].replace(escapedSlash,"/").replace(escapedTilde,"~"));if(""!==r[0])throw ono.syntax('Invalid $ref pointer "%s". Pointers must begin with "#/"',r);return r.slice(1)},Pointer.join=function(e,r){-1===e.indexOf("#")&&(e+="#"),r=Array.isArray(r)?r:[r];for(var t=0;t<r.length;t++){var s=r[t];e+="/"+encodeURI(s.replace(tildes,"~0").replace(slashes,"~1"))}return e}; - -},{"./ref":11,"./util/url":19,"ono":69}],11:[function(require,module,exports){ -"use strict";function $Ref(){this.path=void 0,this.value=void 0,this.$refs=void 0,this.pathType=void 0}module.exports=$Ref;var Pointer=require("./pointer");$Ref.prototype.exists=function(e,t){try{return this.resolve(e,t),!0}catch(r){return!1}},$Ref.prototype.get=function(e,t){return this.resolve(e,t).value},$Ref.prototype.resolve=function(e,t){var r=new Pointer(this,e);return r.resolve(this.value,t)},$Ref.prototype.set=function(e,t){var r=new Pointer(this,e);this.value=r.set(this.value,t)},$Ref.is$Ref=function(e){return e&&"object"==typeof e&&"string"==typeof e.$ref&&e.$ref.length>0},$Ref.isExternal$Ref=function(e){return $Ref.is$Ref(e)&&"#"!==e.$ref[0]},$Ref.isAllowed$Ref=function(e,t){return!$Ref.is$Ref(e)||"#"!==e.$ref[0]&&t&&!t.resolve.external?void 0:!0},$Ref.isExtended$Ref=function(e){return $Ref.is$Ref(e)&&Object.keys(e).length>1},$Ref.dereference=function(e,t){if(t&&"object"==typeof t&&$Ref.isExtended$Ref(e)){var r={};return Object.keys(e).forEach(function(t){"$ref"!==t&&(r[t]=e[t])}),Object.keys(t).forEach(function(e){e in r||(r[e]=t[e])}),r}return t}; - -},{"./pointer":10}],12:[function(require,module,exports){ -"use strict";function $Refs(){this.circular=!1,this._$refs={},this._root$Ref=null}function getPaths(e,r){var t=Object.keys(e);return r=Array.isArray(r[0])?r[0]:Array.prototype.slice.call(r),r.length>0&&r[0]&&(t=t.filter(function(t){return-1!==r.indexOf(e[t].pathType)})),t.map(function(r){return{encoded:r,decoded:"file"===e[r].pathType?url.toFileSystemPath(r,!0):r}})}var ono=require("ono"),$Ref=require("./ref"),url=require("./util/url");module.exports=$Refs,$Refs.prototype.paths=function(e){var r=getPaths(this._$refs,arguments);return r.map(function(e){return e.decoded})},$Refs.prototype.values=function(e){var r=this._$refs,t=getPaths(r,arguments);return t.reduce(function(e,t){return e[t.decoded]=r[t.encoded].value,e},{})},$Refs.prototype.toJSON=$Refs.prototype.values,$Refs.prototype.exists=function(e,r){try{return this._resolve(e,r),!0}catch(t){return!1}},$Refs.prototype.get=function(e,r){return this._resolve(e,r).value},$Refs.prototype.set=function(e,r){e=url.resolve(this._root$Ref.path,e);var t=url.stripHash(e),o=this._$refs[t];if(!o)throw ono('Error resolving $ref pointer "%s". \n"%s" not found.',e,t);o.set(e,r)},$Refs.prototype._add=function(e,r){var t=url.stripHash(e),o=new $Ref;return o.path=t,o.value=r,o.$refs=this,this._$refs[t]=o,this._root$Ref=this._root$Ref||o,o},$Refs.prototype._resolve=function(e,r){e=url.resolve(this._root$Ref.path,e);var t=url.stripHash(e),o=this._$refs[t];if(!o)throw ono('Error resolving $ref pointer "%s". \n"%s" not found.',e,t);return o.resolve(e,r)},$Refs.prototype._get$Ref=function(e){e=url.resolve(this._root$Ref.path,e);var r=url.stripHash(e);return this._$refs[r]}; - -},{"./ref":11,"./util/url":19,"ono":69}],13:[function(require,module,exports){ -"use strict";function resolveExternal(e,r){if(!r.resolve.external)return Promise.resolve();try{debug("Resolving $ref pointers in %s",e.$refs._root$Ref.path);var s=crawl(e.schema,e.$refs._root$Ref.path+"#",e.$refs,r);return Promise.all(s)}catch(t){return Promise.reject(t)}}function crawl(e,r,s,t){var o=[];return e&&"object"==typeof e&&($Ref.isExternal$Ref(e)?o.push(resolve$Ref(e,r,s,t)):Object.keys(e).forEach(function(i){var n=Pointer.join(r,i),l=e[i];$Ref.isExternal$Ref(l)?o.push(resolve$Ref(l,n,s,t)):o=o.concat(crawl(l,n,s,t))})),o}function resolve$Ref(e,r,s,t){debug('Resolving $ref pointer "%s" at %s',e.$ref,r);var o=url.resolve(r,e.$ref),i=url.stripHash(o);return e=s._$refs[i],e?Promise.resolve(e.value):parse(o,s,t).then(function(e){debug("Resolving $ref pointers in %s",i);var r=crawl(e,i+"#",s,t);return Promise.all(r)})}var Promise=require("./util/promise"),$Ref=require("./ref"),Pointer=require("./pointer"),parse=require("./parse"),debug=require("./util/debug"),url=require("./util/url");module.exports=resolveExternal; - -},{"./parse":5,"./pointer":10,"./ref":11,"./util/debug":16,"./util/promise":18,"./util/url":19}],14:[function(require,module,exports){ -"use strict";var fs=require("fs"),ono=require("ono"),Promise=require("../util/promise"),url=require("../util/url"),debug=require("../util/debug");module.exports={order:100,canRead:function(r){return url.isFileSystemPath(r.url)},read:function(r){return new Promise(function(e,i){var u;try{u=url.toFileSystemPath(r.url)}catch(o){i(ono.uri(o,"Malformed URI: %s",r.url))}debug("Opening file: %s",u);try{fs.readFile(u,function(r,o){r?i(ono(r,'Error opening file "%s"',u)):e(o)})}catch(o){i(ono(o,'Error opening file "%s"',u))}})}}; - -},{"../util/debug":16,"../util/promise":18,"../util/url":19,"fs":24,"ono":69}],15:[function(require,module,exports){ -(function (process,Buffer){ -"use strict";function download(e,t,o){return new Promise(function(r,n){e=url.parse(e),o=o||[],o.push(e.href),get(e,t).then(function(s){if(s.statusCode>=400)throw ono({status:s.statusCode},"HTTP ERROR %d",s.statusCode);if(s.statusCode>=300)if(o.length>t.redirects)n(ono({status:s.statusCode},"Error downloading %s. \nToo many redirects: \n %s",o[0],o.join(" \n ")));else{if(!s.headers.location)throw ono({status:s.statusCode},"HTTP %d redirect with no location header",s.statusCode);debug("HTTP %d redirect %s -> %s",s.statusCode,e.href,s.headers.location);var u=url.resolve(e,s.headers.location);download(u,t,o).then(r,n)}else r(s.body||new Buffer(0))})["catch"](function(t){n(ono(t,"Error downloading",e.href))})})}function get(e,t){return new Promise(function(o,r){debug("GET",e.href);var n="https:"===e.protocol?https:http,s=n.get({hostname:e.hostname,port:e.port,path:e.path,auth:e.auth,headers:t.headers||{},withCredentials:t.withCredentials});"function"==typeof s.setTimeout&&s.setTimeout(t.timeout),s.on("timeout",function(){s.abort()}),s.on("error",r),s.once("response",function(e){e.body=new Buffer(0),e.on("data",function(t){e.body=Buffer.concat([e.body,new Buffer(t)])}),e.on("error",r),e.on("end",function(){o(e)})})})}var http=require("http"),https=require("https"),ono=require("ono"),url=require("../util/url"),debug=require("../util/debug"),Promise=require("../util/promise");module.exports={order:200,headers:null,timeout:5e3,redirects:5,withCredentials:!1,canRead:function(e){return url.isHttp(e.url)},read:function(e){var t=url.parse(e.url);return process.browser&&!t.protocol&&(t.protocol=url.parse(location.href).protocol),download(t,this)}}; - -}).call(this,require('_process'),require("buffer").Buffer) - -},{"../util/debug":16,"../util/promise":18,"../util/url":19,"_process":71,"buffer":25,"http":87,"https":33,"ono":69}],16:[function(require,module,exports){ -"use strict";var debug=require("debug");module.exports=debug("json-schema-ref-parser"); - -},{"debug":29}],17:[function(require,module,exports){ -"use strict";function getResult(e,r,t,n){var u=e[r];if("function"==typeof u)return u.apply(e,[t,n]);if(!n){if(u instanceof RegExp)return u.test(t.url);if("string"==typeof u)return u===t.extension;if(Array.isArray(u))return-1!==u.indexOf(t.extension)}return u}var Promise=require("./promise"),debug=require("./debug");exports.all=function(e){return Object.keys(e).filter(function(r){return"object"==typeof e[r]}).map(function(r){return e[r].name=r,e[r]})},exports.filter=function(e,r,t){return e.filter(function(e){return!!getResult(e,r,t)})},exports.sort=function(e){return e.forEach(function(e){e.order=e.order||Number.MAX_SAFE_INTEGER}),e.sort(function(e,r){return e.order-r.order})},exports.run=function(e,r,t){var n,u,i=0;return new Promise(function(o,f){function s(){if(n=e[i++],!n)return f(u);try{debug(" %s",n.name);var o=getResult(n,r,t,c);o&&"function"==typeof o.then?o.then(a,p):void 0!==o&&a(o)}catch(s){p(s)}}function c(e,r){e?p(e):a(r)}function a(e){debug(" success"),o({plugin:n,result:e})}function p(e){debug(" %s",e.message||e),u=e,s()}s()})}; - -},{"./debug":16,"./promise":18}],18:[function(require,module,exports){ -"use strict";module.exports="function"==typeof Promise?Promise:require("es6-promise").Promise; - -},{"es6-promise":31}],19:[function(require,module,exports){ -(function (process){ -"use strict";var isWindows=/^win/.test(process.platform),forwardSlashPattern=/\//g,protocolPattern=/^([a-z0-9.+-]+):\/\//i,url=module.exports,urlEncodePatterns=[/\?/g,"%3F",/\#/g,"%23",isWindows?/\\/g:/\//,"/"],urlDecodePatterns=[/\%23/g,"#",/\%24/g,"$",/\%26/g,"&",/\%2C/g,",",/\%40/g,"@"];exports.parse=require("url").parse,exports.resolve=require("url").resolve,exports.cwd=function(){return process.browser?location.href:process.cwd()+"/"},exports.getProtocol=function(r){var e=protocolPattern.exec(r);return e?e[1].toLowerCase():void 0},exports.getExtension=function(r){var e=r.lastIndexOf(".");return e>=0?r.substr(e).toLowerCase():""},exports.getHash=function(r){var e=r.indexOf("#");return e>=0?r.substr(e):"#"},exports.stripHash=function(r){var e=r.indexOf("#");return e>=0&&(r=r.substr(0,e)),r},exports.isHttp=function(r){var e=url.getProtocol(r);return"http"===e||"https"===e?!0:void 0===e?process.browser:!1},exports.isFileSystemPath=function(r){if(process.browser)return!1;var e=url.getProtocol(r);return void 0===e||"file"===e},exports.fromFileSystemPath=function(r){for(var e=0;e<urlEncodePatterns.length;e+=2)r=r.replace(urlEncodePatterns[e],urlEncodePatterns[e+1]);return encodeURI(r)},exports.toFileSystemPath=function(r,e){r=decodeURI(r);for(var t=0;t<urlDecodePatterns.length;t+=2)r=r.replace(urlDecodePatterns[t],urlDecodePatterns[t+1]);var o="file://"===r.substr(0,7).toLowerCase();return o&&(r="/"===r[7]?r.substr(8):r.substr(7),isWindows&&"/"===r[1]&&(r=r[0]+":"+r.substr(1)),e?r="file:///"+r:(o=!1,r=isWindows?r:"/"+r)),isWindows&&!o&&(r=r.replace(forwardSlashPattern,"\\")),r}; - -}).call(this,require('_process')) - -},{"_process":71,"url":93}],20:[function(require,module,exports){ -"use strict";var yaml=require("js-yaml"),ono=require("ono");module.exports={parse:function(r,e){try{return yaml.safeLoad(r)}catch(o){throw o instanceof Error?o:ono(o,o.message)}},stringify:function(r,e,o){try{var t=("string"==typeof o?o.length:o)||2;return yaml.safeDump(r,{indent:t})}catch(n){throw n instanceof Error?n:ono(n,n.message)}}}; - -},{"js-yaml":38,"ono":69}],21:[function(require,module,exports){ -"use strict";module.exports={order:100,canValidate:function(e){return!!e.resolved},validate:function(e){}}; - -},{}],22:[function(require,module,exports){ -var lookup="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(t){"use strict";function r(t){var r=t.charCodeAt(0);return r===h||r===u?62:r===c||r===f?63:o>r?-1:o+10>r?r-o+26+26:i+26>r?r-i:A+26>r?r-A+26:void 0}function e(t){function e(t){i[f++]=t}var n,h,c,o,A,i;if(t.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;A="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,i=new a(3*t.length/4-A),c=A>0?t.length-4:t.length;var f=0;for(n=0,h=0;c>n;n+=4,h+=3)o=r(t.charAt(n))<<18|r(t.charAt(n+1))<<12|r(t.charAt(n+2))<<6|r(t.charAt(n+3)),e((16711680&o)>>16),e((65280&o)>>8),e(255&o);return 2===A?(o=r(t.charAt(n))<<2|r(t.charAt(n+1))>>4,e(255&o)):1===A&&(o=r(t.charAt(n))<<10|r(t.charAt(n+1))<<4|r(t.charAt(n+2))>>2,e(o>>8&255),e(255&o)),i}function n(t){function r(t){return lookup.charAt(t)}function e(t){return r(t>>18&63)+r(t>>12&63)+r(t>>6&63)+r(63&t)}var n,a,h,c=t.length%3,o="";for(n=0,h=t.length-c;h>n;n+=3)a=(t[n]<<16)+(t[n+1]<<8)+t[n+2],o+=e(a);switch(c){case 1:a=t[t.length-1],o+=r(a>>2),o+=r(a<<4&63),o+="==";break;case 2:a=(t[t.length-2]<<8)+t[t.length-1],o+=r(a>>10),o+=r(a>>4&63),o+=r(a<<2&63),o+="="}return o}var a="undefined"!=typeof Uint8Array?Uint8Array:Array,h="+".charCodeAt(0),c="/".charCodeAt(0),o="0".charCodeAt(0),A="a".charCodeAt(0),i="A".charCodeAt(0),u="-".charCodeAt(0),f="_".charCodeAt(0);t.toByteArray=e,t.fromByteArray=n}("undefined"==typeof exports?this.base64js={}:exports); - -},{}],23:[function(require,module,exports){ - -},{}],24:[function(require,module,exports){ - -},{}],25:[function(require,module,exports){ -(function (global){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org> - * @license MIT - */ -"use strict";function typedArraySupport(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(r){return!1}}function kMaxLength(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function Buffer(t){return this instanceof Buffer?(Buffer.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?fromNumber(this,t):"string"==typeof t?fromString(this,t,arguments.length>1?arguments[1]:"utf8"):fromObject(this,t)):arguments.length>1?new Buffer(t,arguments[1]):new Buffer(t)}function fromNumber(t,e){if(t=allocate(t,0>e?0:0|checked(e)),!Buffer.TYPED_ARRAY_SUPPORT)for(var r=0;e>r;r++)t[r]=0;return t}function fromString(t,e,r){"string"==typeof r&&""!==r||(r="utf8");var n=0|byteLength(e,r);return t=allocate(t,n),t.write(e,r),t}function fromObject(t,e){if(Buffer.isBuffer(e))return fromBuffer(t,e);if(isArray(e))return fromArray(t,e);if(null==e)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(e.buffer instanceof ArrayBuffer)return fromTypedArray(t,e);if(e instanceof ArrayBuffer)return fromArrayBuffer(t,e)}return e.length?fromArrayLike(t,e):fromJsonObject(t,e)}function fromBuffer(t,e){var r=0|checked(e.length);return t=allocate(t,r),e.copy(t,0,0,r),t}function fromArray(t,e){var r=0|checked(e.length);t=allocate(t,r);for(var n=0;r>n;n+=1)t[n]=255&e[n];return t}function fromTypedArray(t,e){var r=0|checked(e.length);t=allocate(t,r);for(var n=0;r>n;n+=1)t[n]=255&e[n];return t}function fromArrayBuffer(t,e){return Buffer.TYPED_ARRAY_SUPPORT?(e.byteLength,t=Buffer._augment(new Uint8Array(e))):t=fromTypedArray(t,new Uint8Array(e)),t}function fromArrayLike(t,e){var r=0|checked(e.length);t=allocate(t,r);for(var n=0;r>n;n+=1)t[n]=255&e[n];return t}function fromJsonObject(t,e){var r,n=0;"Buffer"===e.type&&isArray(e.data)&&(r=e.data,n=0|checked(r.length)),t=allocate(t,n);for(var f=0;n>f;f+=1)t[f]=255&r[f];return t}function allocate(t,e){Buffer.TYPED_ARRAY_SUPPORT?(t=Buffer._augment(new Uint8Array(e)),t.__proto__=Buffer.prototype):(t.length=e,t._isBuffer=!0);var r=0!==e&&e<=Buffer.poolSize>>>1;return r&&(t.parent=rootParent),t}function checked(t){if(t>=kMaxLength())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength().toString(16)+" bytes");return 0|t}function SlowBuffer(t,e){if(!(this instanceof SlowBuffer))return new SlowBuffer(t,e);var r=new Buffer(t,e);return delete r.parent,r}function byteLength(t,e){"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return r;case"utf8":case"utf-8":return utf8ToBytes(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(t).length;default:if(n)return utf8ToBytes(t).length;e=(""+e).toLowerCase(),n=!0}}function slowToString(t,e,r){var n=!1;if(e=0|e,r=void 0===r||r===1/0?this.length:0|r,t||(t="utf8"),0>e&&(e=0),r>this.length&&(r=this.length),e>=r)return"";for(;;)switch(t){case"hex":return hexSlice(this,e,r);case"utf8":case"utf-8":return utf8Slice(this,e,r);case"ascii":return asciiSlice(this,e,r);case"binary":return binarySlice(this,e,r);case"base64":return base64Slice(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function hexWrite(t,e,r,n){r=Number(r)||0;var f=t.length-r;n?(n=Number(n),n>f&&(n=f)):n=f;var i=e.length;if(i%2!==0)throw new Error("Invalid hex string");n>i/2&&(n=i/2);for(var o=0;n>o;o++){var u=parseInt(e.substr(2*o,2),16);if(isNaN(u))throw new Error("Invalid hex string");t[r+o]=u}return o}function utf8Write(t,e,r,n){return blitBuffer(utf8ToBytes(e,t.length-r),t,r,n)}function asciiWrite(t,e,r,n){return blitBuffer(asciiToBytes(e),t,r,n)}function binaryWrite(t,e,r,n){return asciiWrite(t,e,r,n)}function base64Write(t,e,r,n){return blitBuffer(base64ToBytes(e),t,r,n)}function ucs2Write(t,e,r,n){return blitBuffer(utf16leToBytes(e,t.length-r),t,r,n)}function base64Slice(t,e,r){return 0===e&&r===t.length?base64.fromByteArray(t):base64.fromByteArray(t.slice(e,r))}function utf8Slice(t,e,r){r=Math.min(t.length,r);for(var n=[],f=e;r>f;){var i=t[f],o=null,u=i>239?4:i>223?3:i>191?2:1;if(r>=f+u){var s,a,h,c;switch(u){case 1:128>i&&(o=i);break;case 2:s=t[f+1],128===(192&s)&&(c=(31&i)<<6|63&s,c>127&&(o=c));break;case 3:s=t[f+1],a=t[f+2],128===(192&s)&&128===(192&a)&&(c=(15&i)<<12|(63&s)<<6|63&a,c>2047&&(55296>c||c>57343)&&(o=c));break;case 4:s=t[f+1],a=t[f+2],h=t[f+3],128===(192&s)&&128===(192&a)&&128===(192&h)&&(c=(15&i)<<18|(63&s)<<12|(63&a)<<6|63&h,c>65535&&1114112>c&&(o=c))}}null===o?(o=65533,u=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),f+=u}return decodeCodePointsArray(n)}function decodeCodePointsArray(t){var e=t.length;if(MAX_ARGUMENTS_LENGTH>=e)return String.fromCharCode.apply(String,t);for(var r="",n=0;e>n;)r+=String.fromCharCode.apply(String,t.slice(n,n+=MAX_ARGUMENTS_LENGTH));return r}function asciiSlice(t,e,r){var n="";r=Math.min(t.length,r);for(var f=e;r>f;f++)n+=String.fromCharCode(127&t[f]);return n}function binarySlice(t,e,r){var n="";r=Math.min(t.length,r);for(var f=e;r>f;f++)n+=String.fromCharCode(t[f]);return n}function hexSlice(t,e,r){var n=t.length;(!e||0>e)&&(e=0),(!r||0>r||r>n)&&(r=n);for(var f="",i=e;r>i;i++)f+=toHex(t[i]);return f}function utf16leSlice(t,e,r){for(var n=t.slice(e,r),f="",i=0;i<n.length;i+=2)f+=String.fromCharCode(n[i]+256*n[i+1]);return f}function checkOffset(t,e,r){if(t%1!==0||0>t)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function checkInt(t,e,r,n,f,i){if(!Buffer.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>f||i>e)throw new RangeError("value is out of bounds");if(r+n>t.length)throw new RangeError("index out of range")}function objectWriteUInt16(t,e,r,n){0>e&&(e=65535+e+1);for(var f=0,i=Math.min(t.length-r,2);i>f;f++)t[r+f]=(e&255<<8*(n?f:1-f))>>>8*(n?f:1-f)}function objectWriteUInt32(t,e,r,n){0>e&&(e=4294967295+e+1);for(var f=0,i=Math.min(t.length-r,4);i>f;f++)t[r+f]=e>>>8*(n?f:3-f)&255}function checkIEEE754(t,e,r,n,f,i){if(e>f||i>e)throw new RangeError("value is out of bounds");if(r+n>t.length)throw new RangeError("index out of range");if(0>r)throw new RangeError("index out of range")}function writeFloat(t,e,r,n,f){return f||checkIEEE754(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),ieee754.write(t,e,r,n,23,4),r+4}function writeDouble(t,e,r,n,f){return f||checkIEEE754(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),ieee754.write(t,e,r,n,52,8),r+8}function base64clean(t){if(t=stringtrim(t).replace(INVALID_BASE64_RE,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function stringtrim(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function toHex(t){return 16>t?"0"+t.toString(16):t.toString(16)}function utf8ToBytes(t,e){e=e||1/0;for(var r,n=t.length,f=null,i=[],o=0;n>o;o++){if(r=t.charCodeAt(o),r>55295&&57344>r){if(!f){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&i.push(239,191,189);continue}f=r;continue}if(56320>r){(e-=3)>-1&&i.push(239,191,189),f=r;continue}r=(f-55296<<10|r-56320)+65536}else f&&(e-=3)>-1&&i.push(239,191,189);if(f=null,128>r){if((e-=1)<0)break;i.push(r)}else if(2048>r){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(65536>r){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(1114112>r))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function asciiToBytes(t){for(var e=[],r=0;r<t.length;r++)e.push(255&t.charCodeAt(r));return e}function utf16leToBytes(t,e){for(var r,n,f,i=[],o=0;o<t.length&&!((e-=2)<0);o++)r=t.charCodeAt(o),n=r>>8,f=r%256,i.push(f),i.push(n);return i}function base64ToBytes(t){return base64.toByteArray(base64clean(t))}function blitBuffer(t,e,r,n){for(var f=0;n>f&&!(f+r>=e.length||f>=t.length);f++)e[f+r]=t[f];return f}var base64=require("base64-js"),ieee754=require("ieee754"),isArray=require("isarray");exports.Buffer=Buffer,exports.SlowBuffer=SlowBuffer,exports.INSPECT_MAX_BYTES=50,Buffer.poolSize=8192;var rootParent={};Buffer.TYPED_ARRAY_SUPPORT=void 0!==global.TYPED_ARRAY_SUPPORT?global.TYPED_ARRAY_SUPPORT:typedArraySupport(),Buffer.TYPED_ARRAY_SUPPORT?(Buffer.prototype.__proto__=Uint8Array.prototype,Buffer.__proto__=Uint8Array):(Buffer.prototype.length=void 0,Buffer.prototype.parent=void 0),Buffer.isBuffer=function(t){return!(null==t||!t._isBuffer)},Buffer.compare=function(t,e){if(!Buffer.isBuffer(t)||!Buffer.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,f=0,i=Math.min(r,n);i>f&&t[f]===e[f];)++f;return f!==i&&(r=t[f],n=e[f]),n>r?-1:r>n?1:0},Buffer.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},Buffer.concat=function(t,e){if(!isArray(t))throw new TypeError("list argument must be an Array of Buffers.");if(0===t.length)return new Buffer(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;r++)e+=t[r].length;var n=new Buffer(e),f=0;for(r=0;r<t.length;r++){var i=t[r];i.copy(n,f),f+=i.length}return n},Buffer.byteLength=byteLength,Buffer.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?utf8Slice(this,0,t):slowToString.apply(this,arguments)},Buffer.prototype.equals=function(t){if(!Buffer.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?!0:0===Buffer.compare(this,t)},Buffer.prototype.inspect=function(){var t="",e=exports.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),"<Buffer "+t+">"},Buffer.prototype.compare=function(t){if(!Buffer.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:Buffer.compare(this,t)},Buffer.prototype.indexOf=function(t,e){function r(t,e,r){for(var n=-1,f=0;r+f<t.length;f++)if(t[r+f]===e[-1===n?0:f-n]){if(-1===n&&(n=f),f-n+1===e.length)return r+n}else n=-1;return-1}if(e>2147483647?e=2147483647:-2147483648>e&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(0>e&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(Buffer.isBuffer(t))return r(this,t,e);if("number"==typeof t)return Buffer.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):r(this,[t],e);throw new TypeError("val must be string, number or Buffer")},Buffer.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},Buffer.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},Buffer.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else if(isFinite(e))e=0|e,isFinite(r)?(r=0|r,void 0===n&&(n="utf8")):(n=r,r=void 0);else{var f=n;n=e,e=0|r,r=f}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(0>r||0>e)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return hexWrite(this,t,e,r);case"utf8":case"utf-8":return utf8Write(this,t,e,r);case"ascii":return asciiWrite(this,t,e,r);case"binary":return binaryWrite(this,t,e,r);case"base64":return base64Write(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},Buffer.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var MAX_ARGUMENTS_LENGTH=4096;Buffer.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,0>t?(t+=r,0>t&&(t=0)):t>r&&(t=r),0>e?(e+=r,0>e&&(e=0)):e>r&&(e=r),t>e&&(e=t);var n;if(Buffer.TYPED_ARRAY_SUPPORT)n=Buffer._augment(this.subarray(t,e));else{var f=e-t;n=new Buffer(f,void 0);for(var i=0;f>i;i++)n[i]=this[i+t]}return n.length&&(n.parent=this.parent||this),n},Buffer.prototype.readUIntLE=function(t,e,r){t=0|t,e=0|e,r||checkOffset(t,e,this.length);for(var n=this[t],f=1,i=0;++i<e&&(f*=256);)n+=this[t+i]*f;return n},Buffer.prototype.readUIntBE=function(t,e,r){t=0|t,e=0|e,r||checkOffset(t,e,this.length);for(var n=this[t+--e],f=1;e>0&&(f*=256);)n+=this[t+--e]*f;return n},Buffer.prototype.readUInt8=function(t,e){return e||checkOffset(t,1,this.length),this[t]},Buffer.prototype.readUInt16LE=function(t,e){return e||checkOffset(t,2,this.length),this[t]|this[t+1]<<8},Buffer.prototype.readUInt16BE=function(t,e){return e||checkOffset(t,2,this.length),this[t]<<8|this[t+1]},Buffer.prototype.readUInt32LE=function(t,e){return e||checkOffset(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},Buffer.prototype.readUInt32BE=function(t,e){return e||checkOffset(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},Buffer.prototype.readIntLE=function(t,e,r){t=0|t,e=0|e,r||checkOffset(t,e,this.length);for(var n=this[t],f=1,i=0;++i<e&&(f*=256);)n+=this[t+i]*f;return f*=128,n>=f&&(n-=Math.pow(2,8*e)),n},Buffer.prototype.readIntBE=function(t,e,r){t=0|t,e=0|e,r||checkOffset(t,e,this.length);for(var n=e,f=1,i=this[t+--n];n>0&&(f*=256);)i+=this[t+--n]*f;return f*=128,i>=f&&(i-=Math.pow(2,8*e)),i},Buffer.prototype.readInt8=function(t,e){return e||checkOffset(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},Buffer.prototype.readInt16LE=function(t,e){e||checkOffset(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function(t,e){e||checkOffset(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function(t,e){return e||checkOffset(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},Buffer.prototype.readInt32BE=function(t,e){return e||checkOffset(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},Buffer.prototype.readFloatLE=function(t,e){return e||checkOffset(t,4,this.length),ieee754.read(this,t,!0,23,4)},Buffer.prototype.readFloatBE=function(t,e){return e||checkOffset(t,4,this.length),ieee754.read(this,t,!1,23,4)},Buffer.prototype.readDoubleLE=function(t,e){return e||checkOffset(t,8,this.length),ieee754.read(this,t,!0,52,8)},Buffer.prototype.readDoubleBE=function(t,e){return e||checkOffset(t,8,this.length),ieee754.read(this,t,!1,52,8)},Buffer.prototype.writeUIntLE=function(t,e,r,n){t=+t,e=0|e,r=0|r,n||checkInt(this,t,e,r,Math.pow(2,8*r),0);var f=1,i=0;for(this[e]=255&t;++i<r&&(f*=256);)this[e+i]=t/f&255;return e+r},Buffer.prototype.writeUIntBE=function(t,e,r,n){t=+t,e=0|e,r=0|r,n||checkInt(this,t,e,r,Math.pow(2,8*r),0);var f=r-1,i=1;for(this[e+f]=255&t;--f>=0&&(i*=256);)this[e+f]=t/i&255;return e+r},Buffer.prototype.writeUInt8=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,1,255,0),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},Buffer.prototype.writeUInt16LE=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):objectWriteUInt16(this,t,e,!0),e+2},Buffer.prototype.writeUInt16BE=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):objectWriteUInt16(this,t,e,!1),e+2},Buffer.prototype.writeUInt32LE=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):objectWriteUInt32(this,t,e,!0),e+4},Buffer.prototype.writeUInt32BE=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):objectWriteUInt32(this,t,e,!1),e+4},Buffer.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e=0|e,!n){var f=Math.pow(2,8*r-1);checkInt(this,t,e,r,f-1,-f)}var i=0,o=1,u=0>t?1:0;for(this[e]=255&t;++i<r&&(o*=256);)this[e+i]=(t/o>>0)-u&255;return e+r},Buffer.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e=0|e,!n){var f=Math.pow(2,8*r-1);checkInt(this,t,e,r,f-1,-f)}var i=r-1,o=1,u=0>t?1:0;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=(t/o>>0)-u&255;return e+r},Buffer.prototype.writeInt8=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,1,127,-128),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),0>t&&(t=255+t+1),this[e]=255&t,e+1},Buffer.prototype.writeInt16LE=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):objectWriteUInt16(this,t,e,!0),e+2},Buffer.prototype.writeInt16BE=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):objectWriteUInt16(this,t,e,!1),e+2},Buffer.prototype.writeInt32LE=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,4,2147483647,-2147483648),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):objectWriteUInt32(this,t,e,!0),e+4},Buffer.prototype.writeInt32BE=function(t,e,r){return t=+t,e=0|e,r||checkInt(this,t,e,4,2147483647,-2147483648),0>t&&(t=4294967295+t+1),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):objectWriteUInt32(this,t,e,!1),e+4},Buffer.prototype.writeFloatLE=function(t,e,r){return writeFloat(this,t,e,!0,r)},Buffer.prototype.writeFloatBE=function(t,e,r){return writeFloat(this,t,e,!1,r)},Buffer.prototype.writeDoubleLE=function(t,e,r){return writeDouble(this,t,e,!0,r)},Buffer.prototype.writeDoubleBE=function(t,e,r){return writeDouble(this,t,e,!1,r)},Buffer.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&r>n&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(0>e)throw new RangeError("targetStart out of bounds");if(0>r||r>=this.length)throw new RangeError("sourceStart out of bounds");if(0>n)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var f,i=n-r;if(this===t&&e>r&&n>e)for(f=i-1;f>=0;f--)t[f+e]=this[f+r];else if(1e3>i||!Buffer.TYPED_ARRAY_SUPPORT)for(f=0;i>f;f++)t[f+e]=this[f+r];else t._set(this.subarray(r,r+i),e);return i},Buffer.prototype.fill=function(t,e,r){if(t||(t=0),e||(e=0),r||(r=this.length),e>r)throw new RangeError("end < start");if(r!==e&&0!==this.length){if(0>e||e>=this.length)throw new RangeError("start out of bounds");if(0>r||r>this.length)throw new RangeError("end out of bounds");var n;if("number"==typeof t)for(n=e;r>n;n++)this[n]=t;else{var f=utf8ToBytes(t.toString()),i=f.length;for(n=e;r>n;n++)this[n]=f[n%i]}return this}},Buffer.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(Buffer.TYPED_ARRAY_SUPPORT)return new Buffer(this).buffer;for(var t=new Uint8Array(this.length),e=0,r=t.length;r>e;e+=1)t[e]=this[e];return t.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var BP=Buffer.prototype;Buffer._augment=function(t){return t.constructor=Buffer,t._isBuffer=!0,t._set=t.set,t.get=BP.get,t.set=BP.set,t.write=BP.write,t.toString=BP.toString,t.toLocaleString=BP.toString,t.toJSON=BP.toJSON,t.equals=BP.equals,t.compare=BP.compare,t.indexOf=BP.indexOf,t.copy=BP.copy,t.slice=BP.slice,t.readUIntLE=BP.readUIntLE,t.readUIntBE=BP.readUIntBE,t.readUInt8=BP.readUInt8,t.readUInt16LE=BP.readUInt16LE,t.readUInt16BE=BP.readUInt16BE,t.readUInt32LE=BP.readUInt32LE,t.readUInt32BE=BP.readUInt32BE,t.readIntLE=BP.readIntLE,t.readIntBE=BP.readIntBE,t.readInt8=BP.readInt8,t.readInt16LE=BP.readInt16LE,t.readInt16BE=BP.readInt16BE,t.readInt32LE=BP.readInt32LE,t.readInt32BE=BP.readInt32BE,t.readFloatLE=BP.readFloatLE,t.readFloatBE=BP.readFloatBE,t.readDoubleLE=BP.readDoubleLE,t.readDoubleBE=BP.readDoubleBE,t.writeUInt8=BP.writeUInt8,t.writeUIntLE=BP.writeUIntLE,t.writeUIntBE=BP.writeUIntBE,t.writeUInt16LE=BP.writeUInt16LE,t.writeUInt16BE=BP.writeUInt16BE,t.writeUInt32LE=BP.writeUInt32LE,t.writeUInt32BE=BP.writeUInt32BE,t.writeIntLE=BP.writeIntLE,t.writeIntBE=BP.writeIntBE,t.writeInt8=BP.writeInt8,t.writeInt16LE=BP.writeInt16LE,t.writeInt16BE=BP.writeInt16BE,t.writeInt32LE=BP.writeInt32LE,t.writeInt32BE=BP.writeInt32BE,t.writeFloatLE=BP.writeFloatLE,t.writeFloatBE=BP.writeFloatBE,t.writeDoubleLE=BP.writeDoubleLE,t.writeDoubleBE=BP.writeDoubleBE,t.fill=BP.fill,t.inspect=BP.inspect,t.toArrayBuffer=BP.toArrayBuffer,t};var INVALID_BASE64_RE=/[^+\/0-9A-Za-z-_]/g; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"base64-js":22,"ieee754":34,"isarray":37}],26:[function(require,module,exports){ -module.exports={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Unordered Collection",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"}; - -},{}],27:[function(require,module,exports){ -(function (process,global){ -"use strict";var next=global.process&&process.nextTick||global.setImmediate||function(n){setTimeout(n,0)};module.exports=function(n,t){return n?void t.then(function(t){next(function(){n(null,t)})},function(t){next(function(){n(t)})}):t}; - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"_process":71}],28:[function(require,module,exports){ -(function (Buffer){ -function isArray(r){return Array.isArray?Array.isArray(r):"[object Array]"===objectToString(r)}function isBoolean(r){return"boolean"==typeof r}function isNull(r){return null===r}function isNullOrUndefined(r){return null==r}function isNumber(r){return"number"==typeof r}function isString(r){return"string"==typeof r}function isSymbol(r){return"symbol"==typeof r}function isUndefined(r){return void 0===r}function isRegExp(r){return"[object RegExp]"===objectToString(r)}function isObject(r){return"object"==typeof r&&null!==r}function isDate(r){return"[object Date]"===objectToString(r)}function isError(r){return"[object Error]"===objectToString(r)||r instanceof Error}function isFunction(r){return"function"==typeof r}function isPrimitive(r){return null===r||"boolean"==typeof r||"number"==typeof r||"string"==typeof r||"symbol"==typeof r||"undefined"==typeof r}function objectToString(r){return Object.prototype.toString.call(r)}exports.isArray=isArray,exports.isBoolean=isBoolean,exports.isNull=isNull,exports.isNullOrUndefined=isNullOrUndefined,exports.isNumber=isNumber,exports.isString=isString,exports.isSymbol=isSymbol,exports.isUndefined=isUndefined,exports.isRegExp=isRegExp,exports.isObject=isObject,exports.isDate=isDate,exports.isError=isError,exports.isFunction=isFunction,exports.isPrimitive=isPrimitive,exports.isBuffer=Buffer.isBuffer; - -}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) - -},{"../../is-buffer/index.js":36}],29:[function(require,module,exports){ -function useColors(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function formatArgs(){var o=arguments,e=this.useColors;if(o[0]=(e?"%c":"")+this.namespace+(e?" %c":" ")+o[0]+(e?"%c ":" ")+"+"+exports.humanize(this.diff),!e)return o;var r="color: "+this.color;o=[o[0],r,"color: inherit"].concat(Array.prototype.slice.call(o,1));var t=0,s=0;return o[0].replace(/%[a-z%]/g,function(o){"%%"!==o&&(t++,"%c"===o&&(s=t))}),o.splice(s,0,r),o}function log(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(o){try{null==o?exports.storage.removeItem("debug"):exports.storage.debug=o}catch(e){}}function load(){var o;try{o=exports.storage.debug}catch(e){}return o}function localstorage(){try{return window.localStorage}catch(o){}}exports=module.exports=require("./debug"),exports.log=log,exports.formatArgs=formatArgs,exports.save=save,exports.load=load,exports.useColors=useColors,exports.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:localstorage(),exports.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],exports.formatters.j=function(o){return JSON.stringify(o)},exports.enable(load()); - -},{"./debug":30}],30:[function(require,module,exports){ -function selectColor(){return exports.colors[prevColor++%exports.colors.length]}function debug(e){function r(){}function o(){var e=o,r=+new Date,s=r-(prevTime||r);e.diff=s,e.prev=prevTime,e.curr=r,prevTime=r,null==e.useColors&&(e.useColors=exports.useColors()),null==e.color&&e.useColors&&(e.color=selectColor());var t=Array.prototype.slice.call(arguments);t[0]=exports.coerce(t[0]),"string"!=typeof t[0]&&(t=["%o"].concat(t));var n=0;t[0]=t[0].replace(/%([a-z%])/g,function(r,o){if("%%"===r)return r;n++;var s=exports.formatters[o];if("function"==typeof s){var p=t[n];r=s.call(e,p),t.splice(n,1),n--}return r}),"function"==typeof exports.formatArgs&&(t=exports.formatArgs.apply(e,t));var p=o.log||exports.log||console.log.bind(console);p.apply(e,t)}r.enabled=!1,o.enabled=!0;var s=exports.enabled(e)?o:r;return s.namespace=e,s}function enable(e){exports.save(e);for(var r=(e||"").split(/[\s,]+/),o=r.length,s=0;o>s;s++)r[s]&&(e=r[s].replace(/\*/g,".*?"),"-"===e[0]?exports.skips.push(new RegExp("^"+e.substr(1)+"$")):exports.names.push(new RegExp("^"+e+"$")))}function disable(){exports.enable("")}function enabled(e){var r,o;for(r=0,o=exports.skips.length;o>r;r++)if(exports.skips[r].test(e))return!1;for(r=0,o=exports.names.length;o>r;r++)if(exports.names[r].test(e))return!0;return!1}function coerce(e){return e instanceof Error?e.stack||e.message:e}exports=module.exports=debug,exports.coerce=coerce,exports.disable=disable,exports.enable=enable,exports.enabled=enabled,exports.humanize=require("ms"),exports.names=[],exports.skips=[],exports.formatters={};var prevColor=0,prevTime; - -},{"ms":68}],31:[function(require,module,exports){ -(function (process,global){ -/*! - * @overview es6-promise - a tiny implementation of Promises/A+. - * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) - * @license Licensed under MIT license - * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE - * @version 3.1.2 - */ -(function(){"use strict";function t(t){return"function"==typeof t||"object"==typeof t&&null!==t}function e(t){return"function"==typeof t}function n(t){W=t}function r(t){H=t}function o(){return function(){process.nextTick(a)}}function i(){return function(){U(a)}}function s(){var t=0,e=new Q(a),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){t.port2.postMessage(0)}}function c(){return function(){setTimeout(a,1)}}function a(){for(var t=0;G>t;t+=2){var e=X[t],n=X[t+1];e(n),X[t]=void 0,X[t+1]=void 0}G=0}function f(){try{var t=require,e=t("vertx");return U=e.runOnLoop||e.runOnContext,i()}catch(n){return c()}}function l(t,e){var n=this,r=n._state;if(r===et&&!t||r===nt&&!e)return this;var o=new this.constructor(p),i=n._result;if(r){var s=arguments[r-1];H(function(){C(r,o,s,i)})}else j(n,o,t,e);return o}function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(p);return g(n,t),n}function p(){}function _(){return new TypeError("You cannot resolve a promise with itself")}function v(){return new TypeError("A promises callback cannot return that same promise.")}function d(t){try{return t.then}catch(e){return rt.error=e,rt}}function y(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function m(t,e,n){H(function(t){var r=!1,o=y(n,e,function(n){r||(r=!0,e!==n?g(t,n):E(t,n))},function(e){r||(r=!0,S(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,S(t,o))},t)}function w(t,e){e._state===et?E(t,e._result):e._state===nt?S(t,e._result):j(e,void 0,function(e){g(t,e)},function(e){S(t,e)})}function b(t,n,r){n.constructor===t.constructor&&r===Z&&constructor.resolve===$?w(t,n):r===rt?S(t,rt.error):void 0===r?E(t,n):e(r)?m(t,n,r):E(t,n)}function g(e,n){e===n?S(e,_()):t(n)?b(e,n,d(n)):E(e,n)}function A(t){t._onerror&&t._onerror(t._result),T(t)}function E(t,e){t._state===tt&&(t._result=e,t._state=et,0!==t._subscribers.length&&H(T,t))}function S(t,e){t._state===tt&&(t._state=nt,t._result=e,H(A,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+et]=n,o[i+nt]=r,0===i&&t._state&&H(T,t)}function T(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;s<e.length;s+=3)r=e[s],o=e[s+n],r?C(n,r,o,i):o(i);t._subscribers.length=0}}function P(){this.error=null}function x(t,e){try{return t(e)}catch(n){return ot.error=n,ot}}function C(t,n,r,o){var i,s,u,c,a=e(r);if(a){if(i=x(r,o),i===ot?(c=!0,s=i.error,i=null):u=!0,n===i)return void S(n,v())}else i=o,u=!0;n._state!==tt||(a&&u?g(n,i):c?S(n,s):t===et?E(n,i):t===nt&&S(n,i))}function M(t,e){try{e(function(e){g(t,e)},function(e){S(t,e)})}catch(n){S(t,n)}}function O(t){return new ft(this,t).promise}function k(t){function e(t){g(o,t)}function n(t){S(o,t)}var r=this,o=new r(p);if(!B(t))return S(o,new TypeError("You must pass an array to race.")),o;for(var i=t.length,s=0;o._state===tt&&i>s;s++)j(r.resolve(t[s]),void 0,e,n);return o}function Y(t){var e=this,n=new e(p);return S(n,t),n}function q(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function D(t){this._id=ct++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==t&&("function"!=typeof t&&q(),this instanceof D?M(this,t):F())}function K(t,e){this._instanceConstructor=t,this.promise=new t(p),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?E(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&E(this.promise,this._result))):S(this.promise,this._validationError())}function L(){var t;if("undefined"!=typeof global)t=global;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(t.Promise=at)}var N;N=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var U,W,z,B=N,G=0,H=function(t,e){X[G]=t,X[G+1]=e,G+=2,2===G&&(W?W(a):z())},I="undefined"!=typeof window?window:void 0,J=I||{},Q=J.MutationObserver||J.WebKitMutationObserver,R="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);z=R?o():Q?s():V?u():void 0===I&&"function"==typeof require?f():c();var Z=l,$=h,tt=void 0,et=1,nt=2,rt=new P,ot=new P,it=O,st=k,ut=Y,ct=0,at=D;D.all=it,D.race=st,D.resolve=$,D.reject=ut,D._setScheduler=n,D._setAsap=r,D._asap=H,D.prototype={constructor:D,then:Z,"catch":function(t){return this.then(null,t)}};var ft=K;K.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},K.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===tt&&t>n;n++)this._eachEntry(e[n],n)},K.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===$){var o=d(t);if(o===Z&&t._state!==tt)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===at){var i=new n(p);b(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},K.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===tt&&(this._remaining--,t===nt?S(r,n):this._result[e]=n),0===this._remaining&&E(r,this._result)},K.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(et,e,t)},function(t){n._settledAt(nt,e,t)})};var lt=L,ht={Promise:at,polyfill:lt};"function"==typeof define&&define.amd?define(function(){return ht}):"undefined"!=typeof module&&module.exports?module.exports=ht:"undefined"!=typeof this&&(this.ES6Promise=ht),lt()}).call(this); - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"_process":71}],32:[function(require,module,exports){ -function EventEmitter(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function isFunction(e){return"function"==typeof e}function isNumber(e){return"number"==typeof e}function isObject(e){return"object"==typeof e&&null!==e}function isUndefined(e){return void 0===e}module.exports=EventEmitter,EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._maxListeners=void 0,EventEmitter.defaultMaxListeners=10,EventEmitter.prototype.setMaxListeners=function(e){if(!isNumber(e)||0>e||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},EventEmitter.prototype.emit=function(e){var t,i,n,s,r,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||isObject(this._events.error)&&!this._events.error.length)){if(t=arguments[1],t instanceof Error)throw t;throw TypeError('Uncaught, unspecified "error" event.')}if(i=this._events[e],isUndefined(i))return!1;if(isFunction(i))switch(arguments.length){case 1:i.call(this);break;case 2:i.call(this,arguments[1]);break;case 3:i.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),i.apply(this,s)}else if(isObject(i))for(s=Array.prototype.slice.call(arguments,1),o=i.slice(),n=o.length,r=0;n>r;r++)o[r].apply(this,s);return!0},EventEmitter.prototype.addListener=function(e,t){var i;if(!isFunction(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,isFunction(t.listener)?t.listener:t),this._events[e]?isObject(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,isObject(this._events[e])&&!this._events[e].warned&&(i=isUndefined(this._maxListeners)?EventEmitter.defaultMaxListeners:this._maxListeners,i&&i>0&&this._events[e].length>i&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.once=function(e,t){function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}if(!isFunction(t))throw TypeError("listener must be a function");var n=!1;return i.listener=t,this.on(e,i),this},EventEmitter.prototype.removeListener=function(e,t){var i,n,s,r;if(!isFunction(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(i=this._events[e],s=i.length,n=-1,i===t||isFunction(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(isObject(i)){for(r=s;r-- >0;)if(i[r]===t||i[r].listener&&i[r].listener===t){n=r;break}if(0>n)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(n,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},EventEmitter.prototype.removeAllListeners=function(e){var t,i;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(i=this._events[e],isFunction(i))this.removeListener(e,i);else if(i)for(;i.length;)this.removeListener(e,i[i.length-1]);return delete this._events[e],this},EventEmitter.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?isFunction(this._events[e])?[this._events[e]]:this._events[e].slice():[]},EventEmitter.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(isFunction(t))return 1;if(t)return t.length}return 0},EventEmitter.listenerCount=function(e,t){return e.listenerCount(t)}; - -},{}],33:[function(require,module,exports){ -var http=require("http"),https=module.exports;for(var key in http)http.hasOwnProperty(key)&&(https[key]=http[key]);https.request=function(t,e){return t||(t={}),t.scheme="https",t.protocol="https:",http.request.call(this,t,e)}; - -},{"http":87}],34:[function(require,module,exports){ -exports.read=function(a,o,t,r,h){var M,p,w=8*h-r-1,f=(1<<w)-1,e=f>>1,i=-7,N=t?h-1:0,n=t?-1:1,s=a[o+N];for(N+=n,M=s&(1<<-i)-1,s>>=-i,i+=w;i>0;M=256*M+a[o+N],N+=n,i-=8);for(p=M&(1<<-i)-1,M>>=-i,i+=r;i>0;p=256*p+a[o+N],N+=n,i-=8);if(0===M)M=1-e;else{if(M===f)return p?NaN:(s?-1:1)*(1/0);p+=Math.pow(2,r),M-=e}return(s?-1:1)*p*Math.pow(2,M-r)},exports.write=function(a,o,t,r,h,M){var p,w,f,e=8*M-h-1,i=(1<<e)-1,N=i>>1,n=23===h?Math.pow(2,-24)-Math.pow(2,-77):0,s=r?0:M-1,u=r?1:-1,l=0>o||0===o&&0>1/o?1:0;for(o=Math.abs(o),isNaN(o)||o===1/0?(w=isNaN(o)?1:0,p=i):(p=Math.floor(Math.log(o)/Math.LN2),o*(f=Math.pow(2,-p))<1&&(p--,f*=2),o+=p+N>=1?n/f:n*Math.pow(2,1-N),o*f>=2&&(p++,f/=2),p+N>=i?(w=0,p=i):p+N>=1?(w=(o*f-1)*Math.pow(2,h),p+=N):(w=o*Math.pow(2,N-1)*Math.pow(2,h),p=0));h>=8;a[t+s]=255&w,s+=u,w/=256,h-=8);for(p=p<<h|w,e+=h;e>0;a[t+s]=255&p,s+=u,p/=256,e-=8);a[t+s-u]|=128*l}; - -},{}],35:[function(require,module,exports){ -"function"==typeof Object.create?module.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:module.exports=function(t,e){t.super_=e;var o=function(){};o.prototype=e.prototype,t.prototype=new o,t.prototype.constructor=t}; - -},{}],36:[function(require,module,exports){ -module.exports=function(r){return!(null==r||!(r._isBuffer||r.constructor&&"function"==typeof r.constructor.isBuffer&&r.constructor.isBuffer(r)))}; - -},{}],37:[function(require,module,exports){ -var toString={}.toString;module.exports=Array.isArray||function(r){return"[object Array]"==toString.call(r)}; - -},{}],38:[function(require,module,exports){ -"use strict";var yaml=require("./lib/js-yaml.js");module.exports=yaml; - -},{"./lib/js-yaml.js":39}],39:[function(require,module,exports){ -"use strict";function deprecated(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var loader=require("./js-yaml/loader"),dumper=require("./js-yaml/dumper");module.exports.Type=require("./js-yaml/type"),module.exports.Schema=require("./js-yaml/schema"),module.exports.FAILSAFE_SCHEMA=require("./js-yaml/schema/failsafe"),module.exports.JSON_SCHEMA=require("./js-yaml/schema/json"),module.exports.CORE_SCHEMA=require("./js-yaml/schema/core"),module.exports.DEFAULT_SAFE_SCHEMA=require("./js-yaml/schema/default_safe"),module.exports.DEFAULT_FULL_SCHEMA=require("./js-yaml/schema/default_full"),module.exports.load=loader.load,module.exports.loadAll=loader.loadAll,module.exports.safeLoad=loader.safeLoad,module.exports.safeLoadAll=loader.safeLoadAll,module.exports.dump=dumper.dump,module.exports.safeDump=dumper.safeDump,module.exports.YAMLException=require("./js-yaml/exception"),module.exports.MINIMAL_SCHEMA=require("./js-yaml/schema/failsafe"),module.exports.SAFE_SCHEMA=require("./js-yaml/schema/default_safe"),module.exports.DEFAULT_SCHEMA=require("./js-yaml/schema/default_full"),module.exports.scan=deprecated("scan"),module.exports.parse=deprecated("parse"),module.exports.compose=deprecated("compose"),module.exports.addConstructor=deprecated("addConstructor"); - -},{"./js-yaml/dumper":41,"./js-yaml/exception":42,"./js-yaml/loader":43,"./js-yaml/schema":45,"./js-yaml/schema/core":46,"./js-yaml/schema/default_full":47,"./js-yaml/schema/default_safe":48,"./js-yaml/schema/failsafe":49,"./js-yaml/schema/json":50,"./js-yaml/type":51}],40:[function(require,module,exports){ -"use strict";function isNothing(e){return"undefined"==typeof e||null===e}function isObject(e){return"object"==typeof e&&null!==e}function toArray(e){return Array.isArray(e)?e:isNothing(e)?[]:[e]}function extend(e,t){var r,o,n,i;if(t)for(i=Object.keys(t),r=0,o=i.length;o>r;r+=1)n=i[r],e[n]=t[n];return e}function repeat(e,t){var r,o="";for(r=0;t>r;r+=1)o+=e;return o}function isNegativeZero(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e}module.exports.isNothing=isNothing,module.exports.isObject=isObject,module.exports.toArray=toArray,module.exports.repeat=repeat,module.exports.isNegativeZero=isNegativeZero,module.exports.extend=extend; - -},{}],41:[function(require,module,exports){ -"use strict";function compileStyleMap(e,t){var n,i,r,E,o,l,a;if(null===t)return{};for(n={},i=Object.keys(t),r=0,E=i.length;E>r;r+=1)o=i[r],l=String(t[o]),"!!"===o.slice(0,2)&&(o="tag:yaml.org,2002:"+o.slice(2)),a=e.compiledTypeMap[o],a&&_hasOwnProperty.call(a.styleAliases,l)&&(l=a.styleAliases[l]),n[o]=l;return n}function encodeHex(e){var t,n,i;if(t=e.toString(16).toUpperCase(),255>=e)n="x",i=2;else if(65535>=e)n="u",i=4;else{if(!(4294967295>=e))throw new YAMLException("code point within a string may not be greater than 0xFFFFFFFF");n="U",i=8}return"\\"+n+common.repeat("0",i-t.length)+t}function State(e){this.schema=e.schema||DEFAULT_FULL_SCHEMA,this.indent=Math.max(1,e.indent||2),this.skipInvalid=e.skipInvalid||!1,this.flowLevel=common.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=compileStyleMap(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function indentString(e,t){for(var n,i=common.repeat(" ",t),r=0,E=-1,o="",l=e.length;l>r;)E=e.indexOf("\n",r),-1===E?(n=e.slice(r),r=l):(n=e.slice(r,E+1),r=E+1),n.length&&"\n"!==n&&(o+=i),o+=n;return o}function generateNextLine(e,t){return"\n"+common.repeat(" ",e.indent*t)}function testImplicitResolving(e,t){var n,i,r;for(n=0,i=e.implicitTypes.length;i>n;n+=1)if(r=e.implicitTypes[n],r.resolve(t))return!0;return!1}function isWhitespace(e){return e===CHAR_SPACE||e===CHAR_TAB}function isPrintable(e){return e>=32&&126>=e||e>=161&&55295>=e&&8232!==e&&8233!==e||e>=57344&&65533>=e&&65279!==e||e>=65536&&1114111>=e}function isPlainSafe(e){return isPrintable(e)&&65279!==e&&e!==CHAR_COMMA&&e!==CHAR_LEFT_SQUARE_BRACKET&&e!==CHAR_RIGHT_SQUARE_BRACKET&&e!==CHAR_LEFT_CURLY_BRACKET&&e!==CHAR_RIGHT_CURLY_BRACKET&&e!==CHAR_COLON&&e!==CHAR_SHARP}function isPlainSafeFirst(e){return isPrintable(e)&&65279!==e&&!isWhitespace(e)&&e!==CHAR_MINUS&&e!==CHAR_QUESTION&&e!==CHAR_COLON&&e!==CHAR_COMMA&&e!==CHAR_LEFT_SQUARE_BRACKET&&e!==CHAR_RIGHT_SQUARE_BRACKET&&e!==CHAR_LEFT_CURLY_BRACKET&&e!==CHAR_RIGHT_CURLY_BRACKET&&e!==CHAR_SHARP&&e!==CHAR_AMPERSAND&&e!==CHAR_ASTERISK&&e!==CHAR_EXCLAMATION&&e!==CHAR_VERTICAL_LINE&&e!==CHAR_GREATER_THAN&&e!==CHAR_SINGLE_QUOTE&&e!==CHAR_DOUBLE_QUOTE&&e!==CHAR_PERCENT&&e!==CHAR_COMMERCIAL_AT&&e!==CHAR_GRAVE_ACCENT}function chooseScalarStyle(e,t,n,i,r){var E,o,l=!1,a=!1,s=-1!==i,c=-1,A=isPlainSafeFirst(e.charCodeAt(0))&&!isWhitespace(e.charCodeAt(e.length-1));if(t)for(E=0;E<e.length;E++){if(o=e.charCodeAt(E),!isPrintable(o))return STYLE_DOUBLE;A=A&&isPlainSafe(o)}else{for(E=0;E<e.length;E++){if(o=e.charCodeAt(E),o===CHAR_LINE_FEED)l=!0,s&&(a=a||E-c-1>i&&" "!==e[c+1],c=E);else if(!isPrintable(o))return STYLE_DOUBLE;A=A&&isPlainSafe(o)}a=a||s&&E-c-1>i&&" "!==e[c+1]}return l||a?" "===e[0]&&n>9?STYLE_DOUBLE:a?STYLE_FOLDED:STYLE_LITERAL:A&&!r(e)?STYLE_PLAIN:STYLE_SINGLE}function writeScalar(e,t,n,i){e.dump=function(){function r(t){return testImplicitResolving(e,t)}if(0===t.length)return"''";if(!e.noCompatMode&&-1!==DEPRECATED_BOOLEANS_SYNTAX.indexOf(t))return"'"+t+"'";var E=e.indent*Math.max(1,n),o=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-E),l=i||e.flowLevel>-1&&n>=e.flowLevel;switch(chooseScalarStyle(t,l,e.indent,o,r)){case STYLE_PLAIN:return t;case STYLE_SINGLE:return"'"+t.replace(/'/g,"''")+"'";case STYLE_LITERAL:return"|"+blockHeader(t,e.indent)+dropEndingNewline(indentString(t,E));case STYLE_FOLDED:return">"+blockHeader(t,e.indent)+dropEndingNewline(indentString(foldString(t,o),E));case STYLE_DOUBLE:return'"'+escapeString(t,o)+'"';default:throw new YAMLException("impossible error: invalid scalar style")}}()}function blockHeader(e,t){var n=" "===e[0]?String(t):"",i="\n"===e[e.length-1],r=i&&("\n"===e[e.length-2]||"\n"===e),E=r?"+":i?"":"-";return n+E+"\n"}function dropEndingNewline(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function foldString(e,t){for(var n,i,r=/(\n+)([^\n]*)/g,E=function(){var n=e.indexOf("\n");return n=-1!==n?n:e.length,r.lastIndex=n,foldLine(e.slice(0,n),t)}(),o="\n"===e[0]||" "===e[0];i=r.exec(e);){var l=i[1],a=i[2];n=" "===a[0],E+=l+(o||n||""===a?"":"\n")+foldLine(a,t),o=n}return E}function foldLine(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,E=0,o=0,l=0,a="";n=r.exec(e);)l=n.index,l-E>t&&(i=o>E?o:l,a+="\n"+e.slice(E,i),E=i+1),o=l;return a+="\n",a+=e.length-E>t&&o>E?e.slice(E,o)+"\n"+e.slice(o+1):e.slice(E),a.slice(1)}function escapeString(e){for(var t,n,i="",r=0;r<e.length;r++)t=e.charCodeAt(r),n=ESCAPE_SEQUENCES[t],i+=!n&&isPrintable(t)?e[r]:n||encodeHex(t);return i}function writeFlowSequence(e,t,n){var i,r,E="",o=e.tag;for(i=0,r=n.length;r>i;i+=1)writeNode(e,t,n[i],!1,!1)&&(0!==i&&(E+=", "),E+=e.dump);e.tag=o,e.dump="["+E+"]"}function writeBlockSequence(e,t,n,i){var r,E,o="",l=e.tag;for(r=0,E=n.length;E>r;r+=1)writeNode(e,t+1,n[r],!0,!0)&&(i&&0===r||(o+=generateNextLine(e,t)),o+="- "+e.dump);e.tag=l,e.dump=o||"[]"}function writeFlowMapping(e,t,n){var i,r,E,o,l,a="",s=e.tag,c=Object.keys(n);for(i=0,r=c.length;r>i;i+=1)l="",0!==i&&(l+=", "),E=c[i],o=n[E],writeNode(e,t,E,!1,!1)&&(e.dump.length>1024&&(l+="? "),l+=e.dump+": ",writeNode(e,t,o,!1,!1)&&(l+=e.dump,a+=l));e.tag=s,e.dump="{"+a+"}"}function writeBlockMapping(e,t,n,i){var r,E,o,l,a,s,c="",A=e.tag,u=Object.keys(n);if(e.sortKeys===!0)u.sort();else if("function"==typeof e.sortKeys)u.sort(e.sortKeys);else if(e.sortKeys)throw new YAMLException("sortKeys must be a boolean or a function");for(r=0,E=u.length;E>r;r+=1)s="",i&&0===r||(s+=generateNextLine(e,t)),o=u[r],l=n[o],writeNode(e,t+1,o,!0,!0,!0)&&(a=null!==e.tag&&"?"!==e.tag||e.dump&&e.dump.length>1024,a&&(s+=e.dump&&CHAR_LINE_FEED===e.dump.charCodeAt(0)?"?":"? "),s+=e.dump,a&&(s+=generateNextLine(e,t)),writeNode(e,t+1,l,!0,a)&&(s+=e.dump&&CHAR_LINE_FEED===e.dump.charCodeAt(0)?":":": ",s+=e.dump,c+=s));e.tag=A,e.dump=c||"{}"}function detectType(e,t,n){var i,r,E,o,l,a;for(r=n?e.explicitTypes:e.implicitTypes,E=0,o=r.length;o>E;E+=1)if(l=r[E],(l.instanceOf||l.predicate)&&(!l.instanceOf||"object"==typeof t&&t instanceof l.instanceOf)&&(!l.predicate||l.predicate(t))){if(e.tag=n?l.tag:"?",l.represent){if(a=e.styleMap[l.tag]||l.defaultStyle,"[object Function]"===_toString.call(l.represent))i=l.represent(t,a);else{if(!_hasOwnProperty.call(l.represent,a))throw new YAMLException("!<"+l.tag+'> tag resolver accepts not "'+a+'" style');i=l.represent[a](t,a)}e.dump=i}return!0}return!1}function writeNode(e,t,n,i,r,E){e.tag=null,e.dump=n,detectType(e,n,!1)||detectType(e,n,!0);var o=_toString.call(e.dump);i&&(i=e.flowLevel<0||e.flowLevel>t);var l,a,s="[object Object]"===o||"[object Array]"===o;if(s&&(l=e.duplicates.indexOf(n),a=-1!==l),(null!==e.tag&&"?"!==e.tag||a||2!==e.indent&&t>0)&&(r=!1),a&&e.usedDuplicates[l])e.dump="*ref_"+l;else{if(s&&a&&!e.usedDuplicates[l]&&(e.usedDuplicates[l]=!0),"[object Object]"===o)i&&0!==Object.keys(e.dump).length?(writeBlockMapping(e,t,e.dump,r),a&&(e.dump="&ref_"+l+e.dump)):(writeFlowMapping(e,t,e.dump),a&&(e.dump="&ref_"+l+" "+e.dump));else if("[object Array]"===o)i&&0!==e.dump.length?(writeBlockSequence(e,t,e.dump,r),a&&(e.dump="&ref_"+l+e.dump)):(writeFlowSequence(e,t,e.dump),a&&(e.dump="&ref_"+l+" "+e.dump));else{if("[object String]"!==o){if(e.skipInvalid)return!1;throw new YAMLException("unacceptable kind of an object to dump "+o)}"?"!==e.tag&&writeScalar(e,e.dump,t,E)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function getDuplicateReferences(e,t){var n,i,r=[],E=[];for(inspectNode(e,r,E),n=0,i=E.length;i>n;n+=1)t.duplicates.push(r[E[n]]);t.usedDuplicates=new Array(i)}function inspectNode(e,t,n){var i,r,E;if(null!==e&&"object"==typeof e)if(r=t.indexOf(e),-1!==r)-1===n.indexOf(r)&&n.push(r);else if(t.push(e),Array.isArray(e))for(r=0,E=e.length;E>r;r+=1)inspectNode(e[r],t,n);else for(i=Object.keys(e),r=0,E=i.length;E>r;r+=1)inspectNode(e[i[r]],t,n)}function dump(e,t){t=t||{};var n=new State(t);return n.noRefs||getDuplicateReferences(e,n),writeNode(n,0,e,!0,!0)?n.dump+"\n":""}function safeDump(e,t){return dump(e,common.extend({schema:DEFAULT_SAFE_SCHEMA},t))}var common=require("./common"),YAMLException=require("./exception"),DEFAULT_FULL_SCHEMA=require("./schema/default_full"),DEFAULT_SAFE_SCHEMA=require("./schema/default_safe"),_toString=Object.prototype.toString,_hasOwnProperty=Object.prototype.hasOwnProperty,CHAR_TAB=9,CHAR_LINE_FEED=10,CHAR_SPACE=32,CHAR_EXCLAMATION=33,CHAR_DOUBLE_QUOTE=34,CHAR_SHARP=35,CHAR_PERCENT=37,CHAR_AMPERSAND=38,CHAR_SINGLE_QUOTE=39,CHAR_ASTERISK=42,CHAR_COMMA=44,CHAR_MINUS=45,CHAR_COLON=58,CHAR_GREATER_THAN=62,CHAR_QUESTION=63,CHAR_COMMERCIAL_AT=64,CHAR_LEFT_SQUARE_BRACKET=91,CHAR_RIGHT_SQUARE_BRACKET=93,CHAR_GRAVE_ACCENT=96,CHAR_LEFT_CURLY_BRACKET=123,CHAR_VERTICAL_LINE=124,CHAR_RIGHT_CURLY_BRACKET=125,ESCAPE_SEQUENCES={};ESCAPE_SEQUENCES[0]="\\0",ESCAPE_SEQUENCES[7]="\\a",ESCAPE_SEQUENCES[8]="\\b",ESCAPE_SEQUENCES[9]="\\t",ESCAPE_SEQUENCES[10]="\\n",ESCAPE_SEQUENCES[11]="\\v",ESCAPE_SEQUENCES[12]="\\f",ESCAPE_SEQUENCES[13]="\\r",ESCAPE_SEQUENCES[27]="\\e",ESCAPE_SEQUENCES[34]='\\"',ESCAPE_SEQUENCES[92]="\\\\",ESCAPE_SEQUENCES[133]="\\N",ESCAPE_SEQUENCES[160]="\\_",ESCAPE_SEQUENCES[8232]="\\L",ESCAPE_SEQUENCES[8233]="\\P";var DEPRECATED_BOOLEANS_SYNTAX=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],STYLE_PLAIN=1,STYLE_SINGLE=2,STYLE_LITERAL=3,STYLE_FOLDED=4,STYLE_DOUBLE=5;module.exports.dump=dump,module.exports.safeDump=safeDump; - -},{"./common":40,"./exception":42,"./schema/default_full":47,"./schema/default_safe":48}],42:[function(require,module,exports){ -"use strict";function YAMLException(t,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=t,this.mark=r,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}YAMLException.prototype=Object.create(Error.prototype),YAMLException.prototype.constructor=YAMLException,YAMLException.prototype.toString=function(t){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!t&&this.mark&&(r+=" "+this.mark.toString()),r},module.exports=YAMLException; - -},{}],43:[function(require,module,exports){ -"use strict";function is_EOL(e){return 10===e||13===e}function is_WHITE_SPACE(e){return 9===e||32===e}function is_WS_OR_EOL(e){return 9===e||32===e||10===e||13===e}function is_FLOW_INDICATOR(e){return 44===e||91===e||93===e||123===e||125===e}function fromHexCode(e){var t;return e>=48&&57>=e?e-48:(t=32|e,t>=97&&102>=t?t-97+10:-1)}function escapedHexLen(e){return 120===e?2:117===e?4:85===e?8:0}function fromDecimalCode(e){return e>=48&&57>=e?e-48:-1}function simpleEscapeSequence(e){return 48===e?"\x00":97===e?"":98===e?"\b":116===e?" ":9===e?" ":110===e?"\n":118===e?"\x0B":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"
":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function charFromCodepoint(e){return 65535>=e?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function State(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||DEFAULT_FULL_SCHEMA,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function generateError(e,t){return new YAMLException(t,new Mark(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function throwError(e,t){throw generateError(e,t)}function throwWarning(e,t){e.onWarning&&e.onWarning.call(null,generateError(e,t))}function captureSegment(e,t,n,i){var o,r,a,s;if(n>t){if(s=e.input.slice(t,n),i)for(o=0,r=s.length;r>o;o+=1)a=s.charCodeAt(o),9===a||a>=32&&1114111>=a||throwError(e,"expected valid JSON character");else PATTERN_NON_PRINTABLE.test(s)&&throwError(e,"the stream contains non-printable characters");e.result+=s}}function mergeMappings(e,t,n,i){var o,r,a,s;for(common.isObject(n)||throwError(e,"cannot merge mappings; the provided source object is unacceptable"),o=Object.keys(n),a=0,s=o.length;s>a;a+=1)r=o[a],_hasOwnProperty.call(t,r)||(t[r]=n[r],i[r]=!0)}function storeMappingPair(e,t,n,i,o,r){var a,s;if(o=String(o),null===t&&(t={}),"tag:yaml.org,2002:merge"===i)if(Array.isArray(r))for(a=0,s=r.length;s>a;a+=1)mergeMappings(e,t,r[a],n);else mergeMappings(e,t,r,n);else e.json||_hasOwnProperty.call(n,o)||!_hasOwnProperty.call(t,o)||throwError(e,"duplicated mapping key"),t[o]=r,delete n[o];return t}function readLineBreak(e){var t;t=e.input.charCodeAt(e.position),10===t?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):throwError(e,"a line break is expected"),e.line+=1,e.lineStart=e.position}function skipSeparationSpace(e,t,n){for(var i=0,o=e.input.charCodeAt(e.position);0!==o;){for(;is_WHITE_SPACE(o);)o=e.input.charCodeAt(++e.position);if(t&&35===o)do o=e.input.charCodeAt(++e.position);while(10!==o&&13!==o&&0!==o);if(!is_EOL(o))break;for(readLineBreak(e),o=e.input.charCodeAt(e.position),i++,e.lineIndent=0;32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position)}return-1!==n&&0!==i&&e.lineIndent<n&&throwWarning(e,"deficient indentation"),i}function testDocumentSeparator(e){var t,n=e.position;return t=e.input.charCodeAt(n),(45===t||46===t)&&t===e.input.charCodeAt(n+1)&&t===e.input.charCodeAt(n+2)&&(n+=3,t=e.input.charCodeAt(n),0===t||is_WS_OR_EOL(t))}function writeFoldedLines(e,t){1===t?e.result+=" ":t>1&&(e.result+=common.repeat("\n",t-1))}function readPlainScalar(e,t,n){var i,o,r,a,s,p,c,l,u,d=e.kind,h=e.result;if(u=e.input.charCodeAt(e.position),is_WS_OR_EOL(u)||is_FLOW_INDICATOR(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(o=e.input.charCodeAt(e.position+1),is_WS_OR_EOL(o)||n&&is_FLOW_INDICATOR(o)))return!1;for(e.kind="scalar",e.result="",r=a=e.position,s=!1;0!==u;){if(58===u){if(o=e.input.charCodeAt(e.position+1),is_WS_OR_EOL(o)||n&&is_FLOW_INDICATOR(o))break}else if(35===u){if(i=e.input.charCodeAt(e.position-1),is_WS_OR_EOL(i))break}else{if(e.position===e.lineStart&&testDocumentSeparator(e)||n&&is_FLOW_INDICATOR(u))break;if(is_EOL(u)){if(p=e.line,c=e.lineStart,l=e.lineIndent,skipSeparationSpace(e,!1,-1),e.lineIndent>=t){s=!0,u=e.input.charCodeAt(e.position);continue}e.position=a,e.line=p,e.lineStart=c,e.lineIndent=l;break}}s&&(captureSegment(e,r,a,!1),writeFoldedLines(e,e.line-p),r=a=e.position,s=!1),is_WHITE_SPACE(u)||(a=e.position+1),u=e.input.charCodeAt(++e.position)}return captureSegment(e,r,a,!1),e.result?!0:(e.kind=d,e.result=h,!1)}function readSingleQuotedScalar(e,t){var n,i,o;if(n=e.input.charCodeAt(e.position),39!==n)return!1;for(e.kind="scalar",e.result="",e.position++,i=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(captureSegment(e,i,e.position,!0),n=e.input.charCodeAt(++e.position),39!==n)return!0;i=o=e.position,e.position++}else is_EOL(n)?(captureSegment(e,i,o,!0),writeFoldedLines(e,skipSeparationSpace(e,!1,t)),i=o=e.position):e.position===e.lineStart&&testDocumentSeparator(e)?throwError(e,"unexpected end of the document within a single quoted scalar"):(e.position++,o=e.position);throwError(e,"unexpected end of the stream within a single quoted scalar")}function readDoubleQuotedScalar(e,t){var n,i,o,r,a,s;if(s=e.input.charCodeAt(e.position),34!==s)return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(s=e.input.charCodeAt(e.position));){if(34===s)return captureSegment(e,n,e.position,!0),e.position++,!0;if(92===s){if(captureSegment(e,n,e.position,!0),s=e.input.charCodeAt(++e.position),is_EOL(s))skipSeparationSpace(e,!1,t);else if(256>s&&simpleEscapeCheck[s])e.result+=simpleEscapeMap[s],e.position++;else if((a=escapedHexLen(s))>0){for(o=a,r=0;o>0;o--)s=e.input.charCodeAt(++e.position),(a=fromHexCode(s))>=0?r=(r<<4)+a:throwError(e,"expected hexadecimal character");e.result+=charFromCodepoint(r),e.position++}else throwError(e,"unknown escape sequence");n=i=e.position}else is_EOL(s)?(captureSegment(e,n,i,!0),writeFoldedLines(e,skipSeparationSpace(e,!1,t)),n=i=e.position):e.position===e.lineStart&&testDocumentSeparator(e)?throwError(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}throwError(e,"unexpected end of the stream within a double quoted scalar")}function readFlowCollection(e,t){var n,i,o,r,a,s,p,c,l,u,d,h=!0,f=e.tag,_=e.anchor,A={};if(d=e.input.charCodeAt(e.position),91===d)r=93,p=!1,i=[];else{if(123!==d)return!1;r=125,p=!0,i={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),d=e.input.charCodeAt(++e.position);0!==d;){if(skipSeparationSpace(e,!0,t),d=e.input.charCodeAt(e.position),d===r)return e.position++,e.tag=f,e.anchor=_,e.kind=p?"mapping":"sequence",e.result=i,!0;h||throwError(e,"missed comma between flow collection entries"),l=c=u=null,a=s=!1,63===d&&(o=e.input.charCodeAt(e.position+1),is_WS_OR_EOL(o)&&(a=s=!0,e.position++,skipSeparationSpace(e,!0,t))),n=e.line,composeNode(e,t,CONTEXT_FLOW_IN,!1,!0),l=e.tag,c=e.result,skipSeparationSpace(e,!0,t),d=e.input.charCodeAt(e.position),!s&&e.line!==n||58!==d||(a=!0,d=e.input.charCodeAt(++e.position),skipSeparationSpace(e,!0,t),composeNode(e,t,CONTEXT_FLOW_IN,!1,!0),u=e.result),p?storeMappingPair(e,i,A,l,c,u):a?i.push(storeMappingPair(e,null,A,l,c,u)):i.push(c),skipSeparationSpace(e,!0,t),d=e.input.charCodeAt(e.position),44===d?(h=!0,d=e.input.charCodeAt(++e.position)):h=!1}throwError(e,"unexpected end of the stream within a flow collection")}function readBlockScalar(e,t){var n,i,o,r,a=CHOMPING_CLIP,s=!1,p=!1,c=t,l=0,u=!1;if(r=e.input.charCodeAt(e.position),124===r)i=!1;else{if(62!==r)return!1;i=!0}for(e.kind="scalar",e.result="";0!==r;)if(r=e.input.charCodeAt(++e.position),43===r||45===r)CHOMPING_CLIP===a?a=43===r?CHOMPING_KEEP:CHOMPING_STRIP:throwError(e,"repeat of a chomping mode identifier");else{if(!((o=fromDecimalCode(r))>=0))break;0===o?throwError(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):p?throwError(e,"repeat of an indentation width identifier"):(c=t+o-1,p=!0)}if(is_WHITE_SPACE(r)){do r=e.input.charCodeAt(++e.position);while(is_WHITE_SPACE(r));if(35===r)do r=e.input.charCodeAt(++e.position);while(!is_EOL(r)&&0!==r)}for(;0!==r;){for(readLineBreak(e),e.lineIndent=0,r=e.input.charCodeAt(e.position);(!p||e.lineIndent<c)&&32===r;)e.lineIndent++,r=e.input.charCodeAt(++e.position);if(!p&&e.lineIndent>c&&(c=e.lineIndent),is_EOL(r))l++;else{if(e.lineIndent<c){a===CHOMPING_KEEP?e.result+=common.repeat("\n",s?1+l:l):a===CHOMPING_CLIP&&s&&(e.result+="\n");break}for(i?is_WHITE_SPACE(r)?(u=!0,e.result+=common.repeat("\n",s?1+l:l)):u?(u=!1,e.result+=common.repeat("\n",l+1)):0===l?s&&(e.result+=" "):e.result+=common.repeat("\n",l):e.result+=common.repeat("\n",s?1+l:l),s=!0,p=!0,l=0,n=e.position;!is_EOL(r)&&0!==r;)r=e.input.charCodeAt(++e.position);captureSegment(e,n,e.position,!1)}}return!0}function readBlockSequence(e,t){var n,i,o,r=e.tag,a=e.anchor,s=[],p=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=s),o=e.input.charCodeAt(e.position);0!==o&&45===o&&(i=e.input.charCodeAt(e.position+1),is_WS_OR_EOL(i));)if(p=!0,e.position++,skipSeparationSpace(e,!0,-1)&&e.lineIndent<=t)s.push(null),o=e.input.charCodeAt(e.position);else if(n=e.line,composeNode(e,t,CONTEXT_BLOCK_IN,!1,!0),s.push(e.result),skipSeparationSpace(e,!0,-1),o=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==o)throwError(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break;return p?(e.tag=r,e.anchor=a,e.kind="sequence",e.result=s,!0):!1}function readBlockMapping(e,t,n){var i,o,r,a,s=e.tag,p=e.anchor,c={},l={},u=null,d=null,h=null,f=!1,_=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=c),a=e.input.charCodeAt(e.position);0!==a;){if(i=e.input.charCodeAt(e.position+1),r=e.line,63!==a&&58!==a||!is_WS_OR_EOL(i)){if(!composeNode(e,n,CONTEXT_FLOW_OUT,!1,!0))break;if(e.line===r){for(a=e.input.charCodeAt(e.position);is_WHITE_SPACE(a);)a=e.input.charCodeAt(++e.position);if(58===a)a=e.input.charCodeAt(++e.position),is_WS_OR_EOL(a)||throwError(e,"a whitespace character is expected after the key-value separator within a block mapping"),f&&(storeMappingPair(e,c,l,u,d,null),u=d=h=null),_=!0,f=!1,o=!1,u=e.tag,d=e.result;else{if(!_)return e.tag=s,e.anchor=p,!0;throwError(e,"can not read an implicit mapping pair; a colon is missed")}}else{if(!_)return e.tag=s,e.anchor=p,!0;throwError(e,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===a?(f&&(storeMappingPair(e,c,l,u,d,null),u=d=h=null),_=!0,f=!0,o=!0):f?(f=!1,o=!0):throwError(e,"incomplete explicit mapping pair; a key node is missed"),e.position+=1,a=i;if((e.line===r||e.lineIndent>t)&&(composeNode(e,t,CONTEXT_BLOCK_OUT,!0,o)&&(f?d=e.result:h=e.result),f||(storeMappingPair(e,c,l,u,d,h),u=d=h=null),skipSeparationSpace(e,!0,-1),a=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==a)throwError(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return f&&storeMappingPair(e,c,l,u,d,null),_&&(e.tag=s,e.anchor=p,e.kind="mapping",e.result=c),_}function readTagProperty(e){var t,n,i,o,r=!1,a=!1;if(o=e.input.charCodeAt(e.position),33!==o)return!1;if(null!==e.tag&&throwError(e,"duplication of a tag property"),o=e.input.charCodeAt(++e.position),60===o?(r=!0,o=e.input.charCodeAt(++e.position)):33===o?(a=!0,n="!!",o=e.input.charCodeAt(++e.position)):n="!",t=e.position,r){do o=e.input.charCodeAt(++e.position);while(0!==o&&62!==o);e.position<e.length?(i=e.input.slice(t,e.position),o=e.input.charCodeAt(++e.position)):throwError(e,"unexpected end of the stream within a verbatim tag")}else{for(;0!==o&&!is_WS_OR_EOL(o);)33===o&&(a?throwError(e,"tag suffix cannot contain exclamation marks"):(n=e.input.slice(t-1,e.position+1),PATTERN_TAG_HANDLE.test(n)||throwError(e,"named tag handle cannot contain such characters"),a=!0,t=e.position+1)),o=e.input.charCodeAt(++e.position);i=e.input.slice(t,e.position),PATTERN_FLOW_INDICATORS.test(i)&&throwError(e,"tag suffix cannot contain flow indicator characters")}return i&&!PATTERN_TAG_URI.test(i)&&throwError(e,"tag name cannot contain such characters: "+i),r?e.tag=i:_hasOwnProperty.call(e.tagMap,n)?e.tag=e.tagMap[n]+i:"!"===n?e.tag="!"+i:"!!"===n?e.tag="tag:yaml.org,2002:"+i:throwError(e,'undeclared tag handle "'+n+'"'),!0}function readAnchorProperty(e){var t,n;if(n=e.input.charCodeAt(e.position),38!==n)return!1;for(null!==e.anchor&&throwError(e,"duplication of an anchor property"),n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!is_WS_OR_EOL(n)&&!is_FLOW_INDICATOR(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&throwError(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(t,e.position),!0}function readAlias(e){var t,n,i;if(i=e.input.charCodeAt(e.position),42!==i)return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!is_WS_OR_EOL(i)&&!is_FLOW_INDICATOR(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&throwError(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),e.anchorMap.hasOwnProperty(n)||throwError(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],skipSeparationSpace(e,!0,-1),!0}function composeNode(e,t,n,i,o){var r,a,s,p,c,l,u,d,h=1,f=!1,_=!1;if(null!==e.listener&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,r=a=s=CONTEXT_BLOCK_OUT===n||CONTEXT_BLOCK_IN===n,i&&skipSeparationSpace(e,!0,-1)&&(f=!0,e.lineIndent>t?h=1:e.lineIndent===t?h=0:e.lineIndent<t&&(h=-1)),1===h)for(;readTagProperty(e)||readAnchorProperty(e);)skipSeparationSpace(e,!0,-1)?(f=!0,s=r,e.lineIndent>t?h=1:e.lineIndent===t?h=0:e.lineIndent<t&&(h=-1)):s=!1;if(s&&(s=f||o),1!==h&&CONTEXT_BLOCK_OUT!==n||(u=CONTEXT_FLOW_IN===n||CONTEXT_FLOW_OUT===n?t:t+1,d=e.position-e.lineStart,1===h?s&&(readBlockSequence(e,d)||readBlockMapping(e,d,u))||readFlowCollection(e,u)?_=!0:(a&&readBlockScalar(e,u)||readSingleQuotedScalar(e,u)||readDoubleQuotedScalar(e,u)?_=!0:readAlias(e)?(_=!0,null===e.tag&&null===e.anchor||throwError(e,"alias node should not have any properties")):readPlainScalar(e,u,CONTEXT_FLOW_IN===n)&&(_=!0,null===e.tag&&(e.tag="?")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===h&&(_=s&&readBlockSequence(e,d))),null!==e.tag&&"!"!==e.tag)if("?"===e.tag){for(p=0,c=e.implicitTypes.length;c>p;p+=1)if(l=e.implicitTypes[p],l.resolve(e.result)){e.result=l.construct(e.result),e.tag=l.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else _hasOwnProperty.call(e.typeMap,e.tag)?(l=e.typeMap[e.tag],null!==e.result&&l.kind!==e.kind&&throwError(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):throwError(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):throwError(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||_}function readDocument(e){var t,n,i,o,r=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(o=e.input.charCodeAt(e.position))&&(skipSeparationSpace(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(a=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!is_WS_OR_EOL(o);)o=e.input.charCodeAt(++e.position);for(n=e.input.slice(t,e.position),i=[],n.length<1&&throwError(e,"directive name must not be less than one character in length");0!==o;){for(;is_WHITE_SPACE(o);)o=e.input.charCodeAt(++e.position);if(35===o){do o=e.input.charCodeAt(++e.position);while(0!==o&&!is_EOL(o));break}if(is_EOL(o))break;for(t=e.position;0!==o&&!is_WS_OR_EOL(o);)o=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==o&&readLineBreak(e),_hasOwnProperty.call(directiveHandlers,n)?directiveHandlers[n](e,n,i):throwWarning(e,'unknown document directive "'+n+'"')}return skipSeparationSpace(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,skipSeparationSpace(e,!0,-1)):a&&throwError(e,"directives end mark is expected"),composeNode(e,e.lineIndent-1,CONTEXT_BLOCK_OUT,!1,!0),skipSeparationSpace(e,!0,-1),e.checkLineBreaks&&PATTERN_NON_ASCII_LINE_BREAKS.test(e.input.slice(r,e.position))&&throwWarning(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&testDocumentSeparator(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,skipSeparationSpace(e,!0,-1))):void(e.position<e.length-1&&throwError(e,"end of the stream or a document separator is expected"))}function loadDocuments(e,t){e=String(e),t=t||{},0!==e.length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new State(e,t);for(n.input+="\x00";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)readDocument(n);return n.documents}function loadAll(e,t,n){var i,o,r=loadDocuments(e,n);for(i=0,o=r.length;o>i;i+=1)t(r[i])}function load(e,t){var n=loadDocuments(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new YAMLException("expected a single document in the stream, but found more")}}function safeLoadAll(e,t,n){loadAll(e,t,common.extend({schema:DEFAULT_SAFE_SCHEMA},n))}function safeLoad(e,t){return load(e,common.extend({schema:DEFAULT_SAFE_SCHEMA},t))}for(var common=require("./common"),YAMLException=require("./exception"),Mark=require("./mark"),DEFAULT_SAFE_SCHEMA=require("./schema/default_safe"),DEFAULT_FULL_SCHEMA=require("./schema/default_full"),_hasOwnProperty=Object.prototype.hasOwnProperty,CONTEXT_FLOW_IN=1,CONTEXT_FLOW_OUT=2,CONTEXT_BLOCK_IN=3,CONTEXT_BLOCK_OUT=4,CHOMPING_CLIP=1,CHOMPING_STRIP=2,CHOMPING_KEEP=3,PATTERN_NON_PRINTABLE=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,PATTERN_NON_ASCII_LINE_BREAKS=/[\x85\u2028\u2029]/,PATTERN_FLOW_INDICATORS=/[,\[\]\{\}]/,PATTERN_TAG_HANDLE=/^(?:!|!!|![a-z\-]+!)$/i,PATTERN_TAG_URI=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i,simpleEscapeCheck=new Array(256),simpleEscapeMap=new Array(256),i=0;256>i;i++)simpleEscapeCheck[i]=simpleEscapeSequence(i)?1:0,simpleEscapeMap[i]=simpleEscapeSequence(i);var directiveHandlers={YAML:function(e,t,n){var i,o,r;null!==e.version&&throwError(e,"duplication of %YAML directive"),1!==n.length&&throwError(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),null===i&&throwError(e,"ill-formed argument of the YAML directive"),o=parseInt(i[1],10),r=parseInt(i[2],10),1!==o&&throwError(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=2>r,1!==r&&2!==r&&throwWarning(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,o;2!==n.length&&throwError(e,"TAG directive accepts exactly two arguments"),i=n[0],o=n[1],PATTERN_TAG_HANDLE.test(i)||throwError(e,"ill-formed tag handle (first argument) of the TAG directive"),_hasOwnProperty.call(e.tagMap,i)&&throwError(e,'there is a previously declared suffix for "'+i+'" tag handle'),PATTERN_TAG_URI.test(o)||throwError(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[i]=o}};module.exports.loadAll=loadAll,module.exports.load=load,module.exports.safeLoadAll=safeLoadAll,module.exports.safeLoad=safeLoad; - -},{"./common":40,"./exception":42,"./mark":44,"./schema/default_full":47,"./schema/default_safe":48}],44:[function(require,module,exports){ -"use strict";function Mark(t,i,n,e,r){this.name=t,this.buffer=i,this.position=n,this.line=e,this.column=r}var common=require("./common");Mark.prototype.getSnippet=function(t,i){var n,e,r,o,s;if(!this.buffer)return null;for(t=t||4,i=i||75,n="",e=this.position;e>0&&-1==="\x00\r\n
\u2028\u2029".indexOf(this.buffer.charAt(e-1));)if(e-=1,this.position-e>i/2-1){n=" ... ",e+=5;break}for(r="",o=this.position;o<this.buffer.length&&-1==="\x00\r\n
\u2028\u2029".indexOf(this.buffer.charAt(o));)if(o+=1,o-this.position>i/2-1){r=" ... ",o-=5;break}return s=this.buffer.slice(e,o),common.repeat(" ",t)+n+s+r+"\n"+common.repeat(" ",t+this.position-e+n.length)+"^"},Mark.prototype.toString=function(t){var i,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),t||(i=this.getSnippet(),i&&(n+=":\n"+i)),n},module.exports=Mark; - -},{"./common":40}],45:[function(require,module,exports){ -"use strict";function compileList(i,e,t){var c=[];return i.include.forEach(function(i){t=compileList(i,e,t)}),i[e].forEach(function(i){t.forEach(function(e,t){e.tag===i.tag&&c.push(t)}),t.push(i)}),t.filter(function(i,e){return-1===c.indexOf(e)})}function compileMap(){function i(i){c[i.tag]=i}var e,t,c={};for(e=0,t=arguments.length;t>e;e+=1)arguments[e].forEach(i);return c}function Schema(i){this.include=i.include||[],this.implicit=i.implicit||[],this.explicit=i.explicit||[],this.implicit.forEach(function(i){if(i.loadKind&&"scalar"!==i.loadKind)throw new YAMLException("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=compileList(this,"implicit",[]),this.compiledExplicit=compileList(this,"explicit",[]),this.compiledTypeMap=compileMap(this.compiledImplicit,this.compiledExplicit)}var common=require("./common"),YAMLException=require("./exception"),Type=require("./type");Schema.DEFAULT=null,Schema.create=function(){var i,e;switch(arguments.length){case 1:i=Schema.DEFAULT,e=arguments[0];break;case 2:i=arguments[0],e=arguments[1];break;default:throw new YAMLException("Wrong number of arguments for Schema.create function")}if(i=common.toArray(i),e=common.toArray(e),!i.every(function(i){return i instanceof Schema}))throw new YAMLException("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!e.every(function(i){return i instanceof Type}))throw new YAMLException("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new Schema({include:i,explicit:e})},module.exports=Schema; - -},{"./common":40,"./exception":42,"./type":51}],46:[function(require,module,exports){ -"use strict";var Schema=require("../schema");module.exports=new Schema({include:[require("./json")]}); - -},{"../schema":45,"./json":50}],47:[function(require,module,exports){ -"use strict";var Schema=require("../schema");module.exports=Schema.DEFAULT=new Schema({include:[require("./default_safe")],explicit:[require("../type/js/undefined"),require("../type/js/regexp"),require("../type/js/function")]}); - -},{"../schema":45,"../type/js/function":56,"../type/js/regexp":57,"../type/js/undefined":58,"./default_safe":48}],48:[function(require,module,exports){ -"use strict";var Schema=require("../schema");module.exports=new Schema({include:[require("./core")],implicit:[require("../type/timestamp"),require("../type/merge")],explicit:[require("../type/binary"),require("../type/omap"),require("../type/pairs"),require("../type/set")]}); - -},{"../schema":45,"../type/binary":52,"../type/merge":60,"../type/omap":62,"../type/pairs":63,"../type/set":65,"../type/timestamp":67,"./core":46}],49:[function(require,module,exports){ -"use strict";var Schema=require("../schema");module.exports=new Schema({explicit:[require("../type/str"),require("../type/seq"),require("../type/map")]}); - -},{"../schema":45,"../type/map":59,"../type/seq":64,"../type/str":66}],50:[function(require,module,exports){ -"use strict";var Schema=require("../schema");module.exports=new Schema({include:[require("./failsafe")],implicit:[require("../type/null"),require("../type/bool"),require("../type/int"),require("../type/float")]}); - -},{"../schema":45,"../type/bool":53,"../type/float":54,"../type/int":55,"../type/null":61,"./failsafe":49}],51:[function(require,module,exports){ -"use strict";function compileStyleAliases(e){var t={};return null!==e&&Object.keys(e).forEach(function(n){e[n].forEach(function(e){t[String(e)]=n})}),t}function Type(e,t){if(t=t||{},Object.keys(t).forEach(function(t){if(-1===TYPE_CONSTRUCTOR_OPTIONS.indexOf(t))throw new YAMLException('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.defaultStyle=t.defaultStyle||null,this.styleAliases=compileStyleAliases(t.styleAliases||null),-1===YAML_NODE_KINDS.indexOf(this.kind))throw new YAMLException('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var YAMLException=require("./exception"),TYPE_CONSTRUCTOR_OPTIONS=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],YAML_NODE_KINDS=["scalar","sequence","mapping"];module.exports=Type; - -},{"./exception":42}],52:[function(require,module,exports){ -"use strict";function resolveYamlBinary(r){if(null===r)return!1;var e,n,u=0,t=r.length,a=BASE64_MAP;for(n=0;t>n;n++)if(e=a.indexOf(r.charAt(n)),!(e>64)){if(0>e)return!1;u+=6}return u%8===0}function constructYamlBinary(r){var e,n,u=r.replace(/[\r\n=]/g,""),t=u.length,a=BASE64_MAP,f=0,i=[];for(e=0;t>e;e++)e%4===0&&e&&(i.push(f>>16&255),i.push(f>>8&255),i.push(255&f)),f=f<<6|a.indexOf(u.charAt(e));return n=t%4*6,0===n?(i.push(f>>16&255),i.push(f>>8&255),i.push(255&f)):18===n?(i.push(f>>10&255),i.push(f>>2&255)):12===n&&i.push(f>>4&255),NodeBuffer?new NodeBuffer(i):i}function representYamlBinary(r){var e,n,u="",t=0,a=r.length,f=BASE64_MAP;for(e=0;a>e;e++)e%3===0&&e&&(u+=f[t>>18&63],u+=f[t>>12&63],u+=f[t>>6&63],u+=f[63&t]),t=(t<<8)+r[e];return n=a%3,0===n?(u+=f[t>>18&63],u+=f[t>>12&63],u+=f[t>>6&63],u+=f[63&t]):2===n?(u+=f[t>>10&63],u+=f[t>>4&63],u+=f[t<<2&63],u+=f[64]):1===n&&(u+=f[t>>2&63],u+=f[t<<4&63],u+=f[64],u+=f[64]),u}function isBinary(r){return NodeBuffer&&NodeBuffer.isBuffer(r)}var NodeBuffer;try{var _require=require;NodeBuffer=_require("buffer").Buffer}catch(__){}var Type=require("../type"),BASE64_MAP="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";module.exports=new Type("tag:yaml.org,2002:binary",{kind:"scalar",resolve:resolveYamlBinary,construct:constructYamlBinary,predicate:isBinary,represent:representYamlBinary}); - -},{"../type":51}],53:[function(require,module,exports){ -"use strict";function resolveYamlBoolean(e){if(null===e)return!1;var r=e.length;return 4===r&&("true"===e||"True"===e||"TRUE"===e)||5===r&&("false"===e||"False"===e||"FALSE"===e)}function constructYamlBoolean(e){return"true"===e||"True"===e||"TRUE"===e}function isBoolean(e){return"[object Boolean]"===Object.prototype.toString.call(e)}var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:bool",{kind:"scalar",resolve:resolveYamlBoolean,construct:constructYamlBoolean,predicate:isBoolean,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"}); - -},{"../type":51}],54:[function(require,module,exports){ -"use strict";function resolveYamlFloat(e){return null===e?!1:!!YAML_FLOAT_PATTERN.test(e)}function constructYamlFloat(e){var r,t,a,n;return r=e.replace(/_/g,"").toLowerCase(),t="-"===r[0]?-1:1,n=[],"+-".indexOf(r[0])>=0&&(r=r.slice(1)),".inf"===r?1===t?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===r?NaN:r.indexOf(":")>=0?(r.split(":").forEach(function(e){n.unshift(parseFloat(e,10))}),r=0,a=1,n.forEach(function(e){r+=e*a,a*=60}),t*r):t*parseFloat(r,10)}function representYamlFloat(e,r){var t;if(isNaN(e))switch(r){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(r){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(r){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(common.isNegativeZero(e))return"-0.0";return t=e.toString(10),SCIENTIFIC_WITHOUT_DOT.test(t)?t.replace("e",".e"):t}function isFloat(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!==0||common.isNegativeZero(e))}var common=require("../common"),Type=require("../type"),YAML_FLOAT_PATTERN=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),SCIENTIFIC_WITHOUT_DOT=/^[-+]?[0-9]+e/;module.exports=new Type("tag:yaml.org,2002:float",{kind:"scalar",resolve:resolveYamlFloat,construct:constructYamlFloat,predicate:isFloat,represent:representYamlFloat,defaultStyle:"lowercase"}); - -},{"../common":40,"../type":51}],55:[function(require,module,exports){ -"use strict";function isHexCode(e){return e>=48&&57>=e||e>=65&&70>=e||e>=97&&102>=e}function isOctCode(e){return e>=48&&55>=e}function isDecCode(e){return e>=48&&57>=e}function resolveYamlInteger(e){if(null===e)return!1;var r,t=e.length,n=0,i=!1;if(!t)return!1;if(r=e[n],"-"!==r&&"+"!==r||(r=e[++n]),"0"===r){if(n+1===t)return!0;if(r=e[++n],"b"===r){for(n++;t>n;n++)if(r=e[n],"_"!==r){if("0"!==r&&"1"!==r)return!1;i=!0}return i}if("x"===r){for(n++;t>n;n++)if(r=e[n],"_"!==r){if(!isHexCode(e.charCodeAt(n)))return!1;i=!0}return i}for(;t>n;n++)if(r=e[n],"_"!==r){if(!isOctCode(e.charCodeAt(n)))return!1;i=!0}return i}for(;t>n;n++)if(r=e[n],"_"!==r){if(":"===r)break;if(!isDecCode(e.charCodeAt(n)))return!1;i=!0}return i?":"!==r?!0:/^(:[0-5]?[0-9])+$/.test(e.slice(n)):!1}function constructYamlInteger(e){var r,t,n=e,i=1,o=[];return-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),r=n[0],"-"!==r&&"+"!==r||("-"===r&&(i=-1),n=n.slice(1),r=n[0]),"0"===n?0:"0"===r?"b"===n[1]?i*parseInt(n.slice(2),2):"x"===n[1]?i*parseInt(n,16):i*parseInt(n,8):-1!==n.indexOf(":")?(n.split(":").forEach(function(e){o.unshift(parseInt(e,10))}),n=0,t=1,o.forEach(function(e){n+=e*t,t*=60}),i*n):i*parseInt(n,10)}function isInteger(e){return"[object Number]"===Object.prototype.toString.call(e)&&e%1===0&&!common.isNegativeZero(e)}var common=require("../common"),Type=require("../type");module.exports=new Type("tag:yaml.org,2002:int",{kind:"scalar",resolve:resolveYamlInteger,construct:constructYamlInteger,predicate:isInteger,represent:{binary:function(e){return"0b"+e.toString(2)},octal:function(e){return"0"+e.toString(8)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return"0x"+e.toString(16).toUpperCase()}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}); - -},{"../common":40,"../type":51}],56:[function(require,module,exports){ -"use strict";function resolveJavascriptFunction(e){if(null===e)return!1;try{var r="("+e+")",n=esprima.parse(r,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&"FunctionExpression"===n.body[0].expression.type}catch(t){return!1}}function constructJavascriptFunction(e){var r,n="("+e+")",t=esprima.parse(n,{range:!0}),o=[];if("Program"!==t.type||1!==t.body.length||"ExpressionStatement"!==t.body[0].type||"FunctionExpression"!==t.body[0].expression.type)throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(e){o.push(e.name)}),r=t.body[0].expression.body.range,new Function(o,n.slice(r[0]+1,r[1]-1))}function representJavascriptFunction(e){return e.toString()}function isFunction(e){return"[object Function]"===Object.prototype.toString.call(e)}var esprima;try{var _require=require;esprima=_require("esprima")}catch(_){"undefined"!=typeof window&&(esprima=window.esprima)}var Type=require("../../type");module.exports=new Type("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:resolveJavascriptFunction,construct:constructJavascriptFunction,predicate:isFunction,represent:representJavascriptFunction}); - -},{"../../type":51}],57:[function(require,module,exports){ -"use strict";function resolveJavascriptRegExp(e){if(null===e)return!1;if(0===e.length)return!1;var r=e,t=/\/([gim]*)$/.exec(e),n="";if("/"===r[0]){if(t&&(n=t[1]),n.length>3)return!1;if("/"!==r[r.length-n.length-1])return!1}return!0}function constructJavascriptRegExp(e){var r=e,t=/\/([gim]*)$/.exec(e),n="";return"/"===r[0]&&(t&&(n=t[1]),r=r.slice(1,r.length-n.length-1)),new RegExp(r,n)}function representJavascriptRegExp(e){var r="/"+e.source+"/";return e.global&&(r+="g"),e.multiline&&(r+="m"),e.ignoreCase&&(r+="i"),r}function isRegExp(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var Type=require("../../type");module.exports=new Type("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:resolveJavascriptRegExp,construct:constructJavascriptRegExp,predicate:isRegExp,represent:representJavascriptRegExp}); - -},{"../../type":51}],58:[function(require,module,exports){ -"use strict";function resolveJavascriptUndefined(){return!0}function constructJavascriptUndefined(){}function representJavascriptUndefined(){return""}function isUndefined(e){return"undefined"==typeof e}var Type=require("../../type");module.exports=new Type("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:resolveJavascriptUndefined,construct:constructJavascriptUndefined,predicate:isUndefined,represent:representJavascriptUndefined}); - -},{"../../type":51}],59:[function(require,module,exports){ -"use strict";var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}}); - -},{"../type":51}],60:[function(require,module,exports){ -"use strict";function resolveYamlMerge(e){return"<<"===e||null===e}var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:merge",{kind:"scalar",resolve:resolveYamlMerge}); - -},{"../type":51}],61:[function(require,module,exports){ -"use strict";function resolveYamlNull(l){if(null===l)return!0;var e=l.length;return 1===e&&"~"===l||4===e&&("null"===l||"Null"===l||"NULL"===l)}function constructYamlNull(){return null}function isNull(l){return null===l}var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:null",{kind:"scalar",resolve:resolveYamlNull,construct:constructYamlNull,predicate:isNull,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"}); - -},{"../type":51}],62:[function(require,module,exports){ -"use strict";function resolveYamlOmap(r){if(null===r)return!0;var t,e,n,o,u,a=[],l=r;for(t=0,e=l.length;e>t;t+=1){if(n=l[t],u=!1,"[object Object]"!==_toString.call(n))return!1;for(o in n)if(_hasOwnProperty.call(n,o)){if(u)return!1;u=!0}if(!u)return!1;if(-1!==a.indexOf(o))return!1;a.push(o)}return!0}function constructYamlOmap(r){return null!==r?r:[]}var Type=require("../type"),_hasOwnProperty=Object.prototype.hasOwnProperty,_toString=Object.prototype.toString;module.exports=new Type("tag:yaml.org,2002:omap",{kind:"sequence",resolve:resolveYamlOmap,construct:constructYamlOmap}); - -},{"../type":51}],63:[function(require,module,exports){ -"use strict";function resolveYamlPairs(r){if(null===r)return!0;var e,t,n,l,o,a=r;for(o=new Array(a.length),e=0,t=a.length;t>e;e+=1){if(n=a[e],"[object Object]"!==_toString.call(n))return!1;if(l=Object.keys(n),1!==l.length)return!1;o[e]=[l[0],n[l[0]]]}return!0}function constructYamlPairs(r){if(null===r)return[];var e,t,n,l,o,a=r;for(o=new Array(a.length),e=0,t=a.length;t>e;e+=1)n=a[e],l=Object.keys(n),o[e]=[l[0],n[l[0]]];return o}var Type=require("../type"),_toString=Object.prototype.toString;module.exports=new Type("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:resolveYamlPairs,construct:constructYamlPairs}); - -},{"../type":51}],64:[function(require,module,exports){ -"use strict";var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}}); - -},{"../type":51}],65:[function(require,module,exports){ -"use strict";function resolveYamlSet(e){if(null===e)return!0;var r,t=e;for(r in t)if(_hasOwnProperty.call(t,r)&&null!==t[r])return!1;return!0}function constructYamlSet(e){return null!==e?e:{}}var Type=require("../type"),_hasOwnProperty=Object.prototype.hasOwnProperty;module.exports=new Type("tag:yaml.org,2002:set",{kind:"mapping",resolve:resolveYamlSet,construct:constructYamlSet}); - -},{"../type":51}],66:[function(require,module,exports){ -"use strict";var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return null!==r?r:""}}); - -},{"../type":51}],67:[function(require,module,exports){ -"use strict";function resolveYamlTimestamp(e){return null===e?!1:null!==YAML_DATE_REGEXP.exec(e)?!0:null!==YAML_TIMESTAMP_REGEXP.exec(e)}function constructYamlTimestamp(e){var t,r,n,l,a,m,s,T,i,E,u=0,o=null;if(t=YAML_DATE_REGEXP.exec(e),null===t&&(t=YAML_TIMESTAMP_REGEXP.exec(e)),null===t)throw new Error("Date resolve error");if(r=+t[1],n=+t[2]-1,l=+t[3],!t[4])return new Date(Date.UTC(r,n,l));if(a=+t[4],m=+t[5],s=+t[6],t[7]){for(u=t[7].slice(0,3);u.length<3;)u+="0";u=+u}return t[9]&&(T=+t[10],i=+(t[11]||0),o=6e4*(60*T+i),"-"===t[9]&&(o=-o)),E=new Date(Date.UTC(r,n,l,a,m,s,u)),o&&E.setTime(E.getTime()-o),E}function representYamlTimestamp(e){return e.toISOString()}var Type=require("../type"),YAML_DATE_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),YAML_TIMESTAMP_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");module.exports=new Type("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:resolveYamlTimestamp,construct:constructYamlTimestamp,instanceOf:Date,represent:representYamlTimestamp}); - -},{"../type":51}],68:[function(require,module,exports){ -function parse(e){if(e=""+e,!(e.length>1e4)){var a=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(a){var r=parseFloat(a[1]),c=(a[2]||"ms").toLowerCase();switch(c){case"years":case"year":case"yrs":case"yr":case"y":return r*y;case"days":case"day":case"d":return r*d;case"hours":case"hour":case"hrs":case"hr":case"h":return r*h;case"minutes":case"minute":case"mins":case"min":case"m":return r*m;case"seconds":case"second":case"secs":case"sec":case"s":return r*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r}}}}function short(e){return e>=d?Math.round(e/d)+"d":e>=h?Math.round(e/h)+"h":e>=m?Math.round(e/m)+"m":e>=s?Math.round(e/s)+"s":e+"ms"}function long(e){return plural(e,d,"day")||plural(e,h,"hour")||plural(e,m,"minute")||plural(e,s,"second")||e+" ms"}function plural(s,e,a){return e>s?void 0:1.5*e>s?Math.floor(s/e)+" "+a:Math.ceil(s/e)+" "+a+"s"}var s=1e3,m=60*s,h=60*m,d=24*h,y=365.25*d;module.exports=function(s,e){return e=e||{},"string"==typeof s?parse(s):e["long"]?long(s):short(s)}; - -},{}],69:[function(require,module,exports){ -/**! - * Ono v2.2.1 - * - * @link https://github.com/BigstickCarpet/ono - * @license MIT - */ -"use strict";function create(e){return function(r,t,o,n){var c,a=module.exports.formatter;"string"==typeof r?(c=a.apply(null,arguments),r=t=void 0):c="string"==typeof t?a.apply(null,slice.call(arguments,1)):a.apply(null,slice.call(arguments,2)),r instanceof Error||(t=r,r=void 0),r&&(c+=(c?" \n":"")+r.message);var i=new e(c);return extendError(i,r),extendToJSON(i),extend(i,t),i}}function extendError(e,r){r&&(extendStack(e,r),extend(e,r,!0))}function extendToJSON(e){e.toJSON=errorToJSON,e.inspect=errorToString}function extend(e,r,t){if(r&&"object"==typeof r)for(var o=Object.keys(r),n=0;n<o.length;n++){var c=o[n];if(!(t&&vendorSpecificErrorProperties.indexOf(c)>=0))try{e[c]=r[c]}catch(a){}}}function errorToJSON(){var e={},r=Object.keys(this);r=r.concat(vendorSpecificErrorProperties);for(var t=0;t<r.length;t++){var o=r[t],n=this[o],c=typeof n;"undefined"!==c&&"function"!==c&&(e[o]=n)}return e}function errorToString(){return JSON.stringify(this,null,2).replace(/\\n/g,"\n")}function extendStack(e,r){if(hasLazyStack(r))extendStackProperty(e,r);else{var t=r.stack;t&&(e.stack+=" \n\n"+r.stack)}}function hasLazyStack(e){if(!supportsLazyStack)return!1;var r=Object.getOwnPropertyDescriptor(e,"stack");return r?"function"==typeof r.get:!1}function extendStackProperty(e,r){var t=Object.getOwnPropertyDescriptor(r,"stack");if(t){var o=Object.getOwnPropertyDescriptor(e,"stack");Object.defineProperty(e,"stack",{get:function(){return o.get.apply(e)+" \n\n"+r.stack},enumerable:!1,configurable:!0})}}var util=require("util"),slice=Array.prototype.slice,vendorSpecificErrorProperties=["name","message","description","number","fileName","lineNumber","columnNumber","sourceURL","line","column","stack"];module.exports=create(Error),module.exports.error=create(Error),module.exports.eval=create(EvalError),module.exports.range=create(RangeError),module.exports.reference=create(ReferenceError),module.exports.syntax=create(SyntaxError),module.exports.type=create(TypeError),module.exports.uri=create(URIError),module.exports.formatter=util.format;var supportsLazyStack=function(){return!(!Object.getOwnPropertyDescriptor||!Object.defineProperty||"undefined"!=typeof navigator&&/Android/.test(navigator.userAgent))}(); - -},{"util":97}],70:[function(require,module,exports){ -(function (process){ -"use strict";function nextTick(e){for(var s=new Array(arguments.length-1),n=0;n<s.length;)s[n++]=arguments[n];process.nextTick(function(){e.apply(null,s)})}!process.version||0===process.version.indexOf("v0.")||0===process.version.indexOf("v1.")&&0!==process.version.indexOf("v1.8.")?module.exports=nextTick:module.exports=process.nextTick; - -}).call(this,require('_process')) - -},{"_process":71}],71:[function(require,module,exports){ -function cleanUpNextTick(){draining=!1,currentQueue.length?queue=currentQueue.concat(queue):queueIndex=-1,queue.length&&drainQueue()}function drainQueue(){if(!draining){var e=setTimeout(cleanUpNextTick);draining=!0;for(var n=queue.length;n;){for(currentQueue=queue,queue=[];++queueIndex<n;)currentQueue&¤tQueue[queueIndex].run();queueIndex=-1,n=queue.length}currentQueue=null,draining=!1,clearTimeout(e)}}function Item(e,n){this.fun=e,this.array=n}function noop(){}var process=module.exports={},queue=[],draining=!1,currentQueue,queueIndex=-1;process.nextTick=function(e){var n=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)n[r-1]=arguments[r];queue.push(new Item(e,n)),1!==queue.length||draining||setTimeout(drainQueue,0)},Item.prototype.run=function(){this.fun.apply(null,this.array)},process.title="browser",process.browser=!0,process.env={},process.argv=[],process.version="",process.versions={},process.on=noop,process.addListener=noop,process.once=noop,process.off=noop,process.removeListener=noop,process.removeAllListeners=noop,process.emit=noop,process.binding=function(e){throw new Error("process.binding is not supported")},process.cwd=function(){return"/"},process.chdir=function(e){throw new Error("process.chdir is not supported")},process.umask=function(){return 0}; - -},{}],72:[function(require,module,exports){ -(function (global){ -/*! https://mths.be/punycode v1.4.1 by @mathias */ -!function(e){function o(e){throw new RangeError(T[e])}function n(e,o){for(var n=e.length,r=[];n--;)r[n]=o(e[n]);return r}function r(e,o){var r=e.split("@"),t="";r.length>1&&(t=r[0]+"@",e=r[1]),e=e.replace(S,".");var u=e.split("."),i=n(u,o).join(".");return t+i}function t(e){for(var o,n,r=[],t=0,u=e.length;u>t;)o=e.charCodeAt(t++),o>=55296&&56319>=o&&u>t?(n=e.charCodeAt(t++),56320==(64512&n)?r.push(((1023&o)<<10)+(1023&n)+65536):(r.push(o),t--)):r.push(o);return r}function u(e){return n(e,function(e){var o="";return e>65535&&(e-=65536,o+=P(e>>>10&1023|55296),e=56320|1023&e),o+=P(e)}).join("")}function i(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:b}function f(e,o){return e+22+75*(26>e)-((0!=o)<<5)}function c(e,o,n){var r=0;for(e=n?M(e/j):e>>1,e+=M(e/o);e>L*C>>1;r+=b)e=M(e/L);return M(r+(L+1)*e/(e+m))}function l(e){var n,r,t,f,l,s,d,a,p,h,v=[],g=e.length,w=0,m=I,j=A;for(r=e.lastIndexOf(E),0>r&&(r=0),t=0;r>t;++t)e.charCodeAt(t)>=128&&o("not-basic"),v.push(e.charCodeAt(t));for(f=r>0?r+1:0;g>f;){for(l=w,s=1,d=b;f>=g&&o("invalid-input"),a=i(e.charCodeAt(f++)),(a>=b||a>M((x-w)/s))&&o("overflow"),w+=a*s,p=j>=d?y:d>=j+C?C:d-j,!(p>a);d+=b)h=b-p,s>M(x/h)&&o("overflow"),s*=h;n=v.length+1,j=c(w-l,n,0==l),M(w/n)>x-m&&o("overflow"),m+=M(w/n),w%=n,v.splice(w++,0,m)}return u(v)}function s(e){var n,r,u,i,l,s,d,a,p,h,v,g,w,m,j,F=[];for(e=t(e),g=e.length,n=I,r=0,l=A,s=0;g>s;++s)v=e[s],128>v&&F.push(P(v));for(u=i=F.length,i&&F.push(E);g>u;){for(d=x,s=0;g>s;++s)v=e[s],v>=n&&d>v&&(d=v);for(w=u+1,d-n>M((x-r)/w)&&o("overflow"),r+=(d-n)*w,n=d,s=0;g>s;++s)if(v=e[s],n>v&&++r>x&&o("overflow"),v==n){for(a=r,p=b;h=l>=p?y:p>=l+C?C:p-l,!(h>a);p+=b)j=a-h,m=b-h,F.push(P(f(h+j%m,0))),a=M(j/m);F.push(P(f(a,0))),l=c(r,w,u==i),r=0,++u}++r,++n}return F.join("")}function d(e){return r(e,function(e){return F.test(e)?l(e.slice(4).toLowerCase()):e})}function a(e){return r(e,function(e){return O.test(e)?"xn--"+s(e):e})}var p="object"==typeof exports&&exports&&!exports.nodeType&&exports,h="object"==typeof module&&module&&!module.nodeType&&module,v="object"==typeof global&&global;v.global!==v&&v.window!==v&&v.self!==v||(e=v);var g,w,x=2147483647,b=36,y=1,C=26,m=38,j=700,A=72,I=128,E="-",F=/^xn--/,O=/[^\x20-\x7E]/,S=/[\x2E\u3002\uFF0E\uFF61]/g,T={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},L=b-y,M=Math.floor,P=String.fromCharCode;if(g={version:"1.4.1",ucs2:{decode:t,encode:u},decode:l,encode:s,toASCII:a,toUnicode:d},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return g});else if(p&&h)if(module.exports==p)h.exports=g;else for(w in g)g.hasOwnProperty(w)&&(p[w]=g[w]);else e.punycode=g}(this); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],73:[function(require,module,exports){ -"use strict";function hasOwnProperty(r,e){return Object.prototype.hasOwnProperty.call(r,e)}module.exports=function(r,e,t,n){e=e||"&",t=t||"=";var o={};if("string"!=typeof r||0===r.length)return o;var a=/\+/g;r=r.split(e);var s=1e3;n&&"number"==typeof n.maxKeys&&(s=n.maxKeys);var p=r.length;s>0&&p>s&&(p=s);for(var y=0;p>y;++y){var u,c,i,l,f=r[y].replace(a,"%20"),v=f.indexOf(t);v>=0?(u=f.substr(0,v),c=f.substr(v+1)):(u=f,c=""),i=decodeURIComponent(u),l=decodeURIComponent(c),hasOwnProperty(o,i)?isArray(o[i])?o[i].push(l):o[i]=[o[i],l]:o[i]=l}return o};var isArray=Array.isArray||function(r){return"[object Array]"===Object.prototype.toString.call(r)}; - -},{}],74:[function(require,module,exports){ -"use strict";function map(r,e){if(r.map)return r.map(e);for(var t=[],n=0;n<r.length;n++)t.push(e(r[n],n));return t}var stringifyPrimitive=function(r){switch(typeof r){case"string":return r;case"boolean":return r?"true":"false";case"number":return isFinite(r)?r:"";default:return""}};module.exports=function(r,e,t,n){return e=e||"&",t=t||"=",null===r&&(r=void 0),"object"==typeof r?map(objectKeys(r),function(n){var i=encodeURIComponent(stringifyPrimitive(n))+t;return isArray(r[n])?map(r[n],function(r){return i+encodeURIComponent(stringifyPrimitive(r))}).join(e):i+encodeURIComponent(stringifyPrimitive(r[n]))}).join(e):n?encodeURIComponent(stringifyPrimitive(n))+t+encodeURIComponent(stringifyPrimitive(r)):""};var isArray=Array.isArray||function(r){return"[object Array]"===Object.prototype.toString.call(r)},objectKeys=Object.keys||function(r){var e=[];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&e.push(t);return e}; - -},{}],75:[function(require,module,exports){ -"use strict";exports.decode=exports.parse=require("./decode"),exports.encode=exports.stringify=require("./encode"); - -},{"./decode":73,"./encode":74}],76:[function(require,module,exports){ -module.exports=require("./lib/_stream_duplex.js"); - -},{"./lib/_stream_duplex.js":77}],77:[function(require,module,exports){ -"use strict";function Duplex(e){return this instanceof Duplex?(Readable.call(this,e),Writable.call(this,e),e&&e.readable===!1&&(this.readable=!1),e&&e.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,e&&e.allowHalfOpen===!1&&(this.allowHalfOpen=!1),void this.once("end",onend)):new Duplex(e)}function onend(){this.allowHalfOpen||this._writableState.ended||processNextTick(onEndNT,this)}function onEndNT(e){e.end()}function forEach(e,t){for(var r=0,i=e.length;i>r;r++)t(e[r],r)}var objectKeys=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};module.exports=Duplex;var processNextTick=require("process-nextick-args"),util=require("core-util-is");util.inherits=require("inherits");var Readable=require("./_stream_readable"),Writable=require("./_stream_writable");util.inherits(Duplex,Readable);for(var keys=objectKeys(Writable.prototype),v=0;v<keys.length;v++){var method=keys[v];Duplex.prototype[method]||(Duplex.prototype[method]=Writable.prototype[method])} - -},{"./_stream_readable":79,"./_stream_writable":81,"core-util-is":28,"inherits":35,"process-nextick-args":70}],78:[function(require,module,exports){ -"use strict";function PassThrough(r){return this instanceof PassThrough?void Transform.call(this,r):new PassThrough(r)}module.exports=PassThrough;var Transform=require("./_stream_transform"),util=require("core-util-is");util.inherits=require("inherits"),util.inherits(PassThrough,Transform),PassThrough.prototype._transform=function(r,s,i){i(null,r)}; - -},{"./_stream_transform":80,"core-util-is":28,"inherits":35}],79:[function(require,module,exports){ -(function (process){ -"use strict";function ReadableState(e,t){Duplex=Duplex||require("./_stream_duplex"),e=e||{},this.objectMode=!!e.objectMode,t instanceof Duplex&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,n=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:n,this.highWaterMark=~~this.highWaterMark,this.buffer=[],this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(StringDecoder||(StringDecoder=require("string_decoder/").StringDecoder),this.decoder=new StringDecoder(e.encoding),this.encoding=e.encoding)}function Readable(e){return Duplex=Duplex||require("./_stream_duplex"),this instanceof Readable?(this._readableState=new ReadableState(e,this),this.readable=!0,e&&"function"==typeof e.read&&(this._read=e.read),void Stream.call(this)):new Readable(e)}function readableAddChunk(e,t,r,n,a){var i=chunkInvalid(t,r);if(i)e.emit("error",i);else if(null===r)t.reading=!1,onEofChunk(e,t);else if(t.objectMode||r&&r.length>0)if(t.ended&&!a){var d=new Error("stream.push() after EOF");e.emit("error",d)}else if(t.endEmitted&&a){var d=new Error("stream.unshift() after end event");e.emit("error",d)}else{var o;!t.decoder||a||n||(r=t.decoder.write(r),o=!t.objectMode&&0===r.length),a||(t.reading=!1),o||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,a?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&emitReadable(e))),maybeReadMore(e,t)}else a||(t.reading=!1);return needMoreData(t)}function needMoreData(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}function computeNewHighWaterMark(e){return e>=MAX_HWM?e=MAX_HWM:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function howMuchToRead(e,t){return 0===t.length&&t.ended?0:t.objectMode?0===e?0:1:null===e||isNaN(e)?t.flowing&&t.buffer.length?t.buffer[0].length:t.length:0>=e?0:(e>t.highWaterMark&&(t.highWaterMark=computeNewHighWaterMark(e)),e>t.length?t.ended?t.length:(t.needReadable=!0,0):e)}function chunkInvalid(e,t){var r=null;return Buffer.isBuffer(t)||"string"==typeof t||null===t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function onEofChunk(e,t){if(!t.ended){if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,emitReadable(e)}}function emitReadable(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(debug("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?processNextTick(emitReadable_,e):emitReadable_(e))}function emitReadable_(e){debug("emit readable"),e.emit("readable"),flow(e)}function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,processNextTick(maybeReadMore_,e,t))}function maybeReadMore_(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(debug("maybeReadMore read 0"),e.read(0),r!==t.length);)r=t.length;t.readingMore=!1}function pipeOnDrain(e){return function(){var t=e._readableState;debug("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&EElistenerCount(e,"data")&&(t.flowing=!0,flow(e))}}function nReadingNextTick(e){debug("readable nexttick read 0"),e.read(0)}function resume(e,t){t.resumeScheduled||(t.resumeScheduled=!0,processNextTick(resume_,e,t))}function resume_(e,t){t.reading||(debug("resume read 0"),e.read(0)),t.resumeScheduled=!1,e.emit("resume"),flow(e),t.flowing&&!t.reading&&e.read(0)}function flow(e){var t=e._readableState;if(debug("flow",t.flowing),t.flowing)do var r=e.read();while(null!==r&&t.flowing)}function fromList(e,t){var r,n=t.buffer,a=t.length,i=!!t.decoder,d=!!t.objectMode;if(0===n.length)return null;if(0===a)r=null;else if(d)r=n.shift();else if(!e||e>=a)r=i?n.join(""):1===n.length?n[0]:Buffer.concat(n,a),n.length=0;else if(e<n[0].length){var o=n[0];r=o.slice(0,e),n[0]=o.slice(e)}else if(e===n[0].length)r=n.shift();else{r=i?"":new Buffer(e);for(var l=0,u=0,s=n.length;s>u&&e>l;u++){var o=n[0],h=Math.min(e-l,o.length);i?r+=o.slice(0,h):o.copy(r,l,0,h),h<o.length?n[0]=o.slice(h):n.shift(),l+=h}}return r}function endReadable(e){var t=e._readableState;if(t.length>0)throw new Error("endReadable called on non-empty stream");t.endEmitted||(t.ended=!0,processNextTick(endReadableNT,t,e))}function endReadableNT(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function forEach(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r],r)}function indexOf(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r]===t)return r;return-1}module.exports=Readable;var processNextTick=require("process-nextick-args"),isArray=require("isarray"),Buffer=require("buffer").Buffer;Readable.ReadableState=ReadableState;var EE=require("events"),EElistenerCount=function(e,t){return e.listeners(t).length},Stream;!function(){try{Stream=require("stream")}catch(e){}finally{Stream||(Stream=require("events").EventEmitter)}}();var Buffer=require("buffer").Buffer,util=require("core-util-is");util.inherits=require("inherits");var debugUtil=require("util"),debug=void 0;debug=debugUtil&&debugUtil.debuglog?debugUtil.debuglog("stream"):function(){};var StringDecoder;util.inherits(Readable,Stream);var Duplex,Duplex;Readable.prototype.push=function(e,t){var r=this._readableState;return r.objectMode||"string"!=typeof e||(t=t||r.defaultEncoding,t!==r.encoding&&(e=new Buffer(e,t),t="")),readableAddChunk(this,r,e,t,!1)},Readable.prototype.unshift=function(e){var t=this._readableState;return readableAddChunk(this,t,e,"",!0)},Readable.prototype.isPaused=function(){return this._readableState.flowing===!1},Readable.prototype.setEncoding=function(e){return StringDecoder||(StringDecoder=require("string_decoder/").StringDecoder),this._readableState.decoder=new StringDecoder(e),this._readableState.encoding=e,this};var MAX_HWM=8388608;Readable.prototype.read=function(e){debug("read",e);var t=this._readableState,r=e;if(("number"!=typeof e||e>0)&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return debug("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?endReadable(this):emitReadable(this),null;if(e=howMuchToRead(e,t),0===e&&t.ended)return 0===t.length&&endReadable(this),null;var n=t.needReadable;debug("need readable",n),(0===t.length||t.length-e<t.highWaterMark)&&(n=!0,debug("length less than watermark",n)),(t.ended||t.reading)&&(n=!1,debug("reading or ended",n)),n&&(debug("do read"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1),n&&!t.reading&&(e=howMuchToRead(r,t));var a;return a=e>0?fromList(e,t):null,null===a&&(t.needReadable=!0,e=0),t.length-=e,0!==t.length||t.ended||(t.needReadable=!0),r!==e&&t.ended&&0===t.length&&endReadable(this),null!==a&&this.emit("data",a),a},Readable.prototype._read=function(e){this.emit("error",new Error("not implemented"))},Readable.prototype.pipe=function(e,t){function r(e){debug("onunpipe"),e===s&&a()}function n(){debug("onend"),e.end()}function a(){debug("cleanup"),e.removeListener("close",o),e.removeListener("finish",l),e.removeListener("drain",c),e.removeListener("error",d),e.removeListener("unpipe",r),s.removeListener("end",n),s.removeListener("end",a),s.removeListener("data",i),b=!0,!h.awaitDrain||e._writableState&&!e._writableState.needDrain||c()}function i(t){debug("ondata");var r=e.write(t);!1===r&&(1!==h.pipesCount||h.pipes[0]!==e||1!==s.listenerCount("data")||b||(debug("false write response, pause",s._readableState.awaitDrain),s._readableState.awaitDrain++),s.pause())}function d(t){debug("onerror",t),u(),e.removeListener("error",d),0===EElistenerCount(e,"error")&&e.emit("error",t)}function o(){e.removeListener("finish",l),u()}function l(){debug("onfinish"),e.removeListener("close",o),u()}function u(){debug("unpipe"),s.unpipe(e)}var s=this,h=this._readableState;switch(h.pipesCount){case 0:h.pipes=e;break;case 1:h.pipes=[h.pipes,e];break;default:h.pipes.push(e)}h.pipesCount+=1,debug("pipe count=%d opts=%j",h.pipesCount,t);var f=(!t||t.end!==!1)&&e!==process.stdout&&e!==process.stderr,p=f?n:a;h.endEmitted?processNextTick(p):s.once("end",p),e.on("unpipe",r);var c=pipeOnDrain(s);e.on("drain",c);var b=!1;return s.on("data",i),e._events&&e._events.error?isArray(e._events.error)?e._events.error.unshift(d):e._events.error=[d,e._events.error]:e.on("error",d),e.once("close",o),e.once("finish",l),e.emit("pipe",s),h.flowing||(debug("pipe resume"),s.resume()),e},Readable.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var r=t.pipes,n=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;n>a;a++)r[a].emit("unpipe",this);return this}var i=indexOf(t.pipes,e);return-1===i?this:(t.pipes.splice(i,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit("unpipe",this),this)},Readable.prototype.on=function(e,t){var r=Stream.prototype.on.call(this,e,t);if("data"===e&&!1!==this._readableState.flowing&&this.resume(),"readable"===e&&!this._readableState.endEmitted){var n=this._readableState;n.readableListening||(n.readableListening=!0,n.emittedReadable=!1,n.needReadable=!0,n.reading?n.length&&emitReadable(this,n):processNextTick(nReadingNextTick,this))}return r},Readable.prototype.addListener=Readable.prototype.on,Readable.prototype.resume=function(){var e=this._readableState;return e.flowing||(debug("resume"),e.flowing=!0,resume(this,e)),this},Readable.prototype.pause=function(){return debug("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(debug("pause"),this._readableState.flowing=!1,this.emit("pause")),this},Readable.prototype.wrap=function(e){var t=this._readableState,r=!1,n=this;e.on("end",function(){if(debug("wrapped end"),t.decoder&&!t.ended){var e=t.decoder.end();e&&e.length&&n.push(e)}n.push(null)}),e.on("data",function(a){if(debug("wrapped data"),t.decoder&&(a=t.decoder.write(a)),(!t.objectMode||null!==a&&void 0!==a)&&(t.objectMode||a&&a.length)){var i=n.push(a);i||(r=!0,e.pause())}});for(var a in e)void 0===this[a]&&"function"==typeof e[a]&&(this[a]=function(t){return function(){return e[t].apply(e,arguments)}}(a));var i=["error","close","destroy","pause","resume"];return forEach(i,function(t){e.on(t,n.emit.bind(n,t))}),n._read=function(t){debug("wrapped _read",t),r&&(r=!1,e.resume())},n},Readable._fromList=fromList; - -}).call(this,require('_process')) - -},{"./_stream_duplex":77,"_process":71,"buffer":25,"core-util-is":28,"events":32,"inherits":35,"isarray":37,"process-nextick-args":70,"stream":86,"string_decoder/":91,"util":23}],80:[function(require,module,exports){ -"use strict";function TransformState(r){this.afterTransform=function(t,n){return afterTransform(r,t,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function afterTransform(r,t,n){var e=r._transformState;e.transforming=!1;var i=e.writecb;if(!i)return r.emit("error",new Error("no writecb in Transform class"));e.writechunk=null,e.writecb=null,null!==n&&void 0!==n&&r.push(n),i(t);var a=r._readableState;a.reading=!1,(a.needReadable||a.length<a.highWaterMark)&&r._read(a.highWaterMark)}function Transform(r){if(!(this instanceof Transform))return new Transform(r);Duplex.call(this,r),this._transformState=new TransformState(this);var t=this;this._readableState.needReadable=!0,this._readableState.sync=!1,r&&("function"==typeof r.transform&&(this._transform=r.transform),"function"==typeof r.flush&&(this._flush=r.flush)),this.once("prefinish",function(){"function"==typeof this._flush?this._flush(function(r){done(t,r)}):done(t)})}function done(r,t){if(t)return r.emit("error",t);var n=r._writableState,e=r._transformState;if(n.length)throw new Error("calling transform done when ws.length != 0");if(e.transforming)throw new Error("calling transform done when still transforming");return r.push(null)}module.exports=Transform;var Duplex=require("./_stream_duplex"),util=require("core-util-is");util.inherits=require("inherits"),util.inherits(Transform,Duplex),Transform.prototype.push=function(r,t){return this._transformState.needTransform=!1,Duplex.prototype.push.call(this,r,t)},Transform.prototype._transform=function(r,t,n){throw new Error("not implemented")},Transform.prototype._write=function(r,t,n){var e=this._transformState;if(e.writecb=n,e.writechunk=r,e.writeencoding=t,!e.transforming){var i=this._readableState;(e.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},Transform.prototype._read=function(r){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0}; - -},{"./_stream_duplex":77,"core-util-is":28,"inherits":35}],81:[function(require,module,exports){ -(function (process){ -"use strict";function nop(){}function WriteReq(e,t,r){this.chunk=e,this.encoding=t,this.callback=r,this.next=null}function WritableState(e,t){Duplex=Duplex||require("./_stream_duplex"),e=e||{},this.objectMode=!!e.objectMode,t instanceof Duplex&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var r=e.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var n=e.decodeStrings===!1;this.decodeStrings=!n,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){onwrite(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new CorkedRequest(this),this.corkedRequestsFree.next=new CorkedRequest(this)}function Writable(e){return Duplex=Duplex||require("./_stream_duplex"),this instanceof Writable||this instanceof Duplex?(this._writableState=new WritableState(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev)),void Stream.call(this)):new Writable(e)}function writeAfterEnd(e,t){var r=new Error("write after end");e.emit("error",r),processNextTick(t,r)}function validChunk(e,t,r,i){var n=!0;if(!Buffer.isBuffer(r)&&"string"!=typeof r&&null!==r&&void 0!==r&&!t.objectMode){var s=new TypeError("Invalid non-string/buffer chunk");e.emit("error",s),processNextTick(i,s),n=!1}return n}function decodeChunk(e,t,r){return e.objectMode||e.decodeStrings===!1||"string"!=typeof t||(t=new Buffer(t,r)),t}function writeOrBuffer(e,t,r,i,n){r=decodeChunk(t,r,i),Buffer.isBuffer(r)&&(i="buffer");var s=t.objectMode?1:r.length;t.length+=s;var f=t.length<t.highWaterMark;if(f||(t.needDrain=!0),t.writing||t.corked){var u=t.lastBufferedRequest;t.lastBufferedRequest=new WriteReq(r,i,n),u?u.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else doWrite(e,t,!1,s,r,i,n);return f}function doWrite(e,t,r,i,n,s,f){t.writelen=i,t.writecb=f,t.writing=!0,t.sync=!0,r?e._writev(n,t.onwrite):e._write(n,s,t.onwrite),t.sync=!1}function onwriteError(e,t,r,i,n){--t.pendingcb,r?processNextTick(n,i):n(i),e._writableState.errorEmitted=!0,e.emit("error",i)}function onwriteStateUpdate(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}function onwrite(e,t){var r=e._writableState,i=r.sync,n=r.writecb;if(onwriteStateUpdate(r),t)onwriteError(e,r,i,t,n);else{var s=needFinish(r);s||r.corked||r.bufferProcessing||!r.bufferedRequest||clearBuffer(e,r),i?asyncWrite(afterWrite,e,r,s,n):afterWrite(e,r,s,n)}}function afterWrite(e,t,r,i){r||onwriteDrain(e,t),t.pendingcb--,i(),finishMaybe(e,t)}function onwriteDrain(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}function clearBuffer(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var i=t.bufferedRequestCount,n=new Array(i),s=t.corkedRequestsFree;s.entry=r;for(var f=0;r;)n[f]=r,r=r.next,f+=1;doWrite(e,t,!0,t.length,n,"",s.finish),t.pendingcb++,t.lastBufferedRequest=null,t.corkedRequestsFree=s.next,s.next=null}else{for(;r;){var u=r.chunk,o=r.encoding,a=r.callback,c=t.objectMode?1:u.length;if(doWrite(e,t,!1,c,u,o,a),r=r.next,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequestCount=0,t.bufferedRequest=r,t.bufferProcessing=!1}function needFinish(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function prefinish(e,t){t.prefinished||(t.prefinished=!0,e.emit("prefinish"))}function finishMaybe(e,t){var r=needFinish(t);return r&&(0===t.pendingcb?(prefinish(e,t),t.finished=!0,e.emit("finish")):prefinish(e,t)),r}function endWritable(e,t,r){t.ending=!0,finishMaybe(e,t),r&&(t.finished?processNextTick(r):e.once("finish",r)),t.ended=!0,e.writable=!1}function CorkedRequest(e){var t=this;this.next=null,this.entry=null,this.finish=function(r){var i=t.entry;for(t.entry=null;i;){var n=i.callback;e.pendingcb--,n(r),i=i.next}e.corkedRequestsFree?e.corkedRequestsFree.next=t:e.corkedRequestsFree=t}}module.exports=Writable;var processNextTick=require("process-nextick-args"),asyncWrite=!process.browser&&["v0.10","v0.9."].indexOf(process.version.slice(0,5))>-1?setImmediate:processNextTick,Buffer=require("buffer").Buffer;Writable.WritableState=WritableState;var util=require("core-util-is");util.inherits=require("inherits");var internalUtil={deprecate:require("util-deprecate")},Stream;!function(){try{Stream=require("stream")}catch(e){}finally{Stream||(Stream=require("events").EventEmitter)}}();var Buffer=require("buffer").Buffer;util.inherits(Writable,Stream);var Duplex;WritableState.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(WritableState.prototype,"buffer",{get:internalUtil.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(e){}}();var Duplex;Writable.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe. Not readable."))},Writable.prototype.write=function(e,t,r){var i=this._writableState,n=!1;return"function"==typeof t&&(r=t,t=null),Buffer.isBuffer(e)?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof r&&(r=nop),i.ended?writeAfterEnd(this,r):validChunk(this,i,e,r)&&(i.pendingcb++,n=writeOrBuffer(this,i,e,t,r)),n},Writable.prototype.cork=function(){var e=this._writableState;e.corked++},Writable.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||clearBuffer(this,e))},Writable.prototype.setDefaultEncoding=function(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);this._writableState.defaultEncoding=e},Writable.prototype._write=function(e,t,r){r(new Error("not implemented"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,r){var i=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!==e&&void 0!==e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||i.finished||endWritable(this,i,r)}; - -}).call(this,require('_process')) - -},{"./_stream_duplex":77,"_process":71,"buffer":25,"core-util-is":28,"events":32,"inherits":35,"process-nextick-args":70,"stream":86,"util-deprecate":95}],82:[function(require,module,exports){ -module.exports=require("./lib/_stream_passthrough.js"); - -},{"./lib/_stream_passthrough.js":78}],83:[function(require,module,exports){ -var Stream=function(){try{return require("stream")}catch(r){}}();exports=module.exports=require("./lib/_stream_readable.js"),exports.Stream=Stream||exports,exports.Readable=exports,exports.Writable=require("./lib/_stream_writable.js"),exports.Duplex=require("./lib/_stream_duplex.js"),exports.Transform=require("./lib/_stream_transform.js"),exports.PassThrough=require("./lib/_stream_passthrough.js"); - -},{"./lib/_stream_duplex.js":77,"./lib/_stream_passthrough.js":78,"./lib/_stream_readable.js":79,"./lib/_stream_transform.js":80,"./lib/_stream_writable.js":81,"stream":86}],84:[function(require,module,exports){ -module.exports=require("./lib/_stream_transform.js"); - -},{"./lib/_stream_transform.js":80}],85:[function(require,module,exports){ -module.exports=require("./lib/_stream_writable.js"); - -},{"./lib/_stream_writable.js":81}],86:[function(require,module,exports){ -function Stream(){EE.call(this)}module.exports=Stream;var EE=require("events").EventEmitter,inherits=require("inherits");inherits(Stream,EE),Stream.Readable=require("readable-stream/readable.js"),Stream.Writable=require("readable-stream/writable.js"),Stream.Duplex=require("readable-stream/duplex.js"),Stream.Transform=require("readable-stream/transform.js"),Stream.PassThrough=require("readable-stream/passthrough.js"),Stream.Stream=Stream,Stream.prototype.pipe=function(e,r){function t(r){e.writable&&!1===e.write(r)&&m.pause&&m.pause()}function n(){m.readable&&m.resume&&m.resume()}function a(){u||(u=!0,e.end())}function o(){u||(u=!0,"function"==typeof e.destroy&&e.destroy())}function i(e){if(s(),0===EE.listenerCount(this,"error"))throw e}function s(){m.removeListener("data",t),e.removeListener("drain",n),m.removeListener("end",a),m.removeListener("close",o),m.removeListener("error",i),e.removeListener("error",i),m.removeListener("end",s),m.removeListener("close",s),e.removeListener("close",s)}var m=this;m.on("data",t),e.on("drain",n),e._isStdio||r&&r.end===!1||(m.on("end",a),m.on("close",o));var u=!1;return m.on("error",i),e.on("error",i),m.on("end",s),m.on("close",s),e.on("close",s),e.emit("pipe",m),e}; - -},{"events":32,"inherits":35,"readable-stream/duplex.js":76,"readable-stream/passthrough.js":82,"readable-stream/readable.js":83,"readable-stream/transform.js":84,"readable-stream/writable.js":85}],87:[function(require,module,exports){ -(function (global){ -var ClientRequest=require("./lib/request"),extend=require("xtend"),statusCodes=require("builtin-status-codes"),url=require("url"),http=exports;http.request=function(t,e){t="string"==typeof t?url.parse(t):extend(t);var r=-1===global.location.protocol.search(/^https?:$/)?"http:":"",s=t.protocol||r,o=t.hostname||t.host,n=t.port,u=t.path||"/";o&&-1!==o.indexOf(":")&&(o="["+o+"]"),t.url=(o?s+"//"+o:"")+(n?":"+n:"")+u,t.method=(t.method||"GET").toUpperCase(),t.headers=t.headers||{};var C=new ClientRequest(t);return e&&C.on("response",e),C},http.get=function(t,e){var r=http.request(t,e);return r.end(),r},http.Agent=function(){},http.Agent.defaultMaxSockets=4,http.STATUS_CODES=statusCodes,http.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./lib/request":89,"builtin-status-codes":26,"url":93,"xtend":98}],88:[function(require,module,exports){ -(function (global){ -function checkTypeSupport(e){try{return xhr.responseType=e,xhr.responseType===e}catch(r){}return!1}function isFunction(e){return"function"==typeof e}exports.fetch=isFunction(global.fetch)&&isFunction(global.ReadableByteStream),exports.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),exports.blobConstructor=!0}catch(e){}var xhr=new global.XMLHttpRequest;xhr.open("GET",global.location.host?"/":"https://example.com");var haveArrayBuffer="undefined"!=typeof global.ArrayBuffer,haveSlice=haveArrayBuffer&&isFunction(global.ArrayBuffer.prototype.slice);exports.arraybuffer=haveArrayBuffer&&checkTypeSupport("arraybuffer"),exports.msstream=!exports.fetch&&haveSlice&&checkTypeSupport("ms-stream"),exports.mozchunkedarraybuffer=!exports.fetch&&haveArrayBuffer&&checkTypeSupport("moz-chunked-arraybuffer"),exports.overrideMimeType=isFunction(xhr.overrideMimeType),exports.vbArray=isFunction(global.VBArray),xhr=null; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],89:[function(require,module,exports){ -(function (process,global,Buffer){ -function decideMode(e){return capability.fetch?"fetch":capability.mozchunkedarraybuffer?"moz-chunked-arraybuffer":capability.msstream?"ms-stream":capability.arraybuffer&&e?"arraybuffer":capability.vbArray&&e?"text:vbarray":"text"}function statusValid(e){try{var t=e.status;return null!==t&&0!==t}catch(r){return!1}}var capability=require("./capability"),inherits=require("inherits"),response=require("./response"),stream=require("stream"),toArrayBuffer=require("to-arraybuffer"),IncomingMessage=response.IncomingMessage,rStates=response.readyStates,ClientRequest=module.exports=function(e){var t=this;stream.Writable.call(t),t._opts=e,t._body=[],t._headers={},e.auth&&t.setHeader("Authorization","Basic "+new Buffer(e.auth).toString("base64")),Object.keys(e.headers).forEach(function(r){t.setHeader(r,e.headers[r])});var r;if("prefer-streaming"===e.mode)r=!1;else if("allow-wrong-content-type"===e.mode)r=!capability.overrideMimeType;else{if(e.mode&&"default"!==e.mode&&"prefer-fast"!==e.mode)throw new Error("Invalid value for opts.mode");r=!0}t._mode=decideMode(r),t.on("finish",function(){t._onFinish()})};inherits(ClientRequest,stream.Writable),ClientRequest.prototype.setHeader=function(e,t){var r=this,o=e.toLowerCase();-1===unsafeHeaders.indexOf(o)&&(r._headers[o]={name:e,value:t})},ClientRequest.prototype.getHeader=function(e){var t=this;return t._headers[e.toLowerCase()].value},ClientRequest.prototype.removeHeader=function(e){var t=this;delete t._headers[e.toLowerCase()]},ClientRequest.prototype._onFinish=function(){var e=this;if(!e._destroyed){var t,r=e._opts,o=e._headers;if("POST"!==r.method&&"PUT"!==r.method&&"PATCH"!==r.method||(t=capability.blobConstructor?new global.Blob(e._body.map(function(e){return toArrayBuffer(e)}),{type:(o["content-type"]||{}).value||""}):Buffer.concat(e._body).toString()),"fetch"===e._mode){var n=Object.keys(o).map(function(e){return[o[e].name,o[e].value]});global.fetch(e._opts.url,{method:e._opts.method,headers:n,body:t,mode:"cors",credentials:r.withCredentials?"include":"same-origin"}).then(function(t){e._fetchResponse=t,e._connect()},function(t){e.emit("error",t)})}else{var s=e._xhr=new global.XMLHttpRequest;try{s.open(e._opts.method,e._opts.url,!0)}catch(i){return void process.nextTick(function(){e.emit("error",i)})}"responseType"in s&&(s.responseType=e._mode.split(":")[0]),"withCredentials"in s&&(s.withCredentials=!!r.withCredentials),"text"===e._mode&&"overrideMimeType"in s&&s.overrideMimeType("text/plain; charset=x-user-defined"),Object.keys(o).forEach(function(e){s.setRequestHeader(o[e].name,o[e].value)}),e._response=null,s.onreadystatechange=function(){switch(s.readyState){case rStates.LOADING:case rStates.DONE:e._onXHRProgress()}},"moz-chunked-arraybuffer"===e._mode&&(s.onprogress=function(){e._onXHRProgress()}),s.onerror=function(){e._destroyed||e.emit("error",new Error("XHR error"))};try{s.send(t)}catch(i){return void process.nextTick(function(){e.emit("error",i)})}}}},ClientRequest.prototype._onXHRProgress=function(){var e=this;statusValid(e._xhr)&&!e._destroyed&&(e._response||e._connect(),e._response._onXHRProgress())},ClientRequest.prototype._connect=function(){var e=this;e._destroyed||(e._response=new IncomingMessage(e._xhr,e._fetchResponse,e._mode),e.emit("response",e._response))},ClientRequest.prototype._write=function(e,t,r){var o=this;o._body.push(e),r()},ClientRequest.prototype.abort=ClientRequest.prototype.destroy=function(){var e=this;e._destroyed=!0,e._response&&(e._response._destroyed=!0),e._xhr&&e._xhr.abort()},ClientRequest.prototype.end=function(e,t,r){var o=this;"function"==typeof e&&(r=e,e=void 0),stream.Writable.prototype.end.call(o,e,t,r)},ClientRequest.prototype.flushHeaders=function(){},ClientRequest.prototype.setTimeout=function(){},ClientRequest.prototype.setNoDelay=function(){},ClientRequest.prototype.setSocketKeepAlive=function(){};var unsafeHeaders=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"]; - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) - -},{"./capability":88,"./response":90,"_process":71,"buffer":25,"inherits":35,"stream":86,"to-arraybuffer":92}],90:[function(require,module,exports){ -(function (process,global,Buffer){ -var capability=require("./capability"),inherits=require("inherits"),stream=require("stream"),rStates=exports.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},IncomingMessage=exports.IncomingMessage=function(e,r,s){function a(){u.read().then(function(e){if(!t._destroyed){if(e.done)return void t.push(null);t.push(new Buffer(e.value)),a()}})}var t=this;if(stream.Readable.call(t),t._mode=s,t.headers={},t.rawHeaders=[],t.trailers={},t.rawTrailers=[],t.on("end",function(){process.nextTick(function(){t.emit("close")})}),"fetch"===s){t._fetchResponse=r,t.statusCode=r.status,t.statusMessage=r.statusText;for(var n,o,i=r.headers[Symbol.iterator]();n=(o=i.next()).value,!o.done;)t.headers[n[0].toLowerCase()]=n[1],t.rawHeaders.push(n[0],n[1]);var u=r.body.getReader();a()}else{t._xhr=e,t._pos=0,t.statusCode=e.status,t.statusMessage=e.statusText;var h=e.getAllResponseHeaders().split(/\r?\n/);if(h.forEach(function(e){var r=e.match(/^([^:]+):\s*(.*)/);if(r){var s=r[1].toLowerCase();"set-cookie"===s?(void 0===t.headers[s]&&(t.headers[s]=[]),t.headers[s].push(r[2])):void 0!==t.headers[s]?t.headers[s]+=", "+r[2]:t.headers[s]=r[2],t.rawHeaders.push(r[1],r[2])}}),t._charset="x-user-defined",!capability.overrideMimeType){var d=t.rawHeaders["mime-type"];if(d){var f=d.match(/;\s*charset=([^;])(;|$)/);f&&(t._charset=f[1].toLowerCase())}t._charset||(t._charset="utf-8")}}};inherits(IncomingMessage,stream.Readable),IncomingMessage.prototype._read=function(){},IncomingMessage.prototype._onXHRProgress=function(){var e=this,r=e._xhr,s=null;switch(e._mode){case"text:vbarray":if(r.readyState!==rStates.DONE)break;try{s=new global.VBArray(r.responseBody).toArray()}catch(a){}if(null!==s){e.push(new Buffer(s));break}case"text":try{s=r.responseText}catch(a){e._mode="text:vbarray";break}if(s.length>e._pos){var t=s.substr(e._pos);if("x-user-defined"===e._charset){for(var n=new Buffer(t.length),o=0;o<t.length;o++)n[o]=255&t.charCodeAt(o);e.push(n)}else e.push(t,e._charset);e._pos=s.length}break;case"arraybuffer":if(r.readyState!==rStates.DONE)break;s=r.response,e.push(new Buffer(new Uint8Array(s)));break;case"moz-chunked-arraybuffer":if(s=r.response,r.readyState!==rStates.LOADING||!s)break;e.push(new Buffer(new Uint8Array(s)));break;case"ms-stream":if(s=r.response,r.readyState!==rStates.LOADING)break;var i=new global.MSStreamReader;i.onprogress=function(){i.result.byteLength>e._pos&&(e.push(new Buffer(new Uint8Array(i.result.slice(e._pos)))),e._pos=i.result.byteLength)},i.onload=function(){e.push(null)},i.readAsArrayBuffer(s)}e._xhr.readyState===rStates.DONE&&"ms-stream"!==e._mode&&e.push(null)}; - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) - -},{"./capability":88,"_process":71,"buffer":25,"inherits":35,"stream":86}],91:[function(require,module,exports){ -function assertEncoding(e){if(e&&!isBufferEncoding(e))throw new Error("Unknown encoding: "+e)}function passThroughWrite(e){return e.toString(this.encoding)}function utf16DetectIncompleteChar(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function base64DetectIncompleteChar(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}var Buffer=require("buffer").Buffer,isBufferEncoding=Buffer.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},StringDecoder=exports.StringDecoder=function(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),assertEncoding(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=utf16DetectIncompleteChar;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=base64DetectIncompleteChar;break;default:return void(this.write=passThroughWrite)}this.charBuffer=new Buffer(6),this.charReceived=0,this.charLength=0};StringDecoder.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived<this.charLength)return"";e=e.slice(r,e.length),t=this.charBuffer.slice(0,this.charLength).toString(this.encoding);var h=t.charCodeAt(t.length-1);if(!(h>=55296&&56319>=h)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var i=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,i),i-=this.charReceived),t+=e.toString(this.encoding,0,i);var i=t.length-1,h=t.charCodeAt(i);if(h>=55296&&56319>=h){var c=this.surrogateSize;return this.charLength+=c,this.charReceived+=c,this.charBuffer.copy(this.charBuffer,c,0,c),e.copy(this.charBuffer,0,0,c),t.substring(0,i)}return t},StringDecoder.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(2>=t&&r>>4==14){this.charLength=3;break}if(3>=t&&r>>3==30){this.charLength=4;break}}this.charReceived=t},StringDecoder.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,h=this.charBuffer,i=this.encoding;t+=h.slice(0,r).toString(i)}return t}; - -},{"buffer":25}],92:[function(require,module,exports){ -var Buffer=require("buffer").Buffer;module.exports=function(e){if(e instanceof Uint8Array){if(0===e.byteOffset&&e.byteLength===e.buffer.byteLength)return e.buffer;if("function"==typeof e.buffer.slice)return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}if(Buffer.isBuffer(e)){for(var f=new Uint8Array(e.length),r=e.length,t=0;r>t;t++)f[t]=e[t];return f.buffer}throw new Error("Argument must be a Buffer")}; - -},{"buffer":25}],93:[function(require,module,exports){ -"use strict";function Url(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function urlParse(t,s,e){if(t&&util.isObject(t)&&t instanceof Url)return t;var h=new Url;return h.parse(t,s,e),h}function urlFormat(t){return util.isString(t)&&(t=urlParse(t)),t instanceof Url?t.format():Url.prototype.format.call(t)}function urlResolve(t,s){return urlParse(t,!1,!0).resolve(s)}function urlResolveObject(t,s){return t?urlParse(t,!1,!0).resolveObject(s):s}var punycode=require("punycode"),util=require("./util");exports.parse=urlParse,exports.resolve=urlResolve,exports.resolveObject=urlResolveObject,exports.format=urlFormat,exports.Url=Url;var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,simplePathPattern=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,delims=["<",">",'"',"`"," ","\r","\n"," "],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[+a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:!0,"javascript:":!0},hostlessProtocol={javascript:!0,"javascript:":!0},slashedProtocol={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},querystring=require("querystring");Url.prototype.parse=function(t,s,e){if(!util.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var h=t.indexOf("?"),r=-1!==h&&h<t.indexOf("#")?"?":"#",a=t.split(r),o=/\\/g;a[0]=a[0].replace(o,"/"),t=a.join(r);var n=t;if(n=n.trim(),!e&&1===t.split("#").length){var i=simplePathPattern.exec(n);if(i)return this.path=n,this.href=n,this.pathname=i[1],i[2]?(this.search=i[2],s?this.query=querystring.parse(this.search.substr(1)):this.query=this.search.substr(1)):s&&(this.search="",this.query={}),this}var l=protocolPattern.exec(n);if(l){l=l[0];var u=l.toLowerCase();this.protocol=u,n=n.substr(l.length)}if(e||l||n.match(/^\/\/[^@\/]+@[^@\/]+/)){var p="//"===n.substr(0,2);!p||l&&hostlessProtocol[l]||(n=n.substr(2),this.slashes=!0)}if(!hostlessProtocol[l]&&(p||l&&!slashedProtocol[l])){for(var c=-1,f=0;f<hostEndingChars.length;f++){var m=n.indexOf(hostEndingChars[f]);-1!==m&&(-1===c||c>m)&&(c=m)}var v,g;g=-1===c?n.lastIndexOf("@"):n.lastIndexOf("@",c),-1!==g&&(v=n.slice(0,g),n=n.slice(g+1),this.auth=decodeURIComponent(v)),c=-1;for(var f=0;f<nonHostChars.length;f++){var m=n.indexOf(nonHostChars[f]);-1!==m&&(-1===c||c>m)&&(c=m)}-1===c&&(c=n.length),this.host=n.slice(0,c),n=n.slice(c),this.parseHost(),this.hostname=this.hostname||"";var y="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!y)for(var P=this.hostname.split(/\./),f=0,d=P.length;d>f;f++){var q=P[f];if(q&&!q.match(hostnamePartPattern)){for(var b="",O=0,j=q.length;j>O;O++)b+=q.charCodeAt(O)>127?"x":q[O];if(!b.match(hostnamePartPattern)){var x=P.slice(0,f),U=P.slice(f+1),C=q.match(hostnamePartStart);C&&(x.push(C[1]),U.unshift(C[2])),U.length&&(n="/"+U.join(".")+n),this.hostname=x.join(".");break}}}this.hostname.length>hostnameMaxLen?this.hostname="":this.hostname=this.hostname.toLowerCase(),y||(this.hostname=punycode.toASCII(this.hostname));var A=this.port?":"+this.port:"",w=this.hostname||"";this.host=w+A,this.href+=this.host,y&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==n[0]&&(n="/"+n))}if(!unsafeProtocol[u])for(var f=0,d=autoEscape.length;d>f;f++){var E=autoEscape[f];if(-1!==n.indexOf(E)){var I=encodeURIComponent(E);I===E&&(I=escape(E)),n=n.split(E).join(I)}}var R=n.indexOf("#");-1!==R&&(this.hash=n.substr(R),n=n.slice(0,R));var S=n.indexOf("?");if(-1!==S?(this.search=n.substr(S),this.query=n.substr(S+1),s&&(this.query=querystring.parse(this.query)),n=n.slice(0,S)):s&&(this.search="",this.query={}),n&&(this.pathname=n),slashedProtocol[u]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var A=this.pathname||"",k=this.search||"";this.path=A+k}return this.href=this.format(),this},Url.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var s=this.protocol||"",e=this.pathname||"",h=this.hash||"",r=!1,a="";this.host?r=t+this.host:this.hostname&&(r=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(r+=":"+this.port)),this.query&&util.isObject(this.query)&&Object.keys(this.query).length&&(a=querystring.stringify(this.query));var o=this.search||a&&"?"+a||"";return s&&":"!==s.substr(-1)&&(s+=":"),this.slashes||(!s||slashedProtocol[s])&&r!==!1?(r="//"+(r||""),e&&"/"!==e.charAt(0)&&(e="/"+e)):r||(r=""),h&&"#"!==h.charAt(0)&&(h="#"+h),o&&"?"!==o.charAt(0)&&(o="?"+o),e=e.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),o=o.replace("#","%23"),s+r+e+o+h},Url.prototype.resolve=function(t){return this.resolveObject(urlParse(t,!1,!0)).format()},Url.prototype.resolveObject=function(t){if(util.isString(t)){var s=new Url;s.parse(t,!1,!0),t=s}for(var e=new Url,h=Object.keys(this),r=0;r<h.length;r++){var a=h[r];e[a]=this[a]}if(e.hash=t.hash,""===t.href)return e.href=e.format(),e;if(t.slashes&&!t.protocol){for(var o=Object.keys(t),n=0;n<o.length;n++){var i=o[n];"protocol"!==i&&(e[i]=t[i])}return slashedProtocol[e.protocol]&&e.hostname&&!e.pathname&&(e.path=e.pathname="/"),e.href=e.format(),e}if(t.protocol&&t.protocol!==e.protocol){if(!slashedProtocol[t.protocol]){for(var l=Object.keys(t),u=0;u<l.length;u++){var p=l[u];e[p]=t[p]}return e.href=e.format(),e}if(e.protocol=t.protocol,t.host||hostlessProtocol[t.protocol])e.pathname=t.pathname;else{for(var c=(t.pathname||"").split("/");c.length&&!(t.host=c.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==c[0]&&c.unshift(""),c.length<2&&c.unshift(""),e.pathname=c.join("/")}if(e.search=t.search,e.query=t.query,e.host=t.host||"",e.auth=t.auth,e.hostname=t.hostname||t.host,e.port=t.port,e.pathname||e.search){var f=e.pathname||"",m=e.search||"";e.path=f+m}return e.slashes=e.slashes||t.slashes,e.href=e.format(),e}var v=e.pathname&&"/"===e.pathname.charAt(0),g=t.host||t.pathname&&"/"===t.pathname.charAt(0),y=g||v||e.host&&t.pathname,P=y,d=e.pathname&&e.pathname.split("/")||[],c=t.pathname&&t.pathname.split("/")||[],q=e.protocol&&!slashedProtocol[e.protocol];if(q&&(e.hostname="",e.port=null,e.host&&(""===d[0]?d[0]=e.host:d.unshift(e.host)),e.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===c[0]?c[0]=t.host:c.unshift(t.host)),t.host=null),y=y&&(""===c[0]||""===d[0])),g)e.host=t.host||""===t.host?t.host:e.host,e.hostname=t.hostname||""===t.hostname?t.hostname:e.hostname,e.search=t.search,e.query=t.query,d=c;else if(c.length)d||(d=[]),d.pop(),d=d.concat(c),e.search=t.search,e.query=t.query;else if(!util.isNullOrUndefined(t.search)){if(q){e.hostname=e.host=d.shift();var b=e.host&&e.host.indexOf("@")>0?e.host.split("@"):!1;b&&(e.auth=b.shift(),e.host=e.hostname=b.shift())}return e.search=t.search,e.query=t.query,util.isNull(e.pathname)&&util.isNull(e.search)||(e.path=(e.pathname?e.pathname:"")+(e.search?e.search:"")),e.href=e.format(),e}if(!d.length)return e.pathname=null,e.search?e.path="/"+e.search:e.path=null,e.href=e.format(),e;for(var O=d.slice(-1)[0],j=(e.host||t.host||d.length>1)&&("."===O||".."===O)||""===O,x=0,U=d.length;U>=0;U--)O=d[U],"."===O?d.splice(U,1):".."===O?(d.splice(U,1),x++):x&&(d.splice(U,1),x--);if(!y&&!P)for(;x--;x)d.unshift("..");!y||""===d[0]||d[0]&&"/"===d[0].charAt(0)||d.unshift(""),j&&"/"!==d.join("/").substr(-1)&&d.push("");var C=""===d[0]||d[0]&&"/"===d[0].charAt(0);if(q){e.hostname=e.host=C?"":d.length?d.shift():"";var b=e.host&&e.host.indexOf("@")>0?e.host.split("@"):!1;b&&(e.auth=b.shift(),e.host=e.hostname=b.shift())}return y=y||e.host&&d.length,y&&!C&&d.unshift(""),d.length?e.pathname=d.join("/"):(e.pathname=null,e.path=null),util.isNull(e.pathname)&&util.isNull(e.search)||(e.path=(e.pathname?e.pathname:"")+(e.search?e.search:"")),e.auth=t.auth||e.auth,e.slashes=e.slashes||t.slashes,e.href=e.format(),e},Url.prototype.parseHost=function(){var t=this.host,s=portPattern.exec(t);s&&(s=s[0],":"!==s&&(this.port=s.substr(1)),t=t.substr(0,t.length-s.length)),t&&(this.hostname=t)}; - -},{"./util":94,"punycode":72,"querystring":75}],94:[function(require,module,exports){ -"use strict";module.exports={isString:function(n){return"string"==typeof n},isObject:function(n){return"object"==typeof n&&null!==n},isNull:function(n){return null===n},isNullOrUndefined:function(n){return null==n}}; - -},{}],95:[function(require,module,exports){ -(function (global){ -function deprecate(r,e){function o(){if(!t){if(config("throwDeprecation"))throw new Error(e);config("traceDeprecation")?console.trace(e):console.warn(e),t=!0}return r.apply(this,arguments)}if(config("noDeprecation"))return r;var t=!1;return o}function config(r){try{if(!global.localStorage)return!1}catch(e){return!1}var o=global.localStorage[r];return null==o?!1:"true"===String(o).toLowerCase()}module.exports=deprecate; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],96:[function(require,module,exports){ -module.exports=function(o){return o&&"object"==typeof o&&"function"==typeof o.copy&&"function"==typeof o.fill&&"function"==typeof o.readUInt8}; - -},{}],97:[function(require,module,exports){ -(function (process,global){ -function inspect(e,r){var t={seen:[],stylize:stylizeNoColor};return arguments.length>=3&&(t.depth=arguments[2]),arguments.length>=4&&(t.colors=arguments[3]),isBoolean(r)?t.showHidden=r:r&&exports._extend(t,r),isUndefined(t.showHidden)&&(t.showHidden=!1),isUndefined(t.depth)&&(t.depth=2),isUndefined(t.colors)&&(t.colors=!1),isUndefined(t.customInspect)&&(t.customInspect=!0),t.colors&&(t.stylize=stylizeWithColor),formatValue(t,e,t.depth)}function stylizeWithColor(e,r){var t=inspect.styles[r];return t?"["+inspect.colors[t][0]+"m"+e+"["+inspect.colors[t][1]+"m":e}function stylizeNoColor(e,r){return e}function arrayToHash(e){var r={};return e.forEach(function(e,t){r[e]=!0}),r}function formatValue(e,r,t){if(e.customInspect&&r&&isFunction(r.inspect)&&r.inspect!==exports.inspect&&(!r.constructor||r.constructor.prototype!==r)){var n=r.inspect(t,e);return isString(n)||(n=formatValue(e,n,t)),n}var i=formatPrimitive(e,r);if(i)return i;var o=Object.keys(r),s=arrayToHash(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(r)),isError(r)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return formatError(r);if(0===o.length){if(isFunction(r)){var u=r.name?": "+r.name:"";return e.stylize("[Function"+u+"]","special")}if(isRegExp(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(isDate(r))return e.stylize(Date.prototype.toString.call(r),"date");if(isError(r))return formatError(r)}var c="",a=!1,l=["{","}"];if(isArray(r)&&(a=!0,l=["[","]"]),isFunction(r)){var p=r.name?": "+r.name:"";c=" [Function"+p+"]"}if(isRegExp(r)&&(c=" "+RegExp.prototype.toString.call(r)),isDate(r)&&(c=" "+Date.prototype.toUTCString.call(r)),isError(r)&&(c=" "+formatError(r)),0===o.length&&(!a||0==r.length))return l[0]+c+l[1];if(0>t)return isRegExp(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special");e.seen.push(r);var f;return f=a?formatArray(e,r,t,s,o):o.map(function(n){return formatProperty(e,r,t,s,n,a)}),e.seen.pop(),reduceToSingleString(f,c,l)}function formatPrimitive(e,r){if(isUndefined(r))return e.stylize("undefined","undefined");if(isString(r)){var t="'"+JSON.stringify(r).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(t,"string")}return isNumber(r)?e.stylize(""+r,"number"):isBoolean(r)?e.stylize(""+r,"boolean"):isNull(r)?e.stylize("null","null"):void 0}function formatError(e){return"["+Error.prototype.toString.call(e)+"]"}function formatArray(e,r,t,n,i){for(var o=[],s=0,u=r.length;u>s;++s)hasOwnProperty(r,String(s))?o.push(formatProperty(e,r,t,n,String(s),!0)):o.push("");return i.forEach(function(i){i.match(/^\d+$/)||o.push(formatProperty(e,r,t,n,i,!0))}),o}function formatProperty(e,r,t,n,i,o){var s,u,c;if(c=Object.getOwnPropertyDescriptor(r,i)||{value:r[i]},c.get?u=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(u=e.stylize("[Setter]","special")),hasOwnProperty(n,i)||(s="["+i+"]"),u||(e.seen.indexOf(c.value)<0?(u=isNull(t)?formatValue(e,c.value,null):formatValue(e,c.value,t-1),u.indexOf("\n")>-1&&(u=o?u.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+u.split("\n").map(function(e){return" "+e}).join("\n"))):u=e.stylize("[Circular]","special")),isUndefined(s)){if(o&&i.match(/^\d+$/))return u;s=JSON.stringify(""+i),s.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+u}function reduceToSingleString(e,r,t){var n=0,i=e.reduce(function(e,r){return n++,r.indexOf("\n")>=0&&n++,e+r.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?t[0]+(""===r?"":r+"\n ")+" "+e.join(",\n ")+" "+t[1]:t[0]+r+" "+e.join(", ")+" "+t[1]}function isArray(e){return Array.isArray(e)}function isBoolean(e){return"boolean"==typeof e}function isNull(e){return null===e}function isNullOrUndefined(e){return null==e}function isNumber(e){return"number"==typeof e}function isString(e){return"string"==typeof e}function isSymbol(e){return"symbol"==typeof e}function isUndefined(e){return void 0===e}function isRegExp(e){return isObject(e)&&"[object RegExp]"===objectToString(e)}function isObject(e){return"object"==typeof e&&null!==e}function isDate(e){return isObject(e)&&"[object Date]"===objectToString(e)}function isError(e){return isObject(e)&&("[object Error]"===objectToString(e)||e instanceof Error)}function isFunction(e){return"function"==typeof e}function isPrimitive(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||"undefined"==typeof e}function objectToString(e){return Object.prototype.toString.call(e)}function pad(e){return 10>e?"0"+e.toString(10):e.toString(10)}function timestamp(){var e=new Date,r=[pad(e.getHours()),pad(e.getMinutes()),pad(e.getSeconds())].join(":");return[e.getDate(),months[e.getMonth()],r].join(" ")}function hasOwnProperty(e,r){return Object.prototype.hasOwnProperty.call(e,r)}var formatRegExp=/%[sdj%]/g;exports.format=function(e){if(!isString(e)){for(var r=[],t=0;t<arguments.length;t++)r.push(inspect(arguments[t]));return r.join(" ")}for(var t=1,n=arguments,i=n.length,o=String(e).replace(formatRegExp,function(e){if("%%"===e)return"%";if(t>=i)return e;switch(e){case"%s":return String(n[t++]);case"%d":return Number(n[t++]);case"%j":try{return JSON.stringify(n[t++])}catch(r){return"[Circular]"}default:return e}}),s=n[t];i>t;s=n[++t])o+=isNull(s)||!isObject(s)?" "+s:" "+inspect(s);return o},exports.deprecate=function(e,r){function t(){if(!n){if(process.throwDeprecation)throw new Error(r);process.traceDeprecation?console.trace(r):console.error(r),n=!0}return e.apply(this,arguments)}if(isUndefined(global.process))return function(){return exports.deprecate(e,r).apply(this,arguments)};if(process.noDeprecation===!0)return e;var n=!1;return t};var debugs={},debugEnviron;exports.debuglog=function(e){if(isUndefined(debugEnviron)&&(debugEnviron=process.env.NODE_DEBUG||""),e=e.toUpperCase(),!debugs[e])if(new RegExp("\\b"+e+"\\b","i").test(debugEnviron)){var r=process.pid;debugs[e]=function(){var t=exports.format.apply(exports,arguments);console.error("%s %d: %s",e,r,t)}}else debugs[e]=function(){};return debugs[e]},exports.inspect=inspect,inspect.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},inspect.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},exports.isArray=isArray,exports.isBoolean=isBoolean,exports.isNull=isNull,exports.isNullOrUndefined=isNullOrUndefined,exports.isNumber=isNumber,exports.isString=isString,exports.isSymbol=isSymbol,exports.isUndefined=isUndefined,exports.isRegExp=isRegExp,exports.isObject=isObject,exports.isDate=isDate,exports.isError=isError,exports.isFunction=isFunction,exports.isPrimitive=isPrimitive,exports.isBuffer=require("./support/isBuffer");var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];exports.log=function(){console.log("%s - %s",timestamp(),exports.format.apply(exports,arguments))},exports.inherits=require("inherits"),exports._extend=function(e,r){if(!r||!isObject(r))return e;for(var t=Object.keys(r),n=t.length;n--;)e[t[n]]=r[t[n]];return e}; - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./support/isBuffer":96,"_process":71,"inherits":35}],98:[function(require,module,exports){ -function extend(){for(var r={},e=0;e<arguments.length;e++){var t=arguments[e];for(var n in t)hasOwnProperty.call(t,n)&&(r[n]=t[n])}return r}module.exports=extend;var hasOwnProperty=Object.prototype.hasOwnProperty; - -},{}]},{},[3])(3) -}); -</script> - - <script> -// https://github.com/isaacs/json-stringify-safe v5.0.1 -function stringify(obj, replacer, spaces, cycleReplacer) { - return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces) -} - -function serializer(replacer, cycleReplacer) { - var stack = [], keys = [] - - if (cycleReplacer == null) cycleReplacer = function(key, value) { - if (stack[0] === value) return "[Circular ~]" - return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]" - } - - return function(key, value) { - if (stack.length > 0) { - var thisPos = stack.indexOf(this) - ~thisPos ? stack.splice(thisPos + 1) : stack.push(this) - ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key) - if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value) - } - else stack.push(value) - - return replacer == null ? value : replacer.call(this, key, value) - } -} -</script> - - <script> -/* Web Font Loader v1.6.24 - (c) Adobe Systems, Google. License: Apache 2.0 */ -(function(){function aa(a,b,d){return a.call.apply(a.bind,arguments)}function ba(a,b,d){if(!a)throw Error();if(2<arguments.length){var c=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,c);return a.apply(b,d)}}return function(){return a.apply(b,arguments)}}function p(a,b,d){p=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?aa:ba;return p.apply(null,arguments)}var q=Date.now||function(){return+new Date};function ca(a,b){this.a=a;this.m=b||a;this.c=this.m.document}var da=!!window.FontFace;function t(a,b,d,c){b=a.c.createElement(b);if(d)for(var e in d)d.hasOwnProperty(e)&&("style"==e?b.style.cssText=d[e]:b.setAttribute(e,d[e]));c&&b.appendChild(a.c.createTextNode(c));return b}function u(a,b,d){a=a.c.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(d,a.lastChild)}function v(a){a.parentNode&&a.parentNode.removeChild(a)} -function w(a,b,d){b=b||[];d=d||[];for(var c=a.className.split(/\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<c.length;g+=1)if(b[e]===c[g]){f=!0;break}f||c.push(b[e])}b=[];for(e=0;e<c.length;e+=1){f=!1;for(g=0;g<d.length;g+=1)if(c[e]===d[g]){f=!0;break}f||b.push(c[e])}a.className=b.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function y(a,b){for(var d=a.className.split(/\s+/),c=0,e=d.length;c<e;c++)if(d[c]==b)return!0;return!1} -function z(a){if("string"===typeof a.f)return a.f;var b=a.m.location.protocol;"about:"==b&&(b=a.a.location.protocol);return"https:"==b?"https:":"http:"}function ea(a){return a.m.location.hostname||a.a.location.hostname} -function A(a,b,d){function c(){k&&e&&f&&(k(g),k=null)}b=t(a,"link",{rel:"stylesheet",href:b,media:"all"});var e=!1,f=!0,g=null,k=d||null;da?(b.onload=function(){e=!0;c()},b.onerror=function(){e=!0;g=Error("Stylesheet failed to load");c()}):setTimeout(function(){e=!0;c()},0);u(a,"head",b)} -function B(a,b,d,c){var e=a.c.getElementsByTagName("head")[0];if(e){var f=t(a,"script",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(g=!0,d&&d(null),f.onload=f.onreadystatechange=null,"HEAD"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);setTimeout(function(){g||(g=!0,d&&d(Error("Script load timeout")))},c||5E3);return f}return null};function C(){this.a=0;this.c=null}function D(a){a.a++;return function(){a.a--;E(a)}}function F(a,b){a.c=b;E(a)}function E(a){0==a.a&&a.c&&(a.c(),a.c=null)};function G(a){this.a=a||"-"}G.prototype.c=function(a){for(var b=[],d=0;d<arguments.length;d++)b.push(arguments[d].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.a)};function H(a,b){this.c=a;this.f=4;this.a="n";var d=(b||"n4").match(/^([nio])([1-9])$/i);d&&(this.a=d[1],this.f=parseInt(d[2],10))}function fa(a){return I(a)+" "+(a.f+"00")+" 300px "+J(a.c)}function J(a){var b=[];a=a.split(/,\s*/);for(var d=0;d<a.length;d++){var c=a[d].replace(/['"]/g,"");-1!=c.indexOf(" ")||/^\d/.test(c)?b.push("'"+c+"'"):b.push(c)}return b.join(",")}function K(a){return a.a+a.f}function I(a){var b="normal";"o"===a.a?b="oblique":"i"===a.a&&(b="italic");return b} -function ga(a){var b=4,d="n",c=null;a&&((c=a.match(/(normal|oblique|italic)/i))&&c[1]&&(d=c[1].substr(0,1).toLowerCase()),(c=a.match(/([1-9]00|normal|bold)/i))&&c[1]&&(/bold/i.test(c[1])?b=7:/[1-9]00/.test(c[1])&&(b=parseInt(c[1].substr(0,1),10))));return d+b};function ha(a,b){this.c=a;this.f=a.m.document.documentElement;this.h=b;this.a=new G("-");this.j=!1!==b.events;this.g=!1!==b.classes}function ia(a){a.g&&w(a.f,[a.a.c("wf","loading")]);L(a,"loading")}function M(a){if(a.g){var b=y(a.f,a.a.c("wf","active")),d=[],c=[a.a.c("wf","loading")];b||d.push(a.a.c("wf","inactive"));w(a.f,d,c)}L(a,"inactive")}function L(a,b,d){if(a.j&&a.h[b])if(d)a.h[b](d.c,K(d));else a.h[b]()};function ja(){this.c={}}function ka(a,b,d){var c=[],e;for(e in b)if(b.hasOwnProperty(e)){var f=a.c[e];f&&c.push(f(b[e],d))}return c};function N(a,b){this.c=a;this.f=b;this.a=t(this.c,"span",{"aria-hidden":"true"},this.f)}function O(a){u(a.c,"body",a.a)}function P(a){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+J(a.c)+";"+("font-style:"+I(a)+";font-weight:"+(a.f+"00")+";")};function Q(a,b,d,c,e,f){this.g=a;this.j=b;this.a=c;this.c=d;this.f=e||3E3;this.h=f||void 0}Q.prototype.start=function(){var a=this.c.m.document,b=this,d=q(),c=new Promise(function(c,e){function k(){q()-d>=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?c():setTimeout(k,25)},function(){e()})}k()}),e=new Promise(function(a,c){setTimeout(c,b.f)});Promise.race([e,c]).then(function(){b.g(b.a)},function(){b.j(b.a)})};function R(a,b,d,c,e,f,g){this.v=a;this.B=b;this.c=d;this.a=c;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.o=this.j=this.h=this.g=null;this.g=new N(this.c,this.s);this.h=new N(this.c,this.s);this.j=new N(this.c,this.s);this.o=new N(this.c,this.s);a=new H(this.a.c+",serif",K(this.a));a=P(a);this.g.a.style.cssText=a;a=new H(this.a.c+",sans-serif",K(this.a));a=P(a);this.h.a.style.cssText=a;a=new H("serif",K(this.a));a=P(a);this.j.a.style.cssText=a;a=new H("sans-serif",K(this.a));a= -P(a);this.o.a.style.cssText=a;O(this.g);O(this.h);O(this.j);O(this.o)}var S={D:"serif",C:"sans-serif"},T=null;function U(){if(null===T){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);T=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return T}R.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.o.a.offsetWidth;this.A=q();la(this)}; -function ma(a,b,d){for(var c in S)if(S.hasOwnProperty(c)&&b===a.f[S[c]]&&d===a.f[S[c]])return!0;return!1}function la(a){var b=a.g.a.offsetWidth,d=a.h.a.offsetWidth,c;(c=b===a.f.serif&&d===a.f["sans-serif"])||(c=U()&&ma(a,b,d));c?q()-a.A>=a.w?U()&&ma(a,b,d)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):na(a):V(a,a.v)}function na(a){setTimeout(p(function(){la(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.o.a);b(this.a)},a),0)};function W(a,b,d){this.c=a;this.a=b;this.f=0;this.o=this.j=!1;this.s=d}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,K(a).toString(),"active")],[b.a.c("wf",a.c,K(a).toString(),"loading"),b.a.c("wf",a.c,K(a).toString(),"inactive")]);L(b,"fontactive",a);this.o=!0;oa(this)}; -W.prototype.h=function(a){var b=this.a;if(b.g){var d=y(b.f,b.a.c("wf",a.c,K(a).toString(),"active")),c=[],e=[b.a.c("wf",a.c,K(a).toString(),"loading")];d||c.push(b.a.c("wf",a.c,K(a).toString(),"inactive"));w(b.f,c,e)}L(b,"fontinactive",a);oa(this)};function oa(a){0==--a.f&&a.j&&(a.o?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),L(a,"active")):M(a.a))};function pa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}pa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;qa(this,new ha(this.c,a),a)}; -function ra(a,b,d,c,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,k=c||null||{};if(0===d.length&&f)M(b.a);else{b.f+=d.length;f&&(b.j=f);var h,m=[];for(h=0;h<d.length;h++){var l=d[h],n=k[l.c],r=b.a,x=l;r.g&&w(r.f,[r.a.c("wf",x.c,K(x).toString(),"loading")]);L(r,"fontloading",x);r=null;null===X&&(X=window.FontFace?(x=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent))?42<parseInt(x[1],10):!0:!1);X?r=new Q(p(b.g,b),p(b.h,b),b.c,l,b.s,n):r=new R(p(b.g,b),p(b.h,b),b.c,l,b.s,a, -n);m.push(r)}for(h=0;h<m.length;h++)m[h].start()}},0)}function qa(a,b,d){var c=[],e=d.timeout;ia(b);var c=ka(a.a,d,a.c),f=new W(a.c,b,e);a.h=c.length;b=0;for(d=c.length;b<d;b++)c[b].load(function(b,c,d){ra(a,f,b,c,d)})};function sa(a,b){this.c=a;this.a=b}function ta(a,b,d){var c=z(a.c);a=(a.a.api||"fast.fonts.net/jsapi").replace(/^.*http(s?):(\/\/)?/,"");return c+"//"+a+"/"+b+".js"+(d?"?v="+d:"")} -sa.prototype.load=function(a){function b(){if(e["__mti_fntLst"+d]){var c=e["__mti_fntLst"+d](),g=[],k;if(c)for(var h=0;h<c.length;h++){var m=c[h].fontfamily;void 0!=c[h].fontStyle&&void 0!=c[h].fontWeight?(k=c[h].fontStyle+c[h].fontWeight,g.push(new H(m,k))):g.push(new H(m))}a(g)}else setTimeout(function(){b()},50)}var d=this.a.projectId,c=this.a.version;if(d){var e=this.c.m;B(this.c,ta(this,d,c),function(c){c?a([]):b()}).id="__MonotypeAPIScript__"+d}else a([])};function ua(a,b){this.c=a;this.a=b}ua.prototype.load=function(a){var b,d,c=this.a.urls||[],e=this.a.families||[],f=this.a.testStrings||{},g=new C;b=0;for(d=c.length;b<d;b++)A(this.c,c[b],D(g));var k=[];b=0;for(d=e.length;b<d;b++)if(c=e[b].split(":"),c[1])for(var h=c[1].split(","),m=0;m<h.length;m+=1)k.push(new H(c[0],h[m]));else k.push(new H(c[0]));F(g,function(){a(k,f)})};function va(a,b,d){a?this.c=a:this.c=b+wa;this.a=[];this.f=[];this.g=d||""}var wa="//fonts.googleapis.com/css";function xa(a,b){for(var d=b.length,c=0;c<d;c++){var e=b[c].split(":");3==e.length&&a.f.push(e.pop());var f="";2==e.length&&""!=e[1]&&(f=":");a.a.push(e.join(f))}} -function ya(a){if(0==a.a.length)throw Error("No fonts to load!");if(-1!=a.c.indexOf("kit="))return a.c;for(var b=a.a.length,d=[],c=0;c<b;c++)d.push(a.a[c].replace(/ /g,"+"));b=a.c+"?family="+d.join("%7C");0<a.f.length&&(b+="&subset="+a.f.join(","));0<a.g.length&&(b+="&text="+encodeURIComponent(a.g));return b};function za(a){this.f=a;this.a=[];this.c={}} -var Aa={latin:"BESbswy",cyrillic:"\u0439\u044f\u0416",greek:"\u03b1\u03b2\u03a3",khmer:"\u1780\u1781\u1782",Hanuman:"\u1780\u1781\u1782"},Ba={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},Ca={i:"i",italic:"i",n:"n",normal:"n"},Da=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/; -function Ea(a){for(var b=a.f.length,d=0;d<b;d++){var c=a.f[d].split(":"),e=c[0].replace(/\+/g," "),f=["n4"];if(2<=c.length){var g;var k=c[1];g=[];if(k)for(var k=k.split(","),h=k.length,m=0;m<h;m++){var l;l=k[m];if(l.match(/^[\w-]+$/)){var n=Da.exec(l.toLowerCase());if(null==n)l="";else{l=n[2];l=null==l||""==l?"n":Ca[l];n=n[1];if(null==n||""==n)n="4";else var r=Ba[n],n=r?r:isNaN(n)?"4":n.substr(0,1);l=[l,n].join("")}}else l="";l&&g.push(l)}0<g.length&&(f=g);3==c.length&&(c=c[2],g=[],c=c?c.split(","): -g,0<c.length&&(c=Aa[c[0]])&&(a.c[e]=c))}a.c[e]||(c=Aa[e])&&(a.c[e]=c);for(c=0;c<f.length;c+=1)a.a.push(new H(e,f[c]))}};function Fa(a,b){this.c=a;this.a=b}var Ga={Arimo:!0,Cousine:!0,Tinos:!0};Fa.prototype.load=function(a){var b=new C,d=this.c,c=new va(this.a.api,z(d),this.a.text),e=this.a.families;xa(c,e);var f=new za(e);Ea(f);A(d,ya(c),D(b));F(b,function(){a(f.a,f.c,Ga)})};function Ha(a,b){this.c=a;this.a=b}Ha.prototype.load=function(a){var b=this.a.id,d=this.c.m;b?B(this.c,(this.a.api||"https://use.typekit.net")+"/"+b+".js",function(b){if(b)a([]);else if(d.Typekit&&d.Typekit.config&&d.Typekit.config.fn){b=d.Typekit.config.fn;for(var e=[],f=0;f<b.length;f+=2)for(var g=b[f],k=b[f+1],h=0;h<k.length;h++)e.push(new H(g,k[h]));try{d.Typekit.load({events:!1,classes:!1,async:!0})}catch(m){}a(e)}},2E3):a([])};function Ia(a,b){this.c=a;this.f=b;this.a=[]}Ia.prototype.load=function(a){var b=this.f.id,d=this.c.m,c=this;b?(d.__webfontfontdeckmodule__||(d.__webfontfontdeckmodule__={}),d.__webfontfontdeckmodule__[b]=function(b,d){for(var g=0,k=d.fonts.length;g<k;++g){var h=d.fonts[g];c.a.push(new H(h.name,ga("font-weight:"+h.weight+";font-style:"+h.style)))}a(c.a)},B(this.c,z(this.c)+(this.f.api||"//f.fontdeck.com/s/css/js/")+ea(this.c)+"/"+b+".js",function(b){b&&a([])})):a([])};var Y=new pa(window);Y.a.c.custom=function(a,b){return new ua(b,a)};Y.a.c.fontdeck=function(a,b){return new Ia(b,a)};Y.a.c.monotype=function(a,b){return new sa(b,a)};Y.a.c.typekit=function(a,b){return new Ha(b,a)};Y.a.c.google=function(a,b){return new Fa(b,a)};var Z={load:p(Y.load,Y)};"function"===typeof define&&define.amd?define(function(){return Z}):"undefined"!==typeof module&&module.exports?module.exports=Z:(window.WebFont=Z,window.WebFontConfig&&Y.load(window.WebFontConfig));}()); -</script> - - <script> - var schemaWrapper = {}; - schemaWrapper.definitions = Object.assign({}, defs); - defsParser = new $RefParser(); - defsParser.dereference(schemaWrapper).catch(function(err) { - console.log(err); - }); - </script> - <script> - $(document).ready(function () { - $('.nav-tabs-examples').find('a:first').tab('show'); - $(this).scrollspy({ target: '#scrollingNav', offset: 18 }); - }); - </script> -</body> -</html> diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 25873d4515..89e12e35c2 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -8,10 +8,101 @@ Service Orchestrator Release Notes The SO provides the highest level of service orchestration in the ONAP architecture. -Version: 1.4.0 +Version: 1.3.7 -------------- -:Release Date: 2018-11-30 +:Release Date: 2019-01-31 + +This is the official release package that released for the Casablanca Maintenance. + +Casablanca Release branch + +**New Features** + +This release is supporting the features of Casablanca and their defect fixes. +- `SO-1400 <https://jira.onap.org/browse/SO-1336>`_ +- `SO-1408 <https://jira.onap.org/browse/SO-1408>`_ +- `SO-1416 <https://jira.onap.org/browse/SO-1416>`_ +- `SO-1417 <https://jira.onap.org/browse/SO-1417>`_ + +**Docker Images** + +Dockers released for SO: + + - onap/so/api-handler-infra,1.3.7 + - onap/so/bpmn-infra,1.3.7 + - onap/so/catalog-db-adapter,1.3.7 + - onap/so/openstack-adapter,1.3.7 + - onap/so/request-db-adapter,1.3.7 + - onap/so/sdc-controller,1.3.7 + - onap/so/sdnc-adapter,1.3.7 + - onap/so/so-monitoring,1.3.7 + - onap/so/vfc-adapter,1.3.7 + +**Known Issues** + +- `SO-1419 <https://jira.onap.org/browse/SO-1419>`_ - is a stretch goal that is under examination. + +- `SDC-1955 <https://jira.onap.org/browse/SDC-1955>`_ - tested with a workaround to avoid this scenario. To be tested further with updated dockers of SDC, UUI and SO. + +**Security Notes** + + SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the `project <https://wiki.onap.org/pages/viewpage.action?pageId=43385708>`_. + + Quick Links: + + - `SO project page <https://wiki.onap.org/display/DW/Service+Orchestrator+Project>`_ + - `Passing Badge information for SO <https://bestpractices.coreinfrastructure.org/en/projects/1702>`_ + - `Project Vulnerability Review Table for SO <https://wiki.onap.org/pages/viewpage.action?pageId=43385708>`_ + + +Version: 1.3.6 +-------------- + +:Release Date: 2019-01-10 + +This is the official release package that released for the Casablanca Maintenance. + +Casablanca Release branch + +**New Features** + +This release is supporting the features of Casablanca and their defect fixes. +- `SO-1336 <https://jira.onap.org/browse/SO-1336>`_ +- `SO-1249 <https://jira.onap.org/browse/SO-1249>`_ +- `SO-1257 <https://jira.onap.org/browse/SO-1257>`_ +- `SO-1258 <https://jira.onap.org/browse/SO-1258>`_ +- `SO-1256 <https://jira.onap.org/browse/SO-1256>`_ +- `SO-1194 <https://jira.onap.org/browse/SO-1256>`_ +- `SO-1248 <https://jira.onap.org/browse/SO-1248>`_ +- `SO-1184 <https://jira.onap.org/browse/SO-1184>`_ + +**Docker Images** + +Dockers released for SO: + + - onap/so/api-handler-infra,1.3.6 + - onap/so/bpmn-infra,1.3.6 + - onap/so/catalog-db-adapter,1.3.6 + - onap/so/openstack-adapter,1.3.6 + - onap/so/request-db-adapter,1.3.6 + - onap/so/sdc-controller,1.3.6 + - onap/so/sdnc-adapter,1.3.6 + - onap/so/so-monitoring,1.3.6 + - onap/so/vfc-adapter,1.3.6 + +**Known Issues** + + +**Security Notes** + + SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the `project <https://wiki.onap.org/pages/viewpage.action?pageId=43385708>`_. + + Quick Links: + + - `SO project page <https://wiki.onap.org/display/DW/Service+Orchestrator+Project>`_ + - `Passing Badge information for SO <https://bestpractices.coreinfrastructure.org/en/projects/1702>`_ + - `Project Vulnerability Review Table for SO <https://wiki.onap.org/pages/viewpage.action?pageId=43385708>`_ New release over master branch for Dublin development @@ -53,15 +144,31 @@ Dockers released for SO: **Known Issues** There are some issues around the HPA and CCVPN that have been resolved in the patch release of 1.3.5 + - `SO-1249 <https://jira.onap.org/browse/SO-1249>`_ + The workflow for resource processing use the wrong default value. + - `SO-1257 <https://jira.onap.org/browse/SO-1257>`_ + Authorization header added to multicloud adapter breaks communication. + - `SO-1258 <https://jira.onap.org/browse/SO-1258>`_ + OOF Directives are not passed through flows to Multicloud Adapter. + - `SO-1256 <https://jira.onap.org/browse/SO-1256>`_ -- `SO-1194 <https://jira.onap.org/browse/SO-1256>`_ + Permission support for Vfcadapter is missing. + +- `SO-1194 <https://jira.onap.org/browse/SO-1194>`_ + Unable to find TOSCA CSAR location using ServiceModelUUID in DoCreateResource BPMN flow. + Below issues will be resolved in the next release: + - `SO-1248 <https://jira.onap.org/browse/SO-1248>`_ + Csar needs to be manually placed into the bpmn corresponding directory. + - `SO-1184 <https://jira.onap.org/browse/SO-1184>`_ + Database table is not populated for Generic NeutronNet resource. + **Security Notes** diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Action.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Action.java index 03d68f88e8..897e2a5fc8 100644 --- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Action.java +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Action.java @@ -23,7 +23,7 @@ package org.onap.so.apihandlerinfra; /* * Enum for Status values returned by API Handler to Tail-F */ -public enum Action { +public enum Action implements Actions{ createInstance, updateInstance, deleteInstance, @@ -44,7 +44,7 @@ public enum Action { scaleInstance, deactivateAndCloudDelete, scaleOut, - recreateInstance, + recreateInstance, addMembers, removeMembers } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Actions.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Actions.java index 5dbe44f58b..5dbe44f58b 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Actions.java +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Actions.java diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Constants.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Constants.java index fe105a7637..d824696147 100644 --- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Constants.java +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/Constants.java @@ -49,4 +49,6 @@ public class Constants { public final static String VNF_REQUEST_SCOPE = "vnf"; public final static String SERVICE_INSTANCE_PATH = "/serviceInstances"; public final static String SERVICE_INSTANTIATION_PATH = "/serviceInstantiation"; + public final static String ORCHESTRATION_REQUESTS_PATH = "/orchestrationRequests"; + } diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ContactCamundaException.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ContactCamundaException.java new file mode 100644 index 0000000000..e1ec46a9c1 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ContactCamundaException.java @@ -0,0 +1,43 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T 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.so.apihandlerinfra.exceptions; + +public class ContactCamundaException extends ApiException { + + private static final String contactCamundaErrorMessage = "Unable to get process-instance history from Camunda for requestId: %s due to error: %s"; + + private ContactCamundaException(Builder builder) { + super(builder); + } + + public static class Builder extends ApiException.Builder<Builder>{ + + + public Builder(String requestId, String error, int httpResponseCode, String messageID) { + super(contactCamundaErrorMessage.format(contactCamundaErrorMessage, requestId, error),httpResponseCode,messageID); + } + + public ContactCamundaException build() { + return new ContactCamundaException(this); + } + } + +} diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java index f1b46e7b50..2ba0e4a173 100644 --- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java +++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java @@ -21,7 +21,7 @@ package org.onap.so.apihandler.common; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapperTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapperTest.java index 06459a2f0a..1962f00d52 100644 --- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapperTest.java +++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapperTest.java @@ -26,8 +26,8 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.StringStartsWith.startsWith; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.anyObject; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; diff --git a/mso-api-handlers/mso-api-handler-infra/pom.xml b/mso-api-handlers/mso-api-handler-infra/pom.xml index f2120811f5..dd77c242d4 100644 --- a/mso-api-handlers/mso-api-handler-infra/pom.xml +++ b/mso-api-handlers/mso-api-handler-infra/pom.xml @@ -14,6 +14,8 @@ <name>mso-api-handler-infra</name> <description>ONAP SO API Handler Infra</description> <properties> + <camunda.version>7.9.0</camunda.version> + <camunda.bpm.assert.version>1.2</camunda.bpm.assert.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <swagger-version>1.3.0</swagger-version> @@ -35,10 +37,22 @@ <type>pom</type> <scope>import</scope> </dependency> + <dependency> + <!-- Import dependency management from camunda --> + <groupId>org.camunda.bpm</groupId> + <artifactId>camunda-bom</artifactId> + <version>${camunda.version}</version> + <scope>import</scope> + <type>pom</type> + </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> + <groupId>org.camunda.bpm</groupId> + <artifactId>camunda-engine</artifactId> + </dependency> + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> @@ -94,8 +108,7 @@ </dependency> <dependency> <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <version>2.5</version> + <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>javax.interceptor</groupId> diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Constants.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Constants.java deleted file mode 100644 index d824696147..0000000000 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Constants.java +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2017 AT&T 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.so.apihandlerinfra; - - -public class Constants { - - private Constants() { - } - - public static final String REQUEST_ID_PATH = "/{request-id}"; - - public static final String STATUS_SUCCESS = "SUCCESS"; - - public static final String MODIFIED_BY_APIHANDLER = "APIH"; - - public static final long PROGRESS_REQUEST_COMPLETED = 100L; - public static final long PROGRESS_REQUEST_RECEIVED = 0L; - public static final long PROGRESS_REQUEST_IN_PROGRESS = 20L; - - public static final String VNF_TYPE_WILDCARD = "*"; - - public static final String VOLUME_GROUP_COMPONENT_TYPE = "VOLUME_GROUP"; - - public static final String VALID_INSTANCE_NAME_FORMAT = "^[a-zA-Z][a-zA-Z0-9._-]*$"; - - public static final String A_LA_CARTE = "aLaCarte"; - - public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA"; - - public final static String VNF_REQUEST_SCOPE = "vnf"; - public final static String SERVICE_INSTANCE_PATH = "/serviceInstances"; - public final static String SERVICE_INSTANTIATION_PATH = "/serviceInstantiation"; - public final static String ORCHESTRATION_REQUESTS_PATH = "/orchestrationRequests"; - -} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Messages.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Messages.java deleted file mode 100644 index 555c536efb..0000000000 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/Messages.java +++ /dev/null @@ -1,56 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2017 AT&T 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.so.apihandlerinfra; - - -import java.util.HashMap; -import java.util.Map; - -import org.onap.so.apihandler.common.ErrorNumbers; - -public class Messages { - - protected static final Map<String,String> errors = new HashMap<>(); - static { - errors.put(ErrorNumbers.REQUEST_FAILED_SCHEMA_VALIDATION + "_service", "Service request FAILED schema validation. %s"); - errors.put(ErrorNumbers.REQUEST_FAILED_SCHEMA_VALIDATION + "_feature", "Feature request FAILED schema validation. %s"); - errors.put(ErrorNumbers.RECIPE_DOES_NOT_EXIST, "Recipe for %s-type and action specified does not exist in catalog %s"); - errors.put(ErrorNumbers.SERVICE_PARAMETERS_FAILED_SCHEMA_VALIDATION, "Service specific parameters passed in request FAILED schema validation. %s"); - - errors.put(ErrorNumbers.LOCKED_CREATE_ON_THE_SAME_VNF_NAME_IN_PROGRESS, "%s-name (%s) is locked (status = %s) because already working on a CREATE request with same %s-name."); - errors.put(ErrorNumbers.LOCKED_SAME_ACTION_AND_VNF_ID, "%s-id (%s) is locked (status = %s) because already working on a request with same action (%s) for this %s-id."); - errors.put(ErrorNumbers.REQUEST_TIMED_OUT, "Service request timed out before completing"); - errors.put(ErrorNumbers.ERROR_FROM_BPEL, "BPEL returned an error: %s"); - errors.put(ErrorNumbers.NO_COMMUNICATION_TO_BPEL, "Could not communicate with BPEL %s"); - errors.put(ErrorNumbers.NO_RESPONSE_FROM_BPEL, "No response from BPEL %s"); - errors.put(ErrorNumbers.COULD_NOT_WRITE_TO_REQUESTS_DB, "Could not insert or update record in MSO_REQUESTS DB %s"); - errors.put(ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, "Could not communicate with MSO_REQUESTS DB %s"); - errors.put(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB, "Could not communicate with MSO_CATALOG DB %s"); - errors.put(ErrorNumbers.ERROR_FROM_CATALOG_DB, "Received error from MSO_CATALOG DB %s"); - } - - private Messages(){ - } - - public static Map<String,String> getErrors() { - return errors; - } -} diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java index 8c00eb06b4..66b04b6fdb 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java @@ -44,6 +44,7 @@ import org.onap.so.apihandler.common.ResponseHandler; import org.onap.so.apihandlerinfra.exceptions.ApiException; import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException; import org.onap.so.apihandlerinfra.exceptions.ClientConnectionException; +import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException; import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestException; import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException; import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException; @@ -51,6 +52,7 @@ import org.onap.so.apihandlerinfra.exceptions.ValidateException; import org.onap.so.apihandlerinfra.exceptions.VfModuleNotFoundException; import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo; import org.onap.so.db.catalog.beans.NetworkResource; +import org.onap.so.db.catalog.beans.NetworkResourceCustomization; import org.onap.so.db.catalog.beans.Recipe; import org.onap.so.db.catalog.beans.ServiceRecipe; import org.onap.so.db.catalog.beans.VfModule; @@ -82,8 +84,17 @@ import org.onap.so.serviceinstancebeans.Vnfs; import org.onap.so.utils.UUIDChecker; import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.env.Environment; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestTemplate; +import org.camunda.bpm.engine.history.HistoricProcessInstance; +import org.camunda.bpm.engine.impl.persistence.entity.HistoricProcessInstanceEntity; import javax.transaction.Transactional; import javax.ws.rs.Consumes; @@ -135,6 +146,9 @@ public class ServiceInstances { @Autowired private MsoRequest msoRequest; + @Autowired + private RestTemplate restTemplate; + @POST @Path("/{version:[vV][5-7]}/serviceInstances") @Consumes(MediaType.APPLICATION_JSON) @@ -718,11 +732,15 @@ public class ServiceInstances { } InfraActiveRequests dup = null; - + boolean inProgress = false; dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq); - if (dup != null) { + if(dup != null){ + inProgress = camundaHistoryCheck(dup, currentActiveReq); + } + + if (dup != null && inProgress) { buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup); } ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse(); @@ -881,8 +899,13 @@ public class ServiceInstances { } InfraActiveRequests dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, null, requestScope, currentActiveReq); - - if (dup != null) { + boolean inProgress = false; + + if(dup != null){ + inProgress = camundaHistoryCheck(dup, currentActiveReq); + } + + if (dup != null && inProgress) { buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, null, requestScope, dup); } @@ -1149,6 +1172,42 @@ public class ServiceInstances { } return dup; } + protected boolean camundaHistoryCheck(InfraActiveRequests duplicateRecord, InfraActiveRequests currentActiveReq) throws RequestDbFailureException, ContactCamundaException{ + String requestId = duplicateRecord.getRequestId(); + String path = env.getProperty("mso.camunda.rest.history.uri") + requestId; + String targetUrl = env.getProperty("mso.camundaURL") + path; + HttpHeaders headers = setHeaders(env.getProperty("mso.camundaAuth")); + HttpEntity<?> requestEntity = new HttpEntity<>(headers); + ResponseEntity<List<HistoricProcessInstanceEntity>> response = null; + try{ + response = restTemplate.exchange(targetUrl, HttpMethod.GET, requestEntity, new ParameterizedTypeReference<List<HistoricProcessInstanceEntity>>(){}); + }catch(HttpStatusCodeException e){ + ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build(); + ContactCamundaException contactCamundaException= new ContactCamundaException.Builder(requestId, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e) + .errorInfo(errorLoggerInfo).build(); + updateStatus(currentActiveReq, Status.FAILED, contactCamundaException.getMessage()); + throw contactCamundaException; + } + if(response.getBody().isEmpty()){ + updateStatus(duplicateRecord, Status.COMPLETE, "Request Completed"); + } + for(HistoricProcessInstance instance : response.getBody()){ + if(instance.getState().equals("ACTIVE")){ + return true; + }else{ + updateStatus(duplicateRecord, Status.COMPLETE, "Request Completed"); + } + } + return false; + } + private HttpHeaders setHeaders(String auth) { + HttpHeaders headers = new HttpHeaders(); + List<org.springframework.http.MediaType> acceptableMediaTypes = new ArrayList<>(); + acceptableMediaTypes.add(org.springframework.http.MediaType.APPLICATION_JSON); + headers.setAccept(acceptableMediaTypes); + headers.add(HttpHeaders.AUTHORIZATION, auth); + return headers; + } private ServiceInstancesRequest convertJsonToServiceInstanceRequest(String requestJSON, Actions action, long startTime, ServiceInstancesRequest sir, MsoRequest msoRequest, String requestId, String requestUri) throws ApiException { @@ -1672,7 +1731,9 @@ public class ServiceInstances { Recipe recipe = null; if(modelInfo.getModelCustomizationId()!=null){ - NetworkResource networkResource = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId()).getNetworkResource(); + NetworkResourceCustomization networkResourceCustomization = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId()); + if(networkResourceCustomization != null){ + NetworkResource networkResource = networkResourceCustomization.getNetworkResource(); if(networkResource!=null){ if(modelInfo.getModelVersionId() == null) { modelInfo.setModelVersionId(networkResource.getModelUUID()); @@ -1681,6 +1742,9 @@ public class ServiceInstances { }else{ throw new ValidationException("no catalog entry found"); } + }else if(action != Action.deleteInstance){ + throw new ValidationException("modelCustomizationId for networkResourceCustomization lookup", true); + } }else{ //ok for version < 3 and action delete if(modelName != null){ @@ -1733,6 +1797,7 @@ public class ServiceInstances { String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId"); Boolean aLaCarte = null; String apiVersion = version.substring(1); + boolean inProgress = false; long startTime = System.currentTimeMillis (); ServiceInstancesRequest sir = null; @@ -1750,8 +1815,12 @@ public class ServiceInstances { InfraActiveRequests dup = null; dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq); + + if(dup != null){ + inProgress = camundaHistoryCheck(dup, currentActiveReq); + } - if (instanceIdMap != null && dup != null) { + if (instanceIdMap != null && dup != null && inProgress) { buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup); } @@ -1829,7 +1898,7 @@ public class ServiceInstances { return postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri, requestScope); } - public String getRequestId(ContainerRequestContext requestContext) throws ValidateException { + public String getRequestId(ContainerRequestContext requestContext) throws ValidateException { String requestId = null; if (requestContext.getProperty("requestId") != null) { requestId = requestContext.getProperty("requestId").toString(); diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientHelper.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientHelper.java index 6fd33a6afc..6a5de77c73 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientHelper.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientHelper.java @@ -26,6 +26,7 @@ import java.util.Map; import javax.ws.rs.NotFoundException; +import org.onap.aai.domain.yang.OperationalEnvironment; import org.onap.so.apihandlerinfra.tenantisolation.exceptions.AAIClientCallFailed; import org.onap.so.client.aai.AAIObjectType; import org.onap.so.client.aai.AAIResourcesClient; @@ -33,7 +34,6 @@ import org.onap.so.client.aai.entities.AAIResultWrapper; import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; import org.onap.so.client.graphinventory.entities.uri.Depth; -import org.onap.so.client.aai.objects.AAIOperationalEnvironment; import org.onap.so.logger.MsoLogger; import org.springframework.stereotype.Component; @@ -51,7 +51,7 @@ public class AAIClientHelper { public AAIResultWrapper getAaiOperationalEnvironment(String id){ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.OPERATIONAL_ENVIRONMENT, id); - uri.depth(Depth.ZERO); //Do not return relationships if any + uri.depth(Depth.ZERO); AAIResourcesClient client = this.getClient(); return client.get(uri, NotFoundException.class); } @@ -62,7 +62,7 @@ public class AAIClientHelper { * @param id = operationalEnvironmentId * @param AAIOperationalEnvironment object */ - public void updateAaiOperationalEnvironment(String id, AAIOperationalEnvironment aaiRequest){ + public void updateAaiOperationalEnvironment(String id, OperationalEnvironment aaiRequest){ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.OPERATIONAL_ENVIRONMENT, id); AAIResourcesClient client = this.getClient(); @@ -87,7 +87,7 @@ public class AAIClientHelper { * Create an Operational Environment object in A&AI * @param AAIOperationalEnvironment object */ - public void createOperationalEnvironment(AAIOperationalEnvironment operationalEnvironment){ + public void createOperationalEnvironment(OperationalEnvironment operationalEnvironment){ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.OPERATIONAL_ENVIRONMENT, operationalEnvironment.getOperationalEnvironmentId()); AAIResourcesClient client = this.getClient(); diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientObjectBuilder.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientObjectBuilder.java index 23642bdfb4..dc6019c9cb 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientObjectBuilder.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientObjectBuilder.java @@ -20,15 +20,15 @@ package org.onap.so.apihandlerinfra.tenantisolation.helpers; +import org.onap.aai.domain.yang.OperationalEnvironment; import org.onap.so.apihandlerinfra.tenantisolation.CloudOrchestrationRequest; -import org.onap.so.client.aai.objects.AAIOperationalEnvironment; import org.springframework.stereotype.Component; @Component public class AAIClientObjectBuilder { - public AAIOperationalEnvironment buildAAIOperationalEnvironment(String status, CloudOrchestrationRequest cloudOrchestrationRequest) { - AAIOperationalEnvironment env = new AAIOperationalEnvironment(); + public OperationalEnvironment buildAAIOperationalEnvironment(String status, CloudOrchestrationRequest cloudOrchestrationRequest) { + OperationalEnvironment env = new OperationalEnvironment(); env.setOperationalEnvironmentId(cloudOrchestrationRequest.getOperationalEnvironmentId()); env.setOperationalEnvironmentName(cloudOrchestrationRequest.getRequestDetails().getRequestInfo().getInstanceName()); env.setOperationalEnvironmentType(cloudOrchestrationRequest.getRequestDetails().getRequestParameters().getOperationalEnvironmentType().toString()); diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/SDCClientHelper.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/SDCClientHelper.java index 4e8e9562ce..5ead7ddd7f 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/SDCClientHelper.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/SDCClientHelper.java @@ -21,6 +21,7 @@ package org.onap.so.apihandlerinfra.tenantisolation.helpers; import java.net.URL; +import java.util.UUID; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; @@ -92,6 +93,11 @@ public class SDCClientHelper { HttpClient httpClient = httpClientFactory.newJsonClient(url, TargetEntity.SDC); httpClient.addBasicAuthHeader(sdcClientAuth, msoKey); + httpClient.addAdditionalHeader("X-ECOMP-InstanceID", sdcActivateInstanceId); + httpClient.addAdditionalHeader("X-ECOMP-RequestID", UUID.randomUUID().toString()); + httpClient.addAdditionalHeader("Content-Type", SDCClientHelper.SDC_CONTENT_TYPE); + httpClient.addAdditionalHeader("Accept", SDCClientHelper.SDC_ACCEPT_TYPE); + httpClient.addAdditionalHeader("USER_ID", sdcActivateUserId); Response apiResponse = setHttpPostResponse(httpClient, jsonPayload); int statusCode = apiResponse.getStatus();; diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/ActivateVnfOperationalEnvironment.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/ActivateVnfOperationalEnvironment.java index ac9a000d3b..1d2a445c40 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/ActivateVnfOperationalEnvironment.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/ActivateVnfOperationalEnvironment.java @@ -21,11 +21,16 @@ package org.onap.so.apihandlerinfra.tenantisolation.process; import java.util.List; +import java.util.Optional; import javax.ws.rs.core.Response; import org.apache.http.HttpStatus; import org.json.JSONObject; +import org.onap.aai.domain.yang.OperationalEnvironment; +import org.onap.aai.domain.yang.RelationshipList; +import org.onap.aai.domain.yang.Relationship; +import org.onap.aai.domain.yang.RelationshipData; import org.onap.so.apihandler.common.ErrorNumbers; import org.onap.so.db.request.client.RequestsDbClient; import org.onap.so.apihandlerinfra.exceptions.ApiException; @@ -36,8 +41,10 @@ import org.onap.so.apihandlerinfra.tenantisolation.helpers.AAIClientHelper; import org.onap.so.apihandlerinfra.tenantisolation.helpers.ActivateVnfDBHelper; import org.onap.so.apihandlerinfra.tenantisolation.helpers.SDCClientHelper; import org.onap.so.apihandlerinfra.tenantisolationbeans.ServiceModelList; +import org.onap.so.client.aai.AAIObjectType; import org.onap.so.client.aai.entities.AAIResultWrapper; -import org.onap.so.client.aai.objects.AAIOperationalEnvironment; +import org.onap.so.client.aai.entities.Relationships; +import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.db.request.beans.OperationalEnvDistributionStatus; import org.onap.so.db.request.beans.OperationalEnvServiceModelStatus; import org.onap.so.logger.MessageEnum; @@ -54,6 +61,7 @@ public class ActivateVnfOperationalEnvironment { private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.APIH, ActivateVnfOperationalEnvironment.class); private static final int DEFAULT_ACTIVATE_RETRY_COUNT = 3; private static final String DISTRIBUTION_STATUS_SENT = "SENT"; + private static final String OPER_ENVIRONMENT_ID_KEY = "operational-environment-id"; @Autowired private ActivateVnfDBHelper dbHelper; @@ -77,24 +85,39 @@ public class ActivateVnfOperationalEnvironment { * @return void - nothing */ public void execute(String requestId, CloudOrchestrationRequest request) throws ApiException{ - String operationalEnvironmentId = request.getOperationalEnvironmentId(); + String vnfOperationalEnvironmentId = request.getOperationalEnvironmentId(); String vidWorkloadContext = request.getRequestDetails().getRequestParameters().getWorkloadContext(); List<ServiceModelList> serviceModelVersionIdList = request.getRequestDetails().getRequestParameters().getManifest().getServiceModelList(); - + + String ecompOperationalEnvironmentId = null; + AAIResultWrapper wrapper = getAAIOperationalEnvironment(vnfOperationalEnvironmentId); + Optional<Relationships> optRelationships = wrapper.getRelationships(); + if (optRelationships.isPresent()) { + Relationships relationships = optRelationships.get(); + List<AAIResourceUri> operationalEnvironments = relationships.getRelatedAAIUris(AAIObjectType.OPERATIONAL_ENVIRONMENT); + if (!operationalEnvironments.isEmpty()) { + ecompOperationalEnvironmentId = operationalEnvironments.get(0).getURIKeys().get(OPER_ENVIRONMENT_ID_KEY); + } + } + msoLogger.debug(" vnfOperationalEnvironmentId : " + vnfOperationalEnvironmentId); + msoLogger.debug(" ecompOperationalEnvironmentId : " + ecompOperationalEnvironmentId); - AAIOperationalEnvironment operationalEnv = getAAIOperationalEnvironment(operationalEnvironmentId); + OperationalEnvironment operationalEnv = wrapper.asBean(OperationalEnvironment.class).get(); String workloadContext = operationalEnv.getWorkloadContext(); msoLogger.debug(" aai workloadContext: " + workloadContext); if (!vidWorkloadContext.equals(workloadContext)) { - - ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_GENERAL_EXCEPTION, MsoLogger.ErrorCode.BusinessProcesssError).build(); throw new ValidateException.Builder(" The vid workloadContext did not match from aai record. " + " vid workloadContext:" + vidWorkloadContext + " aai workloadContext:" + workloadContext, HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).errorInfo(errorLoggerInfo).build(); } + if (ecompOperationalEnvironmentId==null) { + ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_GENERAL_EXCEPTION, MsoLogger.ErrorCode.BusinessProcesssError).build(); + throw new ValidateException.Builder(" The ECOMP OE was not in aai record; the value of relationship.relationship-data key: " + OPER_ENVIRONMENT_ID_KEY, + HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).errorInfo(errorLoggerInfo).build(); + } - processActivateSDCRequest(requestId, operationalEnvironmentId, serviceModelVersionIdList, workloadContext); + processActivateSDCRequest(requestId, ecompOperationalEnvironmentId, serviceModelVersionIdList, workloadContext); } @@ -171,9 +194,8 @@ public class ActivateVnfOperationalEnvironment { * @param operationalEnvironmentId - String * @return operationalEnv - AAIOperationalEnvironment object */ - public AAIOperationalEnvironment getAAIOperationalEnvironment(String operationalEnvironmentId) { - AAIResultWrapper aaiResult = aaiHelper.getAaiOperationalEnvironment(operationalEnvironmentId); - return aaiResult.asBean(AAIOperationalEnvironment.class).orElse(new AAIOperationalEnvironment()); + public AAIResultWrapper getAAIOperationalEnvironment(String operationalEnvironmentId) { + return aaiHelper.getAaiOperationalEnvironment(operationalEnvironmentId); } } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironment.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironment.java index e95db6b188..36226aae68 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironment.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironment.java @@ -27,6 +27,7 @@ import javax.ws.rs.NotFoundException; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpStatus; +import org.onap.aai.domain.yang.OperationalEnvironment; import org.onap.so.apihandler.common.ErrorNumbers; import org.onap.so.apihandlerinfra.exceptions.ApiException; import org.onap.so.apihandlerinfra.exceptions.ValidateException; @@ -37,7 +38,6 @@ import org.onap.so.apihandlerinfra.tenantisolation.helpers.AAIClientHelper; import org.onap.so.apihandlerinfra.tenantisolation.helpers.AAIClientObjectBuilder; import org.onap.so.apihandlerinfra.tenantisolationbeans.RelatedInstanceList; import org.onap.so.client.aai.entities.AAIResultWrapper; -import org.onap.so.client.aai.objects.AAIOperationalEnvironment; import org.onap.so.client.grm.GRMClient; import org.onap.so.client.grm.beans.OperationalInfo; import org.onap.so.client.grm.beans.Property; @@ -75,7 +75,7 @@ public class CreateVnfOperationalEnvironment { if (aaiResultWrapper.isEmpty()) { throw new NotFoundException(getEcompManagingEnvironmentId() + " not found in A&AI"); } - AAIOperationalEnvironment aaiEnv = objectMapper.readValue(aaiResultWrapper.getJson(), AAIOperationalEnvironment.class); + OperationalEnvironment aaiEnv = aaiResultWrapper.asBean(OperationalEnvironment.class).get(); //Find ECOMP environments in GRM msoLogger.debug(" Start of GRM findRunningServicesAsString"); @@ -209,7 +209,7 @@ public class CreateVnfOperationalEnvironment { return tenantContext + "." + workloadContext + "." + serviceName; } - protected String getSearchKey(AAIOperationalEnvironment aaiEnv) { + protected String getSearchKey(OperationalEnvironment aaiEnv) { return aaiEnv.getTenantContext() + "." + aaiEnv.getWorkloadContext() + ".*"; } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/DeactivateVnfOperationalEnvironment.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/DeactivateVnfOperationalEnvironment.java index 2096011caa..977184e2c5 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/DeactivateVnfOperationalEnvironment.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/process/DeactivateVnfOperationalEnvironment.java @@ -24,6 +24,7 @@ import java.util.Optional; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpStatus; +import org.onap.aai.domain.yang.OperationalEnvironment; import org.onap.so.apihandler.common.ErrorNumbers; import org.onap.so.apihandlerinfra.exceptions.ApiException; import org.onap.so.apihandlerinfra.exceptions.ValidateException; @@ -31,7 +32,6 @@ import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo; import org.onap.so.apihandlerinfra.tenantisolation.CloudOrchestrationRequest; import org.onap.so.apihandlerinfra.tenantisolation.helpers.AAIClientHelper; import org.onap.so.client.aai.entities.AAIResultWrapper; -import org.onap.so.client.aai.objects.AAIOperationalEnvironment; import org.onap.so.logger.MessageEnum; import org.onap.so.logger.MsoLogger; import org.onap.so.requestsdb.RequestsDBHelper; @@ -51,7 +51,7 @@ public class DeactivateVnfOperationalEnvironment { public void execute(String requestId, CloudOrchestrationRequest request) throws ApiException { String operationalEnvironmentId = request.getOperationalEnvironmentId(); - AAIOperationalEnvironment aaiOpEnv = getAAIOperationalEnvironment(operationalEnvironmentId); + OperationalEnvironment aaiOpEnv = getAAIOperationalEnvironment(operationalEnvironmentId); if (aaiOpEnv != null) { String operationalEnvironmentStatus = aaiOpEnv.getOperationalEnvironmentStatus(); @@ -81,9 +81,9 @@ public class DeactivateVnfOperationalEnvironment { } } - private AAIOperationalEnvironment getAAIOperationalEnvironment(String operationalEnvironmentId) { + private OperationalEnvironment getAAIOperationalEnvironment(String operationalEnvironmentId) { AAIResultWrapper aaiResult = aaiHelper.getAaiOperationalEnvironment(operationalEnvironmentId); - Optional<AAIOperationalEnvironment> operationalEnvironmentOpt = aaiResult.asBean(AAIOperationalEnvironment.class); + Optional<OperationalEnvironment> operationalEnvironmentOpt = aaiResult.asBean(OperationalEnvironment.class); return operationalEnvironmentOpt.isPresent() ? operationalEnvironmentOpt.get() : null; } } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml b/mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml index 5b52d33cdd..41e024f625 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml +++ b/mso-api-handlers/mso-api-handler-infra/src/main/resources/application.yaml @@ -7,6 +7,7 @@ server: mso: infra: + auditInventory: true default: versions: apiMinorVersion: 0 @@ -23,7 +24,8 @@ mso: rest: task: uri: /sobpmnengine/task - + history: + uri: /sobpmnengine/history/process-instance?variables=mso-request-id_eq_ spring: datasource: diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/GlobalHealthcheckHandlerTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/GlobalHealthcheckHandlerTest.java index f7e605bcc5..45fadb540a 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/GlobalHealthcheckHandlerTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/GlobalHealthcheckHandlerTest.java @@ -24,10 +24,10 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.anyString; +import static org.mockito.ArgumentMatchers.anyObject; +import static org.mockito.ArgumentMatchers.anyString; import java.net.URI; import java.util.Collections; import java.util.List; @@ -46,7 +46,7 @@ import org.json.JSONException; import org.junit.Rule; import org.junit.Test; import org.mockito.InjectMocks; -import org.mockito.Matchers; +import org.mockito.ArgumentMatchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.Spy; @@ -74,10 +74,10 @@ public class GlobalHealthcheckHandlerTest { ReflectionTestUtils.setField(globalhealth, "actuatorContextPath", "/manage"); ReflectionTestUtils.setField(globalhealth, "endpointBpmn", "http://localhost:8080"); - Mockito.when(restTemplate.exchange(Matchers.any(URI.class), - Matchers.any(HttpMethod.class), - Matchers.<HttpEntity<?>> any(), - Matchers.<Class<Object>> any())).thenReturn(null); + Mockito.when(restTemplate.exchange(ArgumentMatchers.any(URI.class), + ArgumentMatchers.any(HttpMethod.class), + ArgumentMatchers.<HttpEntity<?>> any(), + ArgumentMatchers.<Class<Object>> any())).thenReturn(null); String result = globalhealth.querySubsystemHealth(MsoSubsystems.BPMN); System.out.println(result); @@ -93,10 +93,10 @@ public class GlobalHealthcheckHandlerTest { subSystemResponse.setStatus("UP"); ResponseEntity<Object> r = new ResponseEntity<>(subSystemResponse,HttpStatus.OK); - Mockito.when(restTemplate.exchange(Matchers.any(URI.class), - Matchers.any(HttpMethod.class), - Matchers.<HttpEntity<?>> any(), - Matchers.<Class<Object>> any())).thenReturn(r); + Mockito.when(restTemplate.exchange(ArgumentMatchers.any(URI.class), + ArgumentMatchers.any(HttpMethod.class), + ArgumentMatchers.<HttpEntity<?>> any(), + ArgumentMatchers.<Class<Object>> any())).thenReturn(r); String result = globalhealth.querySubsystemHealth(MsoSubsystems.ASDC); System.out.println(result); @@ -117,10 +117,10 @@ public class GlobalHealthcheckHandlerTest { subSystemResponse.setStatus(status); ResponseEntity<Object> r = new ResponseEntity<>(subSystemResponse,HttpStatus.OK); - Mockito.when(restTemplate.exchange(Matchers.any(URI.class), - Matchers.any(HttpMethod.class), - Matchers.<HttpEntity<?>> any(), - Matchers.<Class<Object>> any())).thenReturn(r); + Mockito.when(restTemplate.exchange(ArgumentMatchers.any(URI.class), + ArgumentMatchers.any(HttpMethod.class), + ArgumentMatchers.<HttpEntity<?>> any(), + ArgumentMatchers.<Class<Object>> any())).thenReturn(r); Mockito.when(requestContext.getProperty(anyString())).thenReturn("1234567890"); Response response = globalhealth.globalHealthcheck(true, requestContext); diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java index f84c2be898..5603ee8380 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java @@ -29,6 +29,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -52,6 +53,8 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException; +import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException; import org.onap.so.db.catalog.beans.Service; import org.onap.so.db.catalog.beans.ServiceRecipe; import org.onap.so.db.request.beans.InfraActiveRequests; @@ -87,6 +90,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; public class ServiceInstancesTest extends BaseTest{ private final ObjectMapper mapper = new ObjectMapper(); + private ObjectMapper errorMapper = new ObjectMapper(); @Autowired private ServiceInstances servInstances; @@ -104,6 +108,9 @@ public class ServiceInstancesTest extends BaseTest{ @Before public void beforeClass() { + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + errorMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + errorMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); // set headers headers = new HttpHeaders(); headers.set(ONAPLogConstants.Headers.PARTNER_NAME, "test_name"); @@ -218,9 +225,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5/serviceInstances"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - //then assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -290,9 +294,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceUriPrev7 + "v5"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstancePrev7.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - //then assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -461,9 +462,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/activate"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceActivate.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -508,9 +506,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/deactivate"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDeactivate.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -553,9 +548,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a8868/"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDelete.json"), uri, HttpMethod.DELETE, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -598,9 +590,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/assign"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceAssign.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -644,9 +633,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/unassign"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceUnassign.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -665,9 +651,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstancePortConfiguration.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -695,9 +678,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstance.json"), uri, HttpMethod.DELETE, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -716,9 +696,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/enablePort"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceEnablePort.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -737,9 +714,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/disablePort"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDisablePort.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -758,9 +732,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/activate"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceActivatePort.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -779,9 +750,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/deactivate"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDeactivatePort.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -800,9 +768,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/addRelationships"; ResponseEntity<String> response = sendRequest(inputStream("/AddRelationships.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -821,9 +786,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/removeRelationships"; ResponseEntity<String> response = sendRequest(inputStream("/RemoveRelationships.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -859,9 +821,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/49585b36-2b5a-443a-8b10-c75d34bb5e46/vnfs"; ResponseEntity<String> response = sendRequest(inputStream("/VnfCreateDefault.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -901,9 +860,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs"; ResponseEntity<String> response = sendRequest(inputStream("/VnfWithServiceRelatedInstance.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -920,13 +876,9 @@ public class ServiceInstancesTest extends BaseTest{ public void createVnfInstanceInvalidVnfResource() throws IOException { uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs"; ResponseEntity<String> response = sendRequest(inputStream("/NoVnfResource.json"), uri, HttpMethod.POST); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("No valid vnfResource is specified", realResponse.getServiceException().getText()); } @Test @@ -958,9 +910,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace"; ResponseEntity<String> response = sendRequest(inputStream("/ReplaceVnf.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -995,8 +944,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace"; ResponseEntity<String> response = sendRequest(inputStream("/ReplaceVnfRecreate.json"), uri, HttpMethod.POST, headers); logger.debug(response.getBody()); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -1032,8 +979,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/recreate"; ResponseEntity<String> response = sendRequest(inputStream("/VnfRecreate.json"), uri, HttpMethod.POST, headers); logger.debug(response.getBody()); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -1070,9 +1015,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000"; ResponseEntity<String> response = sendRequest(inputStream("/UpdateVnf.json"), uri, HttpMethod.PUT, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1099,9 +1041,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/applyUpdatedConfig"; ResponseEntity<String> response = sendRequest(inputStream("/ApplyUpdatedConfig.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1125,17 +1064,13 @@ public class ServiceInstancesTest extends BaseTest{ expectedResponse.setRequestReferences(requestReferences); uri = servInstanceuri + "v5" + "/serviceInstances/e446b97d-9c35-437a-95a2-6b4c542c4507/vnfs/49befbfe-fccb-421d-bb4c-0734a43f5ea0"; ResponseEntity<String> response = sendRequest(inputStream("/DeleteVnfV5.json"), uri, HttpMethod.DELETE, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); } @Test public void createVfModuleInstance() throws IOException { - stubFor(get(urlMatching(".*/vfModuleCustomization/cb82ffd8-252a-11e7-93ae-92361f002671")) .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) .withBody(getWiremockResponseForCatalogdb("vfModuleCustomization_Response.json")) @@ -1169,9 +1104,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/7a88cbeb-0ec8-4765-a271-4f9e90c3da7b/vnfs/cbba721b-4803-4df7-9347-307c9a955426/vfModules"; ResponseEntity<String> response = sendRequest(inputStream("/VfModuleWithRelatedInstances.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1285,6 +1217,7 @@ public class ServiceInstancesTest extends BaseTest{ expectedResponse.setRequestReferences(requestReferences); uri = servInstanceuri + "v6" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000"; ResponseEntity<String> response = sendRequest(inputStream("/VfModuleNoMatchingModelUUID.json"), uri, HttpMethod.DELETE, headers); + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ObjectMapper mapper = new ObjectMapper(); @@ -1318,11 +1251,9 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v6" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules"; ResponseEntity<String> response = sendRequest(inputStream("/VfModuleInvalid.json"), uri, HttpMethod.POST, headers); - + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("No valid vfModuleCustomization is specified", realResponse.getServiceException().getText()); } @Test @@ -1351,9 +1282,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace"; ResponseEntity<String> response = sendRequest(inputStream("/ReplaceVfModule.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1395,9 +1323,6 @@ public class ServiceInstancesTest extends BaseTest{ ResponseEntity<String> response = sendRequest(inputStream("/UpdateVfModule.json"), uri, HttpMethod.PUT, headers); logger.debug(response.getBody()); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1447,9 +1372,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/inPlaceSoftwareUpdate"; ResponseEntity<String> response = sendRequest(inputStream("/InPlaceSoftwareUpdate.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1482,9 +1404,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000"; ResponseEntity<String> response = sendRequest(inputStream("/DeleteVfModule.json"), uri, HttpMethod.DELETE, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1510,9 +1429,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/196b4a84-0858-4317-a1f6-497e2e52ae43/vnfs/36e4f902-ec32-451e-8d53-e3edc19e40a4/vfModules/09f3a38d-933f-450a-8784-9e6c4dec3f72"; ResponseEntity<String> response = sendRequest(inputStream("/DeleteVfModuleNoModelInvariantId.json"), uri, HttpMethod.DELETE, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1543,10 +1459,7 @@ public class ServiceInstancesTest extends BaseTest{ expectedResponse.setRequestReferences(requestReferences); uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000/deactivateAndCloudDelete"; ResponseEntity<String> response = sendRequest(inputStream("/DeactivateAndCloudDeleteVfModule.json"), uri, HttpMethod.POST, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1582,9 +1495,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups"; ResponseEntity<String> response = sendRequest(inputStream("/VolumeGroup.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1621,9 +1531,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups/ff305d54-75b4-431b-adb2-eb6b9e5ff000"; ResponseEntity<String> response = sendRequest(inputStream("/UpdateVolumeGroup.json"), uri, HttpMethod.PUT, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1662,10 +1569,7 @@ public class ServiceInstancesTest extends BaseTest{ expectedResponse.setRequestReferences(requestReferences); uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups/ff305d54-75b4-431b-adb2-eb6b9e5ff000"; ResponseEntity<String> response = sendRequest(inputStream("/DeleteVolumeGroup.json"), uri, HttpMethod.DELETE, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1701,9 +1605,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks"; ResponseEntity<String> response = sendRequest(inputStream("/NetworkCreate.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1738,9 +1639,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb"; ResponseEntity<String> response = sendRequest(inputStream("/UpdateNetwork.json"), uri, HttpMethod.PUT, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1759,7 +1657,7 @@ public class ServiceInstancesTest extends BaseTest{ stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac/networkResource")) .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .withBody(getWiremockResponseForCatalogdb("networkResource_Response.json")) + .withBody(getWiremockResponseForCatalogdb("networkResource_Response.json")) .withStatus(HttpStatus.SC_OK))); stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]" + @@ -1777,9 +1675,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb"; ResponseEntity<String> response = sendRequest(inputStream("/NetworkInstance.json"), uri, HttpMethod.DELETE, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1806,9 +1701,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v6" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb"; ResponseEntity<String> response = sendRequest(inputStream("/NetworkInstanceNoReqParams.json"), uri, HttpMethod.DELETE, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1876,9 +1768,6 @@ public class ServiceInstancesTest extends BaseTest{ requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d")); expectedResponse.setRequestReferences(requestReferences); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1916,9 +1805,6 @@ public class ServiceInstancesTest extends BaseTest{ requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d")); expectedResponse.setRequestReferences(requestReferences); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -1939,9 +1825,6 @@ public class ServiceInstancesTest extends BaseTest{ requestReferences.setInstanceId("1882939"); expectedResponse.setRequestReferences(requestReferences); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); } @@ -1977,9 +1860,6 @@ public class ServiceInstancesTest extends BaseTest{ requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d")); expectedResponse.setRequestReferences(requestReferences); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -2017,9 +1897,6 @@ public class ServiceInstancesTest extends BaseTest{ requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d")); expectedResponse.setRequestReferences(requestReferences); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -2059,9 +1936,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7999/activate"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstancePrev8.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -2106,13 +1980,9 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5/serviceInstances"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("Request Failed due to BPEL error with HTTP Status = 202{\"instanceId\": \"1882939\"}", realResponse.getServiceException().getText()); } @Test @@ -2144,12 +2014,8 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5/serviceInstances"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("Exception caught mapping Camunda JSON response to object", realResponse.getServiceException().getText()); } @@ -2180,13 +2046,9 @@ public class ServiceInstancesTest extends BaseTest{ .withStatus(HttpStatus.SC_OK))); uri = servInstanceuri + "v5/serviceInstances"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertTrue(realResponse.getServiceException().getText().contains("<aetgt:ErrorMessage>Exception in create execution list 500")); } @@ -2228,9 +2090,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceUriPrev7 + "v5"; ResponseEntity<String> response = sendRequest(inputStream("/MacroServiceInstance.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - //then assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -2311,9 +2170,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v7" + "/serviceInstances/7a88cbeb-0ec8-4765-a271-4f9e90c3da7b/vnfs/cbba721b-4803-4df7-9347-307c9a955426/vfModules/scaleOut"; ResponseEntity<String> response = sendRequest(inputStream("/ScaleOutRequest.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); @@ -2346,13 +2202,9 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5/serviceInstances"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - + assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("Exception caught mapping Camunda JSON response to object", realResponse.getServiceException().getText()); } @Test @@ -2363,15 +2215,59 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5/serviceInstances"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); + + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); + assertEquals("Unable to check for duplicate instance due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText()); + } + @Test + public void createServiceInstanceDuplicateHistoryCheck() throws IOException{ + stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withBodyFile("InfraActiveRequests/createInfraActiveRequests.json") + .withStatus(HttpStatus.SC_ACCEPTED))); + stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withBodyFile("Camunda/HistoryCheckResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK))); + + uri = servInstanceuri + "v5/serviceInstances"; + ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); + + assertEquals(Response.Status.CONFLICT.getStatusCode(), response.getStatusCode().value()); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); + assertEquals("Error: Locked instance - This service (testService9) already has a request being worked with a status of UNLOCKED (RequestId - f0a35706-efc4-4e27-80ea-a995d7a2a40f). The existing request must finish or be cleaned up before proceeding.", realResponse.getServiceException().getText()); + } + @Test + public void createServiceInstanceDuplicateHistoryCheckException() throws IOException{ + stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withBodyFile("InfraActiveRequests/createInfraActiveRequests.json") + .withStatus(HttpStatus.SC_ACCEPTED))); + stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withStatus(org.apache.http.HttpStatus.SC_INTERNAL_SERVER_ERROR))); + + uri = servInstanceuri + "v5/serviceInstances"; + ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); + + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); + assertEquals("Unable to get process-instance history from Camunda for requestId: f0a35706-efc4-4e27-80ea-a995d7a2a40f due to error: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText()); + } + @Test + public void createServiceInstanceDuplicate() throws IOException{ + stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR))); + + uri = servInstanceuri + "v5/serviceInstances"; + ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("Unable to check for duplicate instance due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText()); } + @Test public void createServiceInstanceSaveError() throws IOException{ ServiceRecipe serviceRecipe = new ServiceRecipe(); @@ -2398,12 +2294,8 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5/serviceInstances"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText()); } @Test @@ -2417,13 +2309,9 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstancePortConfiguration.json"), uri, HttpMethod.POST, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText()); } @Test @@ -2434,13 +2322,9 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations"; ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceParseFail.json"), uri, HttpMethod.POST, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals("Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException: 500 Server Error", realResponse.getServiceException().getText()); } @Test @@ -2474,9 +2358,6 @@ public class ServiceInstancesTest extends BaseTest{ expectedResponse.setRequestReferences(requestReferences); uri = servInstanceuri + "v7/serviceInstances/e05864f0-ab35-47d0-8be4-56fd9619ba3c/vnfs/f501ce76-a9bc-4601-9837-74fd9f4d5eca"; ResponseEntity<String> response = sendRequest(inputStream("/VnfwithNeteworkInstanceGroup.json"), uri, HttpMethod.PUT, headers); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //then assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -2506,9 +2387,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "/v7/instanceGroups"; ResponseEntity<String> response = sendRequest(inputStream("/CreateInstanceGroup.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - //then assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -2529,9 +2407,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c"; ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - //then assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -2541,14 +2416,9 @@ public class ServiceInstancesTest extends BaseTest{ public void deleteInstanceGroupNoRequestIdHeader() throws IOException{ uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c"; ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - //then assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals(realResponse.getServiceException().getText(), "No valid X-ONAP-RequestID header is specified"); } @Test @@ -2557,14 +2427,9 @@ public class ServiceInstancesTest extends BaseTest{ noPartnerHeaders.set(ONAPLogConstants.Headers.REQUEST_ID, "eca3a1b1-43ab-457e-ab1c-367263d148b4"); uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c"; ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, noPartnerHeaders); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - //then assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals(realResponse.getServiceException().getText(), "No valid X-ONAP-PartnerName header is specified"); } @Test @@ -2579,14 +2444,10 @@ public class ServiceInstancesTest extends BaseTest{ expectedResponse.setRequestReferences(requestReferences); uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c"; ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, noRequestorIdHheaders); - - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); - + //then assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); - RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); assertEquals(realResponse.getServiceException().getText(), "No valid X-RequestorID header is specified"); } @Test @@ -2603,9 +2464,6 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c/addMembers"; ResponseEntity<String> response = sendRequest(inputStream("/AddMembers.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - //then assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); @@ -2625,15 +2483,55 @@ public class ServiceInstancesTest extends BaseTest{ uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c/removeMembers"; ResponseEntity<String> response = sendRequest(inputStream("/RemoveMembers.json"), uri, HttpMethod.POST, headers); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - //then assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); } @Test + public void deleteNetworkInstanceNoCustomizationEntry() throws IOException { + stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK))); + + stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withStatus(HttpStatus.SC_NOT_FOUND))); + + stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]" + + "modelName=VNF-API-DEFAULT&action=deleteInstance")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json")) + .withStatus(org.apache.http.HttpStatus.SC_OK))); + + //expected response + ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse(); + RequestReferences requestReferences = new RequestReferences(); + requestReferences.setInstanceId("1882939"); + requestReferences.setRequestSelfLink(createExpectedSelfLink("v7","32807a28-1a14-4b88-b7b3-2950918aa76d")); + expectedResponse.setRequestReferences(requestReferences); + uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb"; + ResponseEntity<String> response = sendRequest(inputStream("/NetworkInstance.json"), uri, HttpMethod.DELETE, headers); + + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value()); + ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class); + assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId")); + } + @Test + public void updateNetworkInstanceNoCustomizationEntry() throws IOException { + stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac")) + .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withStatus(HttpStatus.SC_NOT_FOUND))); + + uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb"; + ResponseEntity<String> response = sendRequest(inputStream("/UpdateNetwork.json"), uri, HttpMethod.PUT, headers); + + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value()); + RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class); + assertEquals(realResponse.getServiceException().getText(), "No valid modelCustomizationId for networkResourceCustomization lookup is specified"); + } + + @Test public void setServiceTypeTestALaCarte() throws JsonProcessingException{ String requestScope = ModelType.service.toString(); Boolean aLaCarteFlag = true; diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/ModelDistributionRequestTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/ModelDistributionRequestTest.java index afcf0f54c8..9a8f4880f7 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/ModelDistributionRequestTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/ModelDistributionRequestTest.java @@ -26,8 +26,8 @@ import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.contains; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.contains; import static org.mockito.Mockito.doNothing; import javax.inject.Provider; diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientHelperTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientHelperTest.java index f9e3ec6498..b799394b7a 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientHelperTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientHelperTest.java @@ -29,7 +29,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.anyString; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @@ -41,10 +41,10 @@ import java.util.Optional; import org.apache.http.HttpStatus; import org.junit.Test; +import org.onap.aai.domain.yang.OperationalEnvironment; import org.onap.so.apihandlerinfra.BaseTest; import org.onap.so.client.aai.AAIVersion; import org.onap.so.client.aai.entities.AAIResultWrapper; -import org.onap.so.client.aai.objects.AAIOperationalEnvironment; import org.springframework.beans.factory.annotation.Autowired; @@ -60,7 +60,7 @@ public class AAIClientHelperTest extends BaseTest{ .willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile("vnfoperenv/ecompOperationalEnvironment.json").withStatus(HttpStatus.SC_ACCEPTED))); AAIResultWrapper wrapper = clientHelper.getAaiOperationalEnvironment("EMOE-001"); - Optional<AAIOperationalEnvironment> aaiOpEnv = wrapper.asBean(AAIOperationalEnvironment.class); + Optional<OperationalEnvironment> aaiOpEnv = wrapper.asBean(OperationalEnvironment.class); assertEquals("EMOE-001", aaiOpEnv.get().getOperationalEnvironmentId()); } @@ -69,13 +69,13 @@ public class AAIClientHelperTest extends BaseTest{ stubFor(post(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*")) .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED))); - AAIOperationalEnvironment ecompEnv = new AAIOperationalEnvironment(); + OperationalEnvironment ecompEnv = new OperationalEnvironment(); ecompEnv.setTenantContext("Test"); ecompEnv.setWorkloadContext("ECOMPL_PSL"); try { AAIClientHelper clientHelper = mock(AAIClientHelper.class); - doNothing().when(clientHelper).updateAaiOperationalEnvironment(any(String.class), any(AAIOperationalEnvironment.class)); + doNothing().when(clientHelper).updateAaiOperationalEnvironment(any(String.class), any(OperationalEnvironment.class)); clientHelper.updateAaiOperationalEnvironment("EMOE-001", ecompEnv); verify(clientHelper, times(1)).updateAaiOperationalEnvironment("EMOE-001", ecompEnv); @@ -109,14 +109,14 @@ public class AAIClientHelperTest extends BaseTest{ stubFor(put(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*")) .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED))); - AAIOperationalEnvironment ecompEnv = new AAIOperationalEnvironment(); + OperationalEnvironment ecompEnv = new OperationalEnvironment(); ecompEnv.setOperationalEnvironmentId("opeEvnId"); ecompEnv.setTenantContext("Test"); ecompEnv.setWorkloadContext("ECOMPL_PSL"); try { AAIClientHelper clientHelper = mock(AAIClientHelper.class); - doNothing().when(clientHelper).createOperationalEnvironment(any(AAIOperationalEnvironment.class)); + doNothing().when(clientHelper).createOperationalEnvironment(any(OperationalEnvironment.class)); clientHelper.createOperationalEnvironment(ecompEnv); verify(clientHelper, times(1)).createOperationalEnvironment(ecompEnv); @@ -130,7 +130,7 @@ public class AAIClientHelperTest extends BaseTest{ stubFor(put(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*")) .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED))); - AAIOperationalEnvironment ecompEnv = new AAIOperationalEnvironment(); + OperationalEnvironment ecompEnv = new OperationalEnvironment(); ecompEnv.setTenantContext("Test"); ecompEnv.setWorkloadContext("ECOMPL_PSL"); diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientObjectBuilderTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientObjectBuilderTest.java index cf6facc59f..3915fc8928 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientObjectBuilderTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/helpers/AAIClientObjectBuilderTest.java @@ -35,7 +35,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; public class AAIClientObjectBuilderTest extends BaseTest{ - private String expectedAAIObject = "{\"operational-environment-name\":\"TEST_ECOMP_ENVIRONMENT\",\"operational-environment-type\":\"ECOMP\",\"operational-environment-status\":\"Active\",\"tenant-context\":\"TEST\",\"workload-context\":\"ECOMP_TEST\"}"; private CloudOrchestrationRequest request; private ObjectMapper mapper = new ObjectMapper(); @@ -62,8 +61,12 @@ public class AAIClientObjectBuilderTest extends BaseTest{ @Test public void testGetAaiClientObjectBuilder() throws Exception { AAIClientObjectBuilder builder = new AAIClientObjectBuilder(); - assertEquals(expectedAAIObject, mapper.writeValueAsString(builder.buildAAIOperationalEnvironment("Active", request))); + org.onap.aai.domain.yang.OperationalEnvironment operEnv = builder.buildAAIOperationalEnvironment("Active", request); + assertEquals("TEST", operEnv.getTenantContext()); + assertEquals("ECOMP_TEST", operEnv.getWorkloadContext()); + assertEquals("TEST_ECOMP_ENVIRONMENT", operEnv.getOperationalEnvironmentName()); + assertEquals(OperationalEnvironment.ECOMP.toString(), operEnv.getOperationalEnvironmentType()); } - - + + } diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/process/ActivateVnfOperationalEnvironmentTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/process/ActivateVnfOperationalEnvironmentTest.java index c36eb2b063..18af7fbaa0 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/process/ActivateVnfOperationalEnvironmentTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/process/ActivateVnfOperationalEnvironmentTest.java @@ -42,6 +42,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.onap.aai.domain.yang.OperationalEnvironment; import org.onap.so.apihandlerinfra.BaseTest; import org.onap.so.apihandlerinfra.exceptions.ApiException; import org.onap.so.apihandlerinfra.exceptions.ValidateException; @@ -54,7 +55,6 @@ import org.onap.so.apihandlerinfra.tenantisolationbeans.RecoveryAction; import org.onap.so.apihandlerinfra.tenantisolationbeans.Manifest; import org.onap.so.client.aai.AAIVersion; import org.onap.so.client.aai.entities.AAIResultWrapper; -import org.onap.so.client.aai.objects.AAIOperationalEnvironment; import org.onap.so.db.request.beans.InfraActiveRequests; import org.springframework.beans.factory.annotation.Autowired; @@ -99,16 +99,17 @@ public class ActivateVnfOperationalEnvironmentTest extends BaseTest{ @Test public void getAAIOperationalEnvironmentTest() { - AAIOperationalEnvironment aaiOpEnv; + OperationalEnvironment aaiOpEnv; stubFor(get(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*")) - .willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile("vnfoperenv/ecompOperationalEnvironment.json").withStatus(HttpStatus.SC_ACCEPTED))); + .willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile("vnfoperenv/ecompOperationalEnvironmentWithRelationship.json").withStatus(HttpStatus.SC_ACCEPTED))); AAIResultWrapper wrapper = clientHelper.getAaiOperationalEnvironment("EMOE-001"); - aaiOpEnv = wrapper.asBean(AAIOperationalEnvironment.class).get(); + aaiOpEnv = wrapper.asBean(OperationalEnvironment.class).get(); assertEquals("EMOE-001", aaiOpEnv.getOperationalEnvironmentId()); + assertEquals("1dfe7154-eae0-44f2-8e7a-8e5e7882e55d", aaiOpEnv.getRelationshipList().getRelationship().get(0).getRelationshipData().get(0).getRelationshipValue()); assertNotNull(activateVnf.getAAIOperationalEnvironment(operationalEnvironmentId)); - assertEquals( "EMOE-001", activateVnf.getAAIOperationalEnvironment(operationalEnvironmentId).getOperationalEnvironmentId()); + assertEquals( "EMOE-001", activateVnf.getAAIOperationalEnvironment(operationalEnvironmentId).asBean(OperationalEnvironment.class).get().getOperationalEnvironmentId()); } @@ -138,7 +139,7 @@ public class ActivateVnfOperationalEnvironmentTest extends BaseTest{ jsonObject.put("distributionId", sdcDistributionId); stubFor(get(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*")) - .willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile("vnfoperenv/ecompOperationalEnvironment.json").withStatus(HttpStatus.SC_ACCEPTED))); + .willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile("vnfoperenv/ecompOperationalEnvironmentWithRelationship.json").withStatus(HttpStatus.SC_ACCEPTED))); stubFor(post(urlPathMatching("/sdc/v1/catalog/services/TEST_serviceModelVersionId/distr.*")) .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(jsonObject.toString()).withStatus(HttpStatus.SC_ACCEPTED))); activateVnf.execute(requestId, request); diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironmentTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironmentTest.java index 100bc82f7a..ac274dc8dc 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironmentTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/process/CreateVnfOperationalEnvironmentTest.java @@ -32,11 +32,11 @@ import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.http.HttpStatus; import org.junit.Before; import org.junit.Test; +import org.onap.aai.domain.yang.OperationalEnvironment; import org.onap.so.apihandlerinfra.BaseTest; import org.onap.so.apihandlerinfra.exceptions.ApiException; import org.onap.so.apihandlerinfra.tenantisolation.CloudOrchestrationRequest; import org.onap.so.client.aai.AAIVersion; -import org.onap.so.client.aai.objects.AAIOperationalEnvironment; import org.onap.so.client.grm.beans.Property; import org.onap.so.client.grm.beans.ServiceEndPointList; import org.onap.so.db.request.beans.InfraActiveRequests; @@ -102,7 +102,7 @@ public class CreateVnfOperationalEnvironmentTest extends BaseTest{ @Test public void testGetSearchKey() { createVnfOpEnv.setRequest(request); - AAIOperationalEnvironment ecompEnv = new AAIOperationalEnvironment(); + OperationalEnvironment ecompEnv = new OperationalEnvironment(); ecompEnv.setTenantContext("Test"); ecompEnv.setWorkloadContext("ECOMPL_PSL"); assertEquals("Test.ECOMPL_PSL.*", createVnfOpEnv.getSearchKey(ecompEnv)); diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/NetworkInstance.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/NetworkInstance.json index a37fe050eb..6e5eb0f533 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/NetworkInstance.json +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/NetworkInstance.json @@ -1,7 +1,8 @@ { "requestDetails":{ "modelInfo":{ - "modelType":"network" + "modelType":"network", + "modelCustomizationId": "3bdbb104-476c-483e-9f8b-c095b3d308ac" }, "requestInfo":{ "source":"VID", diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponse.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponse.json new file mode 100644 index 0000000000..196c71e010 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponse.json @@ -0,0 +1,21 @@ +[ + { + "id":"d1a0456e-1458-11e9-8afb-0242ac190006", + "businessKey":null, + "processDefinitionId":"86cfa113-141a-11e9-8afb-0242ac190006", + "processDefinitionKey":"UnassignServiceInstanceATTBB", + "processDefinitionName":"UnassignServiceInstanceATTBB", + "processDefinitionVersion":1, + "startTime":"2019-01-09T21:52:11.813+0000", + "endTime":"2019-01-09T21:52:12.353+0000", + "durationInMillis":540, + "startUserId":null, + "startActivityId":"Start_UnassignServiceInstanceBB", + "deleteReason":null, + "superProcessInstanceId":"d15f6c9e-1458-11e9-8afb-0242ac190006", + "superCaseInstanceId":null, + "caseInstanceId":null, + "tenantId":null, + "state":"ACTIVE" + } +]
\ No newline at end of file diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponseCompleted.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponseCompleted.json new file mode 100644 index 0000000000..fdf0e9a286 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/Camunda/HistoryCheckResponseCompleted.json @@ -0,0 +1,21 @@ +[ + { + "id":"d1a0456e-1458-11e9-8afb-0242ac190006", + "businessKey":null, + "processDefinitionId":"86cfa113-141a-11e9-8afb-0242ac190006", + "processDefinitionKey":"UnassignServiceInstanceATTBB", + "processDefinitionName":"UnassignServiceInstanceATTBB", + "processDefinitionVersion":1, + "startTime":"2019-01-09T21:52:11.813+0000", + "endTime":"2019-01-09T21:52:12.353+0000", + "durationInMillis":540, + "startUserId":null, + "startActivityId":"Start_UnassignServiceInstanceBB", + "deleteReason":null, + "superProcessInstanceId":"d15f6c9e-1458-11e9-8afb-0242ac190006", + "superCaseInstanceId":null, + "caseInstanceId":null, + "tenantId":null, + "state":"COMPLETED" + } +]
\ No newline at end of file diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/InfraActiveRequests/createInfraActiveRequests.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/InfraActiveRequests/createInfraActiveRequests.json index 822d847cf6..6be015694c 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/InfraActiveRequests/createInfraActiveRequests.json +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/InfraActiveRequests/createInfraActiveRequests.json @@ -1 +1,50 @@ -{"requestId":"%1$s","clientRequestId":null,"action":"activateInstance","requestStatus":"UNLOCKED","statusMessage":null,"progress":20,"startTime":1506422369000,"endTime":null,"source":"VID","vnfId":null,"vnfName":null,"vnfType":null,"serviceType":null,"aicNodeClli":null,"tenantId":null,"provStatus":null,"vnfParams":null,"vnfOutputs":null,"requestBody":"{\"modelInfo\":{\"modelCustomizationName\":null,\"modelInvariantId\":\"1587cf0e-f12f-478d-8530-5c55ac578c39\",\"modelType\":\"configuration\",\"modelNameVersionId\":null,\"modelName\":null,\"modelVersion\":null,\"modelCustomizationUuid\":null,\"modelVersionId\":\"36a3a8ea-49a6-4ac8-b06c-89a545444455\",\"modelCustomizationId\":\"68dc9a92-214c-11e7-93ae-92361f002671\",\"modelUuid\":null,\"modelInvariantUuid\":null,\"modelInstanceName\":null},\"requestInfo\":{\"billingAccountNumber\":null,\"callbackUrl\":null,\"correlator\":null,\"orderNumber\":null,\"productFamilyId\":null,\"orderVersion\":null,\"source\":\"VID\",\"instanceName\":null,\"suppressRollback\":false,\"requestorId\":\"xxxxxx\"},\"relatedInstanceList\":[{\"relatedInstance\":{\"instanceName\":null,\"instanceId\":\"9e15a443-af65-4f05-9000-47ae495e937d\",\"modelInfo\":{\"modelCustomizationName\":null,\"modelInvariantId\":\"de19ae10-9a25-11e7-abc4-cec278b6b50a\",\"modelType\":\"service\",\"modelNameVersionId\":null,\"modelName\":\"Infra_Configuration_Service\",\"modelVersion\":\"1.0\",\"modelCustomizationUuid\":null,\"modelVersionId\":\"ee938612-9a25-11e7-abc4-cec278b6b50a\",\"modelCustomizationId\":null,\"modelUuid\":null,\"modelInvariantUuid\":null,\"modelInstanceName\":null},\"instanceDirection\":null}}],\"subscriberInfo\":null,\"cloudConfiguration\":{\"aicNodeClli\":null,\"tenantId\":null,\"lcpCloudRegionId\":\"n6\"},\"requestParameters\":{\"subscriptionServiceType\":null,\"userParams\":[],\"aLaCarte\":false,\"autoBuildVfModules\":false,\"cascadeDelete\":false,\"usePreload\":true},\"project\":null,\"owningEntity\":null,\"platform\":null,\"lineOfBusiness\":null}","responseBody":null,"lastModifiedBy":"APIH","modifyTime":1532945172000,"requestType":null,"volumeGroupId":null,"volumeGroupName":null,"vfModuleId":null,"vfModuleName":null,"vfModuleModelName":null,"aaiServiceId":null,"aicCloudRegion":"n6","callBackUrl":null,"correlator":null,"serviceInstanceId":"9e15a443-af65-4f05-9000-47ae495e937d","serviceInstanceName":null,"requestScope":"configuration","requestAction":"activateInstance","networkId":null,"networkName":null,"networkType":null,"requestorId":"xxxxxx","configurationId":"26ef7f15-57bb-48df-8170-e59edc26234c","configurationName":null,"operationalEnvId":null,"operationalEnvName":null,"handler":{},"requestURI":"http://localhost:8087/infraActiveRequests/%1$s"} +{ + "requestId":"f0a35706-efc4-4e27-80ea-a995d7a2a40f", + "clientRequestId":null, + "action":"activateInstance", + "requestStatus":"UNLOCKED", + "statusMessage":null, + "progress":20, + "startTime":1506422369000, + "endTime":null, + "source":"VID", + "vnfId":null, + "vnfName":null, + "vnfType":null, + "serviceType":null, + "aicNodeClli":null, + "tenantId":null, + "provStatus":null, + "vnfParams":null, + "vnfOutputs":null, + "requestBody":"{\"modelInfo\":{\"modelCustomizationName\":null,\"modelInvariantId\":\"1587cf0e-f12f-478d-8530-5c55ac578c39\",\"modelType\":\"configuration\",\"modelNameVersionId\":null,\"modelName\":null,\"modelVersion\":null,\"modelCustomizationUuid\":null,\"modelVersionId\":\"36a3a8ea-49a6-4ac8-b06c-89a545444455\",\"modelCustomizationId\":\"68dc9a92-214c-11e7-93ae-92361f002671\",\"modelUuid\":null,\"modelInvariantUuid\":null,\"modelInstanceName\":null},\"requestInfo\":{\"billingAccountNumber\":null,\"callbackUrl\":null,\"correlator\":null,\"orderNumber\":null,\"productFamilyId\":null,\"orderVersion\":null,\"source\":\"VID\",\"instanceName\":null,\"suppressRollback\":false,\"requestorId\":\"xxxxxx\"},\"relatedInstanceList\":[{\"relatedInstance\":{\"instanceName\":null,\"instanceId\":\"9e15a443-af65-4f05-9000-47ae495e937d\",\"modelInfo\":{\"modelCustomizationName\":null,\"modelInvariantId\":\"de19ae10-9a25-11e7-abc4-cec278b6b50a\",\"modelType\":\"service\",\"modelNameVersionId\":null,\"modelName\":\"Infra_Configuration_Service\",\"modelVersion\":\"1.0\",\"modelCustomizationUuid\":null,\"modelVersionId\":\"ee938612-9a25-11e7-abc4-cec278b6b50a\",\"modelCustomizationId\":null,\"modelUuid\":null,\"modelInvariantUuid\":null,\"modelInstanceName\":null},\"instanceDirection\":null}}],\"subscriberInfo\":null,\"cloudConfiguration\":{\"aicNodeClli\":null,\"tenantId\":null,\"lcpCloudRegionId\":\"n6\"},\"requestParameters\":{\"subscriptionServiceType\":null,\"userParams\":[],\"aLaCarte\":false,\"autoBuildVfModules\":false,\"cascadeDelete\":false,\"usePreload\":true},\"project\":null,\"owningEntity\":null,\"platform\":null,\"lineOfBusiness\":null}", + "responseBody":null, + "lastModifiedBy":"APIH", + "modifyTime":1532945172000, + "requestType":null, + "volumeGroupId":null, + "volumeGroupName":null, + "vfModuleId":null, + "vfModuleName":null, + "vfModuleModelName":null, + "aaiServiceId":null, + "aicCloudRegion":"n6", + "callBackUrl":null, + "correlator":null, + "serviceInstanceId":"9e15a443-af65-4f05-9000-47ae495e937d", + "serviceInstanceName":null, + "requestScope":"configuration", + "requestAction":"activateInstance", + "networkId":null, + "networkName":null, + "networkType":null, + "requestorId":"xxxxxx", + "configurationId":"26ef7f15-57bb-48df-8170-e59edc26234c", + "configurationName":null, + "operationalEnvId":null, + "operationalEnvName":null, + "handler":{ + + }, + "requestURI":"http://localhost:8087/infraActiveRequests/%1$s" +}
\ No newline at end of file diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/vnfoperenv/ecompOperationalEnvironmentWithRelationship.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/vnfoperenv/ecompOperationalEnvironmentWithRelationship.json new file mode 100644 index 0000000000..0a34cb385e --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/vnfoperenv/ecompOperationalEnvironmentWithRelationship.json @@ -0,0 +1,27 @@ +{ + "operational-environment-id": "EMOE-001", + "operational-environment-name": "Test Managing ECOMP Environment", + "operational-environment-type": "ECOMP", + "operational-environment-status": "ACTIVE", + "tenant-context": "Test", + "workload-context": "PVT", + "resource-version": "1505228226913", + "relationship-list": { + "relationship": [{ + "related-to": "operational-environment", + "relationship-label": "org.onap.relationships.inventory.Uses", + "related-link": "/aai/v13/cloud-infrastructure/operational-environments/operational-environment/1dfe7154-eae0-44f2-8e7a-8e5e7882e55d", + "relationship-data": [{ + "relationship-key": "operational-environment.operational-environment-id", + "relationship-value": "1dfe7154-eae0-44f2-8e7a-8e5e7882e55d" + } + ], + "related-to-property": [{ + "property-key": "operational-environment.operational-environment-name", + "property-value": "myOpEnv_IST_un577h_0119" + } + ] + } + ] + } +}
\ No newline at end of file diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/schema.sql b/mso-api-handlers/mso-api-handler-infra/src/test/resources/schema.sql index eae0e3a1cb..95db1c2b7a 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/schema.sql +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/schema.sql @@ -30,6 +30,7 @@ create table `allotted_resource_customization` ( `min_instances` int(11) default null, `max_instances` int(11) default null, `ar_model_uuid` varchar(200) not null, + `resource_input` varchar(20000) default null, `creation_timestamp` datetime not null default current_timestamp, primary key (`model_customization_uuid`), key `fk_allotted_resource_customization__allotted_resource1_idx` (`ar_model_uuid`), @@ -140,11 +141,11 @@ create table `network_resource` ( `model_name` varchar(200) not null, `model_invariant_uuid` varchar(200) default null, `description` varchar(1200) default null, - `heat_template_artifact_uuid` varchar(200) not null, + `heat_template_artifact_uuid` varchar(200) null, `neutron_network_type` varchar(20) default null, `model_version` varchar(20) default null, `tosca_node_type` varchar(200) default null, - `aic_version_min` varchar(20) not null, + `aic_version_min` varchar(20) null, `aic_version_max` varchar(20) default null, `orchestration_mode` varchar(20) default 'heat', `resource_category` varchar(20) default null, @@ -153,8 +154,7 @@ create table `network_resource` ( primary key (`model_uuid`), key `fk_network_resource__temp_network_heat_template_lookup1_idx` (`model_name`), key `fk_network_resource__heat_template1_idx` (`heat_template_artifact_uuid`), - constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade, - constraint `fk_network_resource__temp_network_heat_template_lookup__mod_nm1` foreign key (`model_name`) references `temp_network_heat_template_lookup` (`network_resource_model_name`) on delete no action on update no action + constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade ) engine=innodb default charset=latin1; @@ -170,6 +170,7 @@ create table `network_resource_customization` ( `network_scope` varchar(45) default null, `creation_timestamp` datetime not null default current_timestamp, `network_resource_model_uuid` varchar(200) not null, + `resource_input` varchar(20000) default null, primary key (`model_customization_uuid`), key `fk_network_resource_customization__network_resource1_idx` (`network_resource_model_uuid`), constraint `fk_network_resource_customization__network_resource1` foreign key (`network_resource_model_uuid`) references `network_resource` (`model_uuid`) on delete cascade on update cascade @@ -206,6 +207,7 @@ create table `service` ( `environment_context` varchar(200) default null, `workload_context` varchar(200) default null, `service_category` varchar(200) default null, + `resource_order` varchar(200) default null, primary key (`model_uuid`), key `fk_service__tosca_csar1_idx` (`tosca_csar_artifact_uuid`), constraint `fk_service__tosca_csar1` foreign key (`tosca_csar_artifact_uuid`) references `tosca_csar` (`artifact_uuid`) on delete cascade on update cascade @@ -395,6 +397,7 @@ create table `vnf_resource_customization` ( `creation_timestamp` datetime not null default current_timestamp, `vnf_resource_model_uuid` varchar(200) not null, `multi_stage_design` varchar(20) default null, + `resource_input` varchar(20000) default null, primary key (`model_customization_uuid`), key `fk_vnf_resource_customization__vnf_resource1_idx` (`vnf_resource_model_uuid`), constraint `fk_vnf_resource_customization__vnf_resource1` foreign key (`vnf_resource_model_uuid`) references `vnf_resource` (`model_uuid`) on delete cascade on update cascade diff --git a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/WatchdogServiceModVerIdLookup.java b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/WatchdogServiceModVerIdLookup.java index 77089cbbdc..25f5802413 100644 --- a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/WatchdogServiceModVerIdLookup.java +++ b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/beans/WatchdogServiceModVerIdLookup.java @@ -22,6 +22,8 @@ package org.onap.so.db.request.beans; import java.io.Serializable; import java.util.Date; +import java.util.Objects; +import java.util.Optional; import javax.persistence.Column; import javax.persistence.Entity; @@ -31,7 +33,7 @@ import javax.persistence.PrePersist; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import java.util.Objects; + import org.apache.commons.lang3.builder.ToStringBuilder; @IdClass(WatchdogServiceModVerIdLookupId.class) @@ -50,6 +52,10 @@ public class WatchdogServiceModVerIdLookup implements Serializable { @Id @Column(name = "SERVICE_MODEL_VERSION_ID", length=45) private String serviceModelVersionId; + @Column(name = "DISTRIBUTION_NOTIFICATION") + private String distributionNotification; + @Column(name = "CONSUMER_ID", length=200) + private String consumerId; @Column(name = "CREATE_TIME", updatable=false) @Temporal(TemporalType.TIMESTAMP) private Date createTime; @@ -57,9 +63,19 @@ public class WatchdogServiceModVerIdLookup implements Serializable { public WatchdogServiceModVerIdLookup() { } - public WatchdogServiceModVerIdLookup(String distributionId, String serviceModelVersionId) { + /** + * + * @param distributionId - Distribution ID + * @param serviceModelVersionId -- service UUID + * @param distributionNotification -- Notification content from ASDC + * @param consumerId -- Consumer ID associated with subscription. + */ + public WatchdogServiceModVerIdLookup(String distributionId, String serviceModelVersionId, + Optional<String> distributionNotification, String consumerId) { this.distributionId = distributionId; this.serviceModelVersionId = serviceModelVersionId; + this.distributionNotification= distributionNotification.orElse(null); + this.consumerId = consumerId; } public String getDistributionId() { @@ -104,8 +120,24 @@ public class WatchdogServiceModVerIdLookup implements Serializable { } @Override public String toString() { - return new ToStringBuilder(this).append("distributionId", getDistributionId()) - .append("serviceModelVersionId", getServiceModelVersionId()).append("createTime", getCreateTime()) + return new ToStringBuilder(this) + .append("distributionId", getDistributionId()) + .append("serviceModelVersionId", getServiceModelVersionId()) + .append("createTime", getCreateTime()) + .append("distributionNotification", getDistributionNotification()) + .append("consumerId", getConsumerId()) .toString(); } + public String getDistributionNotification() { + return distributionNotification; + } + public void setDistributionNotification(String distributionNotification) { + this.distributionNotification = distributionNotification; + } + public String getConsumerId() { + return consumerId; + } + public void setConsumerId(String consumerId) { + this.consumerId = consumerId; + } } diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/AllottedResourceCustomization.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/AllottedResourceCustomization.java index 00ddf35a5f..04b93c3886 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/AllottedResourceCustomization.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/AllottedResourceCustomization.java @@ -93,6 +93,9 @@ public class AllottedResourceCustomization implements Serializable { @Column(name = "MAX_INSTANCES") private Integer maxInstances; + @Column(name = "RESOURCE_INPUT") + private String resourceInput; + @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "AR_MODEL_UUID") private AllottedResource allottedResource; @@ -241,4 +244,12 @@ public class AllottedResourceCustomization implements Serializable { public void setMaxInstances(Integer maxInstances) { this.maxInstances = maxInstances; } + + public String getResourceInput() { + return resourceInput; + } + + public void setResourceInput(String resourceInput) { + this.resourceInput = resourceInput; + } } diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/CloudIdentity.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/CloudIdentity.java index 820b47a2db..bb01f6f804 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/CloudIdentity.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/CloudIdentity.java @@ -23,6 +23,7 @@ package org.onap.so.db.catalog.beans; import com.fasterxml.jackson.annotation.JsonProperty; import com.openpojo.business.annotation.BusinessKey; import org.apache.commons.lang3.builder.HashCodeBuilder; + import java.util.Date; import org.apache.commons.lang3.builder.EqualsBuilder; diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/CvnfcCustomization.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/CvnfcCustomization.java index c02b1e3030..b1ad0de5ca 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/CvnfcCustomization.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/CvnfcCustomization.java @@ -107,7 +107,7 @@ public class CvnfcCustomization implements Serializable { @JoinColumn(name = "VNF_RESOURCE_CUST_MODEL_CUSTOMIZATION_UUID") private VnfResourceCustomization vnfResourceCustomization; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "modelCustomizationUUID") + @OneToMany(cascade = CascadeType.ALL, mappedBy = "cvnfcCustomization") private Set<VnfVfmoduleCvnfcConfigurationCustomization> vnfVfmoduleCvnfcConfigurationCustomization; @Override diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/HomingInstance.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/HomingInstance.java new file mode 100644 index 0000000000..ef474be159 --- /dev/null +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/HomingInstance.java @@ -0,0 +1,152 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2018. Intel Corp. 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.so.db.catalog.beans; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.openpojo.business.annotation.BusinessKey; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import uk.co.blackpepper.bowman.annotation.RemoteResource; +import uk.co.blackpepper.bowman.annotation.ResourceId; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.net.URI; + +/** + * EntityBean class for a HomingInstance. This bean represents a homing instance + * of a service, populated on successful homing + * + */ +@RemoteResource("/homingInstance") +@Entity +@Table(name = "homing_instances") +public class HomingInstance { + @JsonProperty + @BusinessKey + @Id + @Column(name = "SERVICE_INSTANCE_ID") + private String serviceInstanceId; + + @JsonProperty("cloud_region_id") + @BusinessKey + @Column(name = "CLOUD_REGION_ID") + private String cloudRegionId; + + @JsonProperty("cloud_owner") + @BusinessKey + @Column(name = "CLOUD_OWNER") + private String cloudOwner; + + + + @JsonProperty("oof_directives") + @BusinessKey + @Column(name = "OOF_DIRECTIVES", columnDefinition = "LONGTEXT") + private String oofDirectives; + + @Transient + private URI uri; + + public HomingInstance () { + + } + + public HomingInstance (HomingInstance homingInstance) { + this.serviceInstanceId = homingInstance.getServiceInstanceId(); + this.cloudRegionId = homingInstance.getCloudRegionId(); + this.cloudOwner = homingInstance.getCloudOwner(); + this.oofDirectives = homingInstance.getOofDirectives(); + } + + + public String getServiceInstanceId() { + return this.serviceInstanceId; + } + + public void setServiceInstanceId(String serviceInstanceId) { + + this.serviceInstanceId = serviceInstanceId; + } + + public String getCloudRegionId() { + + return this.cloudRegionId; + } + + public void setCloudRegionId(String cloudRegionId) { + + this.cloudRegionId = cloudRegionId; + } + + public String getCloudOwner() { + + return this.cloudOwner; + } + + public void setCloudOwner (String cloudOwner) { + + this.cloudOwner = cloudOwner; + } + + public String getOofDirectives() { + return oofDirectives; + } + + public void setOofDirectives(String oofDirectives) { + this.oofDirectives = oofDirectives; + } + + @ResourceId + public URI getUri() { + return this.uri; + } + + public void setUri(URI uri) { + + this.uri = uri; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("serviceInstanceId", serviceInstanceId) + .append("cloudRegionId", cloudRegionId) + .append("cloudOwner", cloudOwner) + .append("oofDirectives", oofDirectives).toString(); + } + + @Override + public boolean equals(final Object other) { + if (!(other instanceof HomingInstance)) { + return false; + } + HomingInstance castOther = (HomingInstance) other; + return new EqualsBuilder().append(serviceInstanceId, castOther.serviceInstanceId).isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(serviceInstanceId).toHashCode(); + } +} diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/NetworkResourceCustomization.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/NetworkResourceCustomization.java index 7afeac7710..1e3b6fc220 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/NetworkResourceCustomization.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/NetworkResourceCustomization.java @@ -99,6 +99,9 @@ public class NetworkResourceCustomization implements Serializable { @Column(name = "NETWORK_ROLE") private String networkRole; + @Column(name = "RESOURCE_INPUT") + private String resourceInput; + @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "NETWORK_RESOURCE_MODEL_UUID") private NetworkResource networkResource = null; @@ -168,4 +171,12 @@ public class NetworkResourceCustomization implements Serializable { public String getNetworkRole() { return this.networkRole; } + + public String getResourceInput() { + return resourceInput; + } + + public void setResourceInput(String resourceInput) { + this.resourceInput = resourceInput; + } } diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/OrchestrationStatusValidationDirective.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/OrchestrationStatusValidationDirective.java index 544e1cbf08..f92aadf7a7 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/OrchestrationStatusValidationDirective.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/OrchestrationStatusValidationDirective.java @@ -22,7 +22,7 @@ package org.onap.so.db.catalog.beans; //TODO find this file a new location? public enum OrchestrationStatusValidationDirective { - SILENT_SUCCESS("SilentSuccess"), CONTINUE("Continue"), FAIL("Fail"); + SILENT_SUCCESS("SilentSuccess"), CONTINUE("Continue"), FAIL("Fail"), VALIDATION_SKIPPED("ValidationSkiPped"); private final String name; diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java index 8e1d498e42..64eff56f97 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/ResourceType.java @@ -28,7 +28,7 @@ public enum ResourceType { NETWORK("Network"), NETWORK_COLLECTION("NetworkCollection"), CONFIGURATION("Configuration"), - CUSTOM("Custom"); + NO_VALIDATE("NoValidate"); private final String name; diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/Service.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/Service.java index 6eb453805b..28ff778d44 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/Service.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/Service.java @@ -92,6 +92,9 @@ public class Service implements Serializable { @Column(name = "SERVICE_CATEGORY") private String category; + @Column(name = "RESOURCE_ORDER") + private String resourceOrder; + @OneToMany(cascade = CascadeType.ALL) @JoinTable(name = "network_resource_customization_to_service", joinColumns = @JoinColumn(name = "SERVICE_MODEL_UUID"), inverseJoinColumns = @JoinColumn(name = "RESOURCE_MODEL_CUSTOMIZATION_UUID")) private List<NetworkResourceCustomization> networkCustomizations; @@ -332,4 +335,12 @@ public class Service implements Serializable { public void setWorkloadContext(String workloadContext) { this.workloadContext = workloadContext; } + + public String getResourceOrder() { + return resourceOrder; + } + + public void setResourceOrder(String resourceOrder) { + this.resourceOrder = resourceOrder; + } } diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResource.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResource.java index 764d2b7c39..83fe051233 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResource.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResource.java @@ -43,6 +43,8 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import com.openpojo.business.annotation.BusinessKey; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; import uk.co.blackpepper.bowman.annotation.LinkedResource; @Entity @@ -91,6 +93,7 @@ public class VnfResource implements Serializable { private Date created; @ManyToOne(fetch = FetchType.LAZY) + @NotFound(action = NotFoundAction.IGNORE) @JoinColumn(name = "HEAT_TEMPLATE_ARTIFACT_UUID") private HeatTemplate heatTemplates; diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java index d286bc0727..53e8c9613e 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java @@ -97,6 +97,9 @@ public class VnfResourceCustomization implements Serializable { @Column(name = "MULTI_STAGE_DESIGN") private String multiStageDesign; + @Column(name = "RESOURCE_INPUT") + private String resourceInput; + @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "VNF_RESOURCE_MODEL_UUID") private VnfResource vnfResources; @@ -283,4 +286,12 @@ public class VnfResourceCustomization implements Serializable { public void setCvnfcCustomization(List<CvnfcCustomization> cvnfcCustomization) { this.cvnfcCustomization = cvnfcCustomization; } + + public String getResourceInput() { + return resourceInput; + } + + public void setResourceInput(String resourceInput) { + this.resourceInput = resourceInput; + } } diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfVfmoduleCvnfcConfigurationCustomization.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfVfmoduleCvnfcConfigurationCustomization.java index 8ef797f8fa..f5e9b5f560 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfVfmoduleCvnfcConfigurationCustomization.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfVfmoduleCvnfcConfigurationCustomization.java @@ -44,6 +44,8 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import com.fasterxml.jackson.annotation.JsonFormat; import com.openpojo.business.annotation.BusinessKey; +import uk.co.blackpepper.bowman.annotation.LinkedResource; + @Entity @Table(name = "vnf_vfmodule_cvnfc_configuration_customization") public class VnfVfmoduleCvnfcConfigurationCustomization implements Serializable { @@ -202,6 +204,7 @@ public class VnfVfmoduleCvnfcConfigurationCustomization implements Serializable this.created = created; } + @LinkedResource public ConfigurationResource getConfigurationResource() { return configurationResource; } diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/client/CatalogDbClient.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/client/CatalogDbClient.java index 3612d83359..ac123b280d 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/client/CatalogDbClient.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/client/CatalogDbClient.java @@ -36,6 +36,7 @@ import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization import org.onap.so.db.catalog.beans.ControllerSelectionReference; import org.onap.so.db.catalog.beans.CvnfcCustomization; import org.onap.so.db.catalog.beans.ExternalServiceToInternalService; +import org.onap.so.db.catalog.beans.HomingInstance; import org.onap.so.db.catalog.beans.InstanceGroup; import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization; import org.onap.so.db.catalog.beans.NetworkRecipe; @@ -126,6 +127,7 @@ public class CatalogDbClient { private static final String WORK_STEP = "workStep"; private static final String CLLI = "clli"; private static final String CLOUD_VERSION = "cloudVersion"; + private static final String HOMING_INSTANCE = "/homingInstance"; private static final String TARGET_ENTITY = "SO:CatalogDB"; private static final String ASTERISK = "*"; @@ -157,6 +159,8 @@ public class CatalogDbClient { private String findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType = "/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType"; private String findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = "/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep"; private String findByClliAndCloudVersion = "/findByClliAndCloudVersion"; + private String findServiceByServiceInstanceId = "/findServiceByServiceInstanceId"; + private String serviceURI; private String vfModuleURI; @@ -169,6 +173,7 @@ public class CatalogDbClient { private String instanceGroupURI; private String cloudifyManagerURI; private String cloudSiteURI; + private String homingInstanceURI; private final Client<Service> serviceClient; @@ -214,9 +219,11 @@ public class CatalogDbClient { private final Client<CloudSite> cloudSiteClient; + private final Client<HomingInstance> homingInstanceClient; + private final Client<CloudifyManager> cloudifyManagerClient; - private Client<CvnfcCustomization> cvnfcCustomizationClient; + private final Client<CvnfcCustomization> cvnfcCustomizationClient; private final Client<ControllerSelectionReference> controllerSelectionReferenceClient; @@ -268,6 +275,7 @@ public class CatalogDbClient { instanceGroupURI = endpoint + INSTANCE_GROUP + URI_SEPARATOR; cloudifyManagerURI = endpoint + CLOUDIFY_MANAGER + URI_SEPARATOR; cloudSiteURI = endpoint + CLOUD_SITE + URI_SEPARATOR; + homingInstanceURI = endpoint + HOMING_INSTANCE + URI_SEPARATOR; } @@ -306,6 +314,7 @@ public class CatalogDbClient { networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class); collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class); cloudSiteClient = clientFactory.create(CloudSite.class); + homingInstanceClient = clientFactory.create(HomingInstance.class); cloudifyManagerClient = clientFactory.create(CloudifyManager.class); serviceRecipeClient = clientFactory.create(ServiceRecipe.class); cvnfcCustomizationClient = clientFactory.create(CvnfcCustomization.class); @@ -348,6 +357,7 @@ public class CatalogDbClient { networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class); collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class); cloudSiteClient = clientFactory.create(CloudSite.class); + homingInstanceClient = clientFactory.create(HomingInstance.class); cloudifyManagerClient = clientFactory.create(CloudifyManager.class); serviceRecipeClient = clientFactory.create(ServiceRecipe.class); cvnfcCustomizationClient = clientFactory.create(CvnfcCustomization.class); @@ -609,20 +619,39 @@ public class CatalogDbClient { } public CloudSite getCloudSite(String id){ - return this.getSingleResource(cloudSiteClient, getUri(cloudSiteURI + id)); + return this.getSingleResource(cloudSiteClient, + getUri(cloudSiteURI + id)); + } + + public CloudSite getCloudSite(String id, String uri){ + return this.getSingleResource(cloudSiteClient, + getUri(uri + id)); } public void postCloudSite(CloudSite cloudSite){ this.postSingleResource(cloudSiteClient, cloudSite); } - public CloudSite getCloudSiteByClliAndAicVersion (String clli, String cloudVersion){ return this.getSingleResource(cloudSiteClient, getUri(UriBuilder .fromUri(findByClliAndCloudVersion) .queryParam(CLLI,clli).queryParam(CLOUD_VERSION,cloudVersion).build().toString())); } + public HomingInstance getHomingInstance (String serviceInstanceId){ + return this.getSingleResource(homingInstanceClient, + getUri(homingInstanceURI + serviceInstanceId)); + } + + public HomingInstance getHomingInstance (String serviceInstanceId, String uri){ + return this.getSingleResource(homingInstanceClient, + getUri(uri + serviceInstanceId)); + } + + public void postHomingInstance(HomingInstance homingInstance){ + this.postSingleResource(homingInstanceClient, homingInstance); + } + public Service getServiceByModelVersionAndModelInvariantUUID(String modelVersion, String modelInvariantUUID) { return this.getSingleResource(serviceClient, getUri(UriBuilder .fromUri(findFirstByModelVersionAndModelInvariantUUIDURI) @@ -666,18 +695,11 @@ public class CatalogDbClient { } public List<CvnfcCustomization> getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID(String vnfCustomizationUUID, String vfModuleCustomizationUUID){ - return this.getMultipleVnfcCustomizations( - UriBuilder.fromUri(endpoint + "/vnfcCustomization/search/findByVnfCustomizationUUIDAndVfModuleCustomizationUUID") - .queryParam("VNF_CUSTOMIZATION_UUID", vnfCustomizationUUID) - .queryParam("VFMODULE_CUSTOMIZATION_UUID", vfModuleCustomizationUUID).build()); - } - - private List<CvnfcCustomization> getMultipleVnfcCustomizations(URI uri) { - Iterable<CvnfcCustomization> vnfcIterator = cvnfcCustomizationClient.getAll(uri); - List<CvnfcCustomization> vnfcList = new ArrayList<>(); - Iterator<CvnfcCustomization> it = vnfcIterator.iterator(); - it.forEachRemaining(vnfcList::add); - return vnfcList; + + return this.getMultipleResources(cvnfcCustomizationClient,getUri(UriBuilder + .fromUri(endpoint + "/cvnfcCustomization/search/findByVnfResourceCustomizationAndVfModuleCustomization") + .queryParam("VNF_RESOURCE_CUST_MODEL_CUSTOMIZATION_UUID", vnfCustomizationUUID) + .queryParam("VF_MODULE_CUST_MODEL_CUSTOMIZATION_UUID", vfModuleCustomizationUUID).build().toString())); } } diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/CvnfcCustomizationRepository.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/CvnfcCustomizationRepository.java index 0c82b84c0f..059d0da498 100644 --- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/CvnfcCustomizationRepository.java +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/CvnfcCustomizationRepository.java @@ -24,13 +24,15 @@ import java.util.List; import org.onap.so.db.catalog.beans.CvnfcCustomization; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.data.rest.core.annotation.RepositoryRestResource; @RepositoryRestResource(collectionResourceRel = "cvnfcCustomization", path = "cvnfcCustomization") -public interface CvnfcCustomizationRepository extends JpaRepository<CvnfcCustomization, String> { +public interface CvnfcCustomizationRepository extends JpaRepository<CvnfcCustomization, Integer> { CvnfcCustomization findOneByModelCustomizationUUID(String modelCustomizationUuid); List<CvnfcCustomization> findByModelCustomizationUUID(String modelCustomizationUUID); - List<CvnfcCustomization> findByVnfResourceCustomizationAndVfModuleCustomization (@Param("VNF_RESOURCE_CUST_MODEL_CUSTOMIZATION_UUID") String vnfResourceCustomization, - @Param("VF_MODULE_CUST_MODEL_CUSTOMIZATION_UUID") String vfModuleCustomization); + + @Query(value = "SELECT * FROM cvnfc_customization WHERE VNF_RESOURCE_CUST_MODEL_CUSTOMIZATION_UUID = ?1 AND VF_MODULE_CUST_MODEL_CUSTOMIZATION_UUID = ?2", nativeQuery = true) + List<CvnfcCustomization> findByVnfResourceCustomizationAndVfModuleCustomization (@Param("VNF_RESOURCE_CUST_MODEL_CUSTOMIZATION_UUID") String vnfResourceCustomization,@Param("VF_MODULE_CUST_MODEL_CUSTOMIZATION_UUID") String vfModuleCustomization); }
\ No newline at end of file diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/HomingInstanceRepository.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/HomingInstanceRepository.java new file mode 100644 index 0000000000..aea8d3e537 --- /dev/null +++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/HomingInstanceRepository.java @@ -0,0 +1,30 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2018. Intel Corp. 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.so.db.catalog.data.repository; + +import org.onap.so.db.catalog.beans.HomingInstance; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +@RepositoryRestResource(collectionResourceRel = "homingInstance", path = "homingInstance") +public interface HomingInstanceRepository extends JpaRepository<HomingInstance, String> { + HomingInstance findServiceByServiceInstanceId(String serviceInstanceId); +} diff --git a/mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/CvnfcCustomizationRepositoryTest.java b/mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/CvnfcCustomizationRepositoryTest.java index ae3c49ec7d..8de5366ff3 100644 --- a/mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/CvnfcCustomizationRepositoryTest.java +++ b/mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/CvnfcCustomizationRepositoryTest.java @@ -24,16 +24,20 @@ import static com.shazam.shazamcrest.MatcherAssert.assertThat; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.junit.Assert; import org.junit.Test; import org.onap.so.db.catalog.BaseTest; +import org.onap.so.db.catalog.beans.ConfigurationResource; import org.onap.so.db.catalog.beans.CvnfcCustomization; import org.onap.so.db.catalog.beans.VfModule; import org.onap.so.db.catalog.beans.VfModuleCustomization; import org.onap.so.db.catalog.beans.VnfResource; import org.onap.so.db.catalog.beans.VnfResourceCustomization; +import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization; import org.onap.so.db.catalog.beans.VnfcCustomization; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -51,7 +55,7 @@ public class CvnfcCustomizationRepositoryTest extends BaseTest { @Test @Transactional - public void createAndGetTest() throws Exception { + public void createAndGetAllTest() throws Exception { CvnfcCustomization cvnfcCustomization = setUpCvnfcCustomization(); cvnfcCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); @@ -100,4 +104,235 @@ public class CvnfcCustomizationRepositoryTest extends BaseTest { } Assert.assertTrue(matchFound); } + + @Test + @Transactional + public void createAndGetCvnfcCustomizationListTest() throws Exception { + + CvnfcCustomization cvnfcCustomization = setUpCvnfcCustomization(); + cvnfcCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); + vfModuleCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + VfModule vFModule = setUpVfModule(); + VnfResource vnfResource = setUpVnfResource(); + + vFModule.setVnfResources(vnfResource); + vfModuleCustomization.setVfModule(vFModule); + cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization); + + VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization(); + vnfResourceCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + vnfResourceCustomization.setModelInstanceName("testModelInstanceName"); + + List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList(); + vnfResourceCustomizations.add(vnfResourceCustomization); + vnfResource.setVnfResourceCustomizations(vnfResourceCustomizations); + vnfResourceCustomization.setVnfResources(vnfResource); + + cvnfcCustomization.setVnfResourceCustomization(vnfResourceCustomization); + + VnfcCustomization vnfcCustomization = setUpVnfcCustomization(); + vnfcCustomization.setModelCustomizationUUID("d95d704a-9ff2-11e8-98d0-529269fb1459"); + cvnfcCustomization.setVnfcCustomization(vnfcCustomization); + + + + cvnfcCustomizationRepository.save(cvnfcCustomization); + + List<CvnfcCustomization> cvnfcCustomizationList = cvnfcCustomizationRepository.findByModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + boolean matchFound = false; + for (CvnfcCustomization foundCvnfcCustomization : cvnfcCustomizationList) { + if (foundCvnfcCustomization.getDescription().equalsIgnoreCase(cvnfcCustomization.getDescription())) { + + assertThat(cvnfcCustomization, sameBeanAs(foundCvnfcCustomization) + .ignoring("id") + .ignoring("created") + .ignoring("vnfVfmoduleCvnfcConfigurationCustomization") + .ignoring("vnfResourceCusteModelCustomizationUUID")); + + matchFound = true; + break; + } + } + Assert.assertTrue(matchFound); + } + + + @Test + @Transactional + public void createAndGetCvnfcCustomizationTest() throws Exception { + + CvnfcCustomization cvnfcCustomization = setUpCvnfcCustomization(); + cvnfcCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); + vfModuleCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + VfModule vFModule = setUpVfModule(); + VnfResource vnfResource = setUpVnfResource(); + + vFModule.setVnfResources(vnfResource); + vfModuleCustomization.setVfModule(vFModule); + cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization); + + VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization(); + vnfResourceCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + vnfResourceCustomization.setModelInstanceName("testModelInstanceName"); + + List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList(); + vnfResourceCustomizations.add(vnfResourceCustomization); + vnfResource.setVnfResourceCustomizations(vnfResourceCustomizations); + vnfResourceCustomization.setVnfResources(vnfResource); + + cvnfcCustomization.setVnfResourceCustomization(vnfResourceCustomization); + + VnfcCustomization vnfcCustomization = setUpVnfcCustomization(); + vnfcCustomization.setModelCustomizationUUID("d95d704a-9ff2-11e8-98d0-529269fb1459"); + cvnfcCustomization.setVnfcCustomization(vnfcCustomization); + + cvnfcCustomizationRepository.save(cvnfcCustomization); + + CvnfcCustomization cvnfcCustomizationList = cvnfcCustomizationRepository.findOneByModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + assertThat(cvnfcCustomization, sameBeanAs(cvnfcCustomizationList) + .ignoring("id") + .ignoring("created") + .ignoring("vnfVfmoduleCvnfcConfigurationCustomization") + .ignoring("vnfResourceCusteModelCustomizationUUID")); + + } + + @Test + @Transactional + public void createAndGetCvnfcCustomizationsTest() throws Exception { + + CvnfcCustomization cvnfcCustomization = setUpCvnfcCustomization(); + cvnfcCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); + vfModuleCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + VfModule vFModule = setUpVfModule(); + VnfResource vnfResource = setUpVnfResource(); + + vFModule.setVnfResources(vnfResource); + vfModuleCustomization.setVfModule(vFModule); + cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization); + + VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization(); + vnfResourceCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + vnfResourceCustomization.setModelInstanceName("testModelInstanceName"); + + List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList(); + vnfResourceCustomizations.add(vnfResourceCustomization); + vnfResource.setVnfResourceCustomizations(vnfResourceCustomizations); + vnfResourceCustomization.setVnfResources(vnfResource); + + cvnfcCustomization.setVnfResourceCustomization(vnfResourceCustomization); + + VnfcCustomization vnfcCustomization = setUpVnfcCustomization(); + vnfcCustomization.setModelCustomizationUUID("d95d704a-9ff2-11e8-98d0-529269fb1459"); + cvnfcCustomization.setVnfcCustomization(vnfcCustomization); + + cvnfcCustomizationRepository.save(cvnfcCustomization); + + List<CvnfcCustomization> cvnfcCustomizationList = cvnfcCustomizationRepository.findByVnfResourceCustomizationAndVfModuleCustomization("cf9f6efc-9f14-11e8-98d0-529269fb1459","cf9f6efc-9f14-11e8-98d0-529269fb1459"); + boolean matchFound = false; + for (CvnfcCustomization foundCvnfcCustomization : cvnfcCustomizationList) { + if (foundCvnfcCustomization.getDescription().equalsIgnoreCase(cvnfcCustomization.getDescription())) { + + assertThat(cvnfcCustomization, sameBeanAs(foundCvnfcCustomization) + .ignoring("id") + .ignoring("created") + .ignoring("vnfVfmoduleCvnfcConfigurationCustomization") + .ignoring("vnfResourceCusteModelCustomizationUUID")); + + matchFound = true; + break; + } + } + Assert.assertTrue(matchFound); + } + + @Test + @Transactional + public void createAndGetCvnfcCustomizationsExtractToscaModelTest() throws Exception { + + CvnfcCustomization cvnfcCustomization = setUpCvnfcCustomization(); + cvnfcCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + VfModuleCustomization vfModuleCustomization = new VfModuleCustomization(); + vfModuleCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + + VfModule vFModule = setUpVfModule(); + VnfResource vnfResource = setUpVnfResource(); + + vFModule.setVnfResources(vnfResource); + vfModuleCustomization.setVfModule(vFModule); + cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization); + + VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization(); + vnfResourceCustomization.setModelCustomizationUUID("cf9f6efc-9f14-11e8-98d0-529269fb1459"); + vnfResourceCustomization.setModelInstanceName("testModelInstanceName"); + + List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList(); + vnfResourceCustomizations.add(vnfResourceCustomization); + vnfResource.setVnfResourceCustomizations(vnfResourceCustomizations); + vnfResourceCustomization.setVnfResources(vnfResource); + + cvnfcCustomization.setVnfResourceCustomization(vnfResourceCustomization); + + VnfcCustomization vnfcCustomization = setUpVnfcCustomization(); + vnfcCustomization.setModelCustomizationUUID("d95d704a-9ff2-11e8-98d0-529269fb1459"); + cvnfcCustomization.setVnfcCustomization(vnfcCustomization); + + ConfigurationResource configurationResource = new ConfigurationResource(); + configurationResource.setToscaNodeType("FabricConfiguration"); + configurationResource.setModelInvariantUUID("modelInvariantUUID"); + configurationResource.setModelUUID("modelUUID"); + configurationResource.setModelName("modelName"); + configurationResource.setModelVersion("modelVersion"); + configurationResource.setDescription("description"); + configurationResource.setToscaNodeType("toscaNodeType"); + + VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization = new VnfVfmoduleCvnfcConfigurationCustomization(); + vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationFunction("configurationFunction"); + vnfVfmoduleCvnfcConfigurationCustomization.setModelCustomizationUUID("modelCustomizationUUID"); + vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource); + vnfVfmoduleCvnfcConfigurationCustomization.setCvnfcCustomization(cvnfcCustomization); + vnfVfmoduleCvnfcConfigurationCustomization.setModelInstanceName("modelInstanceName"); + vnfVfmoduleCvnfcConfigurationCustomization.setVfModuleCustomization(vfModuleCustomization); + vnfVfmoduleCvnfcConfigurationCustomization.setVnfResourceCustomization(vnfResourceCustomization); + + Set<VnfVfmoduleCvnfcConfigurationCustomization> vnfVfmoduleCvnfcConfigurationCustomizationSet = new HashSet<VnfVfmoduleCvnfcConfigurationCustomization>(); + vnfVfmoduleCvnfcConfigurationCustomizationSet.add(vnfVfmoduleCvnfcConfigurationCustomization); + cvnfcCustomization.setVnfVfmoduleCvnfcConfigurationCustomization(vnfVfmoduleCvnfcConfigurationCustomizationSet); + + cvnfcCustomizationRepository.save(cvnfcCustomization); + + List<CvnfcCustomization> cvnfcCustomizationList = cvnfcCustomizationRepository.findByVnfResourceCustomizationAndVfModuleCustomization("cf9f6efc-9f14-11e8-98d0-529269fb1459","cf9f6efc-9f14-11e8-98d0-529269fb1459"); + boolean matchFound = false; + for (CvnfcCustomization foundCvnfcCustomization : cvnfcCustomizationList) { + if (foundCvnfcCustomization.getDescription().equalsIgnoreCase(cvnfcCustomization.getDescription())) { + + assertThat(cvnfcCustomization, sameBeanAs(foundCvnfcCustomization) + .ignoring("id") + .ignoring("created") + .ignoring("vnfVfmoduleCvnfcConfigurationCustomization") + .ignoring("vnfResourceCusteModelCustomizationUUID")); + + matchFound = true; + + Set<VnfVfmoduleCvnfcConfigurationCustomization> vnfVfmoduleCvnfcConfigurationCustomizations = foundCvnfcCustomization.getVnfVfmoduleCvnfcConfigurationCustomization(); + for(VnfVfmoduleCvnfcConfigurationCustomization customization : vnfVfmoduleCvnfcConfigurationCustomizations) { + Assert.assertTrue(customization.getConfigurationResource().getToscaNodeType().equalsIgnoreCase("toscaNodeType")); + } + break; + } + } + Assert.assertTrue(matchFound); + + } } diff --git a/mso-catalog-db/src/test/resources/schema.sql b/mso-catalog-db/src/test/resources/schema.sql index de2dd5e28b..d20a9adb7e 100644 --- a/mso-catalog-db/src/test/resources/schema.sql +++ b/mso-catalog-db/src/test/resources/schema.sql @@ -69,6 +69,7 @@ create table `allotted_resource_customization` ( `min_instances` int(11) default null, `max_instances` int(11) default null, `ar_model_uuid` varchar(200) not null, + `resource_input` varchar(20000) default null, `creation_timestamp` datetime not null default current_timestamp, primary key (`model_customization_uuid`), key `fk_allotted_resource_customization__allotted_resource1_idx` (`ar_model_uuid`), @@ -164,8 +165,8 @@ create table `network_recipe` ( create table `temp_network_heat_template_lookup` ( `network_resource_model_name` varchar(200) not null, - `heat_template_artifact_uuid` varchar(200) not null, - `aic_version_min` varchar(20) not null, + `heat_template_artifact_uuid` varchar(200) null, + `aic_version_min` varchar(20) null, `aic_version_max` varchar(20) default null, primary key (`network_resource_model_name`), key `fk_temp_network_heat_template_lookup__heat_template1_idx` (`heat_template_artifact_uuid`), @@ -179,11 +180,11 @@ create table `network_resource` ( `model_name` varchar(200) not null, `model_invariant_uuid` varchar(200) default null, `description` varchar(1200) default null, - `heat_template_artifact_uuid` varchar(200) not null, + `heat_template_artifact_uuid` varchar(200) null, `neutron_network_type` varchar(20) default null, `model_version` varchar(20) default null, `tosca_node_type` varchar(200) default null, - `aic_version_min` varchar(20) not null, + `aic_version_min` varchar(20) null, `aic_version_max` varchar(20) default null, `orchestration_mode` varchar(20) default 'heat', `resource_category` varchar(20) default null, @@ -192,8 +193,7 @@ create table `network_resource` ( primary key (`model_uuid`), key `fk_network_resource__temp_network_heat_template_lookup1_idx` (`model_name`), key `fk_network_resource__heat_template1_idx` (`heat_template_artifact_uuid`), - constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade, - constraint `fk_network_resource__temp_network_heat_template_lookup__mod_nm1` foreign key (`model_name`) references `temp_network_heat_template_lookup` (`network_resource_model_name`) on delete no action on update no action + constraint `fk_network_resource__heat_template1` foreign key (`heat_template_artifact_uuid`) references `heat_template` (`artifact_uuid`) on delete no action on update cascade ) engine=innodb default charset=latin1; @@ -209,6 +209,7 @@ create table `network_resource_customization` ( `network_scope` varchar(45) default null, `creation_timestamp` datetime not null default current_timestamp, `network_resource_model_uuid` varchar(200) not null, + `resource_input` varchar(20000) default null, primary key (`model_customization_uuid`), key `fk_network_resource_customization__network_resource1_idx` (`network_resource_model_uuid`), constraint `fk_network_resource_customization__network_resource1` foreign key (`network_resource_model_uuid`) references `network_resource` (`model_uuid`) on delete cascade on update cascade @@ -245,6 +246,7 @@ create table `service` ( `environment_context` varchar(200) default null, `workload_context` varchar(200) default null, `service_category` varchar(200) default null, + `resource_order` varchar(200) default null, primary key (`model_uuid`), key `fk_service__tosca_csar1_idx` (`tosca_csar_artifact_uuid`), constraint `fk_service__tosca_csar1` foreign key (`tosca_csar_artifact_uuid`) references `tosca_csar` (`artifact_uuid`) on delete cascade on update cascade @@ -434,6 +436,7 @@ create table `vnf_resource_customization` ( `creation_timestamp` datetime not null default current_timestamp, `vnf_resource_model_uuid` varchar(200) not null, `multi_stage_design` varchar(20) default null, + `resource_input` varchar(20000) default null, primary key (`model_customization_uuid`), key `fk_vnf_resource_customization__vnf_resource1_idx` (`vnf_resource_model_uuid`), constraint `fk_vnf_resource_customization__vnf_resource1` foreign key (`vnf_resource_model_uuid`) references `vnf_resource` (`model_uuid`) on delete cascade on update cascade @@ -737,7 +740,7 @@ create table if not exists `collection_network_resource_customization` ( `network_type` varchar(45) null, `network_role` varchar(200) null, `network_scope` varchar(45) null, -`creation_timestamp` datetime not null default current_timestamp, +`creation_timestamp` datetime not null default current_timestamp, `network_resource_model_uuid` varchar(200) not null, `instance_group_model_uuid` varchar(200) null, `crc_model_customization_uuid` varchar(200) not null, primary key (`model_customization_uuid`, `crc_model_customization_uuid`), @@ -501,6 +501,19 @@ </execution> </executions> </plugin> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <version>${springboot.version}</version> + <executions> + <execution> + <id>build-info</id> + <goals> + <goal>build-info</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </pluginManagement> </build> diff --git a/so-monitoring/so-monitoring-handler/src/test/java/org/onap/so/montoring/db/api/DatabaseServiceProviderTest.java b/so-monitoring/so-monitoring-handler/src/test/java/org/onap/so/montoring/db/api/DatabaseServiceProviderTest.java index 8c06426217..31ef747939 100644 --- a/so-monitoring/so-monitoring-handler/src/test/java/org/onap/so/montoring/db/api/DatabaseServiceProviderTest.java +++ b/so-monitoring/so-monitoring-handler/src/test/java/org/onap/so/montoring/db/api/DatabaseServiceProviderTest.java @@ -22,7 +22,7 @@ package org.onap.so.monitoring.db.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app.module.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app.module.ts index 3d736edb95..23308639b6 100644 --- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app.module.ts +++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/app.module.ts @@ -1,79 +1,75 @@ -/**
-============LICENSE_START=======================================================
- Copyright (C) 2018 Ericsson. 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.
-
-SPDX-License-Identifier: Apache-2.0
-============LICENSE_END=========================================================
-
-@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com
-*/
-
-import { BrowserModule } from '@angular/platform-browser';
-import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
-
-import { AppRoutingModule } from './app-routing.module';
-import { AppComponent } from './app.component';
-import { SidebarComponent } from './sidebar/sidebar.component';
-import { TopbarComponent } from './topbar/topbar.component';
-import { HomeComponent } from './home/home.component';
-import { HttpClientModule } from '@angular/common/http';
-import { FormsModule, ReactiveFormsModule } from '@angular/forms';
-import { MatTableModule } from '@angular/material';
-import { DetailsComponent } from './details/details.component';
-import { ToastrNotificationService } from './toastr-notification-service.service';
-import { MatTabsModule } from '@angular/material/tabs';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { MatSelectModule } from '@angular/material/select';
-import { MatFormFieldModule, MatInputModule } from '@angular/material';
-import { MatDatepickerModule } from '@angular/material/datepicker';
-import { MatNativeDateModule } from '@angular/material';
-import { MatCardModule } from '@angular/material/card';
-import { NgxSpinnerModule } from 'ngx-spinner';
-import { RouterModule, Routes } from '@angular/router';
-import { APP_BASE_HREF } from '@angular/common';
-
-@NgModule({
- declarations: [
- AppComponent,
- SidebarComponent,
- TopbarComponent,
- HomeComponent,
- DetailsComponent
- ],
- imports: [
- BrowserModule,
- AppRoutingModule,
- HttpClientModule,
- FormsModule,
- MatTableModule,
- MatTabsModule,
- BrowserAnimationsModule,
- MatSelectModule,
- MatFormFieldModule,
- MatInputModule,
- MatDatepickerModule,
- MatNativeDateModule,
- MatCardModule,
- NgxSpinnerModule,
- RouterModule,
- RouterModule.forRoot([])
- ],
- schemas: [
- CUSTOM_ELEMENTS_SCHEMA
- ],
- providers: [ToastrNotificationService],
- bootstrap: [AppComponent]
-})
-export class AppModule { }
+/** +============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. 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. + +SPDX-License-Identifier: Apache-2.0 +============LICENSE_END========================================================= + +@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com +*/ + +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { SidebarComponent } from './sidebar/sidebar.component'; +import { TopbarComponent } from './topbar/topbar.component'; +import { HomeComponent } from './home/home.component'; +import { HttpClientModule } from '@angular/common/http'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DetailsComponent } from './details/details.component'; +import { ToastrNotificationService } from './toastr-notification-service.service'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MatFormFieldModule, MatInputModule, MatTableModule, MatTabsModule, MatSelectModule, MatNativeDateModule, MatDatepickerModule, MatCardModule, MatPaginatorModule, MatSortModule } from '@angular/material'; +import { NgxSpinnerModule } from 'ngx-spinner'; +import { RouterModule, Routes } from '@angular/router'; +import { APP_BASE_HREF } from '@angular/common'; + +@NgModule({ + declarations: [ + AppComponent, + SidebarComponent, + TopbarComponent, + HomeComponent, + DetailsComponent + ], + imports: [ + BrowserModule, + AppRoutingModule, + HttpClientModule, + FormsModule, + MatTableModule, + MatTabsModule, + BrowserAnimationsModule, + MatSelectModule, + MatFormFieldModule, + MatInputModule, + MatDatepickerModule, + MatNativeDateModule, + MatCardModule, + NgxSpinnerModule, + RouterModule, + MatPaginatorModule, + MatSortModule, + RouterModule.forRoot([]) + ], + schemas: [ + CUSTOM_ELEMENTS_SCHEMA + ], + providers: [ToastrNotificationService], + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/data.service.spec.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/data.service.spec.ts index 834b8c34ea..0438aa3419 100644 --- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/data.service.spec.ts +++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/data.service.spec.ts @@ -1,110 +1,110 @@ -/**
-============LICENSE_START=======================================================
- Copyright (C) 2018 Ericsson. 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.
-
-SPDX-License-Identifier: Apache-2.0
-============LICENSE_END=========================================================
-
-@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com
-*/
-
-import { TestBed, inject } from '@angular/core/testing';
-
-import { DataService } from './data.service';
-import { HttpClient } from '@angular/common/http';
-import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
-import { async } from '@angular/core/testing';
-import { HttpClientModule } from '@angular/common/http';
-import { ToastrNotificationService } from './toastr-notification-service.service';
-import { environment } from '../environments/environment';
-
-class StubbedToastrNotificationService extends ToastrNotificationService {
- toastrSettings() {
- }
-}
-
-describe('DataService', () => {
- beforeEach(() => {
- TestBed.configureTestingModule({
- providers: [DataService, { provide: ToastrNotificationService, useClass: StubbedToastrNotificationService }],
- imports: [HttpClientTestingModule]
- });
- });
-
- // Ensure creation of DataService component
- it('component should be created', async(inject([HttpTestingController, DataService, ToastrNotificationService],
- (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => {
- expect(service).toBeTruthy();
- })));
-
- // Test retrieveInstance function making POST call
- it('test retrieveInstance POST request', async(inject([HttpTestingController, DataService, ToastrNotificationService],
- (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => {
- service.retrieveInstance({}, 1, 2).subscribe(data => { });
- var url = environment.soMonitoringBackendURL + 'v1/search?from=1&to=2';
- const mockReq = httpClient.expectOne(url);
- expect(mockReq.request.method).toEqual('POST');
- mockReq.flush({});
- })));
-
- // Test getProcessInstanceId function making GET request to retrieve processInstanceID
- it('test getProcessInstanceId GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService],
- (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => {
- service.getProcessInstanceId("").subscribe(data => { });
- var url = environment.soMonitoringBackendURL + 'process-instance-id/' + "";
- const mockReq = httpClient.expectOne(url);
- expect(mockReq.request.method).toEqual('GET');
- mockReq.flush({});
- })));
-
- // Test getActivityInstance function making GET request to retrieve activityInstance
- it('test getActivityInstance GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService],
- (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => {
- service.getActivityInstance("").subscribe(data => { });
- var url = environment.soMonitoringBackendURL + 'activity-instance/' + "";
- const mockReq = httpClient.expectOne(url);
- expect(mockReq.request.method).toEqual('GET');
- mockReq.flush({});
- })));
-
- // Test getProcessInstance function making GET request to retrieve processInstance
- it('test getProcessInstance GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService],
- (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => {
- service.getProcessInstance("");
- var url = environment.soMonitoringBackendURL + 'process-instance/' + "";
- const mockReq = httpClient.expectOne(url);
- expect(mockReq.request.method).toEqual('GET');
- })));
-
- // Test getProcessDefinition function making GET request to retrieve processDefinition
- it('test getProcessDefinition GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService],
- (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => {
- service.getProcessDefinition("").subscribe(data => { });
- var url = environment.soMonitoringBackendURL + 'process-definition/' + "";
- const mockReq = httpClient.expectOne(url);
- expect(mockReq.request.method).toEqual('GET');
- mockReq.flush({});
- })));
-
- // Test getVariableInstance function making GET request to retrieve variableInstance
- it('test getVariableInstance GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService],
- (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => {
- service.getVariableInstance("").subscribe(data => { });
- var url = environment.soMonitoringBackendURL + 'variable-instance/' + "";
- const mockReq = httpClient.expectOne(url);
- expect(mockReq.request.method).toEqual('GET');
- mockReq.flush({});
- })));
-});
+/** +============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. 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. + +SPDX-License-Identifier: Apache-2.0 +============LICENSE_END========================================================= + +@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com +*/ + +import { TestBed, inject } from '@angular/core/testing'; + +import { DataService } from './data.service'; +import { HttpClient } from '@angular/common/http'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { async } from '@angular/core/testing'; +import { HttpClientModule } from '@angular/common/http'; +import { ToastrNotificationService } from './toastr-notification-service.service'; +import { environment } from '../environments/environment'; + +class StubbedToastrNotificationService extends ToastrNotificationService { + toastrSettings() { + } +} + +describe('DataService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [DataService, { provide: ToastrNotificationService, useClass: StubbedToastrNotificationService }], + imports: [HttpClientTestingModule] + }); + }); + + // Ensure creation of DataService component + it('component should be created', async(inject([HttpTestingController, DataService, ToastrNotificationService], + (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => { + expect(service).toBeTruthy(); + }))); + + // Test retrieveInstance function making POST call + it('test retrieveInstance POST request', async(inject([HttpTestingController, DataService, ToastrNotificationService], + (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => { + service.retrieveInstance({}, 1, 2).subscribe(data => { }); + var url = environment.soMonitoringBackendURL + 'v1/search?from=1&to=2'; + const mockReq = httpClient.expectOne(url); + expect(mockReq.request.method).toEqual('POST'); + mockReq.flush({}); + }))); + + // Test getProcessInstanceId function making GET request to retrieve processInstanceID + it('test getProcessInstanceId GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService], + (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => { + service.getProcessInstanceId("").subscribe(data => { }); + var url = environment.soMonitoringBackendURL + 'process-instance-id/' + ""; + const mockReq = httpClient.expectOne(url); + expect(mockReq.request.method).toEqual('GET'); + mockReq.flush({}); + }))); + + // Test getActivityInstance function making GET request to retrieve activityInstance + it('test getActivityInstance GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService], + (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => { + service.getActivityInstance("").then(data => { }); + var url = environment.soMonitoringBackendURL + 'activity-instance/' + ""; + const mockReq = httpClient.expectOne(url); + expect(mockReq.request.method).toEqual('GET'); + mockReq.flush({}); + }))); + + // Test getProcessInstance function making GET request to retrieve processInstance + it('test getProcessInstance GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService], + (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => { + service.getProcessInstance(""); + var url = environment.soMonitoringBackendURL + 'process-instance/' + ""; + const mockReq = httpClient.expectOne(url); + expect(mockReq.request.method).toEqual('GET'); + }))); + + // Test getProcessDefinition function making GET request to retrieve processDefinition + it('test getProcessDefinition GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService], + (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => { + service.getProcessDefinition("").subscribe(data => { }); + var url = environment.soMonitoringBackendURL + 'process-definition/' + ""; + const mockReq = httpClient.expectOne(url); + expect(mockReq.request.method).toEqual('GET'); + mockReq.flush({}); + }))); + + // Test getVariableInstance function making GET request to retrieve variableInstance + it('test getVariableInstance GET request', async(inject([HttpTestingController, DataService, ToastrNotificationService], + (httpClient: HttpTestingController, service: DataService, toastr: ToastrNotificationService) => { + service.getVariableInstance("").subscribe(data => { }); + var url = environment.soMonitoringBackendURL + 'variable-instance/' + ""; + const mockReq = httpClient.expectOne(url); + expect(mockReq.request.method).toEqual('GET'); + mockReq.flush({}); + }))); +}); diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/details/details.component.scss b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/details/details.component.scss index 52ace2f328..2789723964 100644 --- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/details/details.component.scss +++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/details/details.component.scss @@ -1,68 +1,72 @@ -/**
-============LICENSE_START=======================================================
- Copyright (C) 2018 Ericsson. 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.
-
-SPDX-License-Identifier: Apache-2.0
-============LICENSE_END=========================================================
-
-@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com
-*/
-
-#canvas {
- background: white;
- padding: 0;
- margin: 0;
- width: 70%;
- height: 470px;
- margin-top: 0;
- box-shadow: 0 5px 5px -3px rgba(0,0,0,.2), 0 8px 10px 1px rgba(0,0,0,.14), 0 3px 14px 2px rgba(0,0,0,.12);
-}
-
-#besideCanvas {
- background: white;
- padding-left: 20px;
- margin: 0;
- width: 28%;
- height: 470px;
- margin-top: 0;
- box-shadow: 0 5px 5px -3px rgba(0,0,0,.2), 0 8px 10px 1px rgba(0,0,0,.14), 0 3px 14px 2px rgba(0,0,0,.12);
- font-family: 'Montserrat', sans-serif;
- font-size: 17px;
-}
-
-.topCanvas {
- display: flex;
- justify-content: space-between;
-}
-
-.mat-column-durationInMillis {
- flex: 0 0 8%;
-}
-
-.mat-column-name {
- flex: 0 0 40%;
-}
-
-.mat-column-type {
- flex: 0 0 8%;
-}
-
-.mat-column-value {
- flex: 0 0 52%;
-}
-
-.highlight:not(.djs-connection) .djs-visual > :nth-child(1) {
- fill: cyan !important; /* color elements as green */
- }
+/** +============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. 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. + +SPDX-License-Identifier: Apache-2.0 +============LICENSE_END========================================================= + +@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com +*/ +#canvas { + background: white; + padding: 0; + margin: 0; + width: 70%; + height: 470px; + margin-top: 0; + box-shadow: 0 5px 5px -3px rgba(0,0,0,.2), 0 8px 10px 1px rgba(0,0,0,.14), 0 3px 14px 2px rgba(0,0,0,.12); +} + +#besideCanvas { + background: white; + padding-left: 20px; + margin: 0; + width: 28%; + height: 470px; + margin-top: 0; + box-shadow: 0 5px 5px -3px rgba(0,0,0,.2), 0 8px 10px 1px rgba(0,0,0,.14), 0 3px 14px 2px rgba(0,0,0,.12); + font-family: 'Montserrat', sans-serif; + font-size: 17px; +} + +.topCanvas { + display: flex; + justify-content: space-between; +} + +.mat-column-durationInMillis { + flex: 0 0 8%; +} + +.mat-column-name { + flex: 0 0 40%; +} + +.mat-column-type { + flex: 0 0 8%; +} + +.mat-column-value { + flex: 0 0 52%; +} + +.highlight:not(.djs-connection) .djs-visual > :nth-child(1) { + fill: cyan !important; + /* color elements as green */ +} + +.tab-group { + word-break: break-all; +} diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.component.html b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.component.html index e4556ca840..0c0e1c04c3 100644 --- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.component.html +++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.component.html @@ -17,7 +17,7 @@ limitations under the License. SPDX-License-Identifier: Apache-2.0 ============LICENSE_END========================================================= -@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com +@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com, andrei.barcovschi@ericsson.com --> <base href="/"> @@ -50,26 +50,26 @@ SPDX-License-Identifier: Apache-2.0 <input matInput #searchValueRI type="text" [(ngModel)]="searchData.requestId" placeholder="Request Id"> </mat-form-field> - <!-- Angular Start Date Picker --> - <mat-form-field class="startDate"> - <input matInput #startDate [matDatepicker]="picker" [(ngModel)]="searchData.startDate" placeholder="Choose a start date"> - <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle> - <mat-datepicker #picker></mat-datepicker> - </mat-form-field> - - <!-- Dropdown box for Start Hour selection --> - <mat-form-field class="selectHour"> - <mat-select class="formatBox" [(ngModel)]="searchData.selectedStartHour" name="hourFrom" placeholder="Select Hour"> - <mat-option *ngFor="let option of hourOptions" [value]="option">{{option}}</mat-option> - </mat-select> - </mat-form-field> - - <!-- Dropdown box for Start Minute selection --> - <mat-form-field class="selectMinute"> - <mat-select class="formatBox" [(ngModel)]="searchData.selectedStartMinute" name="minuteFrom" placeholder="Select Minute"> - <mat-option *ngFor="let option of minuteOptions" [value]="option">{{option}}</mat-option> - </mat-select> - </mat-form-field> + <!-- Angular Start Date Picker --> + <mat-form-field class="startDate"> + <input matInput #startDate [matDatepicker]="picker" [(ngModel)]="searchData.startDate" placeholder="Choose a start date"> + <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle> + <mat-datepicker #picker></mat-datepicker> + </mat-form-field> + + <!-- Dropdown box for Start Hour selection --> + <mat-form-field class="selectHour"> + <mat-select class="formatBox" [(ngModel)]="searchData.selectedStartHour" name="hourFrom" placeholder="Select Hour"> + <mat-option *ngFor="let option of hourOptions" [value]="option">{{option}}</mat-option> + </mat-select> + </mat-form-field> + + <!-- Dropdown box for Start Minute selection --> + <mat-form-field class="selectMinute"> + <mat-select class="formatBox" [(ngModel)]="searchData.selectedStartMinute" name="minuteFrom" placeholder="Select Minute"> + <mat-option *ngFor="let option of minuteOptions" [value]="option">{{option}}</mat-option> + </mat-select> + </mat-form-field> </div> <!-- Dropdown Filter and TextBox for Service Name --> @@ -83,26 +83,26 @@ SPDX-License-Identifier: Apache-2.0 <input matInput #searchValueSN type="text" [(ngModel)]="searchData.serviceInstanceName" placeholder="Service Name"> </mat-form-field> - <!-- Angular End Date Picker --> - <mat-form-field class="endDate"> - <input matInput #endDate [matDatepicker]="endpicker" [(ngModel)]="searchData.endDate" placeholder="Choose an end date"> - <mat-datepicker-toggle matSuffix [for]="endpicker"></mat-datepicker-toggle> - <mat-datepicker #endpicker></mat-datepicker> - </mat-form-field> - - <!-- Dropdown box for End Hour selection --> - <mat-form-field class="selectHour"> - <mat-select class="formatBox" [(ngModel)]="searchData.selectedEndHour" name="hourTo" placeholder="Select Hour"> - <mat-option *ngFor="let option of hourOptions" [value]="option">{{option}}</mat-option> - </mat-select> - </mat-form-field> - - <!-- Dropdown box for End Minute selection --> - <mat-form-field class="selectMinute"> - <mat-select class="formatBox" [(ngModel)]="searchData.selectedEndMinute" name="minuteTo" placeholder="Select Minute"> - <mat-option *ngFor="let option of minuteOptions" [value]="option">{{option}}</mat-option> - </mat-select> - </mat-form-field> + <!-- Angular End Date Picker --> + <mat-form-field class="endDate"> + <input matInput #endDate [matDatepicker]="endpicker" [(ngModel)]="searchData.endDate" placeholder="Choose an end date"> + <mat-datepicker-toggle matSuffix [for]="endpicker"></mat-datepicker-toggle> + <mat-datepicker #endpicker></mat-datepicker> + </mat-form-field> + + <!-- Dropdown box for End Hour selection --> + <mat-form-field class="selectHour"> + <mat-select class="formatBox" [(ngModel)]="searchData.selectedEndHour" name="hourTo" placeholder="Select Hour"> + <mat-option *ngFor="let option of hourOptions" [value]="option">{{option}}</mat-option> + </mat-select> + </mat-form-field> + + <!-- Dropdown box for End Minute selection --> + <mat-form-field class="selectMinute"> + <mat-select class="formatBox" [(ngModel)]="searchData.selectedEndMinute" name="minuteTo" placeholder="Select Minute"> + <mat-option *ngFor="let option of minuteOptions" [value]="option">{{option}}</mat-option> + </mat-select> + </mat-form-field> </div> <!-- Dropdown Filter for Status --> @@ -125,42 +125,44 @@ SPDX-License-Identifier: Apache-2.0 <div class="example-container mat-elevation-z8"> <mat-tab-group class="tab-group"> <mat-tab label="Service Instances"> - <mat-table [dataSource]="processData"> + <mat-table [dataSource]="processData" matSort> <ng-container matColumnDef="requestId"> - <mat-header-cell *matHeaderCellDef> Request Id </mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header> Request Id </mat-header-cell> <mat-cell *matCellDef="let process"><a routerLink="" (click)="getProcessIsntanceId(process.requestId)">{{ process.requestId }}</a></mat-cell> </ng-container> <ng-container matColumnDef="serviceInstanceId"> - <mat-header-cell *matHeaderCellDef> Instance Id </mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header> Instance Id </mat-header-cell> <mat-cell *matCellDef="let process"> {{ process.serviceInstanceId }} </mat-cell> </ng-container> <ng-container matColumnDef="serviceIstanceName"> - <mat-header-cell *matHeaderCellDef> Instance Name </mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header> Instance Name </mat-header-cell> <mat-cell *matCellDef="let process"> {{ process.serviceIstanceName }} </mat-cell> </ng-container> <ng-container matColumnDef="networkId"> - <mat-header-cell *matHeaderCellDef> Network Id </mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header> Network Id </mat-header-cell> <mat-cell *matCellDef="let process"> {{ process.networkId }} </mat-cell> </ng-container> <ng-container matColumnDef="requestStatus"> - <mat-header-cell *matHeaderCellDef> Request Status </mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header> Request Status </mat-header-cell> <mat-cell *matCellDef="let process"> {{ process.requestStatus }} </mat-cell> </ng-container> <ng-container matColumnDef="serviceType"> - <mat-header-cell *matHeaderCellDef> Service Type </mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header> Service Type </mat-header-cell> <mat-cell *matCellDef="let process"> {{ process.serviceType }} </mat-cell> </ng-container> <ng-container matColumnDef="startTime"> - <mat-header-cell *matHeaderCellDef> Start Time </mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header> Start Time </mat-header-cell> <mat-cell *matCellDef="let process"> {{ (process.startTime | date:'yyyy-MM-dd HH:mm:sss Z') }} </mat-cell> </ng-container> <ng-container matColumnDef="endTime"> - <mat-header-cell *matHeaderCellDef> End Time </mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header> End Time </mat-header-cell> <mat-cell *matCellDef="let process"> {{ (process.endTime | date:'yyyy-MM-dd HH:mm:sss Z') }} </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row> </mat-table> + <mat-paginator [pageSizeOptions]="pageSizeOptions" showFirstLastButtons> + </mat-paginator> </mat-tab> <mat-tab label="Service Statistics"> diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.component.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.component.ts index b8fac61adf..25b75d707d 100644 --- a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.component.ts +++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.component.ts @@ -17,27 +17,23 @@ See the License for the specific language governing permissions and SPDX-License-Identifier: Apache-2.0 ============LICENSE_END========================================================= -@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com +@authors: ronan.kenny@ericsson.com, waqas.ikram@ericsson.com, andrei.barcovschi@ericsson.com */ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild, ElementRef, Input, ViewEncapsulation } from '@angular/core'; import { DataService } from '../data.service'; import { ActivatedRoute, Router } from "@angular/router"; import { Process } from '../model/process.model'; - import { ProcessInstanceId } from '../model/processInstanceId.model'; import { ToastrNotificationService } from '../toastr-notification-service.service'; import { MatSelectModule } from '@angular/material/select'; -import { ViewEncapsulation } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { MatFormFieldModule, MatInputModule } from '@angular/material'; +import { FormsModule, FormControl } from '@angular/forms'; import { SearchData } from '../model/searchData.model'; import { MatDatepickerModule } from '@angular/material/datepicker'; -import { FormControl } from '@angular/forms'; import { SearchRequest } from '../model/SearchRequest.model'; -import { ElementRef } from '@angular/core'; -import { Input } from '@angular/core'; import { NgxSpinnerService } from 'ngx-spinner'; +import { MatFormFieldModule, MatInputModule, MatPaginator, MatSort, MatTableDataSource } from '@angular/material'; +import { Constants } from './home.constant'; @Component({ selector: 'app-home', @@ -60,24 +56,19 @@ export class HomeComponent implements OnInit { percentagePending = 0; percentageUnlocked = 0; - options = [{ name: "EQUAL", value: "EQ" }, { name: "NOT EQUAL", value: "NEQ" }, { name: "LIKE", value: "LIKE" }]; - statusOptions = [{ name: "ALL", value: "ALL" }, { name: "COMPLETE", value: "COMPLETE" }, { name: "IN_PROGRESS", value: "IN_PROGRESS" }, - { name: "FAILED", value: "FAILED" }, { name: "PENDING", value: "PENDING" }, { name: "UNLOCKED", value: "UNLOCKED" }]; - - hourOptions = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", - "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"]; + options = Constants.OPTIONS; + statusOptions = Constants.STATUS_OPTIONS; + hourOptions = Constants.HOUR_OPTIONS; + minuteOptions = Constants.MINUTE_OPTIONS; + displayedColumns = Constants.DISPLAYED_COLUMNS; + pageSizeOptions = Constants.DEFAULT_PAGE_SIZE_OPTIONS; - minuteOptions = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", - "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", - "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", - "56", "57", "58", "59"]; - - processData: Process[]; searchData: SearchData; - startingDate: Date; + processData: MatTableDataSource<Process>; - displayedColumns = ['requestId', 'serviceInstanceId', 'serviceIstanceName', 'networkId', 'requestStatus', 'serviceType', 'startTime', 'endTime']; + @ViewChild(MatPaginator) paginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; constructor(private route: ActivatedRoute, private data: DataService, private router: Router, private popup: ToastrNotificationService, @@ -93,16 +84,21 @@ export class HomeComponent implements OnInit { this.data.retrieveInstance(result.getFilters(), result.getStartTimeInMilliseconds(), result.getEndTimeInMilliseconds()) .subscribe((data: Process[]) => { this.spinner.hide(); - this.processData = data; + var processData: Process[] = data; + this.processData = new MatTableDataSource<Process>(processData); + this.processData.sort = this.sort; + this.processData.paginator = this.paginator; + this.processData.paginator.firstPage(); + this.popup.info("Number of records found: " + data.length) // Calculate Statistics for Service Statistics tab - this.completeVal = this.processData.filter(i => i.requestStatus === "COMPLETE").length; - this.inProgressVal = this.processData.filter(i => i.requestStatus === "IN_PROGRESS").length; - this.failedVal = this.processData.filter(i => i.requestStatus === "FAILED").length; - this.pendingVal = this.processData.filter(i => i.requestStatus === "PENDING").length; - this.unlockedVal = this.processData.filter(i => i.requestStatus === "UNLOCKED").length; - this.totalVal = this.processData.length; + this.completeVal = processData.filter(i => i.requestStatus === "COMPLETE").length; + this.inProgressVal = processData.filter(i => i.requestStatus === "IN_PROGRESS").length; + this.failedVal = processData.filter(i => i.requestStatus === "FAILED").length; + this.pendingVal = processData.filter(i => i.requestStatus === "PENDING").length; + this.unlockedVal = processData.filter(i => i.requestStatus === "UNLOCKED").length; + this.totalVal = processData.length; // Calculate percentages to 2 decimal places and compare to 0 to avoid NaN error if (this.totalVal != 0) { @@ -142,7 +138,5 @@ export class HomeComponent implements OnInit { }); } - ngOnInit() { - - } + ngOnInit() { } } diff --git a/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.constant.ts b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.constant.ts new file mode 100644 index 0000000000..23ef63ff1e --- /dev/null +++ b/so-monitoring/so-monitoring-ui/src/main/frontend/src/app/home/home.constant.ts @@ -0,0 +1,41 @@ + +/** +============LICENSE_START======================================================= + Copyright (C) 2019 Ericsson. 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. + +SPDX-License-Identifier: Apache-2.0 +============LICENSE_END========================================================= + +@authors: andrei.barcovschi@ericsson.com, waqas.ikram@ericsson.com +*/ + +export class Constants { + public static OPTIONS = [{ name: "EQUAL", value: "EQ" }, { name: "NOT EQUAL", value: "NEQ" }, { name: "LIKE", value: "LIKE" }]; + + public static STATUS_OPTIONS = [{ name: "ALL", value: "ALL" }, { name: "COMPLETE", value: "COMPLETE" }, { name: "IN_PROGRESS", value: "IN_PROGRESS" }, + { name: "FAILED", value: "FAILED" }, { name: "PENDING", value: "PENDING" }, { name: "UNLOCKED", value: "UNLOCKED" }]; + + public static HOUR_OPTIONS = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", + "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"]; + + public static MINUTE_OPTIONS = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", + "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", + "56", "57", "58", "59"]; + + public static DISPLAYED_COLUMNS = ['requestId', 'serviceInstanceId', 'serviceIstanceName', 'networkId', 'requestStatus', 'serviceType', 'startTime', 'endTime']; + + public static DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100]; +} |