Revert "remove redundant code under appc-common-bundle/java"
[appc.git] / appc-core / appc-common-bundle / java / org / onap / appc / metadata / impl / MetadataServiceImpl.java
diff --git a/appc-core/appc-common-bundle/java/org/onap/appc/metadata/impl/MetadataServiceImpl.java b/appc-core/appc-common-bundle/java/org/onap/appc/metadata/impl/MetadataServiceImpl.java
new file mode 100644 (file)
index 0000000..70d2e63
--- /dev/null
@@ -0,0 +1,123 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 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.
+ * 
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.metadata.impl;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.onap.ccsdk.sli.core.dblib.DbLibService;
+
+import javax.sql.rowset.CachedRowSet;
+
+import org.onap.appc.cache.MetadataCache;
+import org.onap.appc.cache.impl.MetadataCacheFactory;
+import org.onap.appc.metadata.MetadataService;
+import org.onap.appc.metadata.objects.DependencyModelIdentifier;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+
+
+public class MetadataServiceImpl implements MetadataService {
+
+    private DbLibService dbLibService;
+
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(MetadataServiceImpl.class);
+
+    private MetadataCache<DependencyModelIdentifier, String> cache;
+
+    public MetadataServiceImpl() {
+        initialize();
+    }
+
+    private void initialize() {
+        cache = MetadataCacheFactory.getInstance().getMetadataCache();
+        // TODO initialze dbLibService
+    }
+
+    public void setDbLibService(DbLibService dbLibService) {
+        this.dbLibService = dbLibService;
+    }
+
+    void setCache(MetadataCache<DependencyModelIdentifier, String> cache) {
+        this.cache = cache;
+    }
+
+    @Override
+    public String getVnfModel(DependencyModelIdentifier modelIdentifier) {
+        logger.debug("Reading Vnf Model data from cache for vnfType : " + modelIdentifier.getVnfType()
+            + " and catalog version : " + modelIdentifier.getCatalogVersion());
+        String vnfModel = cache.getObject(modelIdentifier);
+        if (vnfModel == null || vnfModel.length() == 0) {
+            logger.debug("Vnf Model not available in cache. Reading from database.");
+            vnfModel = readVnfModel(modelIdentifier);
+            if (vnfModel != null && vnfModel.length() > 0) {
+                logger.debug("Adding retrieved Vnf Model to cache.");
+                addVnfModel(modelIdentifier, vnfModel);
+            }
+        }
+        return vnfModel;
+    }
+
+    private void addVnfModel(DependencyModelIdentifier modelIdentifier, String vnfModel) {
+        cache.putObject(modelIdentifier, vnfModel);
+    }
+
+    private String readVnfModel(DependencyModelIdentifier modelIdentifier) {
+
+        logger.debug("Reading Vnf Model data from database for RESOURCE_NAME : " + modelIdentifier.getVnfType()
+            + " and RESOURCE_VERSION : " + modelIdentifier.getCatalogVersion());
+        StringBuilder query = new StringBuilder();
+        String vnfModel = null;
+        query.append("SELECT ARTIFACT_CONTENT FROM sdnctl.ASDC_ARTIFACTS WHERE RESOURCE_NAME = ? ");
+        ArrayList<String> argList = new ArrayList<>();
+        argList.add(modelIdentifier.getVnfType());
+
+        if (modelIdentifier.getCatalogVersion() == null) {
+            query.append(" ORDER BY  SUBSTRING_INDEX(RESOURCE_VERSION, '.', 1)*1  DESC , " +
+                "SUBSTRING_INDEX(SUBSTRING_INDEX(RESOURCE_VERSION, '.', 2),'.', -1) *1 DESC , " +
+                "SUBSTRING_INDEX(RESOURCE_VERSION, '.', -1)*1 DESC ;");
+        } else {
+            query.append("AND RESOURCE_VERSION = ? ;");
+            argList.add(modelIdentifier.getCatalogVersion());
+        }
+        try {
+            final CachedRowSet data = dbLibService.getData(query.toString(), argList, "sdnctl");
+            if (data.first()) {
+                vnfModel = data.getString("ARTIFACT_CONTENT");
+                if (vnfModel == null || vnfModel.isEmpty()) {
+                    logger.error("Invalid dependency model for vnf type : " + modelIdentifier.getVnfType()
+                        + " and catalog version : " + modelIdentifier.getCatalogVersion());
+                    throw new RuntimeException("Invalid or Empty VNF Model");
+                }
+                logger.debug("Retrieved Vnf Model : " + vnfModel);
+            } else {
+                logger.warn("VNF Model not found in datastore for RESOURCE_NAME : " + modelIdentifier.getVnfType()
+                    + " AND RESOURCE_VERSION : " + modelIdentifier.getCatalogVersion());
+            }
+        } catch (SQLException e) {
+            throw new RuntimeException("Database error occurred");
+        }
+        return vnfModel;
+    }
+}