/*- * ============LICENSE_START======================================================= * openECOMP : APP-C * ================================================================================ * 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.openecomp.appc.licmgr.impl; import org.openecomp.appc.licmgr.Constants; import org.openecomp.appc.licmgr.LicenseDataAccessService; import org.openecomp.appc.licmgr.exception.DataAccessException; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import org.openecomp.sdnc.sli.resource.dblib.DbLibService; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceReference; import javax.sql.rowset.CachedRowSet; import static org.openecomp.appc.licmgr.Constants.ASDC_ARTIFACTS_FIELDS; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @SuppressWarnings("JavaDoc") class LicenseDataAccessServiceImpl implements LicenseDataAccessService { private static EELFLogger logger = EELFManager.getInstance().getLogger(LicenseDataAccessServiceImpl.class); public void setSchema(String schema) { this.schema = schema; } private String schema; private DbLibService dbLibService; private void checkDbLibService() throws DataAccessException { if (null != dbLibService) {return;} //get dblib service and send it to DAService BundleContext bctx = FrameworkUtil.getBundle(LicenseManagerImpl.class).getBundleContext(); ServiceReference sref = bctx.getServiceReference(DbLibService.class.getName()); dbLibService = (DbLibService)bctx.getService(sref); } /** * empty constructor */ public LicenseDataAccessServiceImpl(){} @Override public Map retrieveLicenseModelData(String vnfType, String vnfVersion, String... fields) throws DataAccessException { checkDbLibService(); Map result = new HashMap<>(); if (null == fields || 0 == fields.length) fields = new String[]{ASDC_ARTIFACTS_FIELDS.ARTIFACT_CONTENT.name()}; String queryString = buildQueryStatement(); ArrayList argList = new ArrayList<>(); argList.add(vnfType); argList.add(vnfVersion); argList.add(Constants.VF_LICENSE); try { final CachedRowSet data = dbLibService.getData(queryString, argList, Constants.NETCONF_SCHEMA); if (data.first()) { for (String field : fields) { result.put(field, data.getString(field)); } } else { String msg = "Missing license model for VNF_TYPE: " + vnfType + " and VNF_VERSION: " + vnfVersion + " in table " + Constants.ASDC_ARTIFACTS_TABLE_NAME; logger.info(msg); } } catch (SQLException e) { logger.error("Error Accessing Database " + e); throw new DataAccessException(e); } return result; } private String buildQueryStatement() { return "select * " + "from " + Constants.ASDC_ARTIFACTS_TABLE_NAME + " " + "where " + ASDC_ARTIFACTS_FIELDS.RESOURCE_NAME.name() + " = ?" + " AND " + ASDC_ARTIFACTS_FIELDS.RESOURCE_VERSION.name() + " = ?" + " AND " + ASDC_ARTIFACTS_FIELDS.ARTIFACT_TYPE.name() + " = ?"; } /** * Implementation of storeArtifactPayload() * @see LicenseDataAccessService */ @Override public void storeArtifactPayload(Map parameters) throws RuntimeException { checkDbLibService(); if(parameters == null || parameters.isEmpty()) { throw new RuntimeException("No parameters for insert are provided"); } String insertStr = "INSERT INTO " + Constants.ASDC_ARTIFACTS_TABLE_NAME + "("; String valuesStr = "VALUES("; String insertStatementStr; ArrayList params = new ArrayList<>(); boolean firstTime = true; for(Map.Entry entry : parameters.entrySet()) { if(!firstTime) { insertStr += ","; valuesStr += ","; } else { firstTime = false; } insertStr += entry.getKey(); valuesStr += "?"; params.add(entry.getValue()); } insertStr += ")"; valuesStr += ")"; insertStatementStr = insertStr + " " + valuesStr; executeStoreArtifactPayload(insertStatementStr, params); } /** * Exexutes insert statement for artifact payload * @param insertStatementStr * @param params * @throws RuntimeException */ private void executeStoreArtifactPayload(String insertStatementStr, ArrayList params) throws RuntimeException { try { logger.info("used schema=" + this.schema); logger.info("insert statement=" + insertStatementStr); dbLibService.writeData(insertStatementStr, params, this.schema); logger.info("finished to execute insert"); } catch (SQLException e) { logger.error("Storing Artifact payload failed - " + insertStatementStr); throw new RuntimeException("Storing Artifact payload failed - " + insertStatementStr); } } }