aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap
diff options
context:
space:
mode:
authorakanshad <akansha.dua@amdocs.com>2019-03-14 18:19:26 +0530
committerakanshad <akansha.dua@amdocs.com>2019-03-15 17:05:41 +0530
commit61bc7f0724de5df59d70ec32c8f11f62e7c42feb (patch)
tree12f157c4794083f7f9a38495f03f0de91ff77a6c /src/main/java/org/onap
parent6df9f124121aa094bc69fddbe6840b278bdfc8e1 (diff)
Service Catalog - json schema reference
Issue-ID: EXTAPI-105 Change-Id: I4877636508135a2f7a77dab86dbe6a126070e9ff Signed-off-by: akanshad <akansha.dua@amdocs.com>
Diffstat (limited to 'src/main/java/org/onap')
-rw-r--r--src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationDBManager.java87
-rw-r--r--src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationResource.java10
-rw-r--r--src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationService.java55
-rw-r--r--src/main/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessor.java88
-rw-r--r--src/main/java/org/onap/nbi/apis/servicecatalog/model/ServiceSpecification.java56
-rw-r--r--src/main/java/org/onap/nbi/apis/servicecatalog/model/SpecificationInputSchema.java54
-rw-r--r--src/main/java/org/onap/nbi/apis/servicecatalog/repositories/ServiceSpecificationRepository.java22
-rw-r--r--src/main/java/org/onap/nbi/apis/servicecatalog/repositories/SpecificationInputSchemaRepository.java24
8 files changed, 363 insertions, 33 deletions
diff --git a/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationDBManager.java b/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationDBManager.java
new file mode 100644
index 0000000..466611d
--- /dev/null
+++ b/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationDBManager.java
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2019 Amdocs
+ *
+ * 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.
+ */
+package org.onap.nbi.apis.servicecatalog;
+
+import org.onap.nbi.apis.servicecatalog.model.ServiceSpecification;
+import org.onap.nbi.apis.servicecatalog.model.SpecificationInputSchema;
+import org.onap.nbi.apis.servicecatalog.repositories.ServiceSpecificationRepository;
+import org.onap.nbi.apis.servicecatalog.repositories.SpecificationInputSchemaRepository;
+import org.onap.nbi.exceptions.TechnicalException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Optional;
+
+@Service
+public class ServiceSpecificationDBManager {
+
+ @Autowired
+ ServiceSpecificationRepository serviceSpecificationRepository;
+
+ @Autowired
+ SpecificationInputSchemaRepository specificationInputSchemaRepository;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ServiceSpecificationService.class);
+
+ public void saveCatalogResponse(LinkedHashMap serviceCatalogResponse) {
+
+ ServiceSpecification serviceSpecification = new ServiceSpecification();
+ serviceSpecification.setId((String) serviceCatalogResponse.get("id"));
+ serviceSpecification.setCatalogResponse(serviceCatalogResponse);
+ serviceSpecificationRepository.save(serviceSpecification);
+
+ }
+
+ public boolean checkServiceSpecExistence(String serviceSpecId) {
+
+ return serviceSpecificationRepository.existsById(serviceSpecId);
+ }
+
+ public Map getServiceSpecification(String serviceSpecId) {
+
+ Optional<ServiceSpecification> optionalServiceSpecification = serviceSpecificationRepository.findById(serviceSpecId);
+ if(!optionalServiceSpecification.isPresent()) {
+ throw new TechnicalException("Unable get service specification");
+ }else {
+ return optionalServiceSpecification.get().getCatalogResponse();
+ }
+ }
+
+ public boolean checkInputSchemaExistence(String serviceSpecId) {
+ return specificationInputSchemaRepository.existsById(serviceSpecId);
+ }
+
+ public String getInputSchema(String serviceSpecId) {
+ Optional<SpecificationInputSchema> optionalSpecificationInputSchema = specificationInputSchemaRepository.findById(serviceSpecId);
+ if(!optionalSpecificationInputSchema.isPresent()) {
+ throw new TechnicalException("Unable get specification input schema");
+ }else {
+ return optionalSpecificationInputSchema.get().getSpecificationSchemaJson();
+ }
+ }
+
+ public void saveSpecificationInputSchema(String svcCharacteristicsJson, Map serviceCatalogResponse) {
+ SpecificationInputSchema specificationInputSchema = new SpecificationInputSchema();
+ specificationInputSchema.setId((String) serviceCatalogResponse.get("id"));
+ specificationInputSchema.setSpecificationSchemaJson(svcCharacteristicsJson);
+ specificationInputSchemaRepository.save(specificationInputSchema);
+
+ }
+}
diff --git a/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationResource.java b/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationResource.java
index e8ef9e3..6484672 100644
--- a/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationResource.java
+++ b/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationResource.java
@@ -40,7 +40,7 @@ public class ServiceSpecificationResource extends ResourceManagement {
@GetMapping(value = "/{serviceSpecId}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> getServiceSpecification(@PathVariable String serviceSpecId,
- @RequestParam MultiValueMap<String, String> params) {
+ @RequestParam MultiValueMap<String, String> params) {
Map response = serviceSpecificationService.get(serviceSpecId);
JsonRepresentation filter = new JsonRepresentation(params);
if (response.get("serviceSpecCharacteristic") != null) {
@@ -58,4 +58,12 @@ public class ServiceSpecificationResource extends ResourceManagement {
return this.findResponse(response, filter, null);
}
+ @GetMapping(value = "/{serviceSpecId}/specificationInputSchema", produces = MediaType.APPLICATION_JSON_VALUE)
+ public ResponseEntity<Object> findSpecificationInputSchema(@PathVariable String serviceSpecId,
+ @RequestParam MultiValueMap<String,String> params) {
+ String response = serviceSpecificationService.getInputSchema(serviceSpecId);
+ JsonRepresentation filter = new JsonRepresentation(params);
+ return this.getResponse(response, filter);
+ }
+
}
diff --git a/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationService.java b/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationService.java
index 5e3e4cf..8f0829b 100644
--- a/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationService.java
+++ b/src/main/java/org/onap/nbi/apis/servicecatalog/ServiceSpecificationService.java
@@ -50,33 +50,39 @@ public class ServiceSpecificationService {
@Autowired
private ServiceCatalogUrl serviceCatalogUrl;
+ @Autowired
+ ServiceSpecificationDBManager serviceSpecificationDBManager;
private static final Logger LOGGER = LoggerFactory.getLogger(ServiceSpecificationService.class);
-
public Map get(String serviceSpecId) {
- Map sdcResponse = sdcClient.callGet(serviceSpecId);
- LinkedHashMap serviceCatalogResponse =
- (LinkedHashMap) getServiceSpecJsonTransformer.transform(sdcResponse);
- String toscaModelUrl = (String) sdcResponse.get("toscaModelURL");
- String serviceId = (String) sdcResponse.get("id");
- File toscaFile = sdcClient.callGetWithAttachment(toscaModelUrl);
- Path pathToToscaCsar = toscaFile.toPath().toAbsolutePath();
- try {
- toscaInfosProcessor.buildResponseWithSdcToscaParser(pathToToscaCsar, serviceCatalogResponse);
- } catch (SdcToscaParserException e) {
- LOGGER.debug("unable to build response from tosca csar using sdc-parser, partial response : "
- + pathToToscaCsar.toString() + " " + e.getMessage());
- }
- try {
- if (toscaFile != null) {
- LOGGER.debug("deleting tosca archive : " + toscaFile.getName());
- FileUtils.forceDelete(toscaFile);
+ if(serviceSpecificationDBManager.checkServiceSpecExistence(serviceSpecId)) {
+ return serviceSpecificationDBManager.getServiceSpecification(serviceSpecId);
+ }else {
+ Map sdcResponse = sdcClient.callGet(serviceSpecId);
+ LinkedHashMap serviceCatalogResponse =
+ (LinkedHashMap) getServiceSpecJsonTransformer.transform(sdcResponse);
+ String toscaModelUrl = (String) sdcResponse.get("toscaModelURL");
+ String serviceId = (String) sdcResponse.get("id");
+ File toscaFile = sdcClient.callGetWithAttachment(toscaModelUrl);
+ Path pathToToscaCsar = toscaFile.toPath().toAbsolutePath();
+ try {
+ toscaInfosProcessor.buildAndSaveResponseWithSdcToscaParser(pathToToscaCsar, serviceCatalogResponse);
+ serviceSpecificationDBManager.saveCatalogResponse(serviceCatalogResponse);
+ } catch (SdcToscaParserException e) {
+ LOGGER.debug("unable to build response from tosca csar using sdc-parser, partial response : "
+ + pathToToscaCsar.toString() + " " + e.getMessage());
+ }
+ try {
+ if (toscaFile != null) {
+ LOGGER.debug("deleting tosca archive : " + toscaFile.getName());
+ FileUtils.forceDelete(toscaFile);
+ }
+ } catch (IOException e) {
+ LOGGER.error("unable to delete temp directory tosca file for id : " + serviceId, e);
}
- } catch (IOException e) {
- LOGGER.error("unable to delete temp directory tosca file for id : " + serviceId, e);
+ return serviceCatalogResponse;
}
- return serviceCatalogResponse;
}
public List<LinkedHashMap> find(MultiValueMap<String, String> parametersMap) {
@@ -87,4 +93,11 @@ public class ServiceSpecificationService {
}
return serviceCatalogResponse;
}
+ public String getInputSchema(String serviceSpecId) {
+ if(serviceSpecificationDBManager.checkInputSchemaExistence(serviceSpecId)) {
+ return serviceSpecificationDBManager.getInputSchema(serviceSpecId);
+ } else {
+ return null;
+ }
+ }
}
diff --git a/src/main/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessor.java b/src/main/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessor.java
index fff4444..fc0494f 100644
--- a/src/main/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessor.java
+++ b/src/main/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessor.java
@@ -14,10 +14,9 @@
package org.onap.nbi.apis.servicecatalog;
import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+
+import io.swagger.util.Json;
import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
@@ -29,6 +28,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import io.swagger.models.Model;
+import io.swagger.models.ModelImpl;
+import io.swagger.models.properties.Property;
+import io.swagger.models.properties.PropertyBuilder;
@Service
public class ToscaInfosProcessor {
@@ -36,14 +39,15 @@ public class ToscaInfosProcessor {
@Autowired
SdcClient sdcClient;
+ @Autowired
+ private ServiceSpecificationDBManager serviceSpecificationDBManager;
+
final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // jackson databind
private static final Logger LOGGER = LoggerFactory.getLogger(ToscaInfosProcessor.class);
-
-
public void buildResponseWithSdcToscaParser(Path path, Map serviceCatalogResponse)
- throws SdcToscaParserException {
+ throws SdcToscaParserException {
SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
ISdcCsarHelper sdcCsarHelper = factory.getSdcCsarHelper(path.toFile().getAbsolutePath(), false);
@@ -62,7 +66,7 @@ public class ToscaInfosProcessor {
// If this Input has a default value, then put it in serviceSpecCharacteristicValue
if (input.getDefault() != null) {
List<LinkedHashMap> serviceSpecCharacteristicValues =
- buildServiceSpecCharacteristicsValuesFromSdc(input);
+ buildServiceSpecCharacteristicsValuesFromSdc(input);
mapParameter.put("serviceSpecCharacteristicValue", serviceSpecCharacteristicValues);
}
serviceSpecCharacteristic.add(mapParameter);
@@ -72,7 +76,7 @@ public class ToscaInfosProcessor {
List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
List<LinkedHashMap> resourceSpecifications =
- (List<LinkedHashMap>) serviceCatalogResponse.get("resourceSpecification");
+ (List<LinkedHashMap>) serviceCatalogResponse.get("resourceSpecification");
for (LinkedHashMap resourceSpecification : resourceSpecifications) {
if (resourceSpecification.get("id") != null) {
String id = (String) resourceSpecification.get("id");
@@ -87,12 +91,11 @@ public class ToscaInfosProcessor {
if (nodeTemplate == null)
continue;
resourceSpecification.put("modelCustomizationId",
- sdcCsarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
+ sdcCsarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
}
}
}
-
private List<LinkedHashMap> buildServiceSpecCharacteristicsValuesFromSdc(Input input) {
List<LinkedHashMap> serviceSpecCharacteristicValues = new ArrayList<>();
@@ -106,4 +109,67 @@ public class ToscaInfosProcessor {
return serviceSpecCharacteristicValues;
}
+ public void buildAndSaveResponseWithSdcToscaParser(Path path, Map serviceCatalogResponse) throws SdcToscaParserException {
+
+ SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
+ ISdcCsarHelper sdcCsarHelper = factory.getSdcCsarHelper(path.toFile().getAbsolutePath(), false);
+ List<Input> inputs = sdcCsarHelper.getServiceInputs();
+
+ Map<String, Model> definitions = new HashMap<String,Model>();
+ Model model = new ModelImpl();
+
+ if (inputs != null && inputs.size() > 0) {
+ for (Input input : inputs) {
+ Property property = PropertyBuilder.build(input.getType(), null, null);
+ property.setDescription(input.getDescription());
+ property.setRequired(input.isRequired());
+
+ if (input.getDefault() != null) {
+ property.setDefault(input.getDefault().toString());
+ }
+ ((ModelImpl) model).addProperty(input.getName(), property);
+ }
+ definitions.put("ServiceCharacteristics", model);
+
+ }
+
+ String svcCharacteristicsJson = Json.pretty(definitions);
+ serviceSpecificationDBManager.saveSpecificationInputSchema(svcCharacteristicsJson,serviceCatalogResponse);
+
+ LinkedHashMap inputSchemaRef = new LinkedHashMap();
+ inputSchemaRef.put("valueType","Object");
+ inputSchemaRef.put("@schemaLocation","/serviceSpecification/"+serviceCatalogResponse.get("id")+"/specificationInputSchema");
+ inputSchemaRef.put("@type",serviceCatalogResponse.get("name") + "_ServiceCharacteristic");
+
+ LinkedHashMap serviceSpecCharacteristic = new LinkedHashMap();
+ serviceSpecCharacteristic.put("name",serviceCatalogResponse.get("name") + "_ServiceCharacteristics");
+ serviceSpecCharacteristic.put("description","This object describes all the inputs needed from the client to interact with the " + serviceCatalogResponse.get("name") + " Service Topology");
+ serviceSpecCharacteristic.put("valueType", "Object");
+ serviceSpecCharacteristic.put("@type","ONAPServiceCharacteristic");
+ serviceSpecCharacteristic.put("@schemaLocation", "null");
+ serviceSpecCharacteristic.put("serviceSpecCharacteristicValue",inputSchemaRef);
+
+ serviceCatalogResponse.put("serviceSpecCharacteristic",serviceSpecCharacteristic);
+
+ List<NodeTemplate> nodeTemplates = sdcCsarHelper.getServiceNodeTemplates();
+ List<LinkedHashMap> resourceSpecifications =
+ (List<LinkedHashMap>) serviceCatalogResponse.get("resourceSpecification");
+ for (LinkedHashMap resourceSpecification : resourceSpecifications) {
+ if (resourceSpecification.get("id") != null) {
+ String id = (String) resourceSpecification.get("id");
+ LOGGER.debug("get tosca infos for service id: {}", id);
+ NodeTemplate nodeTemplate = null;
+ for (NodeTemplate node : nodeTemplates) {
+ if (node.getMetaData().getValue("UUID").equals(id)) {
+ nodeTemplate = node;
+ break;
+ }
+ }
+ if (nodeTemplate == null)
+ continue;
+ resourceSpecification.put("modelCustomizationId", sdcCsarHelper.getNodeTemplateCustomizationUuid(nodeTemplate));
+ }
+ }
+ }
+
}
diff --git a/src/main/java/org/onap/nbi/apis/servicecatalog/model/ServiceSpecification.java b/src/main/java/org/onap/nbi/apis/servicecatalog/model/ServiceSpecification.java
new file mode 100644
index 0000000..c88cc65
--- /dev/null
+++ b/src/main/java/org/onap/nbi/apis/servicecatalog/model/ServiceSpecification.java
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2019 Amdocs
+ *
+ * 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.
+ */
+package org.onap.nbi.apis.servicecatalog.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.onap.nbi.commons.Resource;
+import org.springframework.data.annotation.Id;
+
+import java.util.Map;
+
+@ApiModel
+public class ServiceSpecification implements Resource {
+
+ @Id
+ @JsonProperty("id")
+ private String id = null;
+
+ @JsonProperty("catalogResponse")
+ private Map catalogResponse = null;
+
+ @Override
+ @JsonProperty("id")
+ @ApiModelProperty(required = true, value = "uuid for the service specification")
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @JsonProperty("catalogResponse")
+ @ApiModelProperty(required = true, value = "catalogResponse for the corresponding service uuid")
+ public Map getCatalogResponse() {
+ return catalogResponse;
+ }
+
+ public void setCatalogResponse(Map catalogResponse) {
+ this.catalogResponse = catalogResponse;
+ }
+}
diff --git a/src/main/java/org/onap/nbi/apis/servicecatalog/model/SpecificationInputSchema.java b/src/main/java/org/onap/nbi/apis/servicecatalog/model/SpecificationInputSchema.java
new file mode 100644
index 0000000..e4e85d7
--- /dev/null
+++ b/src/main/java/org/onap/nbi/apis/servicecatalog/model/SpecificationInputSchema.java
@@ -0,0 +1,54 @@
+/**
+ * Copyright (c) 2019 Amdocs
+ *
+ * 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.
+ */
+package org.onap.nbi.apis.servicecatalog.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.onap.nbi.commons.Resource;
+import org.springframework.data.annotation.Id;
+
+@ApiModel
+ public class SpecificationInputSchema implements Resource {
+
+
+ @Id
+ @JsonProperty("id")
+ private String id = null;
+
+ @JsonProperty("schema")
+ private String specificationSchemaJson = null;
+
+ @Override
+ @JsonProperty("id")
+ @ApiModelProperty(required = true, value = "uuid for the specification input schema")
+ public String getId() {
+ return id;
+ }
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @JsonProperty("schema")
+ @ApiModelProperty(required = true, value = "Input schema for the service")
+ public String getSpecificationSchemaJson() {
+ return specificationSchemaJson;
+ }
+
+ public void setSpecificationSchemaJson(String specificationSchemaJson) {
+ this.specificationSchemaJson = specificationSchemaJson;
+ }
+}
diff --git a/src/main/java/org/onap/nbi/apis/servicecatalog/repositories/ServiceSpecificationRepository.java b/src/main/java/org/onap/nbi/apis/servicecatalog/repositories/ServiceSpecificationRepository.java
new file mode 100644
index 0000000..f46e008
--- /dev/null
+++ b/src/main/java/org/onap/nbi/apis/servicecatalog/repositories/ServiceSpecificationRepository.java
@@ -0,0 +1,22 @@
+/**
+ * Copyright (c) 2019 Amdocs
+ *
+ * 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.
+ */
+package org.onap.nbi.apis.servicecatalog.repositories;
+
+import org.onap.nbi.apis.servicecatalog.model.ServiceSpecification;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface ServiceSpecificationRepository extends MongoRepository<ServiceSpecification, String> {
+}
diff --git a/src/main/java/org/onap/nbi/apis/servicecatalog/repositories/SpecificationInputSchemaRepository.java b/src/main/java/org/onap/nbi/apis/servicecatalog/repositories/SpecificationInputSchemaRepository.java
new file mode 100644
index 0000000..56adbd3
--- /dev/null
+++ b/src/main/java/org/onap/nbi/apis/servicecatalog/repositories/SpecificationInputSchemaRepository.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2019 Amdocs
+ *
+ * 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.
+ */
+package org.onap.nbi.apis.servicecatalog.repositories;
+
+import org.onap.nbi.apis.servicecatalog.model.SpecificationInputSchema;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface SpecificationInputSchemaRepository extends MongoRepository<SpecificationInputSchema, String> {
+
+
+}