Fix the retrival of resource recipe

Fix the retrival of resource recipe.

Change-Id: Iaec1046f487ce61b995d61414dbe4229e8a51115
Issue-ID: SO-1197
Signed-off-by: subhash kumar singh <subhash.kumar.singh@huawei.com>
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java
index 7ac2335..2fc1c3d 100644
--- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java
@@ -73,6 +73,7 @@
 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.VnfRecipe;
 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;
@@ -116,6 +117,7 @@
 public class CatalogDbAdapterRest {
     protected static Logger logger = LoggerFactory.getLogger(CatalogDbAdapterRest.class);
     private static final boolean IS_ARRAY = true;
+    private static final String NETWORK_SERVICE = "network service";
 
     @Autowired
     private VnfCustomizationRepository vnfCustomizationRepo;
@@ -563,15 +565,32 @@
             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.
+                Recipe recipe = null;
+
                 VnfResource vnf = vnfResourceRepo.findResourceByModelUUID(rmUuid);
-                Recipe recipe = vnfRecipeRepo.findFirstVnfRecipeByNfRoleAndAction(vnf.getModelName(), action);
+                if (vnf != null) {
+                    recipe = vnfRecipeRepo.findFirstVnfRecipeByNfRoleAndActionAndVersionStr(vnf.getModelName(), action, vnf.getModelVersion());
+
+                    // for network service fetch the default recipe
+                    if (recipe == null && vnf.getSubCategory().equalsIgnoreCase(NETWORK_SERVICE)) {
+                        recipe = vnfRecipeRepo.findFirstVnfRecipeByNfRoleAndAction("NS_DEFAULT", action);
+                    }
+                }
+
+
                 if (null == recipe) {
                     NetworkResource nResource = networkResourceRepo.findResourceByModelUUID(rmUuid);
-                    recipe = networkRecipeRepo.findFirstByModelNameAndAction(nResource.getModelName(), action);
+                    recipe = networkRecipeRepo.findFirstByModelNameAndActionAndVersionStr(nResource.getModelName(), action, vnf.getModelVersion());
+
+                    // for network fetch the default recipe
+                    if (recipe == null) {
+                        recipe = networkRecipeRepo.findFirstByModelNameAndAction("SDNC_DEFAULT", action);
+                    }
                 }
+
                 if (null == recipe) {
                     AllottedResource arResource = arResourceRepo.findResourceByModelUUID(rmUuid);
-                    recipe = arRecipeRepo.findByModelNameAndAction(arResource.getModelName(), action);
+                    recipe = arRecipeRepo.findByModelNameAndActionAndVersion(arResource.getModelName(), action, arResource.getModelVersion());
                 }
                 if (recipe != null) {
                     QueryResourceRecipe resourceRecipe = new QueryResourceRecipe(recipe);
diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/NetworkRecipe.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/NetworkRecipe.java
index 73056e2..51bcd54 100644
--- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/NetworkRecipe.java
+++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/NetworkRecipe.java
@@ -59,6 +59,9 @@
 	@Column(name = "RECIPE_TIMEOUT")
 	private Integer recipeTimeout;
 
+	@Column(name = "VERSION_STR")
+	private String versionStr;
+
 	@BusinessKey
 	@Column(name = "SERVICE_TYPE")
 	private String serviceType;
@@ -171,4 +174,12 @@
 		sb.append(",networkParamXSD=" + paramXsd);
 		return sb.toString();
 	}
+
+	public String getVersionStr() {
+		return versionStr;
+	}
+
+	public void setVersionStr(String versionStr) {
+		this.versionStr = versionStr;
+	}
 }
diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfRecipe.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfRecipe.java
index aef2ac5..ab2eb62 100644
--- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfRecipe.java
+++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfRecipe.java
@@ -71,6 +71,9 @@
 	@Column(name = "RECIPE_TIMEOUT")
 	private Integer recipeTimeout;
 
+	@Column(name = "VERSION_STR")
+	private String versionStr;
+
 	@BusinessKey
 	@Column(name = "SERVICE_TYPE")
 	private String serviceType;
@@ -184,4 +187,12 @@
 	public Date getCreated() {
 		return created;
 	}
+
+	public String getVersionStr() {
+		return versionStr;
+	}
+
+	public void setVersionStr(String versionStr) {
+		this.versionStr = versionStr;
+	}
 }
diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/ArRecipeRepository.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/ArRecipeRepository.java
index 1241dac..22f3ccb 100644
--- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/ArRecipeRepository.java
+++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/ArRecipeRepository.java
@@ -28,4 +28,5 @@
 public interface ArRecipeRepository extends JpaRepository<ArRecipe, String> {
 
 	ArRecipe findByModelNameAndAction(String modelName, String action);
+	ArRecipe findByModelNameAndActionAndVersion(String modelName, String action, String version);
 }
diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/NetworkRecipeRepository.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/NetworkRecipeRepository.java
index 10290b5..c74fade 100644
--- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/NetworkRecipeRepository.java
+++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/NetworkRecipeRepository.java
@@ -27,4 +27,5 @@
 @RepositoryRestResource(collectionResourceRel = "networkRecipe", path = "networkRecipe")
 public interface NetworkRecipeRepository extends JpaRepository<NetworkRecipe, String> {
 	NetworkRecipe findFirstByModelNameAndAction(String modelName, String action);
+	NetworkRecipe findFirstByModelNameAndActionAndVersionStr(String modelName, String action, String versionStr);
 }
\ No newline at end of file
diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/VnfRecipeRepository.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/VnfRecipeRepository.java
index dbc86cb..b99e2bd 100644
--- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/VnfRecipeRepository.java
+++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/VnfRecipeRepository.java
@@ -7,9 +7,9 @@
  * 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.
@@ -29,4 +29,6 @@
 	VnfRecipe findVnfRecipeByServiceTypeAndAction(String serviceType, String action);
 	
 	VnfRecipe findFirstVnfRecipeByNfRoleAndAction(String nfRole, String action);
+
+	VnfRecipe findFirstVnfRecipeByNfRoleAndActionAndVersionStr(String nfRole, String action, String versionStr);
 }
\ No newline at end of file