2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (C) 2019 Ericsson
8 * =============================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * ============LICENSE_END=========================================================
23 package org.onap.appc.flow.controller.dbervices;
25 import com.att.eelf.configuration.EELFLogger;
26 import com.att.eelf.configuration.EELFManager;
28 import java.util.ArrayList;
30 import org.apache.commons.lang.StringUtils;
31 import org.onap.appc.flow.controller.data.Transaction;
32 import org.onap.appc.flow.controller.utils.EscapeUtils;
33 import org.onap.appc.flow.controller.utils.FlowControllerConstants;
34 import org.onap.ccsdk.sli.adaptors.resource.sql.SqlResource;
35 import org.onap.ccsdk.sli.core.dblib.DbLibService;
36 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
37 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
38 import org.onap.ccsdk.sli.core.sli.SvcLogicResource;
39 import org.onap.ccsdk.sli.core.sli.SvcLogicResource.QueryStatus;
41 public class FlowControlDBService {
43 private static final EELFLogger log = EELFManager.getInstance().getLogger(FlowControlDBService.class);
44 private static final String QUERY_STR = "Query String : ";
45 private static final String FAILURE_PARAM = "FAILURE";
46 protected static final String GET_FLOW_REF_DATA_ERROR = "Error - while getting FlowReferenceData ";
47 private static final String ARTIFACT_CONTENT_PARAM = "artifact-content";
48 protected static final String COUNT_PROTOCOL_PARAM = "count(protocol)";
50 private DbLibServiceQueries dblib;
51 private static FlowControlDBService dgGeneralDBService = null;
53 private FlowControlDBService() {
55 dblib = new DbLibServiceQueries();
59 protected FlowControlDBService(DbLibServiceQueries dbLibServiceQueries) {
60 dblib = dbLibServiceQueries;
63 protected FlowControlDBService(DbLibService dbLibService) {
64 dblib = new DbLibServiceQueries(dbLibService);
67 public static FlowControlDBService initialise() {
68 if (dgGeneralDBService == null) {
69 dgGeneralDBService = new FlowControlDBService();
71 return dgGeneralDBService;
74 public void getFlowReferenceData(SvcLogicContext ctx, Map<String, String> inParams, SvcLogicContext localContext)
75 throws SvcLogicException {
77 String fn = "DBService.getflowModelInfo";
78 String whereClause = " where ACTION = $" + FlowControllerConstants.REQUEST_ACTION;
80 if (StringUtils.isNotBlank(ctx.getAttribute(FlowControllerConstants.ACTION_LEVEL))) {
81 whereClause = whereClause.concat(" and ACTION_LEVEL = $" + FlowControllerConstants.ACTION_LEVEL);
85 if (dblib != null && localContext != null) {
86 String key = "select SEQUENCE_TYPE, CATEGORY, GENERATION_NODE, EXECUTION_NODE from "
87 + FlowControllerConstants.DB_MULTISTEP_FLOW_REFERENCE + whereClause;
88 log.debug(fn + QUERY_STR + key);
89 status = dblib.query(key, localContext);
90 if (status.toString().equals(FAILURE_PARAM)) {
91 throw new SvcLogicException(GET_FLOW_REF_DATA_ERROR);
96 public String getEndPointByAction(String action) {
100 public String getDesignTimeFlowModel(SvcLogicContext localContext) throws SvcLogicException {
101 String fn = "DBService.getDesignTimeFlowModel ";
103 if (dblib != null && localContext != null) {
105 "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from "
106 + FlowControllerConstants.DB_SDC_ARTIFACTS + " where artifact_name in (select artifact_name from "
107 + FlowControllerConstants.DB_SDC_REFERENCE + " where vnf_type= $"
108 + FlowControllerConstants.VNF_TYPE
109 + " and vnfc_type = $" + FlowControllerConstants.VNFC_TYPE + " and action = $"
110 + FlowControllerConstants.REQUEST_ACTION + " and file_category = $"
111 + FlowControllerConstants.CATEGORY + " )";
113 log.debug(fn + QUERY_STR + queryString);
114 status = dblib.query(queryString, localContext);
116 if (status.toString().equals(FAILURE_PARAM)) {
117 throw new SvcLogicException(GET_FLOW_REF_DATA_ERROR);
120 String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS
121 + " where artifact_name = $artifactName and internal_version = $maxInternalVersion ";
123 log.debug(fn + QUERY_STR + queryString1);
124 status = dblib.query(queryString1, localContext);
125 if (status.toString().equals(FAILURE_PARAM)) {
126 throw new SvcLogicException(GET_FLOW_REF_DATA_ERROR);
129 return localContext != null ? localContext.getAttribute(ARTIFACT_CONTENT_PARAM) : null;
132 public QueryStatus loadSequenceIntoDB(SvcLogicContext localContext) throws SvcLogicException {
134 QueryStatus status = null;
135 if (localContext != null) {
136 String fn = "DBService.saveArtifacts";
138 localContext.setAttribute(FlowControllerConstants.ARTIFACT_CONTENT_ESCAPED,
139 EscapeUtils.escapeSql(localContext.getAttribute(FlowControllerConstants.ARTIFACT_CONTENT)));
140 log.debug("ESCAPED sequence for DB : "
141 + localContext.getAttribute(FlowControllerConstants.ARTIFACT_CONTENT_ESCAPED));
143 for (Object key : localContext.getAttributeKeySet()) {
144 String parmName = (String) key;
145 String parmValue = localContext.getAttribute(parmName);
146 log.debug(" loadSequenceIntoDB " + parmName + "=" + parmValue);
149 String queryString = "INSERT INTO " + FlowControllerConstants.DB_REQUEST_ARTIFACTS + " set request_id = $"
150 + FlowControllerConstants.REQUEST_ID + " , action = $" + FlowControllerConstants.REQUEST_ACTION
151 + " , action_level = $" + FlowControllerConstants.ACTION_LEVEL + " , vnf_type = $"
152 + FlowControllerConstants.VNF_TYPE + " , category = $" + FlowControllerConstants.CATEGORY
153 + " , artifact_content = $" + FlowControllerConstants.ARTIFACT_CONTENT_ESCAPED
154 + " , updated_date = sysdate() ";
156 log.debug(fn + QUERY_STR + queryString);
157 status = dblib.save(queryString, localContext);
158 if (status.toString().equals(FAILURE_PARAM)) {
159 throw new SvcLogicException("Error While processing storing Artifact: "
160 + localContext.getAttribute(FlowControllerConstants.ARTIFACT_NAME));
167 public void populateModuleAndRPC(Transaction transaction, String vnfType) throws SvcLogicException {
168 String fn = "FlowControlDBService.populateModuleAndRPC ";
170 SvcLogicContext context = getSvcLogicContext();
171 String protocolType = getProtocolType(transaction, vnfType, fn, context);
173 String key = "select execution_type, execution_module, execution_rpc from "
174 + FlowControllerConstants.DB_PROCESS_FLOW_REFERENCE + " where action = ? "
175 + "and action_level = ? and protocol = ?";
176 ArrayList<String> arguments = new ArrayList<>();
177 arguments.add(transaction.getAction());
178 arguments.add(transaction.getActionLevel());
179 arguments.add(protocolType);
181 log.debug(fn + QUERY_STR + key);
182 status = dblib.query(key, context, arguments);
183 if (status.toString().equals(FAILURE_PARAM)) {
184 throw new SvcLogicException(GET_FLOW_REF_DATA_ERROR);
187 transaction.setExecutionModule(context.getAttribute(FlowControllerConstants.EXECUTTION_MODULE));
188 transaction.setExecutionRPC(context.getAttribute(FlowControllerConstants.EXECUTION_RPC));
189 transaction.setExecutionType(context.getAttribute(FlowControllerConstants.EXECUTION_TYPE));
193 private String getProtocolType(Transaction transaction, String vnfType, String fn, SvcLogicContext context)
194 throws SvcLogicException {
196 String protocolQuery;
198 protocolQuery = "select count(protocol) from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE
199 + " where action = ? and action_level = ?";
200 ArrayList<String> arguments = new ArrayList<>();
201 arguments.add(transaction.getAction());
202 arguments.add(transaction.getActionLevel());
204 log.debug(fn + QUERY_STR + protocolQuery);
205 status = dblib.query(protocolQuery, context, arguments);
206 if (status.toString().equals(FAILURE_PARAM)) {
207 throw new SvcLogicException(GET_FLOW_REF_DATA_ERROR);
210 String countProtocolParam = context.getAttribute(COUNT_PROTOCOL_PARAM);
211 log.debug(" Protocol Count " + countProtocolParam);
212 protocolCount = Integer.parseInt(countProtocolParam);
214 if (protocolCount == 1) {
215 protocolQuery = "select protocol from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE
216 + " where action = ? and action_level = ?";
217 ArrayList<String> arguments2 = new ArrayList<>();
218 arguments2.add(transaction.getAction());
219 arguments2.add(transaction.getActionLevel());
221 log.debug(fn + QUERY_STR + protocolQuery);
222 status = dblib.query(protocolQuery, context, arguments2);
223 if (status.toString().equals(FAILURE_PARAM)) {
224 throw new SvcLogicException(GET_FLOW_REF_DATA_ERROR);
226 return context.getAttribute("protocol");
228 if (hasSingleProtocol(transaction, vnfType, fn, context)) {
229 return context.getAttribute("protocol");
235 private boolean hasSingleProtocol(Transaction transaction, String vnfType, String fn, SvcLogicContext context)
236 throws SvcLogicException {
237 String protocolQuery;
240 protocolQuery = "select count(protocol) from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE
241 + " where action = ? and action_level = ? and vnf_type = ?";
242 ArrayList<String> arguments = new ArrayList<>();
243 arguments.add(transaction.getAction());
244 arguments.add(transaction.getActionLevel());
245 arguments.add(vnfType);
247 log.debug(fn + QUERY_STR + protocolQuery);
248 status = dblib.query(protocolQuery, context, arguments);
249 if (status.toString().equals(FAILURE_PARAM)) {
250 throw new SvcLogicException(GET_FLOW_REF_DATA_ERROR);
253 log.debug(" Protocol Count " + context.getAttribute(COUNT_PROTOCOL_PARAM));
254 protocolCount = Integer.parseInt(context.getAttribute(COUNT_PROTOCOL_PARAM));
255 if (protocolCount > 1) {
256 throw new SvcLogicException("Got more than 2 values..");
257 } else if (protocolCount == 1) {
258 protocolQuery = "select protocol from " + FlowControllerConstants.DB_PROTOCOL_REFERENCE
259 + " where action = ? and action_level = ? and vnf_type = ?";
260 ArrayList<String> arguments2 = new ArrayList<>();
261 arguments2.add(transaction.getAction());
262 arguments2.add(transaction.getActionLevel());
263 arguments2.add(vnfType);
264 log.debug(fn + QUERY_STR + protocolQuery);
265 status = dblib.query(protocolQuery, context, arguments2);
266 if (status.toString().equals(FAILURE_PARAM)) {
267 throw new SvcLogicException(GET_FLOW_REF_DATA_ERROR);
274 public String getDependencyInfo(SvcLogicContext localContext) throws SvcLogicException {
275 String fn = "DBService.getDependencyInfo ";
277 if (dblib != null && localContext != null) {
279 "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from "
280 + FlowControllerConstants.DB_SDC_ARTIFACTS + " where artifact_name in (select artifact_name from "
281 + FlowControllerConstants.DB_SDC_REFERENCE + " where vnf_type= $"
282 + FlowControllerConstants.VNF_TYPE
283 + " and file_category = '" + FlowControllerConstants.DEPENDENCYMODEL + "' )";
285 log.debug(fn + QUERY_STR + queryString);
286 status = dblib.query(queryString, localContext);
288 if (status.toString().equals(FAILURE_PARAM)) {
289 throw new SvcLogicException("Error - while getting dependencydata ");
292 String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS
293 + " where artifact_name = $artifactName and internal_version = $maxInternalVersion ";
295 log.debug(fn + QUERY_STR + queryString1);
296 status = dblib.query(queryString1, localContext);
297 if (status.toString().equals(FAILURE_PARAM)) {
298 throw new SvcLogicException("Error - while getting dependencyData ");
302 return localContext != null ? localContext.getAttribute(ARTIFACT_CONTENT_PARAM) : null;
306 public String getCapabilitiesData(SvcLogicContext localContext) throws SvcLogicException {
307 String fn = "DBService.getCapabilitiesData ";
309 if (dblib != null && localContext != null) {
311 "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from "
312 + FlowControllerConstants.DB_SDC_ARTIFACTS + " where artifact_name in (select artifact_name from "
313 + FlowControllerConstants.DB_SDC_REFERENCE + " where vnf_type= $"
314 + FlowControllerConstants.VNF_TYPE
315 + " and file_category = '" + FlowControllerConstants.CAPABILITY + "' )";
317 log.info(fn + QUERY_STR + queryString);
318 status = dblib.query(queryString, localContext);
320 if (status.toString().equals(FAILURE_PARAM)) {
321 throw new SvcLogicException("Error - while getting capabilitiesData ");
324 String queryString1 = "select artifact_content from " + FlowControllerConstants.DB_SDC_ARTIFACTS
325 + " where artifact_name = $artifactName and internal_version = $maxInternalVersion ";
327 log.debug(fn + QUERY_STR + queryString1);
328 status = dblib.query(queryString1, localContext);
329 if (status.toString().equals(FAILURE_PARAM)) {
330 throw new SvcLogicException("Error - while getting capabilitiesData ");
333 return localContext != null ? localContext.getAttribute(ARTIFACT_CONTENT_PARAM) : null;
336 protected SvcLogicContext getSvcLogicContext() {
337 return new SvcLogicContext();