diff options
5 files changed, 147 insertions, 63 deletions
diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/AbstractExecutionContext.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/AbstractExecutionContext.java new file mode 100644 index 000000000..a47ccaa48 --- /dev/null +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/AbstractExecutionContext.java @@ -0,0 +1,97 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2020 Nordix Foundation. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.core.engine.executor.context; + +import java.util.Properties; +import lombok.Getter; +import lombok.Setter; +import org.onap.policy.apex.context.SchemaHelper; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; + +/** + * Abstract class for the execution context for logic executions in logic being executed in an Apex engine. The + * logic must have easy access to its subject definition, the incoming and outgoing field contexts, as well as the + * policy, global, and external context. + */ +@Getter +public class AbstractExecutionContext { + /** A constant <code>boolean true</code> value available for reuse e.g., for the return value */ + public final Boolean isTrue = true; + + /** + * A constant <code>boolean false</code> value available for reuse e.g., for the return value + */ + public final Boolean isFalse = false; + + /** the execution ID for the current APEX policy execution instance. */ + public final Long executionId; + + // Standard coder for JSON converts + private static final StandardCoder STANDARD_CODER = new StandardCoder(); + + // A message specified in the logic + @Setter + private String message; + + // Execution properties for a policy execution + private final Properties executionProperties; + + /** + * Instantiates a new task execution context. + * + * @param executionId the execution ID for the current APEX policy execution instance + * @param executionProperties the execution properties for task execution + */ + public AbstractExecutionContext(final long executionId, final Properties executionProperties) { + + // Execution ID is the current policy execution instance + this.executionId = executionId; + this.executionProperties = executionProperties; + } + + /** + * Get a JSON representation of an object. + * + * @param theObject the object to get a JSON representation of + * @return the JSON version of the object + * @throws CoderException on JSON coding errors + */ + public String stringify2Json(final Object theObject) throws CoderException { + return stringify2Json(theObject, null); + } + + /** + * Get a JSON representation of an object. + * + * @param theObject the object to get a JSON representation of + * @param schemaHelper a schema helper to use for the JSON conversion, if null, a standard conversion is done + * @return the JSON version of the object + * @throws CoderException on JSON coding errors + */ + public String stringify2Json(final Object theObject, final SchemaHelper schemaHelper) throws CoderException { + if (schemaHelper == null) { + return STANDARD_CODER.encode(theObject); + } else { + return schemaHelper.marshal2String(theObject); + } + } +} diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/StateFinalizerExecutionContext.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/StateFinalizerExecutionContext.java index 55d629d84..3bc83b970 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/StateFinalizerExecutionContext.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/StateFinalizerExecutionContext.java @@ -48,7 +48,7 @@ import org.slf4j.ext.XLoggerFactory; * @author Sven van der Meer (sven.van.der.meer@ericsson.com) */ @Getter -public class StateFinalizerExecutionContext { +public class StateFinalizerExecutionContext extends AbstractExecutionContext { /** * Logger for state finalizer execution, state finalizer logic can use this field to access and log to Apex logging. */ @@ -60,9 +60,6 @@ public class StateFinalizerExecutionContext { /** A facade to the full state definition for the state finalizer logic being executed. */ public final AxStateFacade subject; - /** the execution ID for the current APEX policy execution instance. */ - public final Long executionId; - /** * The list of state outputs for this state finalizer. The purpose of a state finalizer is to select a state output * for a state from this list of state output names. @@ -92,11 +89,6 @@ public class StateFinalizerExecutionContext { // All available context albums private final Map<String, ContextAlbum> context; - // A message specified in the logic - @Getter - @Setter - private String message; - // Execution properties for a policy execution @Getter private Properties executionProperties; @@ -115,11 +107,9 @@ public class StateFinalizerExecutionContext { public StateFinalizerExecutionContext(final StateFinalizerExecutor stateFinalizerExecutor, final long executionId, final Properties executionProperties, final AxState axState, final Map<String, Object> fields, final Set<String> stateOutputNames, final ApexInternalContext internalContext) { - subject = new AxStateFacade(axState); + super(executionId, executionProperties); - // Execution ID is the current policy execution instance - this.executionId = executionId; - this.executionProperties = executionProperties; + subject = new AxStateFacade(axState); this.fields = fields; this.stateOutputNames = stateOutputNames; diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskExecutionContext.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskExecutionContext.java index 9d5087e83..1a19d18b8 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskExecutionContext.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskExecutionContext.java @@ -32,6 +32,7 @@ import lombok.Getter; import lombok.Setter; import org.onap.policy.apex.context.ContextAlbum; import org.onap.policy.apex.context.ContextRuntimeException; +import org.onap.policy.apex.context.SchemaHelper; import org.onap.policy.apex.core.engine.context.ApexInternalContext; import org.onap.policy.apex.core.engine.executor.Executor; import org.onap.policy.apex.core.engine.executor.TaskExecutor; @@ -39,6 +40,8 @@ import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; import org.onap.policy.apex.model.basicmodel.concepts.AxConcept; import org.onap.policy.apex.model.policymodel.concepts.AxTask; import org.onap.policy.apex.model.policymodel.concepts.AxTaskParameter; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; @@ -50,27 +53,16 @@ import org.slf4j.ext.XLoggerFactory; * @author Sven van der Meer (sven.van.der.meer@ericsson.com) */ @Getter -public class TaskExecutionContext { +public class TaskExecutionContext extends AbstractExecutionContext { // Logger for task execution private static final XLogger EXECUTION_LOGGER = XLoggerFactory.getXLogger("org.onap.policy.apex.executionlogging.TaskExecutionLogging"); // CHECKSTYLE:OFF: checkstyle:VisibilityModifier Logic has access to these field - /** A constant <code>boolean true</code> value available for reuse e.g., for the return value */ - public final Boolean isTrue = true; - - /** - * A constant <code>boolean false</code> value available for reuse e.g., for the return value - */ - public final Boolean isFalse = false; - /** A facade to the full task definition for the task logic being executed. */ public final AxTaskFacade subject; - /** the execution ID for the current APEX policy execution instance. */ - public final Long executionId; - /** * The incoming fields from the trigger event for the task. The task logic can access these fields when executing * its logic. @@ -96,15 +88,6 @@ public class TaskExecutionContext { // The artifact stack of users of this context private final List<AxConcept> usedArtifactStack; - // A message specified in the logic - @Getter - @Setter - private String message; - - // Execution properties for a policy execution - @Getter - private Properties executionProperties; - // Parameters associated to a task @Getter private Map<String, String> parameters = new HashMap<>(); @@ -123,16 +106,14 @@ public class TaskExecutionContext { public TaskExecutionContext(final TaskExecutor taskExecutor, final long executionId, final Properties executionProperties, final AxTask axTask, final Map<String, Object> inFields, final Map<String, Object> outFields, final ApexInternalContext internalContext) { + super(executionId, executionProperties); + // The subject is the task definition subject = new AxTaskFacade(axTask); // Populate parameters to be accessed in the task logic from the task parameters. populateParameters(axTask.getTaskParameters()); - // Execution ID is the current policy execution instance - this.executionId = executionId; - this.executionProperties = executionProperties; - // The input and output fields this.inFields = Collections.unmodifiableMap(inFields); this.outFields = outFields; diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskSelectionExecutionContext.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskSelectionExecutionContext.java index 2006d653c..9c3c2be0f 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskSelectionExecutionContext.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskSelectionExecutionContext.java @@ -48,27 +48,16 @@ import org.slf4j.ext.XLoggerFactory; * @author Sven van der Meer (sven.van.der.meer@ericsson.com) */ @Getter -public class TaskSelectionExecutionContext { +public class TaskSelectionExecutionContext extends AbstractExecutionContext { // Logger for task execution private static final XLogger EXECUTION_LOGGER = XLoggerFactory.getXLogger("org.onap.policy.apex.executionlogging.TaskSelectionExecutionLogging"); // CHECKSTYLE:OFF: checkstyle:VisibilityModifier Logic has access to these field - /** A constant <code>boolean true</code> value available for reuse e.g., for the return value */ - public final Boolean isTrue = true; - - /** - * A constant <code>boolean false</code> value available for reuse e.g., for the return value - */ - public final Boolean isFalse = false; - /** A facade to the full state definition for the task selection logic being executed. */ public final AxStateFacade subject; - /** the execution ID for the current APEX policy execution instance. */ - public final Long executionId; - /** * The incoming fields from the trigger event for the state. The task selection logic can access these fields to * decide what task to select for the state. @@ -91,15 +80,6 @@ public class TaskSelectionExecutionContext { // All available context albums private final Map<String, ContextAlbum> context; - // A message specified in the logic - @Getter - @Setter - private String message; - - // Execution properties for a policy execution - @Getter - private Properties executionProperties; - /** * Instantiates a new task selection execution context. * @@ -113,13 +93,10 @@ public class TaskSelectionExecutionContext { public TaskSelectionExecutionContext(final TaskSelectExecutor taskSelectExecutor, final long executionId, final AxState axState, final EnEvent incomingEvent, final AxArtifactKey outgoingKey, final ApexInternalContext internalContext) { + super(executionId, incomingEvent.getExecutionProperties()); // The subject is the state definition subject = new AxStateFacade(axState); - // Execution ID is the current policy execution instance - this.executionId = executionId; - this.executionProperties = incomingEvent.getExecutionProperties(); - // The events inFields = incomingEvent; selectedTask = outgoingKey; diff --git a/examples/examples-onap-vcpe/src/test/resources/logback-test.xml b/examples/examples-onap-vcpe/src/test/resources/logback-test.xml new file mode 100644 index 000000000..b3a202ced --- /dev/null +++ b/examples/examples-onap-vcpe/src/test/resources/logback-test.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2016-2018 Ericsson. 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. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> + +<configuration> + + <contextName>Apex</contextName> + <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /> + <property name="LOG_DIR" value="${java.io.tmpdir}/apex_logging/" /> + + <!-- USE FOR STD OUT ONLY --> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern> + </encoder> + </appender> + + <root level="TRACE"> + <appender-ref ref="STDOUT" /> + </root> + +</configuration> |