diff options
Diffstat (limited to 'src/main/java')
23 files changed, 524 insertions, 498 deletions
diff --git a/src/main/java/org/onap/clamp/clds/Application.java b/src/main/java/org/onap/clamp/clds/Application.java index 2727535e4..281a87ca5 100644 --- a/src/main/java/org/onap/clamp/clds/Application.java +++ b/src/main/java/org/onap/clamp/clds/Application.java @@ -26,6 +26,7 @@ package org.onap.clamp.clds; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import org.apache.camel.component.servlet.CamelHttpTransportServlet; import org.apache.catalina.connector.Connector; import org.onap.clamp.clds.model.prop.Holmes; import org.onap.clamp.clds.model.prop.ModelProperties; @@ -41,6 +42,7 @@ import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; +import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -89,6 +91,19 @@ public class Application extends SpringBootServletInitializer { } /** + * This method is used to declare the camel servlet. + * + * @return A servlet bean + */ + @Bean + public ServletRegistrationBean camelServletRegistrationBean() { + ServletRegistrationBean registration = new ServletRegistrationBean(new CamelHttpTransportServlet(), + "/restservices/clds/v2"); + registration.setName("CamelServlet"); + return registration; + } + + /** * This method is used by Spring to create the servlet container factory. * * @return The TomcatEmbeddedServletContainerFactory just created diff --git a/src/main/java/org/onap/clamp/clds/camel/CamelProxy.java b/src/main/java/org/onap/clamp/clds/camel/CamelProxy.java new file mode 100644 index 000000000..66cd1f5a9 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/camel/CamelProxy.java @@ -0,0 +1,67 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2018 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============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.camel; + +import org.apache.camel.ExchangeProperty; + +/** + * This interface describes the CamelProxy parameters that must be passed to the + * Camel flow. + */ +public interface CamelProxy { + + /** + * This method is called when invoking a camel flow. + * + * @param actionCommand + * The action coming from the Clamp UI (like SUBMIT, UPDATE, + * DELETE, ...) + * @param modelProperties + * The Model properties created based on the BPMN Json and + * Properties Json + * @param modelBpmnProperties + * The Json with all the properties describing the flow + * @param modelName + * The model name + * @param controlName + * The control loop name + * @param docText + * The Global properties JSON containing YAML (coming from CLamp + * template) + * @param isTest + * Is a test or not (flag coming from the UI) + * @param userId + * The user ID coming from the UI + * @param isInsertTestEvent + * Is a test or not (flag coming from the UI) + * @return A string containing the result of the Camel flow execution + */ + String submit(@ExchangeProperty("actionCd") String actionCommand, + @ExchangeProperty("modelProp") String modelProperties, + @ExchangeProperty("modelBpmnProp") String modelBpmnProperties, + @ExchangeProperty("modelName") String modelName, @ExchangeProperty("controlName") String controlName, + @ExchangeProperty("docText") String docText, @ExchangeProperty("isTest") boolean isTest, + @ExchangeProperty("userid") String userId, + @ExchangeProperty("isInsertTestEvent") boolean isInsertTestEvent); +} diff --git a/src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java b/src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java index 4886b0de0..dcc318930 100644 --- a/src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/CldsEventDelegate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,40 +26,44 @@ package org.onap.clamp.clds.client; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.apache.camel.Exchange; +import org.apache.camel.Handler; import org.onap.clamp.clds.dao.CldsDao; import org.onap.clamp.clds.model.CldsEvent; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Create CLDS Event. */ -public class CldsEventDelegate implements JavaDelegate { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsEventDelegate.class); +@Component +public class CldsEventDelegate { + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsEventDelegate.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private CldsDao cldsDao; + private CldsDao cldsDao; /** * Insert event using process variables. * - * @param execution + * @param camelExchange + * The Camel Exchange object containing the properties */ - @Override - public void execute(DelegateExecution execution) { - String controlName = (String) execution.getVariable("controlName"); - String actionCd = (String) execution.getVariable("actionCd"); - String actionStateCd = (String) execution.getVariable("actionStateCd"); + @Handler + public void execute(Exchange camelExchange) { + String controlName = (String) camelExchange.getProperty("controlName"); + String actionCd = (String) camelExchange.getProperty("actionCd"); + String actionStateCd = (String) camelExchange.getProperty("actionStateCd"); // Flag indicate whether it is triggered by Validation Test button from // UI - boolean isTest = (boolean) execution.getVariable("isTest"); - boolean isInsertTestEvent = (boolean) execution.getVariable("isInsertTestEvent"); - String userid = (String) execution.getVariable("userid"); + boolean isTest = (boolean) camelExchange.getProperty("isTest"); + boolean isInsertTestEvent = (boolean) camelExchange.getProperty("isInsertTestEvent"); + String userid = (String) camelExchange.getProperty("userid"); // do not insert events for test actions unless flag set to insert them if (!isTest || isInsertTestEvent) { // won't really have userid here... - CldsEvent.insEvent(cldsDao, controlName, userid, actionCd, actionStateCd, execution.getProcessInstanceId()); + CldsEvent.insEvent(cldsDao, controlName, userid, actionCd, actionStateCd, camelExchange.getExchangeId()); } } } diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java index b8863e026..6053a0de9 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java @@ -35,24 +35,26 @@ import org.onap.clamp.clds.exception.DcaeDeploymentException; import org.onap.clamp.clds.model.refprop.RefProp;
import org.onap.clamp.clds.util.LoggingUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
/**
* This class implements the communication with DCAE for the service
* deployments.
- *
*/
+@Component
public class DcaeDispatcherServices {
- protected static final EELFLogger logger = EELFManager.getInstance()
- .getLogger(DcaeDispatcherServices.class);
- protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
+
+ protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeDispatcherServices.class);
+ protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
@Autowired
- private RefProp refProp;
- private static final String STATUS_URL_LOG = "Status URL extracted: ";
- private static final String DCAE_URL_PREFIX = "/dcae-deployments/";
- private static final String DCAE_URL_PROPERTY_NAME = "DCAE_DISPATCHER_URL";
- public static final String DCAE_REQUESTID_PROPERTY_NAME = "dcae.header.requestId";
- private static final String DCAE_LINK_FIELD = "links";
- private static final String DCAE_STATUS_FIELD = "status";
+ private RefProp refProp;
+ private static final String STATUS_URL_LOG = "Status URL extracted: ";
+ private static final String DCAE_URL_PREFIX = "/dcae-deployments/";
+ private static final String DCAE_URL_PROPERTY_NAME = "DCAE_DISPATCHER_URL";
+ private static final String DCAE_REQUEST_FAILED_LOG = "RequestFailed - responseStr=";
+ public static final String DCAE_REQUESTID_PROPERTY_NAME = "dcae.header.requestId";
+ private static final String DCAE_LINK_FIELD = "links";
+ private static final String DCAE_STATUS_FIELD = "status";
/**
* Delete the deployment on DCAE.
@@ -76,7 +78,7 @@ public class DcaeDispatcherServices { LoggingUtils.setResponseContext("0", "Delete deployments success", this.getClass().getName());
return statusUrl;
} catch (Exception e) {
- //Log StatusCode during exception in metrics log
+ // Log StatusCode during exception in metrics log
LoggingUtils.setResponseContext("900", "Delete deployments failed", this.getClass().getName());
LoggingUtils.setErrorContext("900", "Delete deployments error");
logger.error("Exception occurred during Delete Deployment Operation with DCAE", e);
@@ -93,7 +95,6 @@ public class DcaeDispatcherServices { * @param statusUrl
* The URL provided by a previous DCAE Query
* @return The status
- *
*/
public String getOperationStatus(String statusUrl) {
// Assigning processing status to monitor operation status further
@@ -111,7 +112,7 @@ public class DcaeDispatcherServices { LoggingUtils.setResponseContext("0", "Get operation status success", this.getClass().getName());
opStatus = status;
} catch (Exception e) {
- //Log StatusCode during exception in metrics log
+ // Log StatusCode during exception in metrics log
LoggingUtils.setResponseContext("900", "Get operation status failed", this.getClass().getName());
LoggingUtils.setErrorContext("900", "Get operation status error");
logger.error("Exception occurred during getOperationStatus Operation with DCAE", e);
@@ -124,7 +125,6 @@ public class DcaeDispatcherServices { /**
* This method send a getDeployments operation to DCAE.
- *
*/
public void getDeployments() {
Date startTime = new Date();
@@ -134,7 +134,7 @@ public class DcaeDispatcherServices { DcaeHttpConnectionManager.doDcaeHttpQuery(url, "GET", null, null);
LoggingUtils.setResponseContext("0", "Get deployments success", this.getClass().getName());
} catch (Exception e) {
- //Log StatusCode during exception in metrics log
+ // Log StatusCode during exception in metrics log
LoggingUtils.setResponseContext("900", "Get deployments failed", this.getClass().getName());
LoggingUtils.setErrorContext("900", "Get deployments error");
logger.error("Exception occurred during getDeployments Operation with DCAE", e);
@@ -174,7 +174,7 @@ public class DcaeDispatcherServices { LoggingUtils.setResponseContext("0", "Create new deployment failed", this.getClass().getName());
return statusUrl;
} catch (Exception e) {
- //Log StatusCode during exception in metrics log
+ // Log StatusCode during exception in metrics log
LoggingUtils.setResponseContext("900", "Create new deployment failed", this.getClass().getName());
LoggingUtils.setErrorContext("900", "Create new deployment error");
logger.error("Exception occurred during createNewDeployment Operation with DCAE", e);
@@ -212,7 +212,7 @@ public class DcaeDispatcherServices { LoggingUtils.setResponseContext("0", "Delete existing deployment success", this.getClass().getName());
return statusUrl;
} catch (Exception e) {
- //Log StatusCode during exception in metrics log
+ // Log StatusCode during exception in metrics log
LoggingUtils.setResponseContext("900", "Delete existing deployment failed", this.getClass().getName());
LoggingUtils.setErrorContext("900", "Delete existing deployment error");
logger.error("Exception occurred during deleteExistingDeployment Operation with DCAE", e);
diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java index 94ebacae5..4dfe089f9 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java @@ -50,10 +50,12 @@ import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.refprop.RefProp;
import org.onap.clamp.clds.util.LoggingUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
/**
* This class implements the communication with DCAE for the service inventory.
*/
+@Component
public class DcaeInventoryServices {
protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class);
@@ -107,12 +109,12 @@ public class DcaeInventoryServices { dcaeEvent.setEvent(DcaeEvent.EVENT_DISTRIBUTION);
LoggingUtils.setResponseContext("0", "Set inventory success", this.getClass().getName());
} catch (JsonProcessingException e) {
- LoggingUtils.setResponseContext("900", "Set inventory failed", this.getClass().getName());
- LoggingUtils.setErrorContext("900", "Set inventory error");
+ LoggingUtils.setResponseContext("900", "Set inventory failed", this.getClass().getName());
+ LoggingUtils.setErrorContext("900", "Set inventory error");
logger.error("Error during JSON decoding", e);
} catch (IOException ex) {
- LoggingUtils.setResponseContext("900", "Set inventory failed", this.getClass().getName());
- LoggingUtils.setErrorContext("900", "Set inventory error");
+ LoggingUtils.setResponseContext("900", "Set inventory failed", this.getClass().getName());
+ LoggingUtils.setErrorContext("900", "Set inventory error");
logger.error("Error during DCAE communication", ex);
} finally {
LoggingUtils.setTimeContext(startTime, new Date());
@@ -209,7 +211,7 @@ public class DcaeInventoryServices { * The vf UUID
* @return The DCAE inventory type id
*/
- public String createUpdateDCAEServiceType(String blueprintTemplate, String owner, String typeName, int typeVersion,
+ public String createupdateDCAEServiceType(String blueprintTemplate, String owner, String typeName, int typeVersion,
String asdcServiceId, String asdcResourceId) {
Date startTime = new Date();
LoggingUtils.setTargetContext("DCAE", "createDCAEServiceType");
@@ -237,20 +239,22 @@ public class DcaeInventoryServices { Object obj0 = parser.parse(responseStr);
JSONObject jsonObj = (JSONObject) obj0;
typeId = (String) jsonObj.get("typeId"); // need to save this
- // as
- // service_type_id
- // in model table
+ // as
+ // service_type_id
+ // in model table
} catch (IOException | ParseException e) {
logger.error("Exception occurred during createupdateDCAEServiceType Operation with DCAE", e);
throw new BadRequestException("Exception occurred during createupdateDCAEServiceType Operation with DCAE",
e);
} finally {
- if(typeId != null) {
- LoggingUtils.setResponseContext("0", "Create update DCAE ServiceType success", this.getClass().getName());
- } else {
- LoggingUtils.setResponseContext("900", "Create update DCAE ServiceType failed", this.getClass().getName());
+ if (typeId != null) {
+ LoggingUtils.setResponseContext("0", "Create update DCAE ServiceType success",
+ this.getClass().getName());
+ } else {
+ LoggingUtils.setResponseContext("900", "Create update DCAE ServiceType failed",
+ this.getClass().getName());
LoggingUtils.setErrorContext("900", "Create update DCAE ServiceType error");
- }
+ }
LoggingUtils.setTimeContext(startTime, new Date());
metricsLogger.info("createupdateDCAEServiceType complete");
}
diff --git a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java index aaa4a2c06..34655986d 100644 --- a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,41 +28,45 @@ import com.att.eelf.configuration.EELFManager; import java.util.UUID; -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.apache.camel.Exchange; +import org.apache.camel.Handler; import org.onap.clamp.clds.client.req.policy.PolicyClient; import org.onap.clamp.clds.model.prop.Holmes; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.refprop.RefProp; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Send Holmes info to policy api. */ -public class HolmesPolicyDelegate implements JavaDelegate { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(HolmesPolicyDelegate.class); +@Component +public class HolmesPolicyDelegate { + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(HolmesPolicyDelegate.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private PolicyClient policyClient; + private PolicyClient policyClient; @Autowired - private RefProp refProp; + private RefProp refProp; /** * Perform activity. Send Holmes info to policy api. * - * @param execution + * @param camelExchange + * The Camel Exchange object containing the properties */ - @Override - public void execute(DelegateExecution execution) { + @Handler + public void execute(Exchange camelExchange) { String holmesPolicyRequestUuid = UUID.randomUUID().toString(); - execution.setVariable("holmesPolicyRequestUuid", holmesPolicyRequestUuid); - ModelProperties prop = ModelProperties.create(execution); + camelExchange.setProperty("holmesPolicyRequestUuid", holmesPolicyRequestUuid); + ModelProperties prop = ModelProperties.create(camelExchange); Holmes holmes = prop.getType(Holmes.class); if (holmes.isFound()) { String responseMessage = policyClient.sendBasePolicyInOther(formatHolmesConfigBody(prop, holmes), holmes.getConfigPolicyName(), prop, holmesPolicyRequestUuid); if (responseMessage != null) { - execution.setVariable("holmesPolicyResponseMessage", responseMessage.getBytes()); + camelExchange.setProperty("holmesPolicyResponseMessage", responseMessage.getBytes()); } } } diff --git a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDeleteDelegate.java b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDeleteDelegate.java index 72db32852..28da14851 100644 --- a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDeleteDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDeleteDelegate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,34 +26,34 @@ package org.onap.clamp.clds.client; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import java.io.IOException; - -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.apache.camel.Exchange; +import org.apache.camel.Handler; import org.onap.clamp.clds.client.req.policy.PolicyClient; import org.onap.clamp.clds.model.prop.Holmes; import org.onap.clamp.clds.model.prop.ModelProperties; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Delete Holmes Policy via policy api. */ -public class HolmesPolicyDeleteDelegate implements JavaDelegate { - protected static final EELFLogger logger = EELFManager.getInstance() - .getLogger(HolmesPolicyDeleteDelegate.class); +@Component +public class HolmesPolicyDeleteDelegate { + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(HolmesPolicyDeleteDelegate.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private PolicyClient policyClient; + private PolicyClient policyClient; /** * Perform activity. Delete Holmes Policy via policy api. * - * @param execution - * @throws IOException + * @param camelExchange + * The Camel Exchange object containing the properties */ - @Override - public void execute(DelegateExecution execution) { - ModelProperties prop = ModelProperties.create(execution); + @Handler + public void execute(Exchange camelExchange) { + ModelProperties prop = ModelProperties.create(camelExchange); Holmes holmes = prop.getType(Holmes.class); if (holmes.isFound()) { prop.setCurrentModelElementId(holmes.getId()); diff --git a/src/main/java/org/onap/clamp/clds/client/OperationalPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/OperationalPolicyDelegate.java index e2d16c56c..77d7680bb 100644 --- a/src/main/java/org/onap/clamp/clds/client/OperationalPolicyDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/OperationalPolicyDelegate.java @@ -29,8 +29,8 @@ import com.att.eelf.configuration.EELFManager; import java.io.UnsupportedEncodingException; import java.util.Map; -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.apache.camel.Exchange; +import org.apache.camel.Handler; import org.onap.clamp.clds.client.req.policy.OperationalPolicyReq; import org.onap.clamp.clds.client.req.policy.PolicyClient; import org.onap.clamp.clds.model.prop.ModelProperties; @@ -41,41 +41,42 @@ import org.onap.clamp.clds.util.LoggingUtils; import org.onap.policy.api.AttributeType; import org.onap.policy.controlloop.policy.builder.BuilderException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Send Operational Policy info to policy api. It uses the policy code to define * the model and communicate with it. See also the PolicyClient class. - * */ -public class OperationalPolicyDelegate implements JavaDelegate { - protected static final EELFLogger logger = EELFManager.getInstance() - .getLogger(OperationalPolicyDelegate.class); +@Component +public class OperationalPolicyDelegate { + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(OperationalPolicyDelegate.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); /** * Automatically injected by Spring, define in CldsConfiguration as a bean. */ @Autowired - private PolicyClient policyClient; + private PolicyClient policyClient; /** * Automatically injected by Spring, define in CldsConfiguration as a bean. */ @Autowired - private RefProp refProp; + private RefProp refProp; /** * Perform activity. Send Operational Policy info to policy api. * - * @param execution - * The DelegateExecution + * @param camelExchange + * The Camel Exchange object containing the properties * @throws BuilderException * In case of issues with OperationalPolicyReq * @throws UnsupportedEncodingException * In case of issues with the Charset encoding */ - @Override - public void execute(DelegateExecution execution) throws BuilderException, UnsupportedEncodingException { + @Handler + public void execute(Exchange camelExchange) throws BuilderException, UnsupportedEncodingException { String responseMessage = null; - ModelProperties prop = ModelProperties.create(execution); + ModelProperties prop = ModelProperties.create(camelExchange); Policy policy = prop.getType(Policy.class); if (policy.isFound()) { for (PolicyChain policyChain : prop.getType(Policy.class).getPolicyChains()) { @@ -84,7 +85,7 @@ public class OperationalPolicyDelegate implements JavaDelegate { responseMessage = policyClient.sendBrmsPolicy(attributes, prop, LoggingUtils.getRequestId()); } if (responseMessage != null) { - execution.setVariable("operationalPolicyResponseMessage", responseMessage.getBytes()); + camelExchange.setProperty("operationalPolicyResponseMessage", responseMessage.getBytes()); } } } diff --git a/src/main/java/org/onap/clamp/clds/client/OperationalPolicyDeleteDelegate.java b/src/main/java/org/onap/clamp/clds/client/OperationalPolicyDeleteDelegate.java index 2bca639e1..4dd204080 100644 --- a/src/main/java/org/onap/clamp/clds/client/OperationalPolicyDeleteDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/OperationalPolicyDeleteDelegate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,35 +26,36 @@ package org.onap.clamp.clds.client; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import java.io.IOException; - -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.apache.camel.Exchange; +import org.apache.camel.Handler; import org.onap.clamp.clds.client.req.policy.PolicyClient; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.prop.Policy; import org.onap.clamp.clds.model.prop.PolicyChain; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Delete Operational Policy via policy api. */ -public class OperationalPolicyDeleteDelegate implements JavaDelegate { - protected static final EELFLogger logger = EELFManager.getInstance() +@Component +public class OperationalPolicyDeleteDelegate { + + protected static final EELFLogger logger = EELFManager.getInstance() .getLogger(OperationalPolicyDeleteDelegate.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private PolicyClient policyClient; + private PolicyClient policyClient; /** * Perform activity. Delete Operational Policy via policy api. * - * @param execution - * @throws IOException + * @param camelExchange + * The Camel Exchange object containing the properties */ - @Override - public void execute(DelegateExecution execution) { - ModelProperties prop = ModelProperties.create(execution); + @Handler + public void execute(Exchange camelExchange) { + ModelProperties prop = ModelProperties.create(camelExchange); Policy policy = prop.getType(Policy.class); prop.setCurrentModelElementId(policy.getId()); String responseMessage = ""; @@ -64,7 +65,7 @@ public class OperationalPolicyDeleteDelegate implements JavaDelegate { responseMessage = policyClient.deleteBrms(prop); } if (responseMessage != null) { - execution.setVariable("operationalPolicyDeleteResponseMessage", responseMessage.getBytes()); + camelExchange.setProperty("operationalPolicyDeleteResponseMessage", responseMessage.getBytes()); } } } diff --git a/src/main/java/org/onap/clamp/clds/client/SdcSendReqDelegate.java b/src/main/java/org/onap/clamp/clds/client/SdcSendReqDelegate.java index b582349f6..e21bfce41 100644 --- a/src/main/java/org/onap/clamp/clds/client/SdcSendReqDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/SdcSendReqDelegate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,82 +26,88 @@ package org.onap.clamp.clds.client; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import java.io.IOException; +import java.security.GeneralSecurityException; import java.util.List; -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.apache.camel.Exchange; +import org.apache.camel.Handler; +import org.apache.commons.codec.DecoderException; import org.onap.clamp.clds.client.req.sdc.SdcCatalogServices; import org.onap.clamp.clds.client.req.sdc.SdcReq; import org.onap.clamp.clds.model.DcaeEvent; +import org.onap.clamp.clds.model.prop.Global; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.refprop.RefProp; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Send control loop model to dcae proxy. */ -public class SdcSendReqDelegate implements JavaDelegate { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcSendReqDelegate.class); +@Component +public class SdcSendReqDelegate { + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcSendReqDelegate.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private SdcReq sdcReq; + private SdcCatalogServices sdcCatalogServices; @Autowired - private RefProp refProp; + private SdcReq sdcReq; @Autowired - private SdcCatalogServices sdcCatalogServices; - private String baseUrl; - private String artifactType; - private String locationArtifactType; - private String artifactLabel; - private String locationArtifactLabel; + private RefProp refProp; /** * Perform activity. Send to sdc proxy. * - * @param execution + * @param camelExchange + * The camel object that contains all fields + * @throws DecoderException + * In case of issues with password decryption + * @throws GeneralSecurityException + * In case of issues with password decryption + * @throws IOException + * In case of issues with file opening */ - @Override - public void execute(DelegateExecution execution) throws Exception { - String userid = (String) execution.getVariable("userid"); - logger.info("userid=" + userid); - String docText = new String((byte[]) execution.getVariable("docText")); - String artifactName = (String) execution.getVariable("controlName") + DcaeEvent.ARTIFACT_NAME_SUFFIX; - execution.setVariable("artifactName", artifactName); - getSdcAttributes((String) execution.getVariable("controlName")); - ModelProperties prop = ModelProperties.create(execution); - String bluprintPayload = sdcReq.formatBlueprint(prop, docText); + @Handler + public void execute(Exchange camelExchange) throws GeneralSecurityException, DecoderException, IOException { + String controlName = (String) camelExchange.getProperty("controlName"); + String baseUrl = refProp.getStringValue("sdc.serviceUrl"); + String artifactLabel = sdcReq + .normalizeResourceInstanceName(refProp.getStringValue("sdc.artifactLabel") + "-" + controlName); + String locationArtifactLabel = sdcReq + .normalizeResourceInstanceName(refProp.getStringValue("sdc.locationArtifactLabel") + "-" + controlName); + String artifactType = refProp.getStringValue("sdc.artifactType"); + String locationArtifactType = refProp.getStringValue("sdc.locationArtifactType"); + String userid = (String) camelExchange.getProperty("userid"); + String docText = (String) camelExchange.getProperty("docText"); + String artifactName = (String) camelExchange.getProperty("controlName") + DcaeEvent.ARTIFACT_NAME_SUFFIX; + camelExchange.setProperty("artifactName", artifactName); + ModelProperties prop = ModelProperties.create(camelExchange); + String bluprintPayload; + bluprintPayload = sdcReq.formatBlueprint(prop, docText); // no need to upload blueprint for Holmes, thus blueprintPayload for // Holmes is empty if (!bluprintPayload.isEmpty()) { String formattedSdcReq = sdcReq.formatSdcReq(bluprintPayload, artifactName, artifactLabel, artifactType); if (formattedSdcReq != null) { - execution.setVariable("formattedArtifactReq", formattedSdcReq.getBytes()); + camelExchange.setProperty("formattedArtifactReq", formattedSdcReq.getBytes()); } - List<String> sdcReqUrlsList = sdcReq.getSdcReqUrlsList(prop, baseUrl, sdcCatalogServices, execution); + Global globalProps = prop.getGlobal(); + if (globalProps != null && globalProps.getService() != null) { + String serviceInvariantUUID = globalProps.getService(); + camelExchange.setProperty("serviceInvariantUUID", serviceInvariantUUID); + } + List<String> sdcReqUrlsList = sdcReq.getSdcReqUrlsList(prop, baseUrl); String sdcLocationsPayload = sdcReq.formatSdcLocationsReq(prop, artifactName); - String locationArtifactName = (String) execution.getVariable("controlName") + "-location.json"; + String locationArtifactName = (String) camelExchange.getProperty("controlName") + "-location.json"; String formattedSdcLocationReq = sdcReq.formatSdcReq(sdcLocationsPayload, locationArtifactName, locationArtifactLabel, locationArtifactType); if (formattedSdcLocationReq != null) { - execution.setVariable("formattedLocationReq", formattedSdcLocationReq.getBytes()); + camelExchange.setProperty("formattedLocationReq", formattedSdcLocationReq.getBytes()); } sdcCatalogServices.uploadToSdc(prop, userid, sdcReqUrlsList, formattedSdcReq, formattedSdcLocationReq, artifactName, locationArtifactName); } } - - /** - * Method to get sdc service values from properties file. - * - * @param controlName - */ - private void getSdcAttributes(String controlName) { - baseUrl = refProp.getStringValue("sdc.serviceUrl"); - artifactLabel = sdcReq - .normalizeResourceInstanceName(refProp.getStringValue("sdc.artifactLabel") + "-" + controlName); - locationArtifactLabel = sdcReq - .normalizeResourceInstanceName(refProp.getStringValue("sdc.locationArtifactLabel") + "-" + controlName); - artifactType = refProp.getStringValue("sdc.artifactType"); - locationArtifactType = refProp.getStringValue("sdc.locationArtifactType"); - } } diff --git a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java index 035e64a61..2657a03f9 100644 --- a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,44 +28,46 @@ import com.att.eelf.configuration.EELFManager; import java.util.UUID; -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.apache.camel.Exchange; +import org.apache.camel.Handler; import org.onap.clamp.clds.client.req.policy.PolicyClient; import org.onap.clamp.clds.client.req.tca.TcaRequestFormatter; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.prop.Tca; import org.onap.clamp.clds.model.refprop.RefProp; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Send Tca info to policy api. - * - * */ -public class TcaPolicyDelegate implements JavaDelegate { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaPolicyDelegate.class); +@Component +public class TcaPolicyDelegate { + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaPolicyDelegate.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private RefProp refProp; + private RefProp refProp; @Autowired - private PolicyClient policyClient; + private PolicyClient policyClient; /** * Perform activity. Send Tca info to policy api. * - * @param execution + * @param camelExchange + * The Camel Exchange object containing the properties */ - @Override - public void execute(DelegateExecution execution) throws Exception { + @Handler + public void execute(Exchange camelExchange) { String tcaPolicyRequestUuid = UUID.randomUUID().toString(); - execution.setVariable("tcaPolicyRequestUuid", tcaPolicyRequestUuid); - ModelProperties prop = ModelProperties.create(execution); + camelExchange.setProperty("tcaPolicyRequestUuid", tcaPolicyRequestUuid); + ModelProperties prop = ModelProperties.create(camelExchange); Tca tca = prop.getType(Tca.class); if (tca.isFound()) { String policyJson = TcaRequestFormatter.createPolicyJson(refProp, prop); String responseMessage = policyClient.sendMicroServiceInOther(policyJson, prop); if (responseMessage != null) { - execution.setVariable("tcaPolicyResponseMessage", responseMessage.getBytes()); + camelExchange.setProperty("tcaPolicyResponseMessage", responseMessage.getBytes()); } } } diff --git a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDeleteDelegate.java b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDeleteDelegate.java index e88b720a7..c2aa303a5 100644 --- a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDeleteDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDeleteDelegate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,46 +23,44 @@ package org.onap.clamp.clds.client; -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +import org.apache.camel.Exchange; +import org.apache.camel.Handler; import org.onap.clamp.clds.client.req.policy.PolicyClient; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.prop.Tca; import org.springframework.beans.factory.annotation.Autowired; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; +import org.springframework.stereotype.Component; /** * Delete Tca Policy via policy api. - * - * */ -public class TcaPolicyDeleteDelegate implements JavaDelegate { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaPolicyDeleteDelegate.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); +@Component +public class TcaPolicyDeleteDelegate { + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(TcaPolicyDeleteDelegate.class); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - private PolicyClient policyClient; + private PolicyClient policyClient; /** * Perform activity. Delete Tca Policy via policy api. * - * @param execution + * @param camelExchange + * The Camel Exchange object containing the properties */ - @Override - public void execute(DelegateExecution execution) throws Exception { - - ModelProperties prop = ModelProperties.create(execution); + @Handler + public void execute(Exchange camelExchange) { + ModelProperties prop = ModelProperties.create(camelExchange); Tca tca = prop.getType(Tca.class); if (tca.isFound()) { prop.setCurrentModelElementId(tca.getId()); - String responseMessage = policyClient.deleteMicrosService(prop); if (responseMessage != null) { - execution.setVariable("tcaPolicyDeleteResponseMessage", responseMessage.getBytes()); + camelExchange.setProperty("tcaPolicyDeleteResponseMessage", responseMessage.getBytes()); } } } - } diff --git a/src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java b/src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java index b4cad9496..046003309 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java +++ b/src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java @@ -57,23 +57,26 @@ import org.onap.policy.api.PushPolicyParameters; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; /** * Policy utility methods - specifically, send the policy. */ +@Component public class PolicyClient { - protected static final String POLICY_PREFIX_BASE = "Config_"; - protected static final String LOG_POLICY_PREFIX = "Response is "; + + protected static final String POLICY_PREFIX_BASE = "Config_"; + protected static final String LOG_POLICY_PREFIX = "Response is "; protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyClient.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - protected static final String POLICY_MSTYPE_PROPERTY_NAME = "policy.ms.type"; - protected static final String POLICY_ONAPNAME_PROPERTY_NAME = "policy.onap.name"; + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + protected static final String POLICY_MSTYPE_PROPERTY_NAME = "policy.ms.type"; + protected static final String POLICY_ONAPNAME_PROPERTY_NAME = "policy.onap.name"; @Value("${org.onap.clamp.config.files.cldsPolicyConfig:'classpath:/clds/clds-policy-config.properties'}") - protected String cldsPolicyConfigFile; + protected String cldsPolicyConfigFile; @Autowired - protected ApplicationContext appContext; + protected ApplicationContext appContext; @Autowired - protected RefProp refProp; + protected RefProp refProp; /** * Perform BRMS policy type. @@ -229,19 +232,19 @@ public class PolicyClient { responseMessage = response.getResponseMessage(); } } catch (Exception e) { - LoggingUtils.setResponseContext("900", "Policy send failed", this.getClass().getName()); - LoggingUtils.setErrorContext("900", "Policy send error"); + LoggingUtils.setResponseContext("900", "Policy send failed", this.getClass().getName()); + LoggingUtils.setErrorContext("900", "Policy send error"); logger.error("Exception occurred during policy communication", e); throw new PolicyClientException("Exception while communicating with Policy", e); } logger.info(LOG_POLICY_PREFIX + responseMessage); LoggingUtils.setTimeContext(startTime, new Date()); if (response.getResponseCode() == 200) { - LoggingUtils.setResponseContext("0", "Policy send success", this.getClass().getName()); + LoggingUtils.setResponseContext("0", "Policy send success", this.getClass().getName()); logger.info("Policy send successful"); metricsLogger.info("Policy send success"); } else { - LoggingUtils.setResponseContext("900", "Policy send failed", this.getClass().getName()); + LoggingUtils.setResponseContext("900", "Policy send failed", this.getClass().getName()); logger.warn("Policy send failed: " + responseMessage); metricsLogger.info("Policy send failure"); throw new BadRequestException("Policy send failed: " + responseMessage); @@ -278,25 +281,25 @@ public class PolicyClient { PolicyChangeResponse response; String responseMessage = ""; try { - LoggingUtils.setTargetContext("Policy", "pushPolicy"); + LoggingUtils.setTargetContext("Policy", "pushPolicy"); logger.info("Attempting to push policy..."); response = getPolicyEngine().pushPolicy(pushPolicyParameters); if (response != null) { responseMessage = response.getResponseMessage(); } } catch (Exception e) { - LoggingUtils.setResponseContext("900", "Policy push failed", this.getClass().getName()); + LoggingUtils.setResponseContext("900", "Policy push failed", this.getClass().getName()); LoggingUtils.setErrorContext("900", "Policy push error"); logger.error("Exception occurred during policy communication", e); throw new PolicyClientException("Exception while communicating with Policy", e); } logger.info(LOG_POLICY_PREFIX + responseMessage); if (response != null && (response.getResponseCode() == 200 || response.getResponseCode() == 204)) { - LoggingUtils.setResponseContext("0", "Policy push success", this.getClass().getName()); + LoggingUtils.setResponseContext("0", "Policy push success", this.getClass().getName()); logger.info("Policy push successful"); metricsLogger.info("Policy push success"); } else { - LoggingUtils.setResponseContext("900", "Policy push failed", this.getClass().getName()); + LoggingUtils.setResponseContext("900", "Policy push failed", this.getClass().getName()); logger.warn("Policy push failed: " + responseMessage); metricsLogger.info("Policy push failure"); throw new BadRequestException("Policy push failed: " + responseMessage); @@ -350,7 +353,7 @@ public class PolicyClient { private PolicyEngine getPolicyEngine() { PolicyEngine policyEngine; try { - policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); + policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getURL().getPath()); } catch (IOException e1) { throw new PolicyClientException("Exception when opening policy config file", e1); } catch (PolicyEngineException e) { @@ -399,7 +402,6 @@ public class PolicyClient { * * @param prop * The ModelProperties - * * @return The response message from policy */ protected String deletePolicy(ModelProperties prop, String policyType) { diff --git a/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcCatalogServices.java b/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcCatalogServices.java index 6684f1a1e..45dbf81fe 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcCatalogServices.java +++ b/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcCatalogServices.java @@ -60,7 +60,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpHeaders;
import org.onap.clamp.clds.exception.SdcCommunicationException;
import org.onap.clamp.clds.model.CldsAlarmCondition;
-import org.onap.clamp.clds.model.CldsDBServiceCache;
import org.onap.clamp.clds.model.CldsSdcArtifact;
import org.onap.clamp.clds.model.CldsSdcResource;
import org.onap.clamp.clds.model.CldsSdcResourceBasicInfo;
@@ -76,23 +75,25 @@ import org.onap.clamp.clds.model.refprop.RefProp; import org.onap.clamp.clds.util.CryptoUtils;
import org.onap.clamp.clds.util.LoggingUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class SdcCatalogServices {
private static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcCatalogServices.class);
private static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
- private static final String RESOURCE_VF_TYPE = "VF";
- private static final String RESOURCE_VFC_TYPE = "VFC";
- private static final String RESOURCE_CVFC_TYPE = "CVFC";
+ private static final String RESOURCE_VF_TYPE = "VF";
+ private static final String RESOURCE_VFC_TYPE = "VFC";
+ private static final String RESOURCE_CVFC_TYPE = "CVFC";
private static final String SDC_REQUESTID_PROPERTY_NAME = "sdc.header.requestId";
- private static final String SDC_METADATA_URL_PREFIX = "/metadata";
- private static final String SDC_INSTANCE_ID_PROPERTY_NAME = "sdc.InstanceID";
- private static final String SDC_CATALOG_URL_PROPERTY_NAME = "sdc.catalog.url";
- private static final String SDC_SERVICE_URL_PROPERTY_NAME = "sdc.serviceUrl";
- private static final String SDC_INSTANCE_ID_CLAMP = "CLAMP-Tool";
- private static final String RESOURCE_URL_PREFIX = "resources";
+ private static final String SDC_METADATA_URL_PREFIX = "/metadata";
+ private static final String SDC_INSTANCE_ID_PROPERTY_NAME = "sdc.InstanceID";
+ private static final String SDC_CATALOG_URL_PROPERTY_NAME = "sdc.catalog.url";
+ private static final String SDC_SERVICE_URL_PROPERTY_NAME = "sdc.serviceUrl";
+ private static final String SDC_INSTANCE_ID_CLAMP = "CLAMP-Tool";
+ private static final String RESOURCE_URL_PREFIX = "resources";
@Autowired
- private RefProp refProp;
+ private RefProp refProp;
/**
* Return SDC id and pw as a HTTP Basic Auth string (for example: Basic
@@ -131,7 +132,7 @@ public class SdcCatalogServices { LoggingUtils.setTargetContext("SDC", "getSdcServicesInformation");
try {
String url = baseUrl;
- if (uuid != null) {
+ if (uuid != null && !uuid.isEmpty()) {
url = baseUrl + "/" + uuid + SDC_METADATA_URL_PREFIX;
}
URL urlObj = new URL(url);
@@ -142,7 +143,7 @@ public class SdcCatalogServices { conn.setRequestProperty(refProp.getStringValue(SDC_REQUESTID_PROPERTY_NAME), LoggingUtils.getRequestId());
conn.setRequestMethod("GET");
String resp = getResponse(conn);
- logger.info(resp);
+ logger.debug("Services list received from SDC:" + resp);
// metrics log
LoggingUtils.setResponseContext("0", "Get sdc services success", this.getClass().getName());
return resp;
@@ -333,7 +334,6 @@ public class SdcCatalogServices { }
}
-
// upload artifact to sdc based on serviceUUID and resource name on url
private String uploadArtifactToSdc(ModelProperties prop, String userid, String url, String formattedSdcReq) {
// Verify whether it is triggered by Validation Test button from UI
@@ -422,23 +422,11 @@ public class SdcCatalogServices { }
}
- public CldsDBServiceCache getCldsDbServiceCacheUsingCldsServiceData(CldsServiceData cldsServiceData) {
- try {
- CldsDBServiceCache cldsDbServiceCache = new CldsDBServiceCache();
- cldsDbServiceCache.setCldsDataInstream(cldsServiceData);
- cldsDbServiceCache.setInvariantId(cldsServiceData.getServiceInvariantUUID());
- cldsDbServiceCache.setServiceId(cldsServiceData.getServiceUUID());
- return cldsDbServiceCache;
- } catch (IOException e) {
- logger.error("Exception when getting service in cache", e);
- throw new SdcCommunicationException("Exception when getting service in cache", e);
- }
- }
-
/**
* Check if the SDC Info in cache has expired.
*
* @param cldsServiceData
+ * The object representing the service data
* @return boolean flag
* @throws GeneralSecurityException
* In case of issues with the decryting the encrypted password
@@ -447,23 +435,25 @@ public class SdcCatalogServices { */
public boolean isCldsSdcCacheDataExpired(CldsServiceData cldsServiceData)
throws GeneralSecurityException, DecoderException {
- boolean expired = false;
if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) {
String cachedServiceUuid = cldsServiceData.getServiceUUID();
String latestServiceUuid = getServiceUuidFromServiceInvariantId(cldsServiceData.getServiceInvariantUUID());
- String defaultRecordAge = refProp.getStringValue("CLDS_SERVICE_CACHE_MAX_SECONDS");
- if ((!cachedServiceUuid.equalsIgnoreCase(latestServiceUuid)) || (cldsServiceData.getAgeOfRecord() != null
- && cldsServiceData.getAgeOfRecord() > Long.parseLong(defaultRecordAge))) {
- expired = true;
+ String configuredMaxAge = refProp.getStringValue("clds.service.cache.invalidate.after.seconds");
+ if (configuredMaxAge == null) {
+ logger.warn(
+ "clds.service.cache.invalidate.after.seconds NOT set in clds-reference.properties file, taking 60s as default");
+ configuredMaxAge = "60";
}
+ return (!cachedServiceUuid.equalsIgnoreCase(latestServiceUuid)) || (cldsServiceData.getAgeOfRecord() != null
+ && cldsServiceData.getAgeOfRecord() > Long.parseLong(configuredMaxAge));
} else {
- expired = true;
+ return true;
}
- return expired;
}
/**
- * Get the Service Data with Alarm Conditions for a given invariantServiceUuid.
+ * Get the Service Data with Alarm Conditions for a given
+ * invariantServiceUuid.
*
* @param invariantServiceUuid
* @return The CldsServiceData
@@ -510,8 +500,7 @@ public class SdcCatalogServices { cldsServiceData.setCldsVfs(cldsVfDataList);
// For each vf in the list , add all vfc's
getAllVfcForVfList(cldsVfDataList, catalogUrl);
- logger.info("value of cldsServiceData:" + cldsServiceData);
- logger.info("value of cldsServiceData:" + cldsServiceData.getServiceInvariantUUID());
+ logger.info("Invariant Service ID of cldsServiceData:" + cldsServiceData.getServiceInvariantUUID());
}
}
}
@@ -606,17 +595,17 @@ public class SdcCatalogServices { private void handleVFCtypeNode(ObjectNode currVfcNode, List<CldsVfcData> cldsVfcDataList) {
CldsVfcData currCldsVfcData = new CldsVfcData();
- TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName");
- TextNode vfcInvariantResourceUuid = (TextNode) currVfcNode.get("resourceInvariantUUID");
- currCldsVfcData.setVfcName(vfcResourceName.textValue());
- currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUuid.textValue());
- cldsVfcDataList.add(currCldsVfcData);
+ TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName");
+ TextNode vfcInvariantResourceUuid = (TextNode) currVfcNode.get("resourceInvariantUUID");
+ currCldsVfcData.setVfcName(vfcResourceName.textValue());
+ currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUuid.textValue());
+ cldsVfcDataList.add(currCldsVfcData);
}
private void handleCVFCtypeNode(ObjectNode currVfcNode, List<CldsVfcData> cldsVfcDataList) {
handleVFCtypeNode(currVfcNode, cldsVfcDataList);
- cldsVfcDataList.addAll(getVFCfromCVFC(currVfcNode.get("resourceUUID").textValue()));
- }
+ cldsVfcDataList.addAll(getVFCfromCVFC(currVfcNode.get("resourceUUID").textValue()));
+ }
private List<CldsVfcData> getVFCfromCVFC(String resourceUUID) {
String catalogUrl = refProp.getStringValue(SDC_CATALOG_URL_PROPERTY_NAME);
@@ -786,7 +775,6 @@ public class SdcCatalogServices { cldsAlarmConditionList.add(cldsAlarmCondition);
}
-
// Get the responses for the current artifact from the artifacts URL.
private String getResponsesFromArtifactUrl(String artifactsUrl) {
String hostUrl = refProp.getStringValue("sdc.hostUrl");
@@ -802,9 +790,9 @@ public class SdcCatalogServices { * Service to services/resources/artifacts from sdc.Pass alarmConditions as
* true to get alarm conditons from artifact url and else it is false
*
- * @param url The URL to trigger
+ * @param url
+ * The URL to trigger
* @return The String containing the payload
- *
*/
public String getCldsServicesOrResourcesBasedOnURL(String url) {
Date startTime = new Date();
@@ -832,12 +820,12 @@ public class SdcCatalogServices { logger.error("Exception occurred during query to SDC", e);
return "";
} catch (DecoderException e) {
- LoggingUtils.setResponseContext("900", "Get sdc resources failed", this.getClass().getName());
+ LoggingUtils.setResponseContext("900", "Get sdc resources failed", this.getClass().getName());
LoggingUtils.setErrorContext("900", "Get sdc resources error");
logger.error("Exception when attempting to decode the Hex string", e);
throw new SdcCommunicationException("Exception when attempting to decode the Hex string", e);
} catch (GeneralSecurityException e) {
- LoggingUtils.setResponseContext("900", "Get sdc resources failed", this.getClass().getName());
+ LoggingUtils.setResponseContext("900", "Get sdc resources failed", this.getClass().getName());
LoggingUtils.setErrorContext("900", "Get sdc resources error");
logger.error("Exception when attempting to decrypt the encrypted password", e);
throw new SdcCommunicationException("Exception when attempting to decrypt the encrypted password", e);
@@ -901,7 +889,7 @@ public class SdcCatalogServices { byIdObjectNode.putPOJO("byAlertDescription", alertDescObjectNodeByAlert);
globalPropsJson = decodeGlobalProp(globalProps, mapper);
globalPropsJson.putPOJO("shared", byIdObjectNode);
- logger.info("value of objNode:" + globalPropsJson);
+ logger.info("Global properties JSON created with SDC info:" + globalPropsJson);
} else {
/**
* to create json with total properties when no serviceUUID passed
diff --git a/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcReq.java b/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcReq.java index d4b5b086d..3fb53a3b6 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcReq.java +++ b/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcReq.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,8 +25,6 @@ package org.onap.clamp.clds.client.req.sdc; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; @@ -42,7 +40,6 @@ import java.util.List; import java.util.Map.Entry; import org.apache.commons.codec.DecoderException; -import org.camunda.bpm.engine.delegate.DelegateExecution; import org.onap.clamp.clds.client.req.tca.TcaRequestFormatter; import org.onap.clamp.clds.model.CldsSdcResource; import org.onap.clamp.clds.model.CldsSdcServiceDetail; @@ -51,15 +48,20 @@ import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.prop.Tca; import org.onap.clamp.clds.model.refprop.RefProp; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * Construct a Sdc request given CLDS objects. */ +@Component public class SdcReq { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcReq.class); + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcReq.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Autowired - protected RefProp refProp; + private SdcCatalogServices sdcCatalogServices; + @Autowired + protected RefProp refProp; /** * Format the Blueprint from a Yaml @@ -68,17 +70,11 @@ public class SdcReq { * The ModelProperties describing the clds model * @param docText * The Yaml file that must be converted - * * @return A String containing the BluePrint - * @throws JsonParseException - * In case of issues - * @throws JsonMappingException - * In case of issues * @throws IOException * In case of issues */ - public String formatBlueprint(ModelProperties prop, String docText) - throws JsonParseException, JsonMappingException, IOException { + public String formatBlueprint(ModelProperties prop, String docText) throws IOException { String yamlvalue = getYamlvalue(docText); String updatedBlueprint = ""; Tca tca = prop.getType(Tca.class); @@ -96,7 +92,6 @@ public class SdcReq { * The ModelProperties describing the clds model * @param artifactName * The name of the artifact - * * @return SDC Locations request in the JSON Format */ public String formatSdcLocationsReq(ModelProperties prop, String artifactName) { @@ -127,11 +122,8 @@ public class SdcReq { * @param artifactType * The type of the artifact * @return formatted SDC Request - * @throws IOException - * In case of issues */ - public String formatSdcReq(String payloadData, String artifactName, String artifactLabel, String artifactType) - throws IOException { + public String formatSdcReq(String payloadData, String artifactName, String artifactLabel, String artifactType) { logger.info("artifact=" + payloadData); String base64Artifact = Base64.getEncoder().encodeToString(payloadData.getBytes(StandardCharsets.UTF_8)); return "{ \n" + "\"payloadData\" : \"" + base64Artifact + "\",\n" + "\"artifactLabel\" : \"" + artifactLabel @@ -144,46 +136,47 @@ public class SdcReq { * To get List of urls for all vfresources * * @param prop + * The model properties JSON describing the closed loop flow * @param baseUrl - * @param sdcCatalogServices - * @param execution - * @return + * The URL to trigger + * @return A list of Service URL * @throws GeneralSecurityException * In case of issues when decrypting the password * @throws DecoderException * In case of issues when decoding the Hex String */ - public List<String> getSdcReqUrlsList(ModelProperties prop, String baseUrl, SdcCatalogServices sdcCatalogServices, - DelegateExecution execution) throws GeneralSecurityException, DecoderException { - // TODO : refact and regroup with very similar code + public List<String> getSdcReqUrlsList(ModelProperties prop, String baseUrl) + throws GeneralSecurityException, DecoderException { List<String> urlList = new ArrayList<>(); Global globalProps = prop.getGlobal(); - if (globalProps != null) { - if (globalProps.getService() != null) { - String serviceInvariantUUID = globalProps.getService(); - execution.setVariable("serviceInvariantUUID", serviceInvariantUUID); - List<String> resourceVfList = globalProps.getResourceVf(); - String serviceUUID = sdcCatalogServices.getServiceUuidFromServiceInvariantId(serviceInvariantUUID); - String sdcServicesInformation = sdcCatalogServices.getSdcServicesInformation(serviceUUID); - CldsSdcServiceDetail cldsSdcServiceDetail = sdcCatalogServices - .getCldsSdcServiceDetailFromJson(sdcServicesInformation); - if (cldsSdcServiceDetail != null && resourceVfList != null) { - List<CldsSdcResource> cldsSdcResourcesList = cldsSdcServiceDetail.getResources(); - if (cldsSdcResourcesList != null && !cldsSdcResourcesList.isEmpty()) { - for (CldsSdcResource CldsSdcResource : cldsSdcResourcesList) { - if (CldsSdcResource != null && CldsSdcResource.getResoucreType() != null - && CldsSdcResource.getResoucreType().equalsIgnoreCase("VF") - && resourceVfList.contains(CldsSdcResource.getResourceInvariantUUID())) { - String normalizedResourceInstanceName = normalizeResourceInstanceName( - CldsSdcResource.getResourceInstanceName()); - String svcUrl = baseUrl + "/" + serviceUUID + "/resourceInstances/" - + normalizedResourceInstanceName + "/artifacts"; - urlList.add(svcUrl); - } + if (globalProps != null && globalProps.getService() != null) { + String serviceInvariantUUID = globalProps.getService(); + List<String> resourceVfList = globalProps.getResourceVf(); + String serviceUUID = sdcCatalogServices.getServiceUuidFromServiceInvariantId(serviceInvariantUUID); + CldsSdcServiceDetail cldsSdcServiceDetail = sdcCatalogServices + .getCldsSdcServiceDetailFromJson(sdcCatalogServices.getSdcServicesInformation(serviceUUID)); + if (cldsSdcServiceDetail != null && resourceVfList != null) { + List<CldsSdcResource> cldsSdcResourcesList = cldsSdcServiceDetail.getResources(); + if (cldsSdcResourcesList != null && !cldsSdcResourcesList.isEmpty()) { + for (CldsSdcResource cldsSdcResource : cldsSdcResourcesList) { + if (cldsSdcResource != null && cldsSdcResource.getResoucreType() != null + && cldsSdcResource.getResoucreType().equalsIgnoreCase("VF") + && resourceVfList.contains(cldsSdcResource.getResourceInvariantUUID())) { + String normalizedResourceInstanceName = normalizeResourceInstanceName( + cldsSdcResource.getResourceInstanceName()); + String svcUrl = baseUrl + "/" + serviceUUID + "/resourceInstances/" + + normalizedResourceInstanceName + "/artifacts"; + urlList.add(svcUrl); + } else { + logger.warn("The VF Resource invariant UUID (" + cldsSdcResource.getResourceInvariantUUID() + + ") has not been found in the Service (Invariant ID:" + serviceInvariantUUID + + ")VF resource list"); } } } } + } else { + logger.warn("GlobalProperties json is empty, skipping getSdcReqUrlsList and returning empty list"); } return urlList; } @@ -201,16 +194,18 @@ public class SdcReq { } /** - * Method to get yaml/template properties value from json + * Method to get yaml/template properties value from json. * - * @param docText - * @return + * @param jsonGlobal + * The Json containing a Yaml file + * @return The yaml extracted from the JSON * @throws IOException + * In case of issues with the Json parser */ - public String getYamlvalue(String docText) throws IOException { + protected String getYamlvalue(String jsonGlobal) throws IOException { ObjectMapper objectMapper = new ObjectMapper(); String yamlFileValue = ""; - ObjectNode root = objectMapper.readValue(docText, ObjectNode.class); + ObjectNode root = objectMapper.readValue(jsonGlobal, ObjectNode.class); Iterator<Entry<String, JsonNode>> entryItr = root.fields(); while (entryItr.hasNext()) { Entry<String, JsonNode> entry = entryItr.next(); diff --git a/src/main/java/org/onap/clamp/clds/config/CldsConfiguration.java b/src/main/java/org/onap/clamp/clds/config/CldsConfiguration.java index b99d3a96c..ae9704109 100644 --- a/src/main/java/org/onap/clamp/clds/config/CldsConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/config/CldsConfiguration.java @@ -26,21 +26,7 @@ package org.onap.clamp.clds.config; import javax.sql.DataSource; import javax.xml.transform.TransformerConfigurationException; -import org.onap.clamp.clds.client.CldsEventDelegate; -import org.onap.clamp.clds.client.DcaeDispatcherServices; -import org.onap.clamp.clds.client.DcaeInventoryServices; -import org.onap.clamp.clds.client.HolmesPolicyDelegate; -import org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate; -import org.onap.clamp.clds.client.OperationalPolicyDelegate; -import org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate; -import org.onap.clamp.clds.client.SdcSendReqDelegate; -import org.onap.clamp.clds.client.TcaPolicyDelegate; -import org.onap.clamp.clds.client.TcaPolicyDeleteDelegate; -import org.onap.clamp.clds.client.req.policy.PolicyClient; -import org.onap.clamp.clds.client.req.sdc.SdcCatalogServices; -import org.onap.clamp.clds.client.req.sdc.SdcReq; import org.onap.clamp.clds.dao.CldsDao; -import org.onap.clamp.clds.model.refprop.RefProp; import org.onap.clamp.clds.transform.XslTransformer; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.PropertiesFactoryBean; @@ -85,74 +71,4 @@ public class CldsConfiguration { xslTransformer.setXslResourceName("xsl/clds-bpmn-transformer.xsl"); return xslTransformer; } - - @Bean - public RefProp getRefProp() { - return new RefProp(); - } - - @Bean - public SdcReq getSdcReq() { - return new SdcReq(); - } - - @Bean - public PolicyClient getPolicyClient() { - return new PolicyClient(); - } - - @Bean(name = "cldsEventDelegate") - public CldsEventDelegate getCldsEventDelegate() { - return new CldsEventDelegate(); - } - - @Bean(name = "sdcSendReqDelegate") - public SdcSendReqDelegate getSdcSendReqDelegate() { - return new SdcSendReqDelegate(); - } - - @Bean(name = "operationalPolicyDelegate") - public OperationalPolicyDelegate getOperationalPolicyDelegate() { - return new OperationalPolicyDelegate(); - } - - @Bean(name = "operationalPolicyDeleteDelegate") - public OperationalPolicyDeleteDelegate getOperationalPolicyDeleteDelegate() { - return new OperationalPolicyDeleteDelegate(); - } - - @Bean(name = "sdcCatalogServices") - public SdcCatalogServices getSdcCatalogServices() { - return new SdcCatalogServices(); - } - - @Bean(name = "dcaeDispatcherServices") - public DcaeDispatcherServices getDcaeDispatcherServices() { - return new DcaeDispatcherServices(); - } - - @Bean(name = "dcaeInventoryServices") - public DcaeInventoryServices getDcaeInventoryServices() { - return new DcaeInventoryServices(); - } - - @Bean(name = "tcaPolicyDelegate") - public TcaPolicyDelegate getTcaPolicyDelegate() { - return new TcaPolicyDelegate(); - } - - @Bean(name = "tcaPolicyDeleteDelegate") - public TcaPolicyDeleteDelegate getTcaPolicyDeleteDelegate() { - return new TcaPolicyDeleteDelegate(); - } - - @Bean(name = "holmesPolicyDelegate") - public HolmesPolicyDelegate getHolmesPolicyDelegate() { - return new HolmesPolicyDelegate(); - } - - @Bean(name = "holmesPolicyDeleteDelegate") - public HolmesPolicyDeleteDelegate getHolmesPolicyDeleteDelegate() { - return new HolmesPolicyDeleteDelegate(); - } }
\ No newline at end of file diff --git a/src/main/java/org/onap/clamp/clds/exception/CldsDelegateException.java b/src/main/java/org/onap/clamp/clds/exception/CldsDelegateException.java new file mode 100644 index 000000000..3a6a81689 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/exception/CldsDelegateException.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2018 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============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.exception; + +/** + * New exception to CldsDelegate errors. + */ +public class CldsDelegateException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = -2705212640916671093L; + + /** + * This constructor can be used to create a new CldsDelegateException. + * + * @param message + * A string message detailing the problem + * @param e + * The exception sent by the code + */ + public CldsDelegateException(String message, Throwable e) { + super(message, e); + } + + /** + * This constructor can be used to create a new CldsDelegateException. Use + * this constructor only if you are creating a new exception stack, not if + * an exception was already raised by another code. + * + * @param message + * A string message detailing the problem + */ + public CldsDelegateException(String message) { + super(message); + } +} diff --git a/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java b/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java index fae5e584c..dca93e46d 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,7 +25,6 @@ package org.onap.clamp.clds.model.prop; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -37,7 +36,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.apache.camel.Exchange; import org.onap.clamp.clds.exception.ModelBpmnException; import org.onap.clamp.clds.model.CldsEvent; import org.onap.clamp.clds.model.CldsModel; @@ -47,22 +46,21 @@ import org.onap.clamp.clds.service.CldsService; * Parse model properties. */ public class ModelProperties { - protected static final EELFLogger logger = EELFManager.getInstance() - .getLogger(CldsService.class); - protected static final EELFLogger auditLogger = EELFManager.getInstance() - .getAuditLogger(); - private ModelBpmn modelBpmn; - private JsonNode modelJson; - private final String modelName; - private final String controlName; - private final String actionCd; + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsService.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + private ModelBpmn modelBpmn; + private JsonNode modelJson; + private final String modelName; + private final String controlName; + private final String actionCd; // Flag indicate whether it is triggered by Validation Test button from UI - private final boolean testOnly; - private Global global; - private final Map<String, AbstractModelElement> modelElements = new ConcurrentHashMap<>(); - private String currentModelElementId; - private String policyUniqueId; - private static final Object lock = new Object(); + private final boolean testOnly; + private Global global; + private final Map<String, AbstractModelElement> modelElements = new ConcurrentHashMap<>(); + private String currentModelElementId; + private String policyUniqueId; + private static final Object lock = new Object(); private static Map<Class<? extends AbstractModelElement>, String> modelElementClasses = new ConcurrentHashMap<>(); static { synchronized (lock) { @@ -107,11 +105,9 @@ public class ModelProperties { /** * This method is meant to ensure that one ModelElement instance exists for - * each ModelElement class. - * - * As new ModelElement classes could have been registered after - * instantiation of this ModelProperties, we need to build the missing - * ModelElement instances. + * each ModelElement class. As new ModelElement classes could have been + * registered after instantiation of this ModelProperties, we need to build + * the missing ModelElement instances. */ private final void instantiateMissingModelElements() { if (modelElementClasses.size() != modelElements.size()) { @@ -160,20 +156,21 @@ public class ModelProperties { } /** - * Create ModelProperties for Camunda Delegate. + * Create ModelProperties extracted from a CamelExchange. * - * @param execution - * @return - * @throws JsonProcessingException - * @throws IOException + * @param camelExchange + * The camel Exchange object that contains all info provided to + * the flow + * @return A model Properties created from the parameters found in + * camelExchange object */ - public static ModelProperties create(DelegateExecution execution) { - String modelProp = new String((byte[]) execution.getVariable("modelProp")); - String modelBpmnProp = (String) execution.getVariable("modelBpmnProp"); - String modelName = (String) execution.getVariable("modelName"); - String controlName = (String) execution.getVariable("controlName"); - String actionCd = (String) execution.getVariable("actionCd"); - boolean isTest = (boolean) execution.getVariable("isTest"); + public static ModelProperties create(Exchange camelExchange) { + String modelProp = (String) camelExchange.getProperty("modelProp"); + String modelBpmnProp = (String) camelExchange.getProperty("modelBpmnProp"); + String modelName = (String) camelExchange.getProperty("modelName"); + String controlName = (String) camelExchange.getProperty("controlName"); + String actionCd = (String) camelExchange.getProperty("actionCd"); + boolean isTest = (boolean) camelExchange.getProperty("isTest"); return new ModelProperties(modelName, controlName, actionCd, isTest, modelBpmnProp, modelProp); } diff --git a/src/main/java/org/onap/clamp/clds/model/refprop/RefProp.java b/src/main/java/org/onap/clamp/clds/model/refprop/RefProp.java index 5965a417b..f0cf71c1e 100644 --- a/src/main/java/org/onap/clamp/clds/model/refprop/RefProp.java +++ b/src/main/java/org/onap/clamp/clds/model/refprop/RefProp.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,18 +25,22 @@ package org.onap.clamp.clds.model.refprop; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.util.Properties; + +import javax.annotation.PostConstruct; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; - -import javax.annotation.PostConstruct; -import java.io.IOException; -import java.util.Properties; +import org.springframework.stereotype.Component; /** * Holds reference properties. */ +@Component public class RefProp { @Autowired @@ -103,5 +107,4 @@ public class RefProp { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.readValue(getStringValue(key1, key2), JsonNode.class); } - } diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java index 1238236fb..a139de115 100644 --- a/src/main/java/org/onap/clamp/clds/service/CldsService.java +++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java @@ -56,11 +56,11 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.xml.transform.TransformerException; +import org.apache.camel.Produce; import org.apache.commons.codec.DecoderException; import org.apache.commons.lang3.StringUtils; -import org.camunda.bpm.engine.RuntimeService; -import org.camunda.bpm.engine.runtime.ProcessInstance; import org.json.simple.parser.ParseException; +import org.onap.clamp.clds.camel.CamelProxy; import org.onap.clamp.clds.client.DcaeDispatcherServices; import org.onap.clamp.clds.client.DcaeInventoryServices; import org.onap.clamp.clds.client.req.sdc.SdcCatalogServices; @@ -101,6 +101,8 @@ import org.springframework.web.client.HttpClientErrorException; @Path("/clds") public class CldsService extends SecureServiceBase { + @Produce(uri = "direct:processSubmit") + private CamelProxy camelProxy; protected static final EELFLogger securityLogger = EELFManager.getInstance().getSecurityLogger(); @Autowired private ApplicationContext appContext; @@ -138,8 +140,6 @@ public class CldsService extends SecureServiceBase { @Autowired private CldsDao cldsDao; @Autowired - private RuntimeService runtimeService; - @Autowired private XslTransformer cldsBpmnTransformer; @Autowired private RefProp refProp; @@ -410,7 +410,7 @@ public class CldsService extends SecureServiceBase { cldsPermissionInstance, actionCd); isAuthorized(permisionManage); isAuthorizedForVf(model); - String userid = getUserId(); + String userId = getUserId(); String actionStateCd = CldsEvent.ACTION_STATE_INITIATED; String processDefinitionKey = "clds-process-action-wf"; logger.info("PUT actionCd={}", actionCd); @@ -420,7 +420,7 @@ public class CldsService extends SecureServiceBase { logger.info("PUT test={}", test); logger.info("PUT bpmnText={}", model.getBpmnText()); logger.info("PUT propText={}", model.getPropText()); - logger.info("PUT userid={}", userid); + logger.info("PUT userId={}", userId); logger.info("PUT getTypeId={}", model.getTypeId()); logger.info("PUT deploymentId={}", model.getDeploymentId()); if (model.getTemplateName() != null) { @@ -462,7 +462,7 @@ public class CldsService extends SecureServiceBase { logger.info("PUT isInsertTestEvent={}", isInsertTestEvent); // determine if requested action is permitted model.validateAction(actionCd); - // input variables to camunda process + // input variables for Camel process Map<String, Object> variables = new HashMap<>(); variables.put("actionCd", actionCd); variables.put("modelProp", prop.getBytes()); @@ -471,18 +471,18 @@ public class CldsService extends SecureServiceBase { variables.put("controlName", controlName); variables.put("docText", docText.getBytes()); variables.put("isTest", isTest); - variables.put("userid", userid); + variables.put("userid", userId); variables.put("isInsertTestEvent", isInsertTestEvent); logger.info("modelProp - " + prop); logger.info("docText - " + docText); + // ModelProperties modelProperties = new ModelProperties(modelName, + // controlName, actionCd, isTest, modelBpmnProp, modelProp); try { - // start camunda process - ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefinitionKey, variables); - // log process info - logger.info("Started processDefinitionId={}, processInstanceId={}", pi.getProcessDefinitionId(), - pi.getProcessInstanceId()); + String result = camelProxy.submit(actionCd, prop, bpmnJson, modelName, controlName, docText, isTest, userId, + isInsertTestEvent); + logger.info("Starting Camel flow on request, result is: ", result); } catch (SdcCommunicationException | PolicyClientException | BadRequestException e) { - logger.error("Exception occured during invoking bpmn process", e); + logger.error("Exception occured during invoking Camel process", e); throw new CldsConfigException(e.getMessage(), e); } // refresh model info from db (get fresh event info) @@ -605,39 +605,26 @@ public class CldsService extends SecureServiceBase { * In case of issues with the decryting the encrypted password * @throws DecoderException * In case of issues with the decoding of the Hex String + * @throws IOException + * In case of issue to convert CldsServiceCache to InputStream */ @GET @Path("/properties/{serviceInvariantUUID}") @Produces(MediaType.APPLICATION_JSON) public String getSdcPropertiesByServiceUUIDForRefresh( @PathParam("serviceInvariantUUID") String serviceInvariantUUID, - @DefaultValue("false") @QueryParam("refresh") String refresh) - throws GeneralSecurityException, DecoderException { + @DefaultValue("false") @QueryParam("refresh") boolean refresh) + throws GeneralSecurityException, DecoderException, IOException { Date startTime = new Date(); LoggingUtils.setRequestContext("CldsService: GET sdc properties by uuid", getPrincipalName()); CldsServiceData cldsServiceData = new CldsServiceData(); cldsServiceData.setServiceInvariantUUID(serviceInvariantUUID); - boolean isCldsSdcDataExpired = true; - // To getcldsService information from database cache using invariantUUID - // only when refresh = false - if (refresh != null && refresh.equalsIgnoreCase("false")) { - cldsServiceData = cldsServiceData.getCldsServiceCache(cldsDao, serviceInvariantUUID); - // If cldsService is available in database Cache , verify is data - // expired or not - if (cldsServiceData != null) { - isCldsSdcDataExpired = sdcCatalogServices.isCldsSdcCacheDataExpired(cldsServiceData); - } + if (!refresh) { + cldsServiceData = cldsDao.getCldsServiceCache(serviceInvariantUUID); } - // If user Requested for refresh or database cache expired , get all - // data from sdc api. - if ((refresh != null && refresh.equalsIgnoreCase("true")) || isCldsSdcDataExpired) { + if (sdcCatalogServices.isCldsSdcCacheDataExpired(cldsServiceData)) { cldsServiceData = sdcCatalogServices.getCldsServiceDataWithAlarmConditions(serviceInvariantUUID); - CldsDBServiceCache cldsDBServiceCache = sdcCatalogServices - .getCldsDbServiceCacheUsingCldsServiceData(cldsServiceData); - if (cldsDBServiceCache != null && cldsDBServiceCache.getInvariantId() != null - && cldsDBServiceCache.getServiceId() != null) { - cldsServiceData.setCldsServiceCache(cldsDao, cldsDBServiceCache); - } + cldsDao.setCldsServiceCache(new CldsDBServiceCache(cldsServiceData)); } // filter out VFs the user is not authorized for cldsServiceData.filterVfs(this); diff --git a/src/main/java/org/onap/clamp/clds/service/CldsUser.java b/src/main/java/org/onap/clamp/clds/service/CldsUser.java index 3dfeaebdd..fa7a738dd 100644 --- a/src/main/java/org/onap/clamp/clds/service/CldsUser.java +++ b/src/main/java/org/onap/clamp/clds/service/CldsUser.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,9 +29,8 @@ import java.util.Arrays; * The class represents the CldsUser that can be extracted from cldsusers.json. */ public class CldsUser { - - private String user; - private String password; + private String user; + private String password; private SecureServicePermission[] permissions; /** diff --git a/src/main/java/org/onap/clamp/clds/service/JerseyConfig.java b/src/main/java/org/onap/clamp/clds/service/JaxrsApplication.java index 0ffe41037..d6e74aef1 100644 --- a/src/main/java/org/onap/clamp/clds/service/JerseyConfig.java +++ b/src/main/java/org/onap/clamp/clds/service/JaxrsApplication.java @@ -23,19 +23,12 @@ package org.onap.clamp.clds.service; -import org.glassfish.jersey.server.ResourceConfig; +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + import org.springframework.stereotype.Component; @Component -public class JerseyConfig extends ResourceConfig { - - public JerseyConfig() { - registerEndpoints(); - } - - private void registerEndpoints() { - register(CldsService.class); - register(UserService.class); - register(CldsTemplateService.class); - } +@ApplicationPath("/restservices/clds/v1") +public class JaxrsApplication extends Application { }
\ No newline at end of file diff --git a/src/main/java/org/onap/clamp/clds/config/CamundaEngineConfiguration.java b/src/main/java/org/onap/clamp/clds/util/LogMessages.java index 3790e235f..808878696 100644 --- a/src/main/java/org/onap/clamp/clds/config/CamundaEngineConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/util/LogMessages.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,30 +21,15 @@ * ECOMP is a trademark and service mark of AT&T Intellectual Property. */ -package org.onap.clamp.clds.config; +package org.onap.clamp.clds.util; -import java.security.GeneralSecurityException; +import com.att.eelf.i18n.EELFResolvableErrorEnum; +import com.att.eelf.i18n.EELFResourceManager; -import javax.sql.DataSource; +public enum LogMessages implements EELFResolvableErrorEnum { + LOGSERVICE_HELLO_MESSAGE, LOGSERVICE_EMAIL_ERROR, LOGSERVICE_EMAIL_CLASS, LOGSERVICE_EMAIL_CLASS_NULL, PROCESS_INSTANCE_ID; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; - -@Configuration -public class CamundaEngineConfiguration { - /** - * Camunda Identity database DataSource configuration - * - * @return - * @throws GeneralSecurityException - * In case of issue during the decoding of the password - */ - @Primary - @Bean(name = "camundaBpmDataSource") - @ConfigurationProperties(prefix = "spring.datasource.camunda") - public DataSource dataSource() { - return new EncodedPasswordBasicDataSource(); + static { + EELFResourceManager.loadMessageBundle("logmessages"); } } |