summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openecomp/modelloader/entity
diff options
context:
space:
mode:
authorArul.Nambi <arul.nambi@amdocs.com>2017-09-13 15:13:29 -0400
committerArul.Nambi <arul.nambi@amdocs.com>2017-09-13 15:13:37 -0400
commit059f42e1a2289ecb2cb5835b8b14a0d098c9e1d3 (patch)
treeeb9218adc67f1183b9d371a4ca10fc31ece3b23c /src/main/java/org/openecomp/modelloader/entity
parent7813ad1766bb168f92ce6c0c10a6926a2f00b519 (diff)
Renaming openecomp to onap
Issue-ID: AAI-208 Change-Id: I559ba27fba96364c506730e8cbac05a9e6591694 Signed-off-by: Arul.Nambi <arul.nambi@amdocs.com>
Diffstat (limited to 'src/main/java/org/openecomp/modelloader/entity')
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/Artifact.java47
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java40
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/ArtifactType.java31
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java34
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java193
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/AbstractModelArtifact.java86
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/IModelParser.java32
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java211
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java86
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java195
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelParserFactory.java88
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java236
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelV8Artifact.java123
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParser.java137
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifact.java114
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParser.java137
16 files changed, 0 insertions, 1790 deletions
diff --git a/src/main/java/org/openecomp/modelloader/entity/Artifact.java b/src/main/java/org/openecomp/modelloader/entity/Artifact.java
deleted file mode 100644
index 1deb4f4..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/Artifact.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity;
-
-public abstract class Artifact {
-
- private String payload;
- private ArtifactType type;
-
- public Artifact(ArtifactType type) {
- this.type = type;
- }
-
- public ArtifactType getType() {
- return type;
- }
-
- public String getPayload() {
- return payload;
- }
-
- public void setPayload(String payload) {
- this.payload = payload;
- }
-
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
deleted file mode 100644
index 245a93c..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity;
-
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-
-import java.util.List;
-
-public abstract class ArtifactHandler {
-
- protected ModelLoaderConfig config;
-
- public ArtifactHandler(ModelLoaderConfig config) {
- this.config = config;
- }
-
- public abstract boolean pushArtifacts(List<Artifact> artifacts, String distributionId);
-
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java b/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
deleted file mode 100644
index 4ab7bd1..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity;
-
-public enum ArtifactType {
- MODEL,
- MODEL_V8,
- NAMED_QUERY,
- VNF_CATALOG;
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
deleted file mode 100644
index 79cff98..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.catalog;
-
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactType;
-
-public class VnfCatalogArtifact extends Artifact {
- public VnfCatalogArtifact(String payload) {
- super(ArtifactType.VNF_CATALOG);
- setPayload(payload);
- }
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
deleted file mode 100644
index d96f25b..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.catalog;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-import generated.VnfCatalog;
-import generated.VnfCatalog.PartNumberList;
-
-import inventory.aai.openecomp.org.v8.VnfImage;
-
-import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactHandler;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.springframework.web.util.UriUtils;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-
-
-public class VnfCatalogArtifactHandler extends ArtifactHandler {
-
- private static Logger logger = LoggerFactory.getInstance()
- .getLogger(VnfCatalogArtifactHandler.class.getName());
-
- public VnfCatalogArtifactHandler(ModelLoaderConfig config) {
- super(config);
- }
-
- @Override
- public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) {
- for (Artifact art : artifacts) {
- VnfCatalogArtifact vnfCatalog = (VnfCatalogArtifact) art;
- String artifactPayload = vnfCatalog.getPayload();
-
- AaiRestClient restClient = new AaiRestClient(this.config);
- List<VnfImage> putImages = new ArrayList<VnfImage>();
-
- try {
- JAXBContext inputContext = JAXBContext.newInstance(VnfCatalog.class);
- Unmarshaller unmarshaller = inputContext.createUnmarshaller();
- StringReader reader = new StringReader(artifactPayload);
- VnfCatalog cat = (VnfCatalog) unmarshaller.unmarshal(reader);
-
- int numParts = cat.getPartNumberList().size();
-
- for (int i = 0; i < numParts; i++) {
-
- PartNumberList pnl = cat.getPartNumberList().get(i);
-
- String application = pnl.getVendorInfo().getVendorModel();
- String applicationVendor = pnl.getVendorInfo().getVendorName();
-
- int numVersions = pnl.getSoftwareVersionList().size();
-
- for (int j = 0; j < numVersions; j++) {
- String applicationVersion = pnl.getSoftwareVersionList().get(j).getSoftwareVersion();
-
- String imageId = "vnf image " + applicationVendor + " " + application + " "
- + applicationVersion;
-
- String queryURI = "application-vendor=" + applicationVendor + "&application=" + application + "&application-version=" + applicationVersion;
-
- String getUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "?" + UriUtils.encodePath(queryURI, "UTF-8");
-
- ClientResponse tryGet = restClient.getResource(getUrl, distributionId, MimeType.JSON);
- if (tryGet == null) {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
- "Ingestion failed on " + imageId + ". Rolling back distribution.");
- failureCleanup(putImages, restClient, distributionId);
- return false;
- }
- if (tryGet.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) {
- // this vnf-image not already in the db, need to add
- // only do this on 404 bc other error responses could mean there
- // are problems that
- // you might not want to try to PUT against
-
- VnfImage image = new VnfImage();
- image.setApplication(application);
- image.setApplicationVendor(applicationVendor);
- image.setApplicationVersion(applicationVersion);
- String uuid = UUID.randomUUID().toString();
- image.setUuid(uuid); // need to create uuid
-
- System.setProperty("javax.xml.bind.context.factory",
- "org.eclipse.persistence.jaxb.JAXBContextFactory");
- JAXBContext jaxbContext = JAXBContext.newInstance(VnfImage.class);
- Marshaller marshaller = jaxbContext.createMarshaller();
- marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
- marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
- marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
- marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
- StringWriter writer = new StringWriter();
- marshaller.marshal(image, writer);
- String payload = writer.toString();
-
- String putUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
- + uuid;
-
- ClientResponse putResp = restClient.putResource(putUrl, payload, distributionId,
- MimeType.JSON);
- if (putResp == null
- || putResp.getStatus() != Response.Status.CREATED.getStatusCode()) {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
- "Ingestion failed on vnf-image " + imageId + ". Rolling back distribution.");
- failureCleanup(putImages, restClient, distributionId);
- return false;
- }
- putImages.add(image);
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, imageId + " successfully ingested.");
- } else if (tryGet.getStatus() == Response.Status.OK.getStatusCode()) {
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
- imageId + " already exists. Skipping ingestion.");
- } else {
- // if other than 404 or 200, something went wrong
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
- "Ingestion failed on vnf-image " + imageId + " with status " + tryGet.getStatus()
- + ". Rolling back distribution.");
- failureCleanup(putImages, restClient, distributionId);
- return false;
- }
- }
- }
-
- } catch (JAXBException e) {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
- "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");
- failureCleanup(putImages, restClient, distributionId);
- return false;
- } catch (UnsupportedEncodingException e) {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");
- failureCleanup(putImages, restClient, distributionId);
- return false;
- }
- }
-
- return true;
- }
-
- /*
- * if something fails in the middle of ingesting the catalog we want to
- * rollback any changes to the db
- */
- private void failureCleanup(List<VnfImage> putImages, AaiRestClient restClient, String transId) {
- for (VnfImage image : putImages) {
- String url = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
- + image.getUuid();
- restClient.getAndDeleteResource(url, transId); // try to delete the image,
- // if something goes wrong
- // we can't really do
- // anything here
- }
- }
-
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/AbstractModelArtifact.java b/src/main/java/org/openecomp/modelloader/entity/model/AbstractModelArtifact.java
deleted file mode 100644
index 2738457..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/AbstractModelArtifact.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-
-public abstract class AbstractModelArtifact extends Artifact {
-
- private String modelNamespace;
- private String modelNamespaceVersion;
- private Set<String> referencedModelIds = new HashSet<String>();
-
- public AbstractModelArtifact(ArtifactType type) {
- super(type);
- }
-
- public Set<String> getDependentModelIds() {
- return referencedModelIds;
- }
-
- public void addDependentModelId(String dependentModelId) {
- this.referencedModelIds.add(dependentModelId);
- }
-
- public String getModelNamespace() {
- return modelNamespace;
- }
-
- public void setModelNamespace(String modelNamespace) {
- this.modelNamespace = modelNamespace;
-
- // Get the version from the namespace (in format 'http://org.openecomp.aai.inventory/v9')
- String[] parts = modelNamespace.split("/");
- modelNamespaceVersion = parts[parts.length-1].trim();
- }
-
- public String getModelNamespaceVersion() {
- return modelNamespaceVersion;
- }
-
- public abstract String getUniqueIdentifier();
-
- public abstract boolean push(AaiRestClient aaiClient, ModelLoaderConfig config, String distId, List<AbstractModelArtifact> addedModels);
-
- public abstract void rollbackModel(AaiRestClient aaiClient, ModelLoaderConfig config, String distId);
-
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("\nType=" + getType().toString() +"\nId=" + getUniqueIdentifier() +"\nVersion=" + getModelNamespaceVersion() + "\nDependant models: ");
- for (String dep : referencedModelIds) {
- sb.append(dep + " ");
- }
-
- return sb.toString();
- }
-
-
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/IModelParser.java b/src/main/java/org/openecomp/modelloader/entity/model/IModelParser.java
deleted file mode 100644
index ac97f34..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/IModelParser.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import java.util.List;
-
-import org.openecomp.modelloader.entity.Artifact;
-
-public interface IModelParser {
- public List<Artifact> parse(byte[] artifactPayload, String artifactName);
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
deleted file mode 100644
index 369b09e..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import java.io.StringWriter;
-import java.util.List;
-
-import javax.ws.rs.core.Response;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.w3c.dom.Node;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-public class ModelArtifact extends AbstractModelArtifact {
-
- private static final String AAI_MODEL_VER_SUB_URL = "/model-vers/model-ver";
-
- private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifact.class.getName());
-
- private String modelVerId;
- private String modelInvariantId;
- private Node modelVer;
- private boolean firstVersionOfModel = false;
-
- public ModelArtifact() {
- super(ArtifactType.MODEL);
- }
-
- public String getModelVerId() {
- return modelVerId;
- }
-
- public void setModelVerId(String modelVerId) {
- this.modelVerId = modelVerId;
- }
-
- public String getModelInvariantId() {
- return modelInvariantId;
- }
-
- public void setModelInvariantId(String modelInvariantId) {
- this.modelInvariantId = modelInvariantId;
- }
-
- public Node getModelVer() {
- return modelVer;
- }
-
- public void setModelVer(Node modelVer) {
- this.modelVer = modelVer;
- }
-
- @Override
- public String getUniqueIdentifier() {
- return getModelInvariantId() + "|" + getModelVerId();
- }
-
- @Override
- public boolean push(AaiRestClient aaiClient, ModelLoaderConfig config, String distId, List<AbstractModelArtifact> addedModels) {
- ClientResponse getResponse = aaiClient.getResource(getModelUrl(config), distId, AaiRestClient.MimeType.XML);
- if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {
- // Only attempt the PUT if the model doesn't already exist
- ClientResponse putResponse = aaiClient.putResource(getModelUrl(config), getPayload(), distId, AaiRestClient.MimeType.XML);
- if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) {
- addedModels.add(this);
-
- // Flag this as the first version of the model that has been added.
- firstVersionOfModel = true;
-
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " successfully ingested.");
- }
- else {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + getType().toString() + " " + getUniqueIdentifier() +
- ". Rolling back distribution.");
- return false;
- }
- }
- else {
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getModelInvariantId() + " already exists. Skipping ingestion.");
- getResponse = aaiClient.getResource(getModelVerUrl(config), distId, AaiRestClient.MimeType.XML);
- if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {
- // Only attempt the PUT if the model-ver doesn't already exist
- ClientResponse putResponse = null;
-
- try {
- putResponse = aaiClient.putResource(getModelVerUrl(config), nodeToString(getModelVer()), distId, AaiRestClient.MimeType.XML);
- } catch (TransformerException e) {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + getType().toString() + " " + getUniqueIdentifier()
- + ": " + e.getMessage() + ". Rolling back distribution.");
- return false;
- }
- if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) {
- addedModels.add(this);
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " successfully ingested.");
- }
- else {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + getType().toString() + " "
- + getUniqueIdentifier() + ". Rolling back distribution.");
- return false;
- }
- }
- else {
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " already exists. Skipping ingestion.");
- }
- }
-
- return true;
- }
-
- @Override
- public void rollbackModel(AaiRestClient aaiClient, ModelLoaderConfig config, String distId) {
- String url = getModelVerUrl(config);
- if (firstVersionOfModel) {
- // If this was the first version of the model which was added, we want to remove the entire
- // model rather than just the version.
- url = getModelUrl(config);
- }
-
- // Best effort to delete. Nothing we can do in the event this fails.
- aaiClient.getAndDeleteResource(url, distId);
- }
-
- private String getModelUrl(ModelLoaderConfig config) {
- String baseURL = config.getAaiBaseUrl().trim();
- String subURL = null;
- String instance = null;
-
- subURL = config.getAaiModelUrl(getModelNamespaceVersion()).trim();
- instance = getModelInvariantId();
-
- if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {
- baseURL = baseURL + "/";
- }
-
- if ( baseURL.endsWith("/") && subURL.startsWith("/") ) {
- baseURL = baseURL.substring(0, baseURL.length()-1);
- }
-
- if (!subURL.endsWith("/")) {
- subURL = subURL + "/";
- }
-
- String url = baseURL + subURL + instance;
- return url;
- }
-
- private String getModelVerUrl(ModelLoaderConfig config) {
- String baseURL = config.getAaiBaseUrl().trim();
- String subURL = null;
- String instance = null;
-
- subURL = config.getAaiModelUrl(getModelNamespaceVersion()).trim() + getModelInvariantId() + AAI_MODEL_VER_SUB_URL;
- instance = getModelVerId();
-
- if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {
- baseURL = baseURL + "/";
- }
-
- if ( baseURL.endsWith("/") && subURL.startsWith("/") ) {
- baseURL = baseURL.substring(0, baseURL.length()-1);
- }
-
- if (!subURL.endsWith("/")) {
- subURL = subURL + "/";
- }
-
- String url = baseURL + subURL + instance;
- return url;
- }
-
- private String nodeToString(Node node) throws TransformerException {
- StringWriter sw = new StringWriter();
- Transformer t = TransformerFactory.newInstance().newTransformer();
- t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
- t.transform(new DOMSource(node), new StreamResult(sw));
- return sw.toString();
- }
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
deleted file mode 100644
index e4e1dd0..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactHandler;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class ModelArtifactHandler extends ArtifactHandler {
-
- private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifactHandler.class.getName());
-
- public ModelArtifactHandler(ModelLoaderConfig config) {
- super(config);
- }
-
- @Override
- public boolean pushArtifacts(List<Artifact> artifacts, String distributionID) {
- ModelSorter modelSorter = new ModelSorter();
- List<Artifact> sortedModelArtifacts;
- try {
- sortedModelArtifacts = modelSorter.sort(artifacts);
- }
- catch (RuntimeException ex) {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Unable to resolve models: " + ex.getMessage());
- return false;
- }
-
- // Push the ordered list of model artifacts to A&AI. If one fails, we need to roll back
- // the changes.
- List<AbstractModelArtifact> completedModels = new ArrayList<AbstractModelArtifact>();
- AaiRestClient aaiClient = new AaiRestClient(config);
-
- for (Artifact art : sortedModelArtifacts) {
- AbstractModelArtifact model = (AbstractModelArtifact)art;
- if (model.push(aaiClient, config, distributionID, completedModels) != true) {
- for (AbstractModelArtifact modelToDelete : completedModels) {
- modelToDelete.rollbackModel(aaiClient, config, distributionID);
- }
-
- return false;
- }
- }
-
- return true;
- }
-
- // This method is used for the test REST interface to load models without an ASDC
- public void loadModelTest(byte[] payload) {
- List<Artifact> modelArtifacts = new ArrayList<Artifact>();
- ModelArtifactParser parser = new ModelArtifactParser();
- modelArtifacts.addAll(parser.parse(payload, "Test-Artifact"));
- ModelSorter modelSorter = new ModelSorter();
- List<Artifact> sortedModelArtifacts = modelSorter.sort(modelArtifacts);
- pushArtifacts(sortedModelArtifacts, "Test-Distribution");
- }
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
deleted file mode 100644
index 779b135..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-
-public class ModelArtifactParser implements IModelParser {
-
- private static String MODEL_VER = "model-ver";
- private static String MODEL_VERSION_ID = "model-version-id";
- private static String MODEL_INVARIANT_ID = "model-invariant-id";
- private static String RELATIONSHIP = "relationship";
- private static String RELATIONSHIP_DATA = "relationship-data";
- private static String RELATIONSHIP_KEY = "relationship-key";
- private static String RELATIONSHIP_VALUE = "relationship-value";
- private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-invariant-id";
- private static String MODEL_VER_ELEMENT_RELATIONSHIP_KEY = "model-ver.model-version-id";
-
- private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifactParser.class.getName());
-
- public List<Artifact> parse(byte[] artifactPayload, String artifactName) {
- String payload = new String(artifactPayload);
- List<Artifact> modelList = new ArrayList<Artifact>();
-
- try {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- InputSource is = new InputSource(new StringReader(payload));
- Document doc = builder.parse(is);
-
- ModelArtifact model = parseModel(doc.getDocumentElement(), payload);
-
- if (model != null) {
- logger.info( ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> "
- + "Model-invariant-Id: "+ model.getModelInvariantId()
- + " Model-Version-Id: "+ model.getModelVerId());
- modelList.add(model);
- }
- else {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
- return null;
- }
- }
- catch (Exception ex) {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName + ": " + ex.getLocalizedMessage());
- }
-
- return modelList;
- }
-
- private ModelArtifact parseModel(Node modelNode, String payload) {
- ModelArtifact model = new ModelArtifact();
- model.setPayload(payload);
-
- Element e = (Element)modelNode;
- model.setModelNamespace(e.getAttribute("xmlns"));
-
- parseNode(modelNode, model);
-
- if ( (model.getModelInvariantId() == null) || (model.getModelVerId() == null) ){
- return null;
- }
-
- return model;
- }
-
- private void parseNode(Node node, ModelArtifact model) {
- if (node.getNodeName().equalsIgnoreCase(MODEL_INVARIANT_ID)) {
- model.setModelInvariantId(node.getTextContent().trim());
- }
- else if (node.getNodeName().equalsIgnoreCase(MODEL_VERSION_ID)) {
- model.setModelVerId(node.getTextContent().trim());
- }
- else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP)) {
- String dependentModelKey = parseRelationshipNode(node, model);
- if (dependentModelKey != null) {
- model.addDependentModelId(dependentModelKey);
- }
- }
- else {
- if (node.getNodeName().equalsIgnoreCase(MODEL_VER)) {
- model.setModelVer(node);
- if ( (model.getModelNamespace() != null) && (!model.getModelNamespace().isEmpty()) ) {
- Element e = (Element) node;
- e.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns", model.getModelNamespace());
- }
- }
-
- NodeList nodeList = node.getChildNodes();
-
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node childNode = nodeList.item(i);
- parseNode(childNode, model);
- }
- }
- }
-
- private String parseRelationshipNode(Node node, ModelArtifact model) {
- String currentKey = null;
- String currentValue = null;
- String modelVersionIdValue = null;
- String modelInvariantIdValue = null;
-
- NodeList nodeList = node.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node childNode = nodeList.item(i);
-
- if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
- NodeList relDataChildList = childNode.getChildNodes();
-
- for (int j = 0; j < relDataChildList.getLength(); j++) {
- Node relDataChildNode = relDataChildList.item(j);
-
- if (relDataChildNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {
- currentKey = relDataChildNode.getTextContent().trim();
-
- if (currentValue != null) {
- if (currentKey.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)) {
- modelVersionIdValue = currentValue;
- }
- else if (currentKey.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)) {
- modelInvariantIdValue = currentValue;
- }
-
- currentKey = null;
- currentValue = null;
- }
- }
- else if (relDataChildNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
- currentValue = relDataChildNode.getTextContent().trim();
-
- if (currentKey != null) {
- if (currentKey.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)) {
- modelVersionIdValue = currentValue;
- }
- else if (currentKey.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)) {
- modelInvariantIdValue = currentValue;
- }
-
- currentKey = null;
- currentValue = null;
- }
- }
- }
- }
- }
-
- if ( (modelVersionIdValue != null) && (modelInvariantIdValue != null) ) {
- return modelInvariantIdValue + "|" + modelVersionIdValue;
- }
-
- return null;
-
- }
-
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelParserFactory.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelParserFactory.java
deleted file mode 100644
index ab1ceab..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelParserFactory.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import java.io.StringReader;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.xml.sax.InputSource;
-
-public class ModelParserFactory {
- private static Logger logger = LoggerFactory.getInstance().getLogger(ModelParserFactory.class.getName());
-
- private static String MODEL_ELEMENT = "model";
- private static String NAMED_QUERY_ELEMENT = "named-query";
-
- public static IModelParser createModelParser(byte[] artifactPayload, String artifactName) {
- Document doc = null;
-
- try {
- String payload = new String(artifactPayload);
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder;
- builder = factory.newDocumentBuilder();
- InputSource is = new InputSource(new StringReader(payload));
- doc = builder.parse(is);
- } catch (Exception e) {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
- return null;
- }
-
- if (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT)) {
- return new NamedQueryArtifactParser();
- }
-
- if (!doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName
- + ": Invalid root element: " + doc.getDocumentElement().getNodeName());
- return null;
- }
-
- Element e = doc.getDocumentElement();
- String ns = e.getAttribute("xmlns");
- String[] parts = ns.split("/");
-
- if (parts.length < 1) {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName
- + ": Could not parse namespace version");
- return null;
- }
-
- String modelNamespaceVersion = parts[parts.length-1].trim().replace("v", "");
- int version = Integer.parseInt(modelNamespaceVersion);
-
- if (version > 8) {
- return new ModelArtifactParser();
- }
-
- return new ModelV8ArtifactParser();
- }
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
deleted file mode 100644
index 0a1090e..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import jline.internal.Log;
-
-import org.openecomp.modelloader.entity.Artifact;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Utility class to sort the given Models according to their dependencies.
- * Example: Given a list of Models [A, B, C] where B depends on A, and A depends
- * on C, the sorted result will be [C, A, B]
- */
-public class ModelSorter {
-
- /**
- * Wraps a Model object to form dependencies other Models using Edges.
- */
- static class Node {
- private final AbstractModelArtifact model;
- private final HashSet<Edge> inEdges;
- private final HashSet<Edge> outEdges;
-
- public Node(AbstractModelArtifact model) {
- this.model = model;
- inEdges = new HashSet<Edge>();
- outEdges = new HashSet<Edge>();
- }
-
- public Node addEdge(Node node) {
- Edge edge = new Edge(this, node);
- outEdges.add(edge);
- node.inEdges.add(edge);
- return this;
- }
-
- @Override
- public String toString() {
- return model.getUniqueIdentifier();
- }
-
- @Override
- public boolean equals(Object other) {
- AbstractModelArtifact otherModel = ((Node) other).model;
- return this.model.getUniqueIdentifier().equals(otherModel.getUniqueIdentifier());
- }
-
- @Override
- public int hashCode() {
- return this.model.getUniqueIdentifier().hashCode();
- }
- }
-
- /**
- * Represents a dependency between two Nodes.
- */
- static class Edge {
- public final Node from;
- public final Node to;
-
- public Edge(Node from, Node to) {
- this.from = from;
- this.to = to;
- }
-
- @Override
- public boolean equals(Object obj) {
- Edge edge = (Edge) obj;
- return edge.from == from && edge.to == to;
- }
- }
-
- /**
- * Returns the list of models sorted by order of dependency.
- *
- * @param originalList
- * the list that needs to be sorted
- * @return a list of sorted models
- */
- public List<Artifact> sort(List<Artifact> originalList) {
-
- if (originalList.size() <= 1) {
- return originalList;
- }
-
- Collection<Node> nodes = createNodes(originalList);
- Collection<Node> sortedNodes = sortNodes(nodes);
-
- List<Artifact> sortedModelsList = new ArrayList<Artifact>(sortedNodes.size());
- for (Node node : sortedNodes) {
- sortedModelsList.add(node.model);
- }
-
- return sortedModelsList;
- }
-
- /**
- * Create nodes from the list of models and their dependencies.
- *
- * @param models
- * what the nodes creation is based upon
- * @return Collection of Node objects
- */
- private Collection<Node> createNodes(Collection<Artifact> models) {
-
- // load list of models into a map, so we can later replace referenceIds with
- // real Models
- HashMap<String, AbstractModelArtifact> versionIdToModelMap = new HashMap<String, AbstractModelArtifact>();
- for (Artifact art : models) {
- AbstractModelArtifact ma = (AbstractModelArtifact) art;
- versionIdToModelMap.put(ma.getUniqueIdentifier(), ma);
- }
-
- HashMap<String, Node> nodes = new HashMap<String, Node>();
- // create a node for each model and its referenced models
- for (Artifact art : models) {
-
- AbstractModelArtifact model = (AbstractModelArtifact) art;
-
- // node might have been created by another model referencing it
- Node node = nodes.get(model.getUniqueIdentifier());
-
- if (null == node) {
- node = new Node(model);
- nodes.put(model.getUniqueIdentifier(), node);
- }
-
- for (String referencedModelId : model.getDependentModelIds()) {
- // node might have been created by another model referencing it
- Node referencedNode = nodes.get(referencedModelId);
-
- if (null == referencedNode) {
- // create node
- AbstractModelArtifact referencedModel = versionIdToModelMap.get(referencedModelId);
- if (referencedModel == null) {
- Log.debug("ignoring " + referencedModelId);
- continue; // referenced model not supplied, no need to sort it
- }
- referencedNode = new Node(referencedModel);
- nodes.put(referencedModelId, referencedNode);
- }
- referencedNode.addEdge(node);
- }
- }
-
- return nodes.values();
- }
-
- /**
- * Sorts the given Nodes by order of dependency.
- *
- * @param originalList
- * the collection of nodes to be sorted
- * @return a sorted collection of the given nodes
- */
- private Collection<Node> sortNodes(Collection<Node> unsortedNodes) {
- // L <- Empty list that will contain the sorted elements
- ArrayList<Node> nodeList = new ArrayList<Node>();
-
- // S <- Set of all nodes with no incoming edges
- HashSet<Node> nodeSet = new HashSet<Node>();
- for (Node unsortedNode : unsortedNodes) {
- if (unsortedNode.inEdges.size() == 0) {
- nodeSet.add(unsortedNode);
- }
- }
-
- // while S is non-empty do
- while (!nodeSet.isEmpty()) {
- // remove a node n from S
- Node node = nodeSet.iterator().next();
- nodeSet.remove(node);
-
- // insert n into L
- nodeList.add(node);
-
- // for each node m with an edge e from n to m do
- for (Iterator<Edge> it = node.outEdges.iterator(); it.hasNext();) {
- // remove edge e from the graph
- Edge edge = it.next();
- Node to = edge.to;
- it.remove();// Remove edge from n
- to.inEdges.remove(edge);// Remove edge from m
-
- // if m has no other incoming edges then insert m into S
- if (to.inEdges.isEmpty()) {
- nodeSet.add(to);
- }
- }
- }
- // Check to see if all edges are removed
- boolean cycle = false;
- for (Node node : unsortedNodes) {
- if (!node.inEdges.isEmpty()) {
- cycle = true;
- break;
- }
- }
- if (cycle) {
- throw new RuntimeException(
- "Circular dependency present between models, topological sort not possible");
- }
-
- return nodeList;
- }
-
-
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelV8Artifact.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelV8Artifact.java
deleted file mode 100644
index ba7e661..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelV8Artifact.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import java.util.List;
-
-import javax.ws.rs.core.Response;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-public class ModelV8Artifact extends AbstractModelArtifact {
- private static String AAI_CONVERSION_URL = "/aai/tools/modeltransform";
-
- private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifact.class.getName());
-
- private String modelNameVersionId;
- private ModelArtifact translatedModel;
-
- public ModelV8Artifact() {
- super(ArtifactType.MODEL_V8);
- }
-
- public String getModelNameVersionId() {
- return modelNameVersionId;
- }
-
- public void setModelNameVersionId(String modelNameVersionId) {
- this.modelNameVersionId = modelNameVersionId;
- }
-
- @Override
- public String getUniqueIdentifier() {
- return getModelNameVersionId();
- }
-
- @Override
- public boolean push(AaiRestClient aaiClient, ModelLoaderConfig config, String distId, List<AbstractModelArtifact> addedModels) {
- // For a legacy model (version <= v8), we need to call out to an A&AI endpoint to convert to the proper format
- ClientResponse response = aaiClient.postResource(getConversionUrl(config), constructTransformPayload(), distId, AaiRestClient.MimeType.XML);
- if ( (response == null) || (response.getStatus() != Response.Status.OK.getStatusCode()) ) {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " +
- getType().toString() + " " + getModelNameVersionId() + ". Unable to convert model. Rolling back distribution.");
- return false;
- }
-
- String translatedPayload = response.getEntity(String.class);
-
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Translated artifact payload:\n" + translatedPayload);
-
- ModelArtifactParser parser = new ModelArtifactParser();
-
- List<Artifact> parsedArtifacts = parser.parse(translatedPayload.getBytes(), "translated-payload");
- if (parsedArtifacts == null || parsedArtifacts.isEmpty()) {
- return false;
- }
-
- translatedModel = (ModelArtifact)parsedArtifacts.get(0);
- return translatedModel.push(aaiClient, config, distId, addedModels);
- }
-
- @Override
- public void rollbackModel(AaiRestClient aaiClient, ModelLoaderConfig config, String distId) {
- if (translatedModel != null) {
- translatedModel.rollbackModel(aaiClient, config, distId);
- }
- }
-
-
- private String constructTransformPayload() {
- // A&AI requires that to transform a legacy model, we need to use the v8 namespace (even
- // if the version < 8)
- return getPayload().replaceFirst("aai.inventory/v.", "aai.inventory/v8");
- }
-
- private String getConversionUrl(ModelLoaderConfig config) {
- String baseUrl = config.getAaiBaseUrl().trim();
- String subUrl = AAI_CONVERSION_URL;
-
- if ( (!baseUrl.endsWith("/")) && (!subUrl.startsWith("/")) ) {
- baseUrl = baseUrl + "/";
- }
-
- if ( baseUrl.endsWith("/") && subUrl.startsWith("/") ) {
- baseUrl = baseUrl.substring(0, baseUrl.length()-1);
- }
-
- if (!subUrl.endsWith("/")) {
- subUrl = subUrl + "/";
- }
-
- String url = baseUrl + subUrl;
- return url;
- }
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParser.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParser.java
deleted file mode 100644
index a6b3d23..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParser.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-
-public class ModelV8ArtifactParser implements IModelParser {
-
- private static String MODEL_NAME_VERSION_ID = "model-name-version-id";
- private static String RELATIONSHIP_DATA = "relationship-data";
- private static String RELATIONSHIP_KEY = "relationship-key";
- private static String RELATIONSHIP_VALUE = "relationship-value";
- private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-name-version-id";
-
-
- private static Logger logger = LoggerFactory.getInstance().getLogger(ModelV8ArtifactParser.class.getName());
-
- public List<Artifact> parse(byte[] artifactPayload, String artifactName) {
- String payload = new String(artifactPayload);
- List<Artifact> modelList = new ArrayList<Artifact>();
-
- try {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- InputSource is = new InputSource(new StringReader(payload));
- Document doc = builder.parse(is);
-
- ModelV8Artifact model = parseModel(doc.getDocumentElement(), payload);
-
- if (model != null) {
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> " + "Model-Named-Version-Id: "+ model.getModelNameVersionId());
- modelList.add(model);
- }
- else {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse legacy model artifact " + artifactName);
- return null;
- }
- }
- catch (Exception ex) {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse legacy model artifact " + artifactName + ": " + ex.getLocalizedMessage());
- }
-
- return modelList;
- }
-
- private ModelV8Artifact parseModel(Node modelNode, String payload) {
- ModelV8Artifact model = new ModelV8Artifact();
- model.setPayload(payload);
-
- Element e = (Element)modelNode;
- model.setModelNamespace(e.getAttribute("xmlns"));
-
- parseNode(modelNode, model);
-
- if (model.getModelNameVersionId() == null) {
- return null;
- }
-
- return model;
- }
-
- private void parseNode(Node node, ModelV8Artifact model) {
- if (node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)) {
- model.setModelNameVersionId(node.getTextContent().trim());
- }
- else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
- parseRelationshipNode(node, model);
- }
- else {
- NodeList nodeList = node.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node childNode = nodeList.item(i);
- parseNode(childNode, model);
- }
- }
- }
-
- private void parseRelationshipNode(Node node, ModelV8Artifact model) {
- String key = null;
- String value = null;
-
- NodeList nodeList = node.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node childNode = nodeList.item(i);
- if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {
- key = childNode.getTextContent().trim();
- }
- else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
- value = childNode.getTextContent().trim();
- }
- }
-
- if ( (key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY )) ) {
- if (value != null) {
- model.addDependentModelId(value);
- }
- }
- }
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifact.java b/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifact.java
deleted file mode 100644
index a5f4ef4..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifact.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import java.util.List;
-
-import javax.ws.rs.core.Response;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-public class NamedQueryArtifact extends AbstractModelArtifact {
-
- private Logger logger = LoggerFactory.getInstance().getLogger(NamedQueryArtifact.class.getName());
-
- private String namedQueryUuid;
-
- public NamedQueryArtifact() {
- super(ArtifactType.NAMED_QUERY);
- }
-
- public String getNamedQueryUuid() {
- return namedQueryUuid;
- }
-
- public void setNamedQueryUuid(String namedQueryUuid) {
- this.namedQueryUuid = namedQueryUuid;
- }
-
- @Override
- public String getUniqueIdentifier() {
- return getNamedQueryUuid();
- }
-
- @Override
- public boolean push(AaiRestClient aaiClient, ModelLoaderConfig config, String distId, List<AbstractModelArtifact> addedModels) {
- ClientResponse getResponse = aaiClient.getResource(getNamedQueryUrl(config), distId, AaiRestClient.MimeType.XML);
- if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {
- // Only attempt the PUT if the model doesn't already exist
- ClientResponse putResponse = aaiClient.putResource(getNamedQueryUrl(config), getPayload(), distId, AaiRestClient.MimeType.XML);
- if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) {
- addedModels.add(this);
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " successfully ingested.");
- }
- else {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + getType().toString() + " " + getUniqueIdentifier() +
- ". Rolling back distribution.");
- return false;
- }
- }
- else {
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " already exists. Skipping ingestion.");
- }
-
- return true;
- }
-
- @Override
- public void rollbackModel(AaiRestClient aaiClient, ModelLoaderConfig config, String distId) {
- // Best effort to delete. Nothing we can do in the event this fails.
- aaiClient.getAndDeleteResource(getNamedQueryUrl(config), distId);
- }
-
- private String getNamedQueryUrl(ModelLoaderConfig config) {
- String baseURL = config.getAaiBaseUrl().trim();
- String subURL = null;
- String instance = null;
-
- subURL = config.getAaiNamedQueryUrl(getModelNamespaceVersion()).trim();
- instance = this.getNamedQueryUuid();
-
- if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {
- baseURL = baseURL + "/";
- }
-
- if ( baseURL.endsWith("/") && subURL.startsWith("/") ) {
- baseURL = baseURL.substring(0, baseURL.length()-1);
- }
-
- if (!subURL.endsWith("/")) {
- subURL = subURL + "/";
- }
-
- String url = baseURL + subURL + instance;
- return url;
- }
-}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParser.java b/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParser.java
deleted file mode 100644
index 9e4507d..0000000
--- a/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParser.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * 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=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-package org.openecomp.modelloader.entity.model;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-
-public class NamedQueryArtifactParser implements IModelParser {
-
- private static String NAMED_QUERY_VERSION_ID = "named-query-uuid";
- private static String RELATIONSHIP_DATA = "relationship-data";
- private static String RELATIONSHIP_KEY = "relationship-key";
- private static String RELATIONSHIP_VALUE = "relationship-value";
- private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-invariant-id";
-
-
- private static Logger logger = LoggerFactory.getInstance().getLogger(NamedQueryArtifactParser.class.getName());
-
- public List<Artifact> parse(byte[] artifactPayload, String artifactName) {
- String payload = new String(artifactPayload);
- List<Artifact> modelList = new ArrayList<Artifact>();
-
- try {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- InputSource is = new InputSource(new StringReader(payload));
- Document doc = builder.parse(is);
-
- NamedQueryArtifact model = parseModel(doc.getDocumentElement(), payload);
-
- if (model != null) {
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Named-Query parsed =====>>>> " + "Named-Query-UUID: "+ model.getNamedQueryUuid());
- modelList.add(model);
- }
- else {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse named-query artifact " + artifactName);
- return null;
- }
- }
- catch (Exception ex) {
- logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse named-query artifact " + artifactName + ": " + ex.getLocalizedMessage());
- }
-
- return modelList;
- }
-
- private NamedQueryArtifact parseModel(Node modelNode, String payload) {
- NamedQueryArtifact model = new NamedQueryArtifact();
- model.setPayload(payload);
-
- Element e = (Element)modelNode;
- model.setModelNamespace(e.getAttribute("xmlns"));
-
- parseNode(modelNode, model);
-
- if (model.getNamedQueryUuid() == null) {
- return null;
- }
-
- return model;
- }
-
- private void parseNode(Node node, NamedQueryArtifact model) {
- if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) {
- model.setNamedQueryUuid(node.getTextContent().trim());
- }
- else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
- parseRelationshipNode(node, model);
- }
- else {
- NodeList nodeList = node.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node childNode = nodeList.item(i);
- parseNode(childNode, model);
- }
- }
- }
-
- private void parseRelationshipNode(Node node, NamedQueryArtifact model) {
- String key = null;
- String value = null;
-
- NodeList nodeList = node.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node childNode = nodeList.item(i);
- if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {
- key = childNode.getTextContent().trim();
- }
- else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
- value = childNode.getTextContent().trim();
- }
- }
-
- if ( (key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY )) ) {
- if (value != null) {
- model.addDependentModelId(value);
- }
- }
- }
-}