aboutsummaryrefslogtreecommitdiffstats
path: root/adapters/mso-catalog-db-adapter/src/main/java/org/onap
diff options
context:
space:
mode:
authorBenjamin, Max (mb388a) <mb388a@us.att.com>2018-07-30 15:56:09 -0400
committerBenjamin, Max (mb388a) <mb388a@us.att.com>2018-07-31 11:09:25 -0400
commit5a6a6de6f1a26a1897e4917a0df613e25a24eb70 (patch)
tree59a968f27b4b603aacc9d5e7b51fb598aeec5321 /adapters/mso-catalog-db-adapter/src/main/java/org/onap
parentb6dc38501f3b746426b42d9de4cc883d894149e8 (diff)
Containerization feature of SO
Change-Id: I95381232eeefcd247a66a5cec370a8ce1c288e18 Issue-ID: SO-670 Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
Diffstat (limited to 'adapters/mso-catalog-db-adapter/src/main/java/org/onap')
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDBApplication.java47
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDbRepositoryConfiguration.java43
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/JerseyConfiguration.java55
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/WebSecurityConfigImpl.java51
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQuery.java99
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryException.java58
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryExceptionCategory.java23
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryExceptionCommon.java75
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryAllottedResourceCustomization.java123
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipe.java75
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceCsar.java72
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceMacroHolder.java97
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceNetworks.java117
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java122
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryVfModule.java121
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java600
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/package-info.java28
17 files changed, 1806 insertions, 0 deletions
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDBApplication.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDBApplication.java
new file mode 100644
index 0000000000..ce98b74fab
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDBApplication.java
@@ -0,0 +1,47 @@
+/*-
+ * ============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.catalogdb;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+
+@SpringBootApplication(scanBasePackages = {"org.onap.so.adapters.catalogdb", "org.onap.so.db.catalog.client"})
+@EnableJpaRepositories("org.onap.so.db.catalog.data.repository")
+@EntityScan("org.onap.so.db.catalog.beans")
+public class CatalogDBApplication {
+
+ private static final String LOGS_DIR = "logs_dir";
+
+ private static void setLogsDir() {
+ if (System.getProperty(LOGS_DIR) == null) {
+ System.getProperties().setProperty(LOGS_DIR, "./logs/catdb/");
+ }
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(CatalogDBApplication.class, args);
+ System.getProperties().setProperty("mso.db", "MARIADB");
+ System.getProperties().setProperty("server.name", "Springboot");
+ setLogsDir();
+ }
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDbRepositoryConfiguration.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDbRepositoryConfiguration.java
new file mode 100644
index 0000000000..3906762e60
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDbRepositoryConfiguration.java
@@ -0,0 +1,43 @@
+/*-
+ * ============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;
+
+import java.util.stream.Collectors;
+
+import javax.persistence.EntityManager;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
+import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;
+
+@Configuration
+public class CatalogDbRepositoryConfiguration extends RepositoryRestConfigurerAdapter {
+
+ @Autowired
+ private EntityManager entityManager;
+
+ @Override
+ public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
+ config.exposeIdsFor(entityManager.getMetamodel().getEntities().stream().map(e -> e.getJavaType()).collect(Collectors.toList()).toArray(new Class[0]));
+ }
+
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/JerseyConfiguration.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/JerseyConfiguration.java
new file mode 100644
index 0000000000..dcd668f2c8
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/JerseyConfiguration.java
@@ -0,0 +1,55 @@
+/*-
+ * ============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.catalogdb;
+
+import javax.annotation.PostConstruct;
+import javax.ws.rs.ApplicationPath;
+
+import org.glassfish.jersey.server.ResourceConfig;
+import org.onap.so.adapters.catalogdb.rest.CatalogDbAdapterRest;
+import org.onap.so.logging.jaxrs.filter.jersey.JaxRsFilterLogging;
+import org.springframework.context.annotation.Configuration;
+
+import io.swagger.jaxrs.config.BeanConfig;
+import io.swagger.jaxrs.listing.ApiListingResource;
+import io.swagger.jaxrs.listing.SwaggerSerializers;
+
+@Configuration
+@ApplicationPath("/ecomp/mso/catalog")
+public class JerseyConfiguration extends ResourceConfig {
+
+ @PostConstruct
+ public void setUp() {
+ register(CatalogDbAdapterRest.class);
+ register(ApiListingResource.class);
+ register(SwaggerSerializers.class);
+ register(JaxRsFilterLogging.class);
+ BeanConfig beanConfig = new BeanConfig();
+ beanConfig.setVersion("1.0.2");
+ beanConfig.setSchemes(new String[]{"http"});
+ beanConfig.setHost("localhost:8080");
+ beanConfig.setBasePath("/ecomp/mso/catalog");
+ beanConfig.setResourcePackage("org.onap.so.adapters.catalogdb");
+ beanConfig.setPrettyPrint(true);
+ beanConfig.setScan(true);
+ }
+}
+
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/WebSecurityConfigImpl.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/WebSecurityConfigImpl.java
new file mode 100644
index 0000000000..144df5fe6a
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/WebSecurityConfigImpl.java
@@ -0,0 +1,51 @@
+/*-
+ * ============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;
+
+import org.onap.so.security.MSOSpringFirewall;
+import org.onap.so.security.WebSecurityConfig;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.builders.WebSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.web.firewall.StrictHttpFirewall;
+import org.springframework.util.StringUtils;
+
+@EnableWebSecurity
+public class WebSecurityConfigImpl extends WebSecurityConfig {
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http.csrf().disable()
+ .authorizeRequests()
+ .antMatchers("/manage/health","/manage/info").permitAll()
+ .antMatchers("/**").hasAnyRole(StringUtils.collectionToDelimitedString(getRoles(),",").toString())
+ .and()
+ .httpBasic();
+ }
+
+ @Override
+ public void configure(WebSecurity web) throws Exception {
+ super.configure(web);
+ StrictHttpFirewall firewall = new MSOSpringFirewall();
+ web.httpFirewall(firewall);
+ }
+
+}
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
new file mode 100644
index 0000000000..6b0d901cb4
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQuery.java
@@ -0,0 +1,99 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. 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 java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.onap.so.logger.MsoLogger;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public abstract class CatalogQuery {
+ protected static MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA,CatalogQuery.class);
+ private static final boolean IS_EMBED = true;
+
+ public abstract String JSON2(boolean isArray, boolean isEmbed);
+
+ protected void put(Map<String, String> valueMap, String key, String value) {
+ valueMap.put(key, value == null? "null": '"'+ value+ '"');
+ }
+
+ protected void put(Map<String, String> valueMap, String key, Integer value) {
+ valueMap.put(key, value == null? "null": value.toString());
+ }
+
+ protected void put(Map<String, String> valueMap, String key, Boolean value) {
+ valueMap.put(key, value == null? "null": value? "true": "false");
+ }
+
+ protected String setTemplate(String template, Map<String, String> valueMap) {
+ LOGGER.debug("CatalogQuery setTemplate");
+ StringBuffer result = new StringBuffer();
+
+ String pattern = "<.*>";
+ Pattern r = Pattern.compile(pattern);
+ Matcher m = r.matcher(template);
+
+ LOGGER.debug("CatalogQuery template:" + template);
+ while (m.find()) {
+ String key = template.substring(m.start() + 1, m.end() - 1);
+ LOGGER.debug("CatalogQuery key:" + key + " contains key? " + valueMap.containsKey(key));
+ m.appendReplacement(result, valueMap.getOrDefault(key, "\"TBD\""));
+ }
+ m.appendTail(result);
+ LOGGER.debug("CatalogQuery return:" + result.toString());
+ return result.toString();
+ }
+
+ /**
+ * The simple, clean, generic way to handle the interface
+ */
+ protected String smartToJSON() {
+ String jsonString = null;
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ jsonString = mapper.writeValueAsString(this);
+ }
+ catch (Exception e) {
+ LOGGER.debug("Exception:", e);
+ LOGGER.debug ("jsonString exception:"+e.getMessage());
+ jsonString = "invalid"; //throws instead?
+ }
+ return jsonString;
+ }
+
+ public String toJsonString(String version, boolean isArray) {
+ switch(version) {
+ case "v1": return smartToJSON();
+ case "v2": return JSON2(isArray, !IS_EMBED);
+ default:
+ return "invalid version: "+ version;
+ }
+ }
+ @Override
+ public String toString(){
+ return smartToJSON();
+
+ }
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryException.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryException.java
new file mode 100644
index 0000000000..890347344c
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryException.java
@@ -0,0 +1,58 @@
+/*-
+ * ============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.catalogdb.catalogrest;
+
+import java.io.Serializable;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "catalogQueryException")
+public class CatalogQueryException extends CatalogQueryExceptionCommon implements Serializable {
+ private static final long serialVersionUID = -9062290006520066109L;
+
+ private String message;
+ private CatalogQueryExceptionCategory category;
+ private Boolean rolledBack;
+
+ public CatalogQueryException () {}
+
+ public CatalogQueryException (String message) {
+ this.message = message;
+ }
+
+ public CatalogQueryException (String message, CatalogQueryExceptionCategory category, boolean rolledBack, String messageid) {
+ super(messageid);
+ this.message = message;
+ this.category = category;
+ this.rolledBack = rolledBack;
+ }
+
+ public String getMessage() { return message; }
+ public void setMessage(String message) { this.message = message; }
+
+ public CatalogQueryExceptionCategory getCategory () { return category; }
+ public void setCategory (CatalogQueryExceptionCategory category) { this.category = category; }
+
+ public Boolean getRolledBack() { return rolledBack; }
+ public void setRolledBack(Boolean rolledBack) { this.rolledBack = rolledBack; }
+
+
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryExceptionCategory.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryExceptionCategory.java
new file mode 100644
index 0000000000..687cc7d3e0
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryExceptionCategory.java
@@ -0,0 +1,23 @@
+/*-
+ * ============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.catalogdb.catalogrest;
+
+public enum CatalogQueryExceptionCategory { OPENSTACK, IO, INTERNAL, USERDATA }
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryExceptionCommon.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryExceptionCommon.java
new file mode 100644
index 0000000000..67f337e039
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogQueryExceptionCommon.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. 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 java.io.ByteArrayOutputStream;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+
+import org.onap.so.logger.MsoLogger;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+public abstract class CatalogQueryExceptionCommon {
+ private String messageId;
+ protected static MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA,CatalogQueryExceptionCommon.class);
+
+ public CatalogQueryExceptionCommon() { messageId = null; }
+ public CatalogQueryExceptionCommon(String messageId) { this.messageId = messageId; }
+
+ public String getMessageId() { return messageId; }
+ public void setMessageId(String messageId) { this.messageId = messageId; }
+
+ public String toJsonString() {
+ try {
+ String jsonString;
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
+ jsonString = mapper.writeValueAsString(this);
+ return jsonString;
+ } catch (Exception e) {
+ LOGGER.debug ("Exception:", e);
+ return "";
+ }
+ }
+
+ public String toXmlString() {
+ try {
+ ByteArrayOutputStream bs = new ByteArrayOutputStream();
+ JAXBContext context = JAXBContext.newInstance(this.getClass());
+ Marshaller marshaller = context.createMarshaller();
+ marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //pretty print XML
+ marshaller.marshal(this, bs);
+ return bs.toString();
+ } catch (Exception e) {
+ LOGGER.debug ("Exception:", e);
+ return "";
+ }
+ }
+
+ @Override
+ public String toString(){
+ return toJsonString();
+ }
+}
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
new file mode 100644
index 0000000000..2deada5754
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryAllottedResourceCustomization.java
@@ -0,0 +1,123 @@
+/*-
+ * ============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.catalogdb.catalogrest;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.onap.so.db.catalog.beans.AllottedResourceCustomization;
+import org.onap.so.logger.MsoLogger;
+
+@XmlRootElement(name = "serviceAllottedResources")
+public class QueryAllottedResourceCustomization extends CatalogQuery {
+ protected static MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA,QueryAllottedResourceCustomization.class);
+ private List<AllottedResourceCustomization> allottedResourceCustomization;
+ private final String template =
+ "\t{\n"+
+// "\t{ \"allottedResource\" : {\n"+
+ "\t\t\"modelInfo\" : {\n"+
+ "\t\t\t\"modelName\" : <MODEL_NAME>,\n"+
+ "\t\t\t\"modelUuid\" : <MODEL_UUID>,\n"+
+ "\t\t\t\"modelInvariantUuid\" : <MODEL_INVARIANT_ID>,\n"+
+ "\t\t\t\"modelVersion\" : <MODEL_VERSION>,\n"+
+ "\t\t\t\"modelCustomizationUuid\" : <MODEL_CUSTOMIZATION_UUID>,\n"+
+ "\t\t\t\"modelInstanceName\" : <MODEL_INSTANCE_NAME>\n"+
+ "\t\t},\n"+
+ "\t\t\"toscaNodeType\" : <TOSCA_NODE_TYPE>,\n"+
+ "\t\t\"allottedResourceType\" : <ALLOTTED_RESOURCE_TYPE>,\n"+
+ "\t\t\"allottedResourceRole\" : <ALLOTTED_RESOURCE_ROLE>,\n"+
+ "\t\t\"providingServiceModelName\" : <PROVIDING_SERVICE_MODEL_NAME>,\n"+
+ "\t\t\"providingServiceModelInvariantUuid\" : <PROVIDING_SERVICE_MODEL_INVARIANT_UUID>,\n"+
+ "\t\t\"providingServiceModelUuid\" : <PROVIDING_SERVICE_MODEL_UUID>,\n"+
+ "\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}}";
+
+ public QueryAllottedResourceCustomization() { super(); allottedResourceCustomization = new ArrayList<>(); }
+ public QueryAllottedResourceCustomization(List<AllottedResourceCustomization> vlist) { allottedResourceCustomization = vlist; }
+
+ public List<AllottedResourceCustomization> getServiceAllottedResources(){ return this.allottedResourceCustomization; }
+ public void setServiceAllottedResources(List<AllottedResourceCustomization> v) { this.allottedResourceCustomization = v; }
+
+ @Override
+ public String toString () {
+ StringBuilder sb = new StringBuilder();
+
+ boolean first = true;
+ int i = 1;
+ for (AllottedResourceCustomization o : allottedResourceCustomization) {
+ sb.append(i).append("\t");
+ if (!first) sb.append("\n"); first = false;
+ sb.append(o);
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public String JSON2(boolean isArray, boolean isEmbed) {
+ StringBuilder sb = new StringBuilder();
+ if (!isEmbed && isArray) sb.append("{ ");
+ if (isArray) sb.append("\"serviceAllottedResources\": [");
+ Map<String, String> valueMap = new HashMap<>();
+ String sep = "";
+ boolean first = true;
+
+ if (this.allottedResourceCustomization != null) {
+ for (AllottedResourceCustomization o : allottedResourceCustomization) {
+ if (first) sb.append("\n"); first = false;
+
+ boolean arNull = o.getAllottedResource() == null ? true : false;
+
+ put(valueMap, "MODEL_NAME", arNull ? null : o.getAllottedResource().getModelName());
+ put(valueMap, "MODEL_UUID", arNull ? null : o.getAllottedResource().getModelUUID());
+ put(valueMap, "MODEL_INVARIANT_ID", arNull ? null : o.getAllottedResource().getModelInvariantUUID());
+ put(valueMap, "MODEL_VERSION", arNull ? null : o.getAllottedResource().getModelVersion());
+ put(valueMap, "MODEL_CUSTOMIZATION_UUID", o.getModelCustomizationUUID());
+ 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, "NF_TYPE", o.getNfType());
+ put(valueMap, "NF_ROLE", o.getNfRole());
+ put(valueMap, "NF_FUNCTION", o.getNfFunction());
+ put(valueMap, "NF_NAMING_CODE", o.getNfNamingCode());
+ 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());
+
+ sb.append(sep).append(this.setTemplate(template, valueMap));
+ sep = ",\n";
+ }
+ }
+ if (!first) sb.append("\n");
+ if (isArray) sb.append("]");
+ if (!isEmbed && isArray) sb.append("}");
+ return sb.toString();
+ }
+
+}
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
new file mode 100644
index 0000000000..e0d187500e
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryResourceRecipe.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. 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 java.util.HashMap;
+import java.util.Map;
+
+import org.onap.so.db.catalog.beans.Recipe;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+/**
+ * serivce csar query support
+ * <br>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version ONAP Beijing Release 2018-02-28
+ */
+public class QueryResourceRecipe extends CatalogQuery{
+
+ private Recipe resourceRecipe;
+
+ public QueryResourceRecipe(Recipe resourceRecipe){
+ this.resourceRecipe =resourceRecipe;
+ }
+
+ @Override
+ public String toString() {
+
+ return resourceRecipe.toString();
+ }
+
+ @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());
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
+ String jsonStr = "";
+ try {
+ jsonStr = mapper.writeValueAsString(valueMap);
+ } catch(JsonProcessingException e) {
+
+ e.printStackTrace();
+ }
+ return jsonStr;
+ }
+
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceCsar.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceCsar.java
new file mode 100644
index 0000000000..d49f8965fb
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceCsar.java
@@ -0,0 +1,72 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. 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 java.util.HashMap;
+import java.util.Map;
+
+import org.onap.so.db.catalog.beans.ToscaCsar;
+
+/**
+ * serivce csar query support
+ * <br>
+ * <p>
+ * </p>
+ *
+ * @author
+ * @version ONAP Beijing Release 2018-02-28
+ */
+public class QueryServiceCsar extends CatalogQuery{
+
+ private ToscaCsar toscaCsar;
+
+ public QueryServiceCsar(ToscaCsar toscaCsar){
+ this.toscaCsar = toscaCsar;
+ }
+
+ private final String template =
+ "\t{\n"+
+ "\t\t\"artifactUUID\" : <ARTIFACT_UUID>,\n"+
+ "\t\t\"name\" : <NAME>,\n"+
+ "\t\t\"version\" : <VERSION>,\n"+
+ "\t\t\"artifactChecksum\" : <ARTIFACT_CHECK_SUM>,\n"+
+ "\t\t\"url\" : <URL>,\n"+
+ "\t\t\"description\" : <DESCRIPTION>\n"+
+ "\t}";
+
+ @Override
+ public String toString() {
+
+ return toscaCsar.toString();
+ }
+
+ @Override
+ public String JSON2(boolean isArray, boolean isEmbed) {
+ Map<String, String> valueMap = new HashMap<>();
+ put(valueMap, "ARTIFACT_UUID", null == toscaCsar ? null : toscaCsar.getArtifactUUID());
+ put(valueMap, "NAME", null == toscaCsar ? null : toscaCsar.getName());
+ put(valueMap, "VERSION", null == toscaCsar ? null : toscaCsar.getVersion());
+ put(valueMap, "ARTIFACT_CHECK_SUM", null == toscaCsar ? null : toscaCsar.getArtifactChecksum());
+ put(valueMap, "URL", null == toscaCsar ? null : toscaCsar.getUrl());
+ put(valueMap, "DESCRIPTION", null == toscaCsar ? null : toscaCsar.getDescription());
+ return this.setTemplate(template, valueMap);
+ }
+
+}
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
new file mode 100644
index 0000000000..12ba4c0598
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceMacroHolder.java
@@ -0,0 +1,97 @@
+/*-
+ * ============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.catalogdb.catalogrest;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.onap.so.db.catalog.beans.Service;
+import org.onap.so.db.catalog.rest.beans.ServiceMacroHolder;
+
+@XmlRootElement(name = "serviceResources")
+public class QueryServiceMacroHolder extends CatalogQuery {
+ private ServiceMacroHolder serviceMacroHolder;
+ private static final String LINE_BEGINNING = "(?m)^";
+ private static final String template =
+ "{ \"serviceResources\" : {\n"+
+ "\t\"modelInfo\" : {\n"+
+ "\t\t\"modelName\" : <SERVICE_MODEL_NAME>,\n"+
+ "\t\t\"modelUuid\" : <SERVICE_MODEL_UUID>,\n"+
+ "\t\t\"modelInvariantUuid\" : <SERVICE_MODEL_INVARIANT_ID>,\n"+
+ "\t\t\"modelVersion\" : <SERVICE_MODEL_VERSION>\n"+
+ "\t},\n"+
+ "\t\"serviceType\" : <SERVICE_TYPE>,\n"+
+ "\t\"serviceRole\" : <SERVICE_ROLE>,\n"+
+ "\t\"environmentContext\" : <ENVIRONMENT_CONTEXT>,\n"+
+ "\t\"workloadContext\" : <WORKLOAD_CONTEXT>,\n"+
+ "<_SERVICEVNFS_>,\n"+
+ "<_SERVICENETWORKS_>,\n"+
+ "<_SERVICEALLOTTEDRESOURCES_>\n"+
+ "\t}}";
+
+ public QueryServiceMacroHolder() {
+ super();
+ serviceMacroHolder = new ServiceMacroHolder();
+ }
+ public QueryServiceMacroHolder(ServiceMacroHolder vlist) { serviceMacroHolder = vlist; }
+
+ public ServiceMacroHolder getServiceResources(){ return this.serviceMacroHolder; }
+ public void setServiceResources(ServiceMacroHolder v) { this.serviceMacroHolder = v; }
+
+ @Override
+ public String toString () { return serviceMacroHolder.toString(); }
+
+ @Override
+ public String JSON2(boolean isArray, boolean x) {
+ Service service = serviceMacroHolder.getService();
+ if (service == null) {
+ return "\"serviceResources\": null";
+ }
+
+ StringBuilder buf = new StringBuilder();
+ Map<String, String> valueMap = new HashMap<>();
+
+ put(valueMap, "SERVICE_MODEL_NAME", service.getModelName()); //getServiceModelName());
+ put(valueMap, "SERVICE_MODEL_UUID", service.getModelUUID()); //getServiceModelUuid());
+ put(valueMap, "SERVICE_MODEL_INVARIANT_ID", service.getModelInvariantUUID()); //getServiceModelInvariantId());
+ put(valueMap, "SERVICE_MODEL_VERSION", service.getModelVersion()); //getServiceModelVersion());
+ put(valueMap, "SERVICE_TYPE", service.getServiceType());
+ put(valueMap, "SERVICE_ROLE", service.getServiceRole());
+ put(valueMap, "ENVIRONMENT_CONTEXT", service.getEnvironmentContext());
+ put(valueMap, "WORKLOAD_CONTEXT", service.getWorkloadContext());
+
+ String subitem;
+ subitem = new QueryServiceVnfs(service.getVnfCustomizations()).JSON2(true, true);
+ valueMap.put("_SERVICEVNFS_", subitem.replaceAll(LINE_BEGINNING, "\t"));
+
+ subitem = new QueryServiceNetworks(service.getNetworkCustomizations()).JSON2(true, true);
+ valueMap.put("_SERVICENETWORKS_", subitem.replaceAll(LINE_BEGINNING, "\t"));
+
+ subitem = new QueryAllottedResourceCustomization(service.getAllottedCustomizations()).JSON2(true, true);
+ valueMap.put("_SERVICEALLOTTEDRESOURCES_", subitem.replaceAll(LINE_BEGINNING, "\t"));
+
+ buf.append(this.setTemplate(template, valueMap));
+ return buf.toString();
+ }
+
+}
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
new file mode 100644
index 0000000000..b213d33af0
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceNetworks.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.adapters.catalogdb.catalogrest;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
+import org.onap.so.logger.MsoLogger;
+
+@XmlRootElement(name = "serviceNetworks")
+public class QueryServiceNetworks extends CatalogQuery {
+ protected static MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA,QueryServiceNetworks.class);
+ private List<NetworkResourceCustomization> serviceNetworks;
+ private final String template =
+ "\t{\n"+
+// "\t{ \"networkResource\" : {\n"+
+ "\t\t\"modelInfo\" : {\n"+
+ "\t\t\t\"modelName\" : <MODEL_NAME>,\n"+
+ "\t\t\t\"modelUuid\" : <MODEL_UUID>,\n"+
+ "\t\t\t\"modelInvariantUuid\" : <MODEL_INVARIANT_ID>,\n"+
+ "\t\t\t\"modelVersion\" : <MODEL_VERSION>,\n"+
+ "\t\t\t\"modelCustomizationUuid\" : <MODEL_CUSTOMIZATION_UUID>,\n"+
+ "\t\t\t\"modelInstanceName\" : <MODEL_INSTANCE_NAME>\n"+
+ "\t},\n"+
+ "\t\t\"toscaNodeType\" : <TOSCA_NODE_TYPE>,\n"+
+ "\t\t\"networkType\" : <NETWORK_TYPE>,\n"+
+ "\t\t\"networkTechnology\" : <NETWORK_TECHNOLOGY>,\n"+
+ "\t\t\"networkRole\" : <NETWORK_ROLE>,\n"+
+ "\t\t\"networkScope\" : <NETWORK_SCOPE>\n"+
+ "\t}";
+// "\t}}";
+
+ public QueryServiceNetworks() { super(); serviceNetworks = new ArrayList<>(); }
+ public QueryServiceNetworks(List<NetworkResourceCustomization> vlist) {
+ LOGGER.debug ("QueryServiceNetworks:");
+ serviceNetworks = new ArrayList<>();
+ for (NetworkResourceCustomization o : vlist) {
+ LOGGER.debug (o.toString());
+ serviceNetworks.add(o);
+ LOGGER.debug ("-------------------");
+ }
+ }
+
+ public List<NetworkResourceCustomization> getServiceNetworks(){ return this.serviceNetworks; }
+ public void setServiceNetworks(List<NetworkResourceCustomization> v) { this.serviceNetworks = v; }
+
+ @Override
+ public String toString () {
+ StringBuilder sb = new StringBuilder();
+
+ boolean first = true;
+ int i = 1;
+ for (NetworkResourceCustomization o : serviceNetworks) {
+ sb.append(i).append("\t");
+ if (!first) sb.append("\n"); first = false;
+ sb.append(o);
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public String JSON2(boolean isArray, boolean isEmbed) {
+ StringBuilder sb = new StringBuilder();
+ if (!isEmbed && isArray) sb.append("{ ");
+ if (isArray) sb.append("\"serviceNetworks\": [");
+
+ Map<String, String> valueMap = new HashMap<>();
+ String sep = "";
+ boolean first = true;
+
+ for (NetworkResourceCustomization o : serviceNetworks) {
+ if (first) sb.append("\n"); first = false;
+ boolean nrNull = o.getNetworkResource() == null ? true : false;
+ put(valueMap, "MODEL_NAME", nrNull ? null : o.getNetworkResource().getModelName());
+ put(valueMap, "MODEL_UUID", nrNull ? null : o.getNetworkResource().getModelUUID());
+ put(valueMap, "MODEL_INVARIANT_ID", nrNull ? null : o.getNetworkResource().getModelInvariantUUID());
+ put(valueMap, "MODEL_VERSION", nrNull ? null : o.getNetworkResource().getModelVersion());
+ put(valueMap, "MODEL_CUSTOMIZATION_UUID", o.getModelCustomizationUUID());
+ put(valueMap, "MODEL_INSTANCE_NAME", o.getModelInstanceName());
+ put(valueMap, "TOSCA_NODE_TYPE", nrNull ? null : o.getNetworkResource().getToscaNodeType());
+ put(valueMap, "NETWORK_TYPE", o.getNetworkType());
+ put(valueMap, "NETWORK_ROLE", o.getNetworkRole());
+ put(valueMap, "NETWORK_SCOPE", o.getNetworkScope());
+ put(valueMap, "NETWORK_TECHNOLOGY", o.getNetworkTechnology());
+
+ sb.append(sep).append(this.setTemplate(template, valueMap));
+ sep = ",\n";
+ }
+ if (!first) sb.append("\n");
+ if (isArray) sb.append("]");
+ if (!isEmbed && isArray) sb.append("}");
+ return sb.toString();
+ }
+}
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
new file mode 100644
index 0000000000..ff52daf880
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java
@@ -0,0 +1,122 @@
+/*-
+ * ============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.catalogdb.catalogrest;
+/* should be called QueryVnfResource.java */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+
+@XmlRootElement(name = "serviceVnfs")
+public class QueryServiceVnfs extends CatalogQuery {
+ private List<VnfResourceCustomization> serviceVnfs;
+ private final String template =
+ "\n"+
+ "\t{ \"modelInfo\" : {\n"+
+ "\t\t\"modelName\" : <MODEL_NAME>,\n"+
+ "\t\t\"modelUuid\" : <MODEL_UUID>,\n"+
+ "\t\t\"modelInvariantUuid\" : <MODEL_INVARIANT_ID>,\n"+
+ "\t\t\"modelVersion\" : <MODEL_VERSION>,\n"+
+ "\t\t\"modelCustomizationUuid\" : <MODEL_CUSTOMIZATION_UUID>,\n"+
+ "\t\t\"modelInstanceName\" : <MODEL_INSTANCE_NAME>\n"+
+ "\t\t},\n"+
+ "\t\"toscaNodeType\" : <TOSCA_NODE_TYPE>,\n"+
+ "\t\"nfFunction\" : <NF_FUNCTION>,\n"+
+ "\t\"nfType\" : <NF_TYPE>,\n"+
+ "\t\"nfRole\" : <NF_ROLE>,\n"+
+ "\t\"nfNamingCode\" : <NF_NAMING_CODE>,\n"+
+ "\t\"multiStageDesign\" : <MULTI_STEP_DESIGN>,\n"+
+ "<_VFMODULES_>\n" +
+ "\t}";
+
+ public QueryServiceVnfs() { super(); serviceVnfs = new ArrayList<>(); }
+ public QueryServiceVnfs(List<VnfResourceCustomization> vlist) {
+ LOGGER.debug ("QueryServiceVnfs:");
+ serviceVnfs = new ArrayList<>();
+ for (VnfResourceCustomization o : vlist) {
+ LOGGER.debug ("-- o is a serviceVnfs ----");
+ LOGGER.debug (o.toString());
+ serviceVnfs.add(o);
+ LOGGER.debug ("-------------------");
+ }
+ }
+
+ public List<VnfResourceCustomization> getServiceVnfs(){ return this.serviceVnfs; }
+ public void setServiceVnfs(List<VnfResourceCustomization> v) { this.serviceVnfs = v; }
+
+ @Override
+ public String toString () {
+ StringBuilder sb = new StringBuilder();
+
+ boolean first = true;
+ int i = 1;
+ for (VnfResourceCustomization o : serviceVnfs) {
+ sb.append(i).append("\t");
+ if (!first) sb.append("\n"); first = false;
+ sb.append(o);
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public String JSON2(boolean isArray, boolean isEmbed) {
+ StringBuilder sb = new StringBuilder();
+ if (!isEmbed && isArray) sb.append("{ ");
+ if (isArray) sb.append("\"serviceVnfs\": [");
+ Map<String, String> valueMap = new HashMap<>();
+ String sep = "";
+ boolean first = true;
+
+ for (VnfResourceCustomization o : serviceVnfs) {
+ if (first) sb.append("\n"); first = false;
+
+ boolean vrNull = o.getVnfResources() == null ? true : false;
+
+ put(valueMap, "MODEL_NAME", vrNull ? null : o.getVnfResources().getModelName());
+ put(valueMap, "MODEL_UUID", vrNull ? null : o.getVnfResources().getModelUUID());
+ put(valueMap, "MODEL_INVARIANT_ID", vrNull ? null : o.getVnfResources().getModelInvariantId());
+ put(valueMap, "MODEL_VERSION", vrNull ? null : o.getVnfResources().getModelVersion());
+ put(valueMap, "MODEL_CUSTOMIZATION_UUID", o.getModelCustomizationUUID());
+ put(valueMap, "MODEL_INSTANCE_NAME", o.getModelInstanceName());
+ put(valueMap, "TOSCA_NODE_TYPE", vrNull ? null : o.getVnfResources().getToscaNodeType());
+ put(valueMap, "NF_FUNCTION", o.getNfFunction());
+ put(valueMap, "NF_TYPE", o.getNfType());
+ put(valueMap, "NF_ROLE", o.getNfRole());
+ put(valueMap, "NF_NAMING_CODE", o.getNfNamingCode());
+ put(valueMap, "MULTI_STEP_DESIGN", o.getMultiStageDesign());
+
+ String subitem = new QueryVfModule(vrNull ? null : o.getVfModuleCustomizations()).JSON2(true, true);
+ valueMap.put("_VFMODULES_", subitem.replaceAll("(?m)^", "\t\t"));
+
+ sb.append(sep).append(this.setTemplate(template, valueMap));
+ sep = ",\n";
+ }
+ if (!first) sb.append("\n");
+ if (isArray) sb.append("]");
+ if (!isEmbed && isArray) sb.append("}");
+ return sb.toString();
+ }
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryVfModule.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryVfModule.java
new file mode 100644
index 0000000000..e5fa14376b
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryVfModule.java
@@ -0,0 +1,121 @@
+/*-
+ * ============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.catalogdb.catalogrest;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.onap.so.db.catalog.beans.HeatEnvironment;
+import org.onap.so.db.catalog.beans.VfModuleCustomization;
+
+@XmlRootElement(name = "vfModules")
+public class QueryVfModule extends CatalogQuery {
+ private List<VfModuleCustomization> vfModules;
+ private final String template =
+ "\t{\n"+
+// "\t{ \"vfModule\" : { \n"+
+ "\t\t\"modelInfo\" : { \n"+
+ "\t\t\t\"modelName\" : <MODEL_NAME>,\n"+
+ "\t\t\t\"modelUuid\" : <MODEL_UUID>,\n"+
+ "\t\t\t\"modelInvariantUuid\" : <MODEL_INVARIANT_ID>,\n"+
+ "\t\t\t\"modelVersion\" : <MODEL_VERSION>,\n"+
+ "\t\t\t\"modelCustomizationUuid\" : <MODEL_CUSTOMIZATION_UUID>\n"+
+ "\t\t},"+
+ "\t\t\"isBase\" : <IS_BASE>,\n"+
+ "\t\t\"vfModuleLabel\" : <VF_MODULE_LABEL>,\n"+
+ "\t\t\"initialCount\" : <INITIAL_COUNT>,\n"+
+ "\t\t\"hasVolumeGroup\" : <HAS_VOLUME_GROUP>\n"+
+ "\t}";
+// "\t}}";
+
+ public QueryVfModule() { super(); vfModules = new ArrayList<>(); }
+ public QueryVfModule(List<VfModuleCustomization> vlist) {
+ LOGGER.debug ("QueryVfModule:");
+ vfModules = new ArrayList<>();
+ if (vlist != null) {
+ for (VfModuleCustomization o : vlist) {
+ LOGGER.debug ("-- o is a vfModules ----");
+ LOGGER.debug (o.toString());
+ vfModules.add(o);
+ LOGGER.debug ("-------------------");
+ }
+ }
+ }
+
+ public List<VfModuleCustomization> getVfModule(){ return this.vfModules; }
+ public void setVfModule(List<VfModuleCustomization> v) { this.vfModules = v; }
+
+ @Override
+ public String toString () {
+ StringBuilder sb = new StringBuilder();
+
+ boolean first = true;
+ int i = 1;
+ for (VfModuleCustomization o : vfModules) {
+ sb.append(i).append("\t");
+ if (!first) sb.append("\n"); first = false;
+ sb.append(o);
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public String JSON2(boolean isArray, boolean isEmbed) {
+ StringBuilder sb = new StringBuilder();
+ if (!isEmbed && isArray) sb.append("{ ");
+ if (isArray) sb.append("\"vfModules\": [");
+ Map<String, String> valueMap = new HashMap<>();
+ String sep = "";
+ boolean first = true;
+
+ for (VfModuleCustomization o : vfModules) {
+ if (first) sb.append("\n"); first = false;
+
+ boolean vfNull = o.getVfModule() == null ? true : false;
+ boolean hasVolumeGroup = false;
+ HeatEnvironment envt = o.getVolumeHeatEnv();
+ if (envt != null) {
+ hasVolumeGroup = true;
+ }
+
+ put(valueMap, "MODEL_NAME", vfNull ? null : o.getVfModule().getModelName());
+ put(valueMap, "MODEL_UUID", vfNull ? null : o.getVfModule().getModelUUID());
+ put(valueMap, "MODEL_INVARIANT_ID", vfNull ? null : o.getVfModule().getModelInvariantUUID());
+ put(valueMap, "MODEL_VERSION", vfNull ? null : o.getVfModule().getModelVersion());
+ put(valueMap, "MODEL_CUSTOMIZATION_UUID", o.getModelCustomizationUUID());
+ put(valueMap, "IS_BASE", vfNull ? false : o.getVfModule().getIsBase() ? true : false);
+ put(valueMap, "VF_MODULE_LABEL", o.getLabel());
+ put(valueMap, "INITIAL_COUNT", o.getInitialCount());
+ put(valueMap, "HAS_VOLUME_GROUP", new Boolean(hasVolumeGroup));
+
+ sb.append(sep).append(this.setTemplate(template, valueMap));
+ sep = ",\n";
+ }
+ if (!first) sb.append("\n");
+ if (isArray) sb.append("]");
+ if (!isEmbed && isArray) sb.append("}");
+ return sb.toString();
+ }
+}
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
new file mode 100644
index 0000000000..0eeaa6a72c
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java
@@ -0,0 +1,600 @@
+/*-
+ * ============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.catalogdb.rest;
+
+/*
+Create an initial query to retrieve a VNF Resource definition (including a list of possible module types)
+within the context of a given service. Input is a vnf resource model customization ID (new field for 1702),
+or a composite key (from 1610) of service name, service version, vnf instance name
+
+Returns a structure (JSON?) containing VNF RESOURCE attributes, plus a list of VF Module structures.
+
+Query a NETWORK_RESOURCE from the MSO Catalog, based on a networkModelCustomizationUUID (new for 1702),
+a network type (unique type identifier in 1610), or based on network role within a service.
+
+Create Adapter framework for access to Catalog DB, including connection management,
+login/password access, transaction logic, etc. This can be modeled after the Request DB Adapter
+
+Update the MSO Catalog DB schema to include the new fields defined in this user story.
+
+Note that the resourceModelCustomizationUUID (or vfModuleModelCustomizationUUID) will be unique keys (indexes)
+on the VNF_RESOURCE and VF_MODULE tables respectively.
+The previously constructed "vnf-type" and "vf-module-type" field may continue to be populated,
+but should no longer be needed and can deprecate in future release.
+
+For migration, a new randomly generated UUID field may be generated for the *ModelCustomizationUUID" fields
+until such time that the model is redistributed from ASDC.
+
+All other fields Check with Mike Z for appropriate value for the vfModuleLabel.
+We might be able to derive it's value from the current vnf-type (using the "middle" piece that identifies the module type).
+
+min and initial counts can be 0. max can be null to indicate no maximum.
+
+Once the network-level distribution artifacts are defined, similar updates can be made to the NETWORK_RESOURCE table.
+*/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.GenericEntity;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.apache.http.HttpStatus;
+import org.onap.so.adapters.catalogdb.catalogrest.CatalogQuery;
+import org.onap.so.adapters.catalogdb.catalogrest.CatalogQueryException;
+import org.onap.so.adapters.catalogdb.catalogrest.CatalogQueryExceptionCategory;
+import org.onap.so.adapters.catalogdb.catalogrest.QueryAllottedResourceCustomization;
+import org.onap.so.adapters.catalogdb.catalogrest.QueryResourceRecipe;
+import org.onap.so.adapters.catalogdb.catalogrest.QueryServiceCsar;
+import org.onap.so.adapters.catalogdb.catalogrest.QueryServiceMacroHolder;
+import org.onap.so.adapters.catalogdb.catalogrest.QueryServiceNetworks;
+import org.onap.so.adapters.catalogdb.catalogrest.QueryServiceVnfs;
+import org.onap.so.adapters.catalogdb.catalogrest.QueryVfModule;
+import org.onap.so.db.catalog.beans.AllottedResource;
+import org.onap.so.db.catalog.beans.AllottedResourceCustomization;
+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.Service;
+import org.onap.so.db.catalog.beans.ToscaCsar;
+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.data.repository.AllottedResourceCustomizationRepository;
+import org.onap.so.db.catalog.data.repository.AllottedResourceRepository;
+import org.onap.so.db.catalog.data.repository.ArRecipeRepository;
+import org.onap.so.db.catalog.data.repository.NetworkRecipeRepository;
+import org.onap.so.db.catalog.data.repository.NetworkResourceCustomizationRepository;
+import org.onap.so.db.catalog.data.repository.NetworkResourceRepository;
+import org.onap.so.db.catalog.data.repository.ServiceRepository;
+import org.onap.so.db.catalog.data.repository.ToscaCsarRepository;
+import org.onap.so.db.catalog.data.repository.VFModuleRepository;
+import org.onap.so.db.catalog.data.repository.VnfCustomizationRepository;
+import org.onap.so.db.catalog.data.repository.VnfRecipeRepository;
+import org.onap.so.db.catalog.data.repository.VnfResourceRepository;
+import org.onap.so.db.catalog.rest.beans.ServiceMacroHolder;
+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 org.springframework.transaction.annotation.Transactional;
+
+/**
+ * This class services calls to the REST interface for VF Modules (http://host:port/ecomp/mso/catalog/v1)
+ * Both XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default.
+ * Requests respond synchronously only
+ */
+@Path("/{version: v[0-9]+}")
+@Component
+public class CatalogDbAdapterRest {
+ private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA,CatalogDbAdapterRest.class);
+ private static final boolean IS_ARRAY = true;
+
+ @Autowired
+ private VnfCustomizationRepository vnfCustomizationRepo;
+
+ @Autowired
+ private ServiceRepository serviceRepo;
+
+ @Autowired
+ private NetworkResourceCustomizationRepository networkCustomizationRepo;
+
+ @Autowired
+ private NetworkResourceRepository networkResourceRepo;
+
+ @Autowired
+ private AllottedResourceCustomizationRepository allottedCustomizationRepo;
+
+ @Autowired
+ private ToscaCsarRepository toscaCsarRepo;
+
+ @Autowired
+ private VFModuleRepository vfModuleRepo;
+
+ @Autowired
+ private VnfRecipeRepository vnfRecipeRepo;
+
+ @Autowired
+ private NetworkRecipeRepository networkRecipeRepo;
+
+ @Autowired
+ private ArRecipeRepository arRecipeRepo;
+
+ @Autowired
+ private VnfResourceRepository vnfResourceRepo;
+
+ @Autowired
+ private AllottedResourceRepository arResourceRepo;
+
+ private static final String NO_MATCHING_PARAMETERS = "no matching parameters";
+
+ public Response respond(String version, int respStatus, boolean isArray, CatalogQuery qryResp) {
+ return Response
+ .status(respStatus)
+ //.entity(new GenericEntity<QueryServiceVnfs>(qryResp) {})
+ .entity(qryResp.toJsonString(version, isArray))
+ .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+ .build();
+ }
+
+ @GET
+ @Path("vnfResources/{vnfModelCustomizationUuid}")
+ @Transactional( readOnly = true)
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ public Response serviceVnfs (
+ @PathParam("version") String version,
+ @PathParam("vnfModelCustomizationUuid") String vnfUuid
+ ) {
+ return serviceVnfsImpl (version, !IS_ARRAY, vnfUuid, null, null, null, null);
+ }
+
+ @GET
+ @Path("serviceVnfs")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ @Transactional( readOnly = true)
+ public Response serviceVnfs(
+ @PathParam("version") String version,
+ @QueryParam("vnfModelCustomizationUuid") String vnfUuid,
+ @QueryParam("serviceModelUuid") String smUuid,
+ @QueryParam("serviceModelInvariantUuid") String smiUuid,
+ @QueryParam("serviceModelVersion") String smVer,
+ @QueryParam("serviceModelName") String smName
+ ) {
+ return serviceVnfsImpl (version, IS_ARRAY, vnfUuid, smUuid, smiUuid, smVer, smName);
+ }
+
+ public Response serviceVnfsImpl(String version, boolean isArray, String vnfUuid, String serviceModelUUID, String smiUuid, String smVer, String smName) {
+ QueryServiceVnfs qryResp = null;
+ int respStatus = HttpStatus.SC_OK;
+ List<VnfResourceCustomization> ret = new ArrayList<>();
+ Service service = null;
+ try {
+ if (vnfUuid != null && !"".equals(vnfUuid))
+ ret = vnfCustomizationRepo.findByModelCustomizationUUID(vnfUuid);
+ else if (serviceModelUUID != null && !"".equals(serviceModelUUID))
+ service = serviceRepo.findFirstOneByModelUUIDOrderByModelVersionDesc(serviceModelUUID);
+ else if (smiUuid != null && !"".equals(smiUuid))
+ if (smVer != null && !"".equals(smVer))
+ service = serviceRepo.findByModelVersionAndModelInvariantUUID(smVer,smiUuid);
+ else
+ service = serviceRepo.findFirstByModelInvariantUUIDOrderByModelVersionDesc(smiUuid);
+ else if (smName != null && !"".equals(smName)) {
+ if (smVer != null && !"".equals(smVer))
+ service = serviceRepo.findByModelNameAndModelVersion(smName, smVer);
+ else
+ service = serviceRepo.findFirstByModelNameOrderByModelVersionDesc(smName);
+ }
+ else {
+ throw(new Exception(NO_MATCHING_PARAMETERS));
+ }
+
+ if (service == null && ret.isEmpty()) {
+ respStatus = HttpStatus.SC_NOT_FOUND;
+ qryResp = new QueryServiceVnfs();
+ }else if( service == null && !ret.isEmpty()){
+ qryResp = new QueryServiceVnfs(ret);
+ } else if (service != null) {
+ qryResp = new QueryServiceVnfs(service.getVnfCustomizations());
+ }
+ LOGGER.debug ("serviceVnfs qryResp="+ qryResp);
+ return respond(version, respStatus, isArray, qryResp);
+ } catch (Exception e) {
+ LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR, "", "", "queryServiceVnfs", MsoLogger.ErrorCode.BusinessProcesssError, "Exception - queryServiceVnfs", e);
+ CatalogQueryException excResp = new CatalogQueryException(e.getMessage(), CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null);
+ return Response
+ .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
+ .entity(new GenericEntity<CatalogQueryException>(excResp) {})
+ .build();
+ }
+ }
+
+ @GET
+ @Path("networkResources/{networkModelCustomizationUuid}")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ @Transactional( readOnly = true)
+ public Response serviceNetworks (
+ @PathParam("version") String version,
+ @PathParam("networkModelCustomizationUuid") String nUuid
+ ) {
+ return serviceNetworksImpl (version, !IS_ARRAY, nUuid, null, null, null, null);
+ }
+
+ @GET
+ @Path("serviceNetworks")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ @Transactional( readOnly = true)
+ public Response serviceNetworks (
+ @PathParam("version") String version,
+ @QueryParam("networkModelCustomizationUuid") String networkModelCustomizationUuid,
+ @QueryParam("networkType") String networkType,
+ @QueryParam("networkModelName") String networkModelName,
+ @QueryParam("serviceModelUuid") String serviceModelUuid,
+ @QueryParam("serviceModelInvariantUuid") String serviceModelInvariantUuid,
+ @QueryParam("serviceModelVersion") String serviceModelVersion,
+ @QueryParam("networkModelVersion") String networkModelVersion
+ ) {
+ if (networkModelName != null && !"".equals(networkModelName)) {
+ networkType = networkModelName;
+ }
+ return serviceNetworksImpl (version, IS_ARRAY, networkModelCustomizationUuid, networkType, serviceModelUuid, serviceModelInvariantUuid, serviceModelVersion);
+ }
+
+ public Response serviceNetworksImpl (String version, boolean isArray, String networkModelCustomizationUuid, String networkType, String serviceModelUuid, String serviceModelInvariantUuid, String serviceModelVersion) {
+ QueryServiceNetworks qryResp;
+ int respStatus = HttpStatus.SC_OK;
+ String uuid = "";
+ List<NetworkResourceCustomization> ret = new ArrayList<>();
+ Service service = null;
+
+ try{
+ if (networkModelCustomizationUuid != null && !"".equals(networkModelCustomizationUuid)) {
+ uuid = networkModelCustomizationUuid;
+ ret = networkCustomizationRepo.findByModelCustomizationUUID(networkModelCustomizationUuid);
+ }else if (networkType != null && !"".equals(networkType)) {
+ uuid = networkType;
+ NetworkResource networkResources = networkResourceRepo.findFirstByModelNameOrderByModelVersionDesc(networkType);
+ if(networkResources != null)
+ ret=networkResources.getNetworkResourceCustomization();
+ }
+ else if (serviceModelInvariantUuid != null && !"".equals(serviceModelInvariantUuid)) {
+ uuid = serviceModelInvariantUuid;
+ if (serviceModelVersion != null && !"".equals(serviceModelVersion)) {
+ service = serviceRepo.findByModelVersionAndModelInvariantUUID(serviceModelVersion, uuid);
+ }
+ else {
+ service = serviceRepo.findFirstByModelInvariantUUIDOrderByModelVersionDesc(uuid);
+ }
+ }else if (serviceModelUuid != null && !"".equals(serviceModelUuid)) {
+ uuid = serviceModelUuid;
+ service = serviceRepo.findOneByModelUUID(serviceModelUuid);
+ }
+ else {
+ throw(new Exception(NO_MATCHING_PARAMETERS));
+ }
+
+ if(service != null)
+ ret = service.getNetworkCustomizations();
+
+ if (ret == null || ret.isEmpty()) {
+ LOGGER.debug ("serviceNetworks not found");
+ respStatus = HttpStatus.SC_NOT_FOUND;
+ qryResp = new QueryServiceNetworks();
+ } else {
+ LOGGER.debug ("serviceNetworks found");
+ qryResp = new QueryServiceNetworks(ret);
+ LOGGER.debug ("serviceNetworks qryResp="+ qryResp);
+ }
+ LOGGER.debug ("Query serviceNetworks exit");
+ return respond(version, respStatus, isArray, qryResp);
+ } catch (Exception e) {
+ LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR, uuid, "", "queryServiceNetworks", MsoLogger.ErrorCode.BusinessProcesssError, "Exception - queryServiceNetworks", e);
+ CatalogQueryException excResp = new CatalogQueryException(e.getMessage(), CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null);
+ return Response
+ .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
+ .entity(new GenericEntity<CatalogQueryException>(excResp) {})
+ .build();
+ }
+ }
+
+ @GET
+ @Path("serviceResources")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ @Transactional(readOnly = true)
+ public Response serviceResources(
+ @PathParam("version") String version,
+ @QueryParam("serviceModelUuid") String modelUUID,
+ @QueryParam("serviceModelInvariantUuid") String modelInvariantUUID,
+ @QueryParam("serviceModelVersion") String modelVersion) {
+ QueryServiceMacroHolder qryResp;
+ int respStatus = HttpStatus.SC_OK;
+ String uuid = "";
+ ServiceMacroHolder ret = new ServiceMacroHolder();
+
+ try{
+ if (modelUUID != null && !"".equals(modelUUID)) {
+ uuid = modelUUID;
+ LOGGER.debug ("Query serviceMacroHolder getAllResourcesByServiceModelUuid serviceModelUuid: " + uuid);
+ Service serv =serviceRepo.findOneByModelUUID(uuid);
+ ret.setService(serv);
+ }
+ else if (modelInvariantUUID != null && !"".equals(modelInvariantUUID)) {
+ uuid = modelInvariantUUID;
+ if (modelVersion != null && !"".equals(modelVersion)) {
+ LOGGER.debug ("Query serviceMacroHolder getAllResourcesByServiceModelInvariantUuid serviceModelInvariantUuid: " + uuid+ " serviceModelVersion: "+ modelVersion);
+ Service serv = serviceRepo.findByModelVersionAndModelInvariantUUID(modelVersion, uuid);
+ ret.setService(serv);
+ }
+ else {
+ LOGGER.debug ("Query serviceMacroHolder getAllResourcesByServiceModelInvariantUuid serviceModelUuid: " + uuid);
+ Service serv = serviceRepo.findFirstByModelInvariantUUIDOrderByModelVersionDesc(uuid);
+ ret.setService(serv);
+ }
+ }
+ else {
+ throw(new Exception(NO_MATCHING_PARAMETERS));
+ }
+
+ if (ret.getService() == null) {
+ LOGGER.debug ("serviceMacroHolder not found");
+ respStatus = HttpStatus.SC_NOT_FOUND;
+ qryResp = new QueryServiceMacroHolder();
+ } else {
+ LOGGER.debug ("serviceMacroHolder found");
+ qryResp = new QueryServiceMacroHolder(ret);
+ LOGGER.debug ("serviceMacroHolder qryResp="+ qryResp);
+ }
+ LOGGER.debug ("Query serviceMacroHolder exit");
+ return respond(version, respStatus, IS_ARRAY, qryResp);
+ } catch (Exception e) {
+ LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR, uuid, "", "queryServiceMacroHolder", MsoLogger.ErrorCode.BusinessProcesssError, "Exception - queryServiceMacroHolder", e);
+ CatalogQueryException excResp = new CatalogQueryException(e.getMessage(), CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null);
+ return Response
+ .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
+ .entity(new GenericEntity<CatalogQueryException>(excResp){} )
+ .build();
+ }
+ }
+
+
+ @GET
+ @Path("allottedResources/{arModelCustomizationUuid}")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ @Transactional( readOnly = true)
+ public Response serviceAllottedResources (
+ @PathParam("version") String version,
+ @PathParam("arModelCustomizationUuid") String aUuid
+ ) {
+ return serviceAllottedResourcesImpl(version, !IS_ARRAY, aUuid, null, null, null);
+ }
+
+ @GET
+ @Path("serviceAllottedResources")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ @Transactional( readOnly = true)
+ public Response serviceAllottedResources(
+ @PathParam("version") String version,
+ @QueryParam("serviceModelUuid") String smUuid,
+ @QueryParam("serviceModelInvariantUuid") String smiUuid,
+ @QueryParam("serviceModelVersion") String smVer,
+ @QueryParam("arModelCustomizationUuid") String aUuid
+ ) {
+ return serviceAllottedResourcesImpl(version, IS_ARRAY, aUuid, smUuid, smiUuid, smVer);
+ }
+
+ public Response serviceAllottedResourcesImpl(String version, boolean isArray, String aUuid, String smUuid, String serviceModelInvariantUuid, String smVer) {
+ QueryAllottedResourceCustomization qryResp;
+ int respStatus = HttpStatus.SC_OK;
+ String uuid = "";
+ List<AllottedResourceCustomization> ret = new ArrayList<>();
+ Service service = null;
+ try{
+ if (smUuid != null && !"".equals(smUuid)) {
+ uuid = smUuid;
+ service = serviceRepo.findFirstOneByModelUUIDOrderByModelVersionDesc(uuid);
+ }
+ else if (serviceModelInvariantUuid != null && !"".equals(serviceModelInvariantUuid)) {
+ uuid = serviceModelInvariantUuid;
+ if (smVer != null && !"".equals(smVer)) {
+ service = serviceRepo.findByModelVersionAndModelInvariantUUID(smVer, uuid);
+ }
+ else {
+ service = serviceRepo.findFirstByModelInvariantUUIDOrderByModelVersionDesc(uuid);
+ }
+ }
+ else if (aUuid != null && !"".equals(aUuid)) {
+ uuid = aUuid;
+ ret = allottedCustomizationRepo.findByModelCustomizationUUID(uuid);
+ }
+ else {
+ throw(new Exception(NO_MATCHING_PARAMETERS));
+ }
+
+ if(service != null)
+ ret=service.getAllottedCustomizations();
+
+ if (ret == null || ret.isEmpty()) {
+ LOGGER.debug ("AllottedResourceCustomization not found");
+ respStatus = HttpStatus.SC_NOT_FOUND;
+ qryResp = new QueryAllottedResourceCustomization();
+ } else {
+ qryResp = new QueryAllottedResourceCustomization(ret);
+ LOGGER.debug ("AllottedResourceCustomization qryResp="+ qryResp);
+ }
+ return respond(version, respStatus, isArray, qryResp);
+ } catch (Exception e) {
+ LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR, uuid, "", "queryAllottedResourceCustomization", MsoLogger.ErrorCode.BusinessProcesssError, "Exception - queryAllottedResourceCustomization", e);
+ CatalogQueryException excResp = new CatalogQueryException(e.getMessage(), CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null);
+ return Response
+ .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
+ .entity(new GenericEntity<CatalogQueryException>(excResp) {})
+ .build();
+ }
+ }
+
+ @GET
+ @Path("vfModules")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ @Transactional( readOnly = true)
+ public Response vfModules(@QueryParam("vfModuleModelName") String vfModuleModelName) {
+ QueryVfModule qryResp;
+ int respStatus = HttpStatus.SC_OK;
+ List<VfModuleCustomization> ret = null;
+ try{
+ if(vfModuleModelName != null && !"".equals(vfModuleModelName)){
+ VfModule vfModule = vfModuleRepo.findFirstByModelNameOrderByModelVersionDesc(vfModuleModelName);
+ if(vfModule != null)
+ ret = vfModule.getVfModuleCustomization();
+ }else{
+ throw(new Exception(NO_MATCHING_PARAMETERS));
+ }
+
+ if(ret == null || ret.isEmpty()){
+ LOGGER.debug ("vfModules not found");
+ respStatus = HttpStatus.SC_NOT_FOUND;
+ qryResp = new QueryVfModule();
+ }else{
+ qryResp = new QueryVfModule(ret);
+ LOGGER.debug ("vfModules tojsonstring is: "+ qryResp.JSON2(false, false));
+ }
+ return Response
+ .status(respStatus)
+ .entity(qryResp.JSON2(false, false))
+ .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+ .build();
+ }catch(Exception e){
+ LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR, vfModuleModelName, "", "queryVfModules", MsoLogger.ErrorCode.BusinessProcesssError, "Exception during query VfModules by vfModuleModuleName: ", e);
+ CatalogQueryException excResp = new CatalogQueryException(e.getMessage(), CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null);
+ return Response
+ .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
+ .entity(new GenericEntity<CatalogQueryException>(excResp) {})
+ .build();
+ }
+ }
+ /**
+ * Get the tosca csar info from catalog
+ * <br>
+ *
+ * @param smUuid service model uuid
+ * @return the tosca csar information of the serivce.
+ * @since ONAP Beijing Release
+ */
+ @GET
+ @Path("serviceToscaCsar")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ public Response serviceToscaCsar(@QueryParam("serviceModelUuid") String smUuid) {
+ int respStatus = HttpStatus.SC_OK;
+ String entity = "";
+ try {
+ if (smUuid != null && !"".equals(smUuid)) {
+ LOGGER.debug("Query Csar by service model uuid: " + smUuid);
+ ToscaCsar toscaCsar = toscaCsarRepo.findOne(smUuid);
+ if (toscaCsar != null) {
+ QueryServiceCsar serviceCsar = new QueryServiceCsar(toscaCsar);
+ entity = serviceCsar.JSON2(false, false);
+ } else {
+ respStatus = HttpStatus.SC_NOT_FOUND;
+ }
+ } else {
+ throw (new Exception("Incoming parameter is null or blank"));
+ }
+ LOGGER.debug("Query Csar exit");
+ return Response
+ .status(respStatus)
+ .entity(entity)
+ .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+ .build();
+ } catch (Exception e) {
+ LOGGER.error(MessageEnum.RA_QUERY_VNF_ERR, smUuid, "", "ServiceToscaCsar",
+ MsoLogger.ErrorCode.BusinessProcesssError, "Exception during query csar by service model uuid: ", e);
+ CatalogQueryException excResp = new CatalogQueryException(e.getMessage(),
+ CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null);
+ return Response
+ .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
+ .entity(new GenericEntity<CatalogQueryException>(excResp) {
+ })
+ .build();
+ }
+ }
+
+ /**
+ * Get the resource recipe info from catalog
+ * <br>
+ *
+ * @param rmUuid resource model uuid
+ * @return the recipe information of the resource.
+ * @since ONAP Beijing Release
+ */
+ @GET
+ @Path("resourceRecipe")
+ @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+ public Response resourceRecipe(@QueryParam("resourceModelUuid") String rmUuid, @QueryParam("action") String action) {
+ int respStatus = HttpStatus.SC_OK;
+ String entity = "";
+ try {
+ if (rmUuid != null && !"".equals(rmUuid)) {
+ LOGGER.debug("Query recipe by resource model uuid: " + rmUuid);
+ //check vnf and network and ar, the resource could be any resource.
+ VnfResource vnf = vnfResourceRepo.findResourceByModelUUID(rmUuid);
+ Recipe recipe = vnfRecipeRepo.findVnfRecipeByNfRoleAndAction(vnf.getModelName(), action);
+ if (null == recipe) {
+ NetworkResource nResource = networkResourceRepo.findResourceByModelUUID(rmUuid);
+ recipe = networkRecipeRepo.findByModelNameAndAction(nResource.getModelName(), action);
+ }
+ if (null == recipe) {
+ AllottedResource arResource = arResourceRepo.findResourceByModelUUID(rmUuid);
+ recipe = arRecipeRepo.findByModelNameAndAction(arResource.getModelName(), action);
+ }
+ if (recipe != null) {
+ QueryResourceRecipe resourceRecipe = new QueryResourceRecipe(recipe);
+ entity = resourceRecipe.JSON2(false, false);
+ } else {
+ respStatus = HttpStatus.SC_NOT_FOUND;
+ }
+ } else {
+ throw (new Exception("Incoming parameter is null or blank"));
+ }
+ LOGGER.debug("Query recipe exit");
+ return Response
+ .status(respStatus)
+ .entity(entity)
+ .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+ .build();
+ } catch (Exception e) {
+ LOGGER.error(MessageEnum.RA_QUERY_VNF_ERR, rmUuid, "", "resourceRecipe",
+ MsoLogger.ErrorCode.BusinessProcesssError, "Exception during query recipe by resource model uuid: ", e);
+ CatalogQueryException excResp = new CatalogQueryException(e.getMessage(),
+ CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null);
+ return Response
+ .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
+ .entity(new GenericEntity<CatalogQueryException>(excResp) {
+ })
+ .build();
+ }
+ }
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/package-info.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/package-info.java
new file mode 100644
index 0000000000..8f75008aef
--- /dev/null
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/package-info.java
@@ -0,0 +1,28 @@
+/*-
+ * ============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.catalogdb.rest;