Merge "Resource Resolution Service: Primary DB"
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BlueprintErrorCode.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BlueprintErrorCode.kt
new file mode 100644
index 0000000..bef174b
--- /dev/null
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BlueprintErrorCode.kt
@@ -0,0 +1,97 @@
+/*
+ * Copyright © 2018-2019 Bell Canada Intellectual Property.
+ *
+ * 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.ccsdk.apps.controllerblueprints.core.data
+
+import java.util.HashMap
+
+/**
+ * ErrorCode.java Purpose: Maintain a list of HTTP status codes
+ *
+ * @author Steve Siani
+ * @version 1.0
+ */
+enum class ErrorCode (val value: Int, val httpCode: Int) {
+
+    /// TODO: Add more attribute for each needed application protocol
+    // TODO: Example: INVALID_FILE_EXTENSION(2, 415, 25)
+    GENERIC_FAILURE(1, 500) {
+        override fun message(detailMsg: String): String {
+            return "Generic failure. Details : {$detailMsg}"
+        }
+    },
+    INVALID_FILE_EXTENSION(2, 415) {
+        override fun message(detailMsg: String): String {
+            return "Unexpected file extension. Details : {$detailMsg}"
+        }
+    },
+    BLUEPRINT_PATH_MISSING(3, 503) {
+        override fun message(detailMsg: String): String {
+            return "Blueprint path missing or wrong. Details : {$detailMsg}"
+        }
+    },
+    BLUEPRINT_WRITING_FAIL(4, 503) {
+        override fun message(detailMsg: String): String {
+            return "Fail to write blueprint files. Details : {$detailMsg}"
+        }
+    },
+    IO_FILE_INTERRUPT(5, 503) {
+        override fun message(detailMsg: String): String {
+            return "IO file system interruption. Details : {$detailMsg}"
+        }
+    },
+    INVALID_REQUEST_FORMAT(6, 400) {
+        override fun message(detailMsg: String): String {
+            return "Bad request. Details : {$detailMsg}"
+        }
+    },
+    UNAUTHORIZED_REQUEST(7, 401) {
+        override fun message(detailMsg: String): String {
+            return "The request requires user authentication. Details : {$detailMsg}"
+        }
+    },
+    REQUEST_NOT_FOUND(8, 404) {
+        override fun message(detailMsg: String): String {
+            return "Request mapping doesn't exist. Details : {$detailMsg}"
+        }
+    },
+    RESOURCE_NOT_FOUND(9, 404) {
+        override fun message(detailMsg: String): String {
+            return "No response was found for this request in the server. Details : {$detailMsg}"
+        }
+    },
+    CONFLICT_ADDING_RESOURCE(10, 409) {
+        override fun message(detailMsg: String): String {
+            return "Duplicated entry while saving Blueprint. Details : {$detailMsg}"
+        }
+    };
+
+    abstract fun message(detailMsg: String): String
+
+    companion object {
+
+        private val map = HashMap<Int, ErrorCode>()
+
+        init {
+            for (errorCode in ErrorCode.values()) {
+                map[errorCode.value] = errorCode
+            }
+        }
+
+        fun valueOf(value: Int): ErrorCode? {
+            return if (map.containsKey(value)) map[value] else map[1]
+        }
+    }
+}
\ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtils.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtils.kt
index 5a10e43..9746bf5 100755
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtils.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintFileUtils.kt
@@ -24,6 +24,7 @@
 import org.apache.commons.lang3.StringUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ErrorCode
 import org.onap.ccsdk.apps.controllerblueprints.core.data.ImportDefinition
 import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
@@ -105,7 +106,8 @@
             val definitionDir = File(definitionPath)
 
             check(definitionDir.exists()) {
-                throw BluePrintException("couldn't get definition file under path(${definitionDir.absolutePath})")
+                throw BluePrintException(ErrorCode.BLUEPRINT_PATH_MISSING.value, "couldn't get definition file under " +
+                        "path(${definitionDir.absolutePath})")
             }
 
             blueprintContext.serviceTemplate.dataTypes?.let {
@@ -192,7 +194,8 @@
 
             Files.write(definitionFile.toPath(), content.toByteArray(), StandardOpenOption.CREATE_NEW)
             check(definitionFile.exists()) {
-                throw BluePrintException("couldn't write definition file under path(${definitionFile.absolutePath})")
+                throw BluePrintException(ErrorCode.BLUEPRINT_WRITING_FAIL.value, "couldn't write definition file under " +
+                        "path(${definitionFile.absolutePath})")
             }
         }
 
@@ -201,7 +204,8 @@
 
             Files.write(typeFile.toPath(), content.toByteArray(), StandardOpenOption.CREATE_NEW)
             check(typeFile.exists()) {
-                throw BluePrintException("couldn't write $type.json file under path(${typeFile.absolutePath})")
+                throw BluePrintException(ErrorCode.BLUEPRINT_WRITING_FAIL.value, "couldn't write $type.json file under " +
+                        "path(${typeFile.absolutePath})")
             }
         }
 
@@ -213,9 +217,21 @@
                     "\nTemplate-Tags: <TAGS>"
         }
 
+       
+        fun getBluePrintFile(fileName: String, targetPath: Path) : File {
+            val filePath = targetPath.resolve(fileName).toString()
+            val file = File(filePath)
+            check(file.exists()) {
+                throw BluePrintException(ErrorCode.BLUEPRINT_PATH_MISSING.value, "couldn't get definition file under " +
+                        "path(${file.absolutePath})")
+            }
+            return file
+        }
+
         fun getCbaStorageDirectory(path: String): Path {
             check(StringUtils.isNotBlank(path)) {
-                throw BluePrintException("CBA Path is missing.")
+                throw BluePrintException(ErrorCode.BLUEPRINT_PATH_MISSING.value, "couldn't get " +
+                        "Blueprint folder under path($path)")
             }
 
             val fileStorageLocation = Paths.get(path).toAbsolutePath().normalize()