summaryrefslogtreecommitdiffstats
path: root/model/model-api/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'model/model-api/src/main/java/org')
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexAPIResult.java284
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexEditorAPI.java948
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexModel.java192
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexModelFactory.java78
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ApexModelImpl.java1239
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ContextAlbumFacade.java282
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ContextSchemaFacade.java240
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/EventFacade.java385
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/KeyInformationFacade.java244
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ModelFacade.java207
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ModelHandlerFacade.java630
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/PolicyFacade.java1383
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/TaskFacade.java893
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/package-info.java27
-rw-r--r--model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/package-info.java27
15 files changed, 7059 insertions, 0 deletions
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexAPIResult.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexAPIResult.java
new file mode 100644
index 000000000..2e4328fc5
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexAPIResult.java
@@ -0,0 +1,284 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * The Class ApexEditorAPIResult return the result of and messages from all model API method calls
+ * on the {@link ApexModel} API.
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+public class ApexAPIResult {
+
+ /**
+ * This enumeration is used to represent the result status of a call on the {@link ApexModel}
+ * API.
+ */
+ @XmlEnum(value = String.class)
+ public enum RESULT {
+ /** The method call succeeded. */
+ SUCCESS,
+ /** The method call succeeded and all operations are now completed. */
+ FINISHED,
+ /** The method call for a create operation failed because the concept already exists. */
+ CONCEPT_EXISTS,
+ /**
+ * The method call for a create operation failed because multiple concepts already exists.
+ */
+ MULTIPLE_CONCEPTS_EXIST,
+ /** The method call on a concept failed because the referenced concept does not exist. */
+ CONCEPT_DOES_NOT_EXIST,
+ /** The method call failed because no action was specified on the method call. */
+ NO_ACTION_SPECIFIED,
+ /**
+ * The method call failed because of a structural error, a missing reference, or other error
+ * on the model.
+ */
+ FAILED,
+ /**
+ * The method call failed for another reason such as the method call is not implemented yet
+ * on the concept on which it was called.
+ */
+ OTHER_ERROR
+ }
+
+ private RESULT result;
+ private List<String> messages = new ArrayList<>();
+
+ /**
+ * The Default Constructor creates a result for a successful operation with no messages.
+ */
+ public ApexAPIResult() {
+ result = RESULT.SUCCESS;
+ }
+
+ /**
+ * This Constructor creates a result with the given result status with no messages.
+ *
+ * @param result the result status to use on this result
+ */
+ public ApexAPIResult(final RESULT result) {
+ this.result = result;
+ }
+
+ /**
+ * This Constructor creates a result with the given result status and message.
+ *
+ * @param result the result status to use on this result
+ * @param message the message to return with the result
+ */
+ public ApexAPIResult(final RESULT result, final String message) {
+ this.result = result;
+ addMessage(message);
+ }
+
+ /**
+ * This Constructor creates a result with the given result status and {@link Throwable} object
+ * such as an exception. The message and stack trace from the {@link Throwable} object are added
+ * to the message list of this message.
+ *
+ * @param result the result status to use on this result
+ * @param throwable the throwable object from which to add the message and stack trace
+ */
+ public ApexAPIResult(final RESULT result, final Throwable throwable) {
+ this.result = result;
+ addThrowable(throwable);
+ }
+
+ /**
+ * This Constructor creates a result with the given result status, message, and
+ * {@link Throwable} object such as an exception. The message and stack trace from the
+ * {@link Throwable} object are added to the message list of this message.
+ *
+ * @param result the result status to use on this result
+ * @param message the message to return with the result
+ * @param throwable the throwable object from which to add the message and stack trace
+ */
+ public ApexAPIResult(final RESULT result, final String message, final Throwable throwable) {
+ this.result = result;
+ addMessage(message);
+ addThrowable(throwable);
+ }
+
+ /**
+ * This message is a utility message that checks if the result of an operation on the API was
+ * OK.
+ *
+ * @return true, if the result indicates the API operation succeeded
+ */
+ @XmlAttribute(required = true)
+ public boolean isOK() {
+ return result == RESULT.SUCCESS || result == RESULT.FINISHED;
+ }
+
+ /**
+ * This message is a utility message that checks if the result of an operation on the API was
+ * not OK.
+ *
+ * @return true, if the result indicates the API operation did not succeed
+ */
+ public boolean isNOK() {
+ return !isOK();
+ }
+
+ /**
+ * Gets the result status of an API operation.
+ *
+ * @return the result status
+ */
+ @XmlAttribute(required = true)
+ public RESULT getResult() {
+ return result;
+ }
+
+ /**
+ * Sets the result status of an API operation.
+ *
+ * @param result the result status
+ */
+ public void setResult(final RESULT result) {
+ this.result = result;
+ }
+
+ /**
+ * Gets the list of messages returned by an API operation.
+ *
+ * @return the list of messages returned by an API operation
+ */
+ @XmlElementWrapper(required = false, nillable = true)
+ @XmlElement(nillable = true, name = "message")
+ public List<String> getMessages() {
+ return messages;
+ }
+
+ /**
+ * Sets the list of messages to return as a result of an API operation.
+ *
+ * @param messages the list of messages to return as a result of an API operation
+ */
+ public void setMessages(final List<String> messages) {
+ this.messages = messages;
+ }
+
+ /**
+ * Gets all the messages returned by an API operation as a single string.
+ *
+ * @return the messages returned by an API operation as a single string
+ */
+ @XmlElement(required = true, name = "content")
+ public String getMessage() {
+ final StringBuilder builder = new StringBuilder();
+ for (final String message : messages) {
+ builder.append(message);
+ builder.append('\n');
+ }
+
+ return builder.toString();
+ }
+
+ /**
+ * Adds a message from an API operation to the bottom of the list of messages to be returned.
+ *
+ * @param message the message from an API operation to add to the bottom of the list of messages
+ * to be returned
+ */
+ public void addMessage(final String message) {
+ if (message != null && message.trim().length() > 0) {
+ messages.add(message);
+ }
+ }
+
+ /**
+ * Adds the message and stack trace from a {@link Throwable} object such as an exception from an
+ * API operation to the bottom of the list of messages to be returned.
+ *
+ * @param throwable the {@link Throwable} object such as an exception from an API operation from
+ * which the message and stack trace are to be extracted and placed at the bottom of the
+ * list of messages to be returned
+ */
+ public void addThrowable(final Throwable throwable) {
+ final StringWriter throwableStringWriter = new StringWriter();
+ final PrintWriter throwablePrintWriter = new PrintWriter(throwableStringWriter);
+ throwable.printStackTrace(throwablePrintWriter);
+ messages.add(throwable.getMessage());
+ messages.add(throwableStringWriter.toString());
+ }
+
+ /**
+ * Gets a representation of the {@link ApexAPIResult} instance as a JSON string.
+ *
+ * @return the result instance JSON string
+ */
+ public String toJSON() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("{\n");
+
+ builder.append("\"result\": \"");
+ builder.append(result.toString());
+ builder.append("\",\n");
+
+ builder.append("\"messages\": [");
+ boolean first = true;
+ for (final String message : messages) {
+ if (first) {
+ builder.append("\n\"");
+ first = false;
+ } else {
+ builder.append(",\n\"");
+ }
+ builder.append(message.replaceAll("\"", "\\\\\""));
+ builder.append("\"");
+ }
+ builder.append("]\n");
+
+ builder.append("}\n");
+
+ return builder.toString();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("result: ");
+ builder.append(result);
+ builder.append('\n');
+ builder.append(getMessage());
+ return builder.toString();
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexEditorAPI.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexEditorAPI.java
new file mode 100644
index 000000000..617cbc786
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexEditorAPI.java
@@ -0,0 +1,948 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi;
+
+/**
+ * The Interface ApexEditorAPI is used to manipulate Apex models.
+ */
+public interface ApexEditorAPI {
+ /*
+ * Model API Methods
+ */
+
+ /**
+ * Create model.
+ *
+ * @param name name of the model
+ * @param version version of the model, set to null to use the default version
+ * @param uuid model UUID, set to null to generate a UUID
+ * @param description model description, set to null to generate a description
+ * @return result of the operation
+ */
+ ApexAPIResult createModel(final String name, final String version, final String uuid, final String description);
+
+ /**
+ * Update model.
+ *
+ * @param name name of the model
+ * @param version version of the model, set to null to update the latest version
+ * @param uuid key information UUID, set to null to not update
+ * @param description policy description, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updateModel(final String name, final String version, final String uuid, final String description);
+
+ /**
+ * Get the key of an Apex model.
+ *
+ * @return the result of the operation
+ */
+ ApexAPIResult getModelKey();
+
+ /**
+ * List an Apex model.
+ *
+ * @return the result of the operation
+ */
+ ApexAPIResult listModel();
+
+ /**
+ * Delete an Apex model, clear all the concepts in the model.
+ *
+ * @return the result of the operation
+ */
+ ApexAPIResult deleteModel();
+
+ /*
+ * Key Information API Methods
+ */
+
+ /**
+ * Create key information.
+ *
+ * @param name name of the concept for the key information
+ * @param version version of the concept for the key information, set to null to use the default
+ * version
+ * @param uuid key information UUID, set to null to generate a UUID
+ * @param description key information description, set to null to generate a description
+ * @return result of the operation
+ */
+ ApexAPIResult createKeyInformation(final String name, final String version, final String uuid,
+ final String description);
+
+ /**
+ * Update key information.
+ *
+ * @param name name of the concept for the key information
+ * @param version version of the concept for the key information, set to null to update the
+ * latest version
+ * @param uuid key information UUID, set to null to not update
+ * @param description key information description, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updateKeyInformation(final String name, final String version, final String uuid,
+ final String description);
+
+ /**
+ * List key information.
+ *
+ * @param name name of the concept for the key information, set to null to list all
+ * @param version starting version of the concept for the key information, set to null to list
+ * all versions
+ * @return result of the operation
+ */
+ ApexAPIResult listKeyInformation(final String name, final String version);
+
+ /**
+ * Delete key information.
+ *
+ * @param name name of the concept for the key information
+ * @param version version of the concept for the key information, set to null to delete all
+ * versions
+ * @return result of the operation
+ */
+ ApexAPIResult deleteKeyInformation(final String name, final String version);
+
+ /**
+ * Validate key information.
+ *
+ * @param name name of the concept for the key information
+ * @param version version of the concept for the key information, set to null to validate all
+ * versions
+ * @return result of the operation
+ */
+ ApexAPIResult validateKeyInformation(final String name, final String version);
+
+ /*
+ * Context Schema API Methods
+ */
+
+ /**
+ * Create a context schema.
+ *
+ * @param name name of the context schema
+ * @param version version of the context schema, set to null to use the default version
+ * @param schemaFlavour a final String identifying the flavour of this context schema
+ * @param schemaDefinition a final String containing the definition of this context schema
+ * @param uuid context schema UUID, set to null to generate a UUID
+ * @param description context schema description, set to null to generate a description
+ * @return result of the operation
+ */
+ ApexAPIResult createContextSchema(final String name, final String version, final String schemaFlavour,
+ final String schemaDefinition, final String uuid, final String description);
+
+ /**
+ * Update a context schema.
+ *
+ * @param name name of the context schema
+ * @param version version of the context schema, set to null to update the latest version
+ * @param schemaFlavour a final String identifying the flavour of this context schema
+ * @param schemaDefinition a final String containing the definition of this context schema
+ * @param uuid context schema UUID, set to null to not update
+ * @param description context schema description, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updateContextSchema(final String name, final String version, final String schemaFlavour,
+ final String schemaDefinition, final String uuid, final String description);
+
+ /**
+ * List context schemas.
+ *
+ * @param name name of the context schema, set to null to list all
+ * @param version starting version of the context schema, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult listContextSchemas(final String name, final String version);
+
+ /**
+ * Delete a context schema.
+ *
+ * @param name name of the context schema
+ * @param version version of the context schema, set to null to delete all versions
+ * @return result of the operation
+ */
+ ApexAPIResult deleteContextSchema(final String name, final String version);
+
+ /**
+ * Validate context schemas.
+ *
+ * @param name name of the context schema, set to null to list all
+ * @param version starting version of the context schema, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult validateContextSchemas(final String name, final String version);
+
+ /*
+ * Event API Methods
+ */
+
+ /**
+ * Create an event.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to use the default version
+ * @param nameSpace of the event, set to null to use the default value
+ * @param source of the event, set to null to use the default value
+ * @param target of the event, set to null to use the default value
+ * @param uuid event UUID, set to null to generate a UUID
+ * @param description event description, set to null to generate a description
+ * @return result of the operation
+ */
+ ApexAPIResult createEvent(final String name, final String version, final String nameSpace, final String source,
+ final String target, final String uuid, final String description);
+
+ /**
+ * Update an event.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to use the latest version
+ * @param nameSpace of the event, set to null to not update
+ * @param source of the event, set to null to not update
+ * @param target of the event, set to null to not update
+ * @param uuid event UUID, set to null to not update
+ * @param description event description, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updateEvent(final String name, final String version, final String nameSpace, final String source,
+ final String target, final String uuid, final String description);
+
+ /**
+ * List events.
+ *
+ * @param name name of the event, set to null to list all
+ * @param version starting version of the event, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult listEvent(final String name, final String version);
+
+ /**
+ * Delete an event.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to delete all versions
+ * @return result of the operation
+ */
+ ApexAPIResult deleteEvent(final String name, final String version);
+
+ /**
+ * Validate events.
+ *
+ * @param name name of the event, set to null to list all
+ * @param version starting version of the event, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult validateEvent(final String name, final String version);
+
+ /**
+ * Create an event parameter.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to use the latest version
+ * @param parName of the parameter
+ * @param contextSchemaName name of the parameter context schema
+ * @param contextSchemaVersion version of the parameter context schema, set to null to use the
+ * latest version
+ * @param optional true if the event parameter is optional, false otherwise
+ * @return result of the operation
+ */
+ ApexAPIResult createEventPar(final String name, final String version, final String parName,
+ final String contextSchemaName, final String contextSchemaVersion, boolean optional);
+
+ /**
+ * List event parameters.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to list latest version
+ * @param parName name of the parameter, set to null to list all parameters of the event
+ * @return result of the operation
+ */
+ ApexAPIResult listEventPar(final String name, final String version, final String parName);
+
+ /**
+ * Delete an event parameter.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to use the latest version
+ * @param parName of the parameter, set to null to delete all parameters
+ * @return result of the operation
+ */
+ ApexAPIResult deleteEventPar(final String name, final String version, final String parName);
+
+ /*
+ * Context Album API Methods
+ */
+
+ /**
+ * Create a context album.
+ *
+ * @param name name of the context album
+ * @param version version of the context album, set to null to use the default version
+ * @param scope of the context album
+ * @param writable "true" or "t" if the context album is writable, set to null or any other
+ * value for a read-only album
+ * @param contextSchemaName name of the parameter context schema
+ * @param contextSchemaVersion version of the parameter context schema, set to null to use the
+ * latest version
+ * @param uuid context album UUID, set to null to generate a UUID
+ * @param description context album description, set to null to generate a description
+ * @return result of the operation
+ */
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ ApexAPIResult createContextAlbum(final String name, final String version, final String scope, final String writable,
+ final String contextSchemaName, final String contextSchemaVersion, final String uuid,
+ final String description);
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /**
+ * Update a context album.
+ *
+ * @param name name of the context album
+ * @param version version of the context album, set to null to use the default version
+ * @param scope of the context album
+ * @param writable "true" or "t" if the context album is writable, set to null or any other
+ * value for a read-only album
+ * @param contextSchemaName name of the parameter context schema
+ * @param contextSchemaVersion version of the parameter context schema, set to null to use the
+ * latest version
+ * @param uuid context album UUID, set to null to generate a UUID
+ * @param description context album description, set to null to generate a description
+ * @return result of the operation
+ */
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ ApexAPIResult updateContextAlbum(final String name, final String version, final String scope, final String writable,
+ final String contextSchemaName, final String contextSchemaVersion, final String uuid,
+ final String description);
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /**
+ * List context albums.
+ *
+ * @param name name of the context album, set to null to list all
+ * @param version starting version of the context album, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult listContextAlbum(final String name, final String version);
+
+ /**
+ * Delete a context album.
+ *
+ * @param name name of the context album
+ * @param version version of the context album, set to null to delete versions
+ * @return result of the operation
+ */
+ ApexAPIResult deleteContextAlbum(final String name, final String version);
+
+ /**
+ * Validate context albums.
+ *
+ * @param name name of the context album, set to null to list all
+ * @param version starting version of the context album, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult validateContextAlbum(final String name, final String version);
+
+ /*
+ * Task API Methods
+ */
+
+ /**
+ * Create a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the default version
+ * @param uuid task UUID, set to null to generate a UUID
+ * @param description task description, set to null to generate a description
+ * @return result of the operation
+ */
+ ApexAPIResult createTask(final String name, final String version, final String uuid, final String description);
+
+ /**
+ * Update a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param uuid task UUID, set to null to not update
+ * @param description task description, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updateTask(final String name, final String version, final String uuid, final String description);
+
+ /**
+ * List tasks.
+ *
+ * @param name name of the task, set to null to list all
+ * @param version starting version of the task, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult listTask(final String name, final String version);
+
+ /**
+ * Delete a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult deleteTask(final String name, final String version);
+
+ /**
+ * Validate tasks.
+ *
+ * @param name name of the task, set to null to list all
+ * @param version starting version of the task, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult validateTask(final String name, final String version);
+
+ /**
+ * Create logic for a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param logicFlavour the task logic flavour for the task, set to null to use the default task
+ * logic flavour
+ * @param logic the source code for the logic of the task
+ * @return result of the operation
+ */
+ ApexAPIResult createTaskLogic(final String name, final String version, final String logicFlavour,
+ final String logic);
+
+ /**
+ * Update logic for a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param logicFlavour the task logic flavour for the task, set to null to not update
+ * @param logic the source code for the logic of the task, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updateTaskLogic(final String name, final String version, final String logicFlavour,
+ final String logic);
+
+ /**
+ * List task logic.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to list the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult listTaskLogic(final String name, final String version);
+
+ /**
+ * Delete logic for a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult deleteTaskLogic(final String name, final String version);
+
+ /**
+ * Create a task input field.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName of the input field
+ * @param contextSchemaName name of the input field context schema
+ * @param contextSchemaVersion version of the input field context schema, set to null to use the
+ * latest version
+ * @param optional true if the task field is optional, false otherwise
+ * @return result of the operation
+ */
+ ApexAPIResult createTaskInputField(final String name, final String version, final String fieldName,
+ final String contextSchemaName, final String contextSchemaVersion, boolean optional);
+
+ /**
+ * List task input fields.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName field name of the input field, set to null to list all input fields of the
+ * task
+ * @return result of the operation
+ */
+ ApexAPIResult listTaskInputField(final String name, final String version, final String fieldName);
+
+ /**
+ * Delete a task input field.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName of the input field, set to null to delete all input fields
+ * @return result of the operation
+ */
+ ApexAPIResult deleteTaskInputField(final String name, final String version, final String fieldName);
+
+ /**
+ * Create a task output field.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName of the output field
+ * @param contextSchemaName name of the output field context schema
+ * @param contextSchemaVersion version of the output field context schema, set to null to use
+ * the latest version
+ * @param optional true if the task field is optional, false otherwise
+ * @return result of the operation
+ */
+ ApexAPIResult createTaskOutputField(final String name, final String version, final String fieldName,
+ final String contextSchemaName, final String contextSchemaVersion, boolean optional);
+
+ /**
+ * List task output fields.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName field name of the output field, set to null to list all output fields of the
+ * task
+ * @return result of the operation
+ */
+ ApexAPIResult listTaskOutputField(final String name, final String version, final String fieldName);
+
+ /**
+ * Delete a task output field.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName of the output field, set to null to delete all output fields
+ * @return result of the operation
+ */
+ ApexAPIResult deleteTaskOutputField(final String name, final String version, final String fieldName);
+
+ /**
+ * Create a task parameter.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param parName of the parameter
+ * @param defaultValue of the parameter
+ * @return result of the operation
+ */
+ ApexAPIResult createTaskParameter(final String name, final String version, final String parName,
+ final String defaultValue);
+
+ /**
+ * List task parameters.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param parName name of the parameter, set to null to list all parameters of the task
+ * @return result of the operation
+ */
+ ApexAPIResult listTaskParameter(final String name, final String version, final String parName);
+
+ /**
+ * Delete a task parameter.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param parName of the parameter, set to null to delete all task parameters
+ * @return result of the operation
+ */
+ ApexAPIResult deleteTaskParameter(final String name, final String version, final String parName);
+
+ /**
+ * Create a task context album reference.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param contextAlbumName name of the context album for the context album reference
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult createTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion);
+
+ /**
+ * List task context album references.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param contextAlbumName name of the context album for the context album reference, set to
+ * null to list all task context album references
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult listTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion);
+
+ /**
+ * Delete a task context album reference.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param contextAlbumName name of the context album for the context album reference, set to
+ * null to delete all task context album references
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult deleteTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion);
+
+ /*
+ * Policy API Methods
+ */
+
+ /**
+ * Create a policy.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the default version
+ * @param template template used to create the policy, set to null to use the default template
+ * @param firstState the first state of the policy
+ * @param uuid policy UUID, set to null to generate a UUID
+ * @param description policy description, set to null to generate a description
+ * @return result of the operation
+ */
+ ApexAPIResult createPolicy(final String name, final String version, final String template, final String firstState,
+ final String uuid, final String description);
+
+ /**
+ * Update a policy.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param template template used to create the policy, set to null to not update
+ * @param firstState the first state of the policy
+ * @param uuid policy UUID, set to null to not update
+ * @param description policy description, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updatePolicy(final String name, final String version, final String template, final String firstState,
+ final String uuid, final String description);
+
+ /**
+ * List policies.
+ *
+ * @param name name of the policy, set to null to list all
+ * @param version starting version of the policy, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult listPolicy(final String name, final String version);
+
+ /**
+ * Delete a policy.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult deletePolicy(final String name, final String version);
+
+ /**
+ * Validate policies.
+ *
+ * @param name name of the policy, set to null to list all
+ * @param version starting version of the policy, set to null to list all versions
+ * @return result of the operation
+ */
+ ApexAPIResult validatePolicy(final String name, final String version);
+
+ /**
+ * Create a policy state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param triggerName name of the trigger event for this state
+ * @param triggerVersion version of the trigger event for this state, set to null to use the
+ * latest version
+ * @param defaultTaskName the default task name
+ * @param defaltTaskVersion the default task version, set to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult createPolicyState(final String name, final String version, final String stateName,
+ final String triggerName, final String triggerVersion, final String defaultTaskName,
+ final String defaltTaskVersion);
+
+ /**
+ * Update a policy state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param triggerName name of the trigger event for this state, set to null to not update
+ * @param triggerVersion version of the trigger event for this state, set to use latest version
+ * of trigger event
+ * @param defaultTaskName the default task name, set to null to not update
+ * @param defaltTaskVersion the default task version, set to use latest version of default task
+ * @return result of the operation
+ */
+ ApexAPIResult updatePolicyState(final String name, final String version, final String stateName,
+ final String triggerName, final String triggerVersion, final String defaultTaskName,
+ final String defaltTaskVersion);
+
+ /**
+ * List policy states.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state, set to null to list all states of the policy
+ * @return result of the operation
+ */
+ ApexAPIResult listPolicyState(final String name, final String version, final String stateName);
+
+ /**
+ * Delete a policy state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state, set to null to delete all states
+ * @return result of the operation
+ */
+ ApexAPIResult deletePolicyState(final String name, final String version, final String stateName);
+
+ /**
+ * Create task selection logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param logicFlavour the task selection logic flavour for the state, set to null to use the
+ * default task logic flavour
+ * @param logic the source code for the logic of the state
+ * @return result of the operation
+ */
+ ApexAPIResult createPolicyStateTaskSelectionLogic(final String name, final String version, final String stateName,
+ final String logicFlavour, final String logic);
+
+ /**
+ * Update task selection logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param logicFlavour the task selection logic flavour for the state, set to null to not update
+ * @param logic the source code for the logic of the state, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updatePolicyStateTaskSelectionLogic(final String name, final String version, final String stateName,
+ final String logicFlavour, final String logic);
+
+ /**
+ * List task selection logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @return result of the operation
+ */
+ ApexAPIResult listPolicyStateTaskSelectionLogic(final String name, final String version, final String stateName);
+
+ /**
+ * Delete task selection logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @return result of the operation
+ */
+ ApexAPIResult deletePolicyStateTaskSelectionLogic(final String name, final String version, final String stateName);
+
+ /**
+ * Create a policy state output.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param outputName of the state output
+ * @param eventName name of the output event for this state output
+ * @param eventVersion version of the output event for this state output, set to null to use the
+ * latest version
+ * @param nextState for this state to transition to, set to null if this is the last state that
+ * the policy transitions to on this branch
+ * @return result of the operation
+ */
+ ApexAPIResult createPolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName, final String eventName, final String eventVersion, final String nextState);
+
+ /**
+ * List policy state outputs.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param outputName of the state output, set to null to list all outputs of the state
+ * @return result of the operation
+ */
+ ApexAPIResult listPolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName);
+
+ /**
+ * Delete a policy state output.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param outputName of the state output, set to null to delete all state outputs
+ * @return result of the operation
+ */
+ ApexAPIResult deletePolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName);
+
+ /**
+ * Create policy finalizer logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param finalizerLogicName name of the state finalizer logic
+ * @param logicFlavour the policy finalizer logic flavour for the state, set to null to use the
+ * default task logic flavour
+ * @param logic the source code for the logic of the state
+ * @return result of the operation
+ */
+ ApexAPIResult createPolicyStateFinalizerLogic(final String name, final String version, final String stateName,
+ final String finalizerLogicName, final String logicFlavour, final String logic);
+
+ /**
+ * Update policy finalizer logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param finalizerLogicName name of the state finalizer logic
+ * @param logicFlavour the policy finalizer logic flavour for the state, set to null to not
+ * update
+ * @param logic the source code for the logic of the state, set to null to not update
+ * @return result of the operation
+ */
+ ApexAPIResult updatePolicyStateFinalizerLogic(final String name, final String version, final String stateName,
+ final String finalizerLogicName, final String logicFlavour, final String logic);
+
+ /**
+ * List policy finalizer logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param finalizerLogicName name of the state finalizer logic
+ * @return result of the operation
+ */
+ ApexAPIResult listPolicyStateFinalizerLogic(final String name, final String version, final String stateName,
+ final String finalizerLogicName);
+
+ /**
+ * Delete policy finalizer logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param finalizerLogicName name of the state finalizer logic
+ * @return result of the operation
+ */
+ ApexAPIResult deletePolicyStateFinalizerLogic(final String name, final String version, final String stateName,
+ final String finalizerLogicName);
+
+ /**
+ * Create a policy state task reference.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param taskLocalName the task local name
+ * @param taskName name of the task
+ * @param taskVersion version of the task, set to null to use the latest version
+ * @param outputType Type of output for the task, must be DIRECT for direct output to a state
+ * output or LOGIC for output to state finalizer logic
+ * @param outputName the name of the state output or state state finalizer logic to handle the
+ * task output
+ * @return result of the operation
+ */
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ ApexAPIResult createPolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskLocalName, final String taskName, final String taskVersion, final String outputType,
+ final String outputName);
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /**
+ * List policy state task references.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param taskName name of the task, set to null to list all task references
+ * @param taskVersion version of the task, set to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult listPolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskName, final String taskVersion);
+
+ /**
+ * Delete a policy state task reference.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param taskName name of the task, set to null to delete all task references
+ * @param taskVersion version of the task, set to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult deletePolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskName, final String taskVersion);
+
+ /**
+ * Create a policy state context album reference.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param contextAlbumName name of the context album for the context album reference
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult createPolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion);
+
+ /**
+ * List policy state context album references.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param contextAlbumName name of the context album for the context album reference, set to
+ * null to list all task context album references
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult listPolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion);
+
+ /**
+ * Delete a policy state context album reference.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the default version
+ * @param stateName of the state
+ * @param contextAlbumName name of the context album for the context album reference, set to
+ * null to delete all task context album references
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ ApexAPIResult deletePolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion);
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexModel.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexModel.java
new file mode 100644
index 000000000..c9190b8db
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexModel.java
@@ -0,0 +1,192 @@
+/*
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi;
+
+import org.onap.policy.apex.model.basicmodel.dao.DAOParameters;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+
+/**
+ * The Interface ApexModelAPI provides functional methods that allow Apex models to be managed.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public interface ApexModel extends ApexEditorAPI {
+ /**
+ * Make a deep copy of the Model.
+ *
+ * @return the result of the operation
+ */
+ ApexModel clone();
+
+ /**
+ * Load an Apex model from a string.
+ *
+ * @param modelString the string with the model
+ * @return the result of the operation
+ */
+ ApexAPIResult loadFromString(String modelString);
+
+ /**
+ * Load an Apex model from a file.
+ *
+ * @param fileName the file name of the file with the model
+ * @return the result of the operation
+ */
+ ApexAPIResult loadFromFile(String fileName);
+
+ /**
+ * Save an Apex model to a file.
+ *
+ * @param fileName the file name
+ * @param xmlFlag if true, save the file in XML format, otherwise save the file in the default JSON format
+ * @return the result of the operation
+ */
+ ApexAPIResult saveToFile(String fileName, boolean xmlFlag);
+
+ /**
+ * Load an Apex model from a database.
+ *
+ * @param modelName the name of the model to load
+ * @param modelVersion the version of the model to load, loads the policy model from the database with this name, if more than one exist, an exception is
+ * thrown
+ * @param daoParameters the parameters to use to access the database over JDBC
+ * @return the result of the operation
+ */
+ ApexAPIResult loadFromDatabase(String modelName, String modelVersion, DAOParameters daoParameters);
+
+ /**
+ * Save an Apex model to a database.
+ *
+ * @param daoParameters the parameters to use to access the database over JDBC
+ * @return the result of the operation
+ */
+ ApexAPIResult saveToDatabase(DAOParameters daoParameters);
+
+ /**
+ * Read an APEX model from a location identified by a URL.
+ *
+ * @param urlString the url string
+ * @return the result of the operation
+ */
+ ApexAPIResult readFromURL(String urlString);
+
+ /**
+ * Write an APEX model to a location identified by a URL.
+ *
+ * @param urlString the URL to read the model from
+ * @param xmlFlag if true, save the file in XML format, otherwise save the file in the default JSON format
+ * @return the result of the operation
+ */
+ ApexAPIResult writeToURL(String urlString, boolean xmlFlag);
+
+ /**
+ * Analyse an Apex model that shows the concept usage references of a policy model.
+ *
+ * @return the result of the operation
+ */
+ ApexAPIResult analyse();
+
+ /**
+ * Validate an Apex model, checking all concepts and references in the model.
+ *
+ * @return the result of the operation
+ */
+ ApexAPIResult validate();
+
+ /**
+ * Compare to Apex models, returning the differences between the models.
+ *
+ * @param otherModelFileName the file name of the other model
+ * @param diffsOnly only returns differences between the model when set
+ * @param keysOnly only returns the keys that are different when set, when not set values are also returned
+ * @return the result of the operation
+ */
+ ApexAPIResult compare(String otherModelFileName, boolean diffsOnly, boolean keysOnly);
+
+ /**
+ * Compare two Apex models, returning the differences between the models.
+ *
+ * @param otherModelString the other model as a string
+ * @param diffsOnly only returns differences between the model when set
+ * @param keysOnly only returns the keys that are different when set, when not set values are also returned
+ * @return the result of the operation
+ */
+ ApexAPIResult compareWithString(String otherModelString, boolean diffsOnly, boolean keysOnly);
+
+ /**
+ * Split out a sub model from an Apex model that contains a given subset of the policies in the original model.
+ *
+ * @param targetModelName the file name of the target model in which to store the model split out from the original model
+ * @param splitOutPolicies the policies form the original model to include in the split out model, specified as a comma delimited list of policy names
+ * @return the result of the operation
+ */
+ ApexAPIResult split(String targetModelName, String splitOutPolicies);
+
+ /**
+ * Split out a sub model from an Apex model that contains a given subset of the policies in the original model, return the split model in the result as a
+ * string.
+ *
+ * @param splitOutPolicies the policies form the original model to include in the split out model, specified as a comma delimited list of policy names
+ * @return the result of the operation
+ */
+ ApexAPIResult split(String splitOutPolicies);
+
+ /**
+ * Merge two Apex models together.
+ *
+ * @param mergeInModelName the file name of the model to merge into the current model
+ * @param keepOriginal if this flag is set to true, if a concept exists in both models, the original model copy of that concept is kept, if the flag is set
+ * to false, then the copy of the concept from the mergeInModel overwrites the concept in the original model
+ * @return the result of the operation
+ */
+ ApexAPIResult merge(String mergeInModelName, boolean keepOriginal);
+
+ /**
+ * Merge two Apex models together.
+ *
+ * @param otherModelString the model to merge as a string
+ * @param keepOriginal if this flag is set to true, if a concept exists in both models, the original model copy of that concept is kept, if the flag is set
+ * to false, then the copy of the concept from the mergeInModel overwrites the concept in the original model
+ * @return the result of the operation
+ */
+ ApexAPIResult mergeWithString(String otherModelString, boolean keepOriginal);
+
+ /**
+ * Get the raw policy model being used by this model.
+ *
+ * @return the policy model
+ */
+ AxPolicyModel getPolicyModel();
+
+ /**
+ * Set the raw policy model being used by this model.
+ *
+ * @param policyModel the policy model
+ */
+ void setPolicyModel(AxPolicyModel policyModel);
+
+ /**
+ * Builds the raw policy model being used by this model.
+ *
+ * @return the policy model
+ */
+ AxPolicyModel build();
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexModelFactory.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexModelFactory.java
new file mode 100644
index 000000000..ad0f0b4fa
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/ApexModelFactory.java
@@ -0,0 +1,78 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi;
+
+import java.util.Properties;
+
+import org.onap.policy.apex.model.modelapi.impl.ApexModelImpl;
+
+/**
+ * A factory for creating ApexModel objects using the Apex Model implementation.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ApexModelFactory {
+
+ /**
+ * Creates a new ApexModel object from its implementation.
+ *
+ * @param apexProperties default values and other configuration information for the apex model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ * @return the apex model
+ */
+ public ApexModel createApexModel(final Properties apexProperties, final boolean jsonMode) {
+ return new ApexModelImpl(setDefaultPropertyValues(apexProperties), jsonMode);
+ }
+
+ /**
+ * Sets default property values for Apex properties that must be set for the Apex model
+ * implementation if those properties are not already set.
+ *
+ * @param apexPropertiesIn the default property values
+ * @return the properties
+ */
+ private Properties setDefaultPropertyValues(final Properties apexPropertiesIn) {
+ Properties apexProperties = apexPropertiesIn;
+
+ if (apexProperties == null) {
+ apexProperties = new Properties();
+ }
+
+ if (apexProperties.getProperty("DEFAULT_CONCEPT_VERSION") == null) {
+ apexProperties.setProperty("DEFAULT_CONCEPT_VERSION", "0.0.1");
+ }
+ if (apexProperties.getProperty("DEFAULT_EVENT_NAMESPACE") == null) {
+ apexProperties.setProperty("DEFAULT_EVENT_NAMESPACE", "org.onap.policy.apex");
+ }
+ if (apexProperties.getProperty("DEFAULT_EVENT_SOURCE") == null) {
+ apexProperties.setProperty("DEFAULT_EVENT_SOURCE", "source");
+ }
+ if (apexProperties.getProperty("DEFAULT_EVENT_TARGET") == null) {
+ apexProperties.setProperty("DEFAULT_EVENT_TARGET", "target");
+ }
+ if (apexProperties.getProperty("DEFAULT_POLICY_TEMPLATE") == null) {
+ apexProperties.setProperty("DEFAULT_POLICY_TEMPLATE", "FREEFORM");
+ }
+
+ return apexProperties;
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ApexModelImpl.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ApexModelImpl.java
new file mode 100644
index 000000000..5303e9502
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ApexModelImpl.java
@@ -0,0 +1,1239 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.util.Properties;
+
+import org.onap.policy.apex.model.basicmodel.dao.DAOParameters;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+
+/**
+ * This class is an implementation of a facade on an Apex model for editors of Apex models.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public final class ApexModelImpl implements ApexModel {
+ private static final int HASH_CODE_PRIME_0 = 31;
+ private static final int HASH_CODE_PRIME_1 = 1231;
+ private static final int HASH_CODE_PRIME_2 = 1237;
+
+ // The policy model being acted upon
+ private AxPolicyModel policyModel = new AxPolicyModel();
+
+ // The file name for the loaded file
+ private String fileName = null;
+
+ // Facade classes for working towards the real Apex model
+ // @formatter:off
+ private ModelFacade modelFacade;
+ private KeyInformationFacade keyInformationFacade;
+ private ContextSchemaFacade contextSchemaFacade;
+ private EventFacade eventFacade;
+ private ContextAlbumFacade contextAlbumFacade;
+ private TaskFacade taskFacade;
+ private PolicyFacade policyFacade;
+ private ModelHandlerFacade modelHandlerFacade;
+ // @formatter:on
+
+ private Properties apexProperties;
+ private boolean jsonMode;
+
+ /**
+ * Create an implementation of the Apex editor and model APIs.
+ *
+ * @param apexProperties The properties to use for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ */
+ public ApexModelImpl(final Properties apexProperties, final boolean jsonMode) {
+ this.apexProperties = apexProperties;
+ this.jsonMode = jsonMode;
+
+ // @formatter:off
+ this.modelFacade = new ModelFacade(this, apexProperties, jsonMode);
+ this.keyInformationFacade = new KeyInformationFacade(this, apexProperties, jsonMode);
+ this.contextSchemaFacade = new ContextSchemaFacade(this, apexProperties, jsonMode);
+ this.eventFacade = new EventFacade(this, apexProperties, jsonMode);
+ this.contextAlbumFacade = new ContextAlbumFacade(this, apexProperties, jsonMode);
+ this.taskFacade = new TaskFacade(this, apexProperties, jsonMode);
+ this.policyFacade = new PolicyFacade(this, apexProperties, jsonMode);
+ this.modelHandlerFacade = new ModelHandlerFacade(this, apexProperties, jsonMode);
+ // @formatter:on
+ }
+
+ /**
+ * Constructor, prevents this class being sub-classed.
+ */
+ private ApexModelImpl() {}
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexModel#clone()
+ */
+ @Override
+ public ApexModel clone() {
+ ApexModelImpl ret = new ApexModelImpl();
+ // @formatter:off
+ ret.policyModel = new AxPolicyModel(policyModel);
+ ret.fileName = this.fileName;
+ ret.apexProperties = this.apexProperties;
+ ret.jsonMode = this.jsonMode;
+ ret.modelFacade = new ModelFacade(ret, this.apexProperties, this.jsonMode);
+ ret.keyInformationFacade = new KeyInformationFacade(ret, this.apexProperties, this.jsonMode);
+ ret.contextSchemaFacade = new ContextSchemaFacade(ret, this.apexProperties, this.jsonMode);
+ ret.eventFacade = new EventFacade(ret, this.apexProperties, this.jsonMode);
+ ret.contextAlbumFacade = new ContextAlbumFacade(ret, this.apexProperties, this.jsonMode);
+ ret.taskFacade = new TaskFacade(ret, this.apexProperties, this.jsonMode);
+ ret.policyFacade = new PolicyFacade(ret, this.apexProperties, this.jsonMode);
+ ret.modelHandlerFacade = new ModelHandlerFacade(ret, this.apexProperties, this.jsonMode);
+ // @formatter:on
+
+ return ret;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexModel#createModel(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createModel(final String name, final String version, final String uuid,
+ final String description) {
+ return modelFacade.createModel(name, version, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexModel#updateModel(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updateModel(final String name, final String version, final String uuid,
+ final String description) {
+ return modelFacade.updateModel(name, version, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexEditorAPI#getModelKey()
+ */
+ @Override
+ public ApexAPIResult getModelKey() {
+ return modelFacade.getModelKey();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listModel()
+ */
+ @Override
+ public ApexAPIResult listModel() {
+ return modelFacade.listModel();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteModel()
+ */
+ @Override
+ public ApexAPIResult deleteModel() {
+ return modelFacade.deleteModel();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createKeyInformation(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createKeyInformation(final String name, final String version, final String uuid,
+ final String description) {
+ return keyInformationFacade.createKeyInformation(name, version, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#updateKeyInformation(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updateKeyInformation(final String name, final String version, final String uuid,
+ final String description) {
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listKeyInformation(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listKeyInformation(final String name, final String version) {
+ return keyInformationFacade.listKeyInformation(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteKeyInformation(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteKeyInformation(final String name, final String version) {
+ return keyInformationFacade.deleteKeyInformation(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#validateKeyInformation(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult validateKeyInformation(final String name, final String version) {
+ return keyInformationFacade.validateKeyInformation(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createContextSchema(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createContextSchema(final String name, final String version, final String schemaFlavour,
+ final String schemaDefinition, final String uuid, final String description) {
+ return contextSchemaFacade.createContextSchema(name, version, schemaFlavour, schemaDefinition, uuid,
+ description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#updateContextSchema(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updateContextSchema(final String name, final String version, final String schemaFlavour,
+ final String schemaDefinition, final String uuid, final String description) {
+ return contextSchemaFacade.updateContextSchema(name, version, schemaFlavour, schemaDefinition, uuid,
+ description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listContextSchemas(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listContextSchemas(final String name, final String version) {
+ return contextSchemaFacade.listContextSchemas(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteContextSchema(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteContextSchema(final String name, final String version) {
+ return contextSchemaFacade.deleteContextSchema(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#validateContextSchemas(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult validateContextSchemas(final String name, final String version) {
+ return contextSchemaFacade.validateContextSchemas(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createEvent(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createEvent(final String name, final String version, final String nameSpace,
+ final String source, final String target, final String uuid, final String description) {
+ return eventFacade.createEvent(name, version, nameSpace, source, target, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#updateEvent(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updateEvent(final String name, final String version, final String nameSpace,
+ final String source, final String target, final String uuid, final String description) {
+ return eventFacade.updateEvent(name, version, nameSpace, source, target, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listEvent(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listEvent(final String name, final String version) {
+ return eventFacade.listEvent(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteEvent(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteEvent(final String name, final String version) {
+ return eventFacade.deleteEvent(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#validateEvent(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult validateEvent(final String name, final String version) {
+ return eventFacade.validateEvent(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.modelapi.ApexEditorAPI#createEventPar(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean)
+ */
+ @Override
+ public ApexAPIResult createEventPar(final String name, final String version, final String parName,
+ final String contextSchemaName, final String contextSchemaVersion, final boolean optional) {
+ return eventFacade.createEventPar(name, version, parName, contextSchemaName, contextSchemaVersion, optional);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listEventPar(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listEventPar(final String name, final String version, final String parName) {
+ return eventFacade.listEventPar(name, version, parName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteEventPar(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteEventPar(final String name, final String version, final String parName) {
+ return eventFacade.deleteEventPar(name, version, parName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.modelapi.ApexEditorAPI#createContextAlbum(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ public ApexAPIResult createContextAlbum(final String name, final String version, final String scope,
+ final String writable, final String contextSchemaName, final String contextSchemaVersion, final String uuid,
+ final String description) {
+ return contextAlbumFacade.createContextAlbum(name, version, scope, writable, contextSchemaName,
+ contextSchemaVersion, uuid, description);
+ }
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.modelapi.ApexEditorAPI#updateContextAlbum(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ @Override
+ public ApexAPIResult updateContextAlbum(final String name, final String version, final String scope,
+ final String writable, final String contextSchemaName, final String contextSchemaVersion, final String uuid,
+ final String description) {
+ return contextAlbumFacade.updateContextAlbum(name, version, scope, writable, contextSchemaName,
+ contextSchemaVersion, uuid, description);
+ }
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listContextAlbum(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listContextAlbum(final String name, final String version) {
+ return contextAlbumFacade.listContextAlbum(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteContextAlbum(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteContextAlbum(final String name, final String version) {
+ return contextAlbumFacade.deleteContextAlbum(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#validateContextAlbum(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult validateContextAlbum(final String name, final String version) {
+ return contextAlbumFacade.validateContextAlbum(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createTask(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createTask(final String name, final String version, final String uuid,
+ final String description) {
+ return taskFacade.createTask(name, version, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#updateTask(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updateTask(final String name, final String version, final String uuid,
+ final String description) {
+ return taskFacade.updateTask(name, version, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listTask(java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listTask(final String name, final String version) {
+ return taskFacade.listTask(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteTask(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteTask(final String name, final String version) {
+ return taskFacade.deleteTask(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#validateTask(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult validateTask(final String name, final String version) {
+ return taskFacade.validateTask(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createTaskLogic(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createTaskLogic(final String name, final String version, final String logicFlavour,
+ final String logic) {
+ return taskFacade.createTaskLogic(name, version, logicFlavour, logic);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#updateTaskLogic(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updateTaskLogic(final String name, final String version, final String logicFlavour,
+ final String logic) {
+ return taskFacade.updateTaskLogic(name, version, logicFlavour, logic);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listTaskLogic(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listTaskLogic(final String name, final String version) {
+ return taskFacade.listTaskLogic(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteTaskLogic(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteTaskLogic(final String name, final String version) {
+ return taskFacade.deleteTaskLogic(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createTaskInputField(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.boolean)
+ */
+ @Override
+ public ApexAPIResult createTaskInputField(final String name, final String version, final String fieldName,
+ final String dataTypeName, final String dataTypeVersion, final boolean optional) {
+ return taskFacade.createTaskInputField(name, version, fieldName, dataTypeName, dataTypeVersion, optional);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listTaskInputField(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listTaskInputField(final String name, final String version, final String fieldName) {
+ return taskFacade.listTaskInputField(name, version, fieldName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteTaskInputField(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteTaskInputField(final String name, final String version, final String fieldName) {
+ return taskFacade.deleteTaskInputField(name, version, fieldName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createTaskOutputField(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.boolean)
+ */
+ @Override
+ public ApexAPIResult createTaskOutputField(final String name, final String version, final String fieldName,
+ final String dataTypeName, final String dataTypeVersion, final boolean optional) {
+ return taskFacade.createTaskOutputField(name, version, fieldName, dataTypeName, dataTypeVersion, optional);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listTaskOutputField(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listTaskOutputField(final String name, final String version, final String fieldName) {
+ return taskFacade.listTaskOutputField(name, version, fieldName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteTaskOutputField(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteTaskOutputField(final String name, final String version, final String fieldName) {
+ return taskFacade.deleteTaskOutputField(name, version, fieldName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createTaskParameter(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createTaskParameter(final String name, final String version, final String parName,
+ final String defaultValue) {
+ return taskFacade.createTaskParameter(name, version, parName, defaultValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listTaskParameter(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listTaskParameter(final String name, final String version, final String parName) {
+ return taskFacade.listTaskParameter(name, version, parName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteTaskParameter(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteTaskParameter(final String name, final String version, final String parName) {
+ return taskFacade.deleteTaskParameter(name, version, parName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createTaskContextRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion) {
+ return taskFacade.createTaskContextRef(name, version, contextAlbumName, contextAlbumVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listTaskContextRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion) {
+ return taskFacade.listTaskContextRef(name, version, contextAlbumName, contextAlbumVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deleteTaskContextRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deleteTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion) {
+ return taskFacade.deleteTaskContextRef(name, version, contextAlbumName, contextAlbumVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createPolicy(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createPolicy(final String name, final String version, final String template,
+ final String firstState, final String uuid, final String description) {
+ return policyFacade.createPolicy(name, version, template, firstState, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#updatePolicy(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updatePolicy(final String name, final String version, final String template,
+ final String firstState, final String uuid, final String description) {
+ return policyFacade.updatePolicy(name, version, template, firstState, uuid, description);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listPolicy(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listPolicy(final String name, final String version) {
+ return policyFacade.listPolicy(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deletePolicy(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deletePolicy(final String name, final String version) {
+ return policyFacade.deletePolicy(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#validatePolicy(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult validatePolicy(final String name, final String version) {
+ return policyFacade.validatePolicy(name, version);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createPolicyState(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createPolicyState(final String name, final String version, final String stateName,
+ final String triggerName, final String triggerVersion, final String defaultTaskName,
+ final String defaltTaskVersion) {
+ return policyFacade.createPolicyState(name, version, stateName, triggerName, triggerVersion, defaultTaskName,
+ defaltTaskVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#updatePolicyState(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updatePolicyState(final String name, final String version, final String stateName,
+ final String triggerName, final String triggerVersion, final String defaultTaskName,
+ final String defaltTaskVersion) {
+ return policyFacade.updatePolicyState(name, version, stateName, triggerName, triggerVersion, defaultTaskName,
+ defaltTaskVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listPolicyState(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listPolicyState(final String name, final String version, final String stateName) {
+ return policyFacade.listPolicyState(name, version, stateName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deletePolicyState(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deletePolicyState(final String name, final String version, final String stateName) {
+ return policyFacade.deletePolicyState(name, version, stateName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.auth.api.ApexEditorAPI#createPolicyStateTaskSelectionLogic(java.lang.
+ * String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createPolicyStateTaskSelectionLogic(final String name, final String version,
+ final String stateName, final String logicFlavour, final String logic) {
+ return policyFacade.createPolicyStateTaskSelectionLogic(name, version, stateName, logicFlavour, logic);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.auth.api.ApexEditorAPI#updatePolicyStateTaskSelectionLogic(java.lang.
+ * String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updatePolicyStateTaskSelectionLogic(final String name, final String version,
+ final String stateName, final String logicFlavour, final String logic) {
+ return policyFacade.updatePolicyStateTaskSelectionLogic(name, version, stateName, logicFlavour, logic);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listPolicyStateTaskSelectionLogic(java.lang.
+ * String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listPolicyStateTaskSelectionLogic(final String name, final String version,
+ final String stateName) {
+ return policyFacade.listPolicyStateTaskSelectionLogic(name, version, stateName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.auth.api.ApexEditorAPI#deletePolicyStateTaskSelectionLogic(java.lang.
+ * String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deletePolicyStateTaskSelectionLogic(final String name, final String version,
+ final String stateName) {
+ return policyFacade.deletePolicyStateTaskSelectionLogic(name, version, stateName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#createPolicyStateOutput(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createPolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName, final String eventName, final String eventVersion, final String nextState) {
+ return policyFacade.createPolicyStateOutput(name, version, stateName, outputName, eventName, eventVersion,
+ nextState);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listPolicyStateOutput(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listPolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName) {
+ return policyFacade.listPolicyStateOutput(name, version, stateName, outputName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deletePolicyStateOutput(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deletePolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName) {
+ return policyFacade.deletePolicyStateOutput(name, version, stateName, outputName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.core.modelapi.ApexEditorAPI#createPolicyStateFinalizerLogic(java.lang.
+ * String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createPolicyStateFinalizerLogic(final String name, final String version,
+ final String stateName, final String finalizerLogicName, final String logicFlavour, final String logic) {
+ return policyFacade.createPolicyStateFinalizerLogic(name, version, stateName, finalizerLogicName, logicFlavour,
+ logic);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.core.modelapi.ApexEditorAPI#updatePolicyStateFinalizerLogic(java.lang.
+ * String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ApexAPIResult updatePolicyStateFinalizerLogic(final String name, final String version,
+ final String stateName, final String finalizerLogicName, final String logicFlavour, final String logic) {
+ return policyFacade.updatePolicyStateFinalizerLogic(name, version, stateName, finalizerLogicName, logicFlavour,
+ logic);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.core.modelapi.ApexEditorAPI#listPolicyStateFinalizerLogic(java.lang.
+ * String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listPolicyStateFinalizerLogic(final String name, final String version, final String stateName,
+ final String finalizerLogicName) {
+ return policyFacade.listPolicyStateFinalizerLogic(name, version, stateName, finalizerLogicName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.core.modelapi.ApexEditorAPI#deletePolicyStateFinalizerLogic(java.lang.
+ * String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deletePolicyStateFinalizerLogic(final String name, final String version,
+ final String stateName, final String finalizerLogicName) {
+ return policyFacade.deletePolicyStateFinalizerLogic(name, version, stateName, finalizerLogicName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.core.modelapi.ApexEditorAPI#createPolicyStateTaskRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ public ApexAPIResult createPolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskLocalName, final String taskName, final String taskVersion, final String outputType,
+ final String outputName) {
+ return policyFacade.createPolicyStateTaskRef(name, version, stateName, taskLocalName, taskName, taskVersion,
+ outputType, outputName);
+ }
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listPolicyStateTaskRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listPolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskName, final String taskVersion) {
+ return policyFacade.listPolicyStateTaskRef(name, version, stateName, taskName, taskVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#deletePolicyStateTaskRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deletePolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskName, final String taskVersion) {
+ return policyFacade.deletePolicyStateTaskRef(name, version, stateName, taskName, taskVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.auth.api.ApexEditorAPI#createPolicyStateContextRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult createPolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion) {
+ return policyFacade.createPolicyStateContextRef(name, version, stateName, contextAlbumName,
+ contextAlbumVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexEditorAPI#listPolicyStateContextRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult listPolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion) {
+ return policyFacade.listPolicyStateContextRef(name, version, stateName, contextAlbumName, contextAlbumVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.auth.api.ApexEditorAPI#deletePolicyStateContextRef(java.lang.String,
+ * java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult deletePolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion) {
+ return policyFacade.deletePolicyStateContextRef(name, version, stateName, contextAlbumName,
+ contextAlbumVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexModel#loadFromString(java.lang.String)
+ */
+ @Override
+ public ApexAPIResult loadFromString(final String modelString) {
+ return modelHandlerFacade.loadFromString(modelString);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#loadFromFile(java.lang.String)
+ */
+ @Override
+ // CHECKSTYLE:OFF: checkstyle:HiddenField
+ public ApexAPIResult loadFromFile(final String fileName) {
+ this.fileName = fileName;
+ return modelHandlerFacade.loadFromFile(fileName);
+ }
+ // CHECKSTYLE:ON: checkstyle:HiddenField
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#saveToFile(java.lang.String, boolean)
+ */
+ @Override
+ public ApexAPIResult saveToFile(final String saveFileName, final boolean xmlFlag) {
+ if (saveFileName == null) {
+ return modelHandlerFacade.saveToFile(fileName, xmlFlag);
+ } else {
+ return modelHandlerFacade.saveToFile(saveFileName, xmlFlag);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.modelapi.ApexModel#loadFromDatabase(java.lang.String,
+ * java.lang.String, org.onap.policy.apex.model.basicmodel.dao.DAOParameters)
+ */
+ @Override
+ public ApexAPIResult loadFromDatabase(final String modelName, final String modelVersion,
+ final DAOParameters daoParameters) {
+ return modelHandlerFacade.loadFromDatabase(modelName, modelVersion, daoParameters);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.modelapi.ApexModel#saveToDatabase(org.onap.policy.apex.model.
+ * basicmodel. dao.DAOParameters)
+ */
+ @Override
+ public ApexAPIResult saveToDatabase(final DAOParameters daoParameters) {
+ return modelHandlerFacade.saveToDatabase(daoParameters);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#readFromURL(java.lang.String)
+ */
+ @Override
+ public ApexAPIResult readFromURL(final String urlString) {
+ return modelHandlerFacade.readFromURL(urlString);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#writeToURL(java.lang.String, boolean)
+ */
+ @Override
+ public ApexAPIResult writeToURL(final String urlString, final boolean xmlFlag) {
+ return modelHandlerFacade.writeToURL(urlString, xmlFlag);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#analyse()
+ */
+ @Override
+ public ApexAPIResult analyse() {
+ return modelHandlerFacade.analyse();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#validate()
+ */
+ @Override
+ public ApexAPIResult validate() {
+ return modelHandlerFacade.validate();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#compare(java.lang.String, boolean, boolean)
+ */
+ @Override
+ public ApexAPIResult compare(final String otherModelFileName, final boolean diffsOnly, final boolean keysOnly) {
+ return modelHandlerFacade.compare(otherModelFileName, diffsOnly, keysOnly);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexModel#compareWithString(java.lang.String,
+ * boolean, boolean)
+ */
+ @Override
+ public ApexAPIResult compareWithString(final String otherModelString, final boolean diffsOnly,
+ final boolean keysOnly) {
+ return modelHandlerFacade.compareWithString(otherModelString, diffsOnly, keysOnly);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#split(java.lang.String, java.lang.String)
+ */
+ @Override
+ public ApexAPIResult split(final String targetModelFileName, final String splitOutPolicies) {
+ return modelHandlerFacade.split(targetModelFileName, splitOutPolicies);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexModel#split(java.lang.String)
+ */
+ @Override
+ public ApexAPIResult split(final String splitOutPolicies) {
+ return modelHandlerFacade.split(splitOutPolicies);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#merge(java.lang.String, boolean)
+ */
+ @Override
+ public ApexAPIResult merge(final String mergeInModelFileName, final boolean keepOriginal) {
+ return modelHandlerFacade.merge(mergeInModelFileName, keepOriginal);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexModel#mergeWithString(java.lang.String, boolean)
+ */
+ @Override
+ public ApexAPIResult mergeWithString(final String otherModelString, final boolean keepOriginal) {
+ return modelHandlerFacade.mergeWithString(otherModelString, keepOriginal);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = HASH_CODE_PRIME_0;
+ int result = 1;
+ result = prime * result + ((apexProperties == null) ? 0 : apexProperties.hashCode());
+ result = prime * result + ((contextAlbumFacade == null) ? 0 : contextAlbumFacade.hashCode());
+ result = prime * result + ((contextSchemaFacade == null) ? 0 : contextSchemaFacade.hashCode());
+ result = prime * result + ((eventFacade == null) ? 0 : eventFacade.hashCode());
+ result = prime * result + ((fileName == null) ? 0 : fileName.hashCode());
+ result = prime * result + (jsonMode ? HASH_CODE_PRIME_1 : HASH_CODE_PRIME_2);
+ result = prime * result + ((keyInformationFacade == null) ? 0 : keyInformationFacade.hashCode());
+ result = prime * result + ((modelFacade == null) ? 0 : modelFacade.hashCode());
+ result = prime * result + ((modelHandlerFacade == null) ? 0 : modelHandlerFacade.hashCode());
+ result = prime * result + ((policyFacade == null) ? 0 : policyFacade.hashCode());
+ result = prime * result + ((policyModel == null) ? 0 : policyModel.hashCode());
+ result = prime * result + ((taskFacade == null) ? 0 : taskFacade.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.auth.api.ApexModel#getModel()
+ */
+ @Override
+ public AxPolicyModel getPolicyModel() {
+ return policyModel;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.auth.api.ApexModel#setPolicyModel(org.onap.policy.apex.core.policymodel.
+ * concepts.AxPolicyModel)
+ */
+ @Override
+ public void setPolicyModel(final AxPolicyModel policyModel) {
+ this.policyModel = policyModel;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.core.modelapi.ApexModel#build()
+ */
+ @Override
+ public AxPolicyModel build() {
+ return policyModel;
+ }
+
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ContextAlbumFacade.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ContextAlbumFacade.java
new file mode 100644
index 000000000..57d05025a
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ContextAlbumFacade.java
@@ -0,0 +1,282 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.util.Properties;
+import java.util.Set;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelStringWriter;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+
+/**
+ * This class acts as a facade for operations towards a policy model for context album operations.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ContextAlbumFacade {
+ private static final String CONCEPT = "concept ";
+ private static final String CONCEPT_S = "concept(s) ";
+ private static final String DOES_NOT_EXIST = " does not exist";
+ private static final String DO_ES_NOT_EXIST = " do(es) not exist";
+
+ // Apex model we're working towards
+ private final ApexModel apexModel;
+
+ // Properties to use for the model
+ private final Properties apexProperties;
+
+ // Facade classes for working towards the real Apex model
+ private final KeyInformationFacade keyInformationFacade;
+
+ // JSON output on list/delete if set
+ private final boolean jsonMode;
+
+ /**
+ * Constructor that creates a context album facade for the Apex Model API.
+ *
+ * @param apexModel the apex model
+ * @param apexProperties Properties for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ */
+ public ContextAlbumFacade(final ApexModel apexModel, final Properties apexProperties, final boolean jsonMode) {
+ this.apexModel = apexModel;
+ this.apexProperties = apexProperties;
+ this.jsonMode = jsonMode;
+
+ keyInformationFacade = new KeyInformationFacade(apexModel, apexProperties, jsonMode);
+ }
+
+ /**
+ * Create a context album.
+ *
+ * @param name name of the context album
+ * @param version version of the context album, set to null to use the default version
+ * @param scope of the context album
+ * @param writable "true" or "t" if the context album is writable, set to null or any other
+ * value for a read-only album
+ * @param contextSchemaName name of the parameter context schema
+ * @param contextSchemaVersion version of the parameter context schema, set to null to use the
+ * latest version
+ * @param uuid context album UUID, set to null to generate a UUID
+ * @param description context album description, set to null to generate a description
+ * @return result of the operation
+ */
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ public ApexAPIResult createContextAlbum(final String name, final String version, final String scope,
+ final String writable, final String contextSchemaName, final String contextSchemaVersion, final String uuid,
+ final String description) {
+ try {
+ final AxArtifactKey key = new AxArtifactKey();
+ key.setName(name);
+ if (version != null) {
+ key.setVersion(version);
+ } else {
+ key.setVersion(apexProperties.getProperty("DEFAULT_CONCEPT_VERSION"));
+ }
+
+ if (apexModel.getPolicyModel().getAlbums().getAlbumsMap().containsKey(key)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + key.getID() + " already exists");
+ }
+
+ final AxContextSchema schema =
+ apexModel.getPolicyModel().getSchemas().get(contextSchemaName, contextSchemaVersion);
+ if (schema == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextSchemaName + ':' + contextSchemaVersion + DOES_NOT_EXIST);
+ }
+
+ final AxContextAlbum contextAlbum = new AxContextAlbum(key);
+ contextAlbum.setScope(scope);
+ contextAlbum.setItemSchema(schema.getKey());
+
+ if (writable != null
+ && (writable.trim().equalsIgnoreCase("true") || writable.trim().equalsIgnoreCase("t"))) {
+ contextAlbum.setWritable(true);
+ } else {
+ contextAlbum.setWritable(false);
+ }
+
+ apexModel.getPolicyModel().getAlbums().getAlbumsMap().put(key, contextAlbum);
+
+ if (apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().containsKey(key)) {
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } else {
+ return keyInformationFacade.createKeyInformation(name, version, uuid, description);
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /**
+ * Update a context album.
+ *
+ * @param name name of the context album
+ * @param version version of the context album, set to null to use the default version
+ * @param scope of the context album
+ * @param writable "true" or "t" if the context album is writable, set to null or any other
+ * value for a read-only album
+ * @param contextSchemaName name of the parameter context schema
+ * @param contextSchemaVersion version of the parameter context schema, set to null to use the
+ * latest version
+ * @param uuid context album UUID, set to null to generate a UUID
+ * @param description context album description, set to null to generate a description
+ * @return result of the operation
+ */
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ public ApexAPIResult updateContextAlbum(final String name, final String version, final String scope,
+ final String writable, final String contextSchemaName, final String contextSchemaVersion, final String uuid,
+ final String description) {
+ try {
+ final AxContextAlbum contextAlbum = apexModel.getPolicyModel().getAlbums().get(name, version);
+ if (contextAlbum == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (scope != null) {
+ contextAlbum.setScope(scope);
+ }
+ if (writable != null) {
+ if (writable.trim().equalsIgnoreCase("true") || writable.trim().equalsIgnoreCase("t")) {
+ contextAlbum.setWritable(true);
+ } else {
+ contextAlbum.setWritable(false);
+ }
+ }
+
+ if (contextSchemaName != null) {
+ final AxContextSchema schema =
+ apexModel.getPolicyModel().getSchemas().get(contextSchemaName, contextSchemaVersion);
+ if (schema == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextSchemaName + ':' + contextSchemaVersion + DOES_NOT_EXIST);
+ }
+ contextAlbum.setItemSchema(schema.getKey());
+ }
+
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /**
+ * List context albums.
+ *
+ * @param name name of the context album, set to null to list all
+ * @param version starting version of the context album, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult listContextAlbum(final String name, final String version) {
+ try {
+ final Set<AxContextAlbum> contextAlbumSet = apexModel.getPolicyModel().getAlbums().getAll(name, version);
+ if (name != null && contextAlbumSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxContextAlbum contextAlbum : contextAlbumSet) {
+ result.addMessage(new ApexModelStringWriter<AxContextAlbum>(false).writeString(contextAlbum,
+ AxContextAlbum.class, jsonMode));
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a context album.
+ *
+ * @param name name of the context album
+ * @param version version of the context album, set to null to delete versions
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteContextAlbum(final String name, final String version) {
+ try {
+ if (version != null) {
+ final AxArtifactKey key = new AxArtifactKey(name, version);
+ if (apexModel.getPolicyModel().getAlbums().getAlbumsMap().remove(key) != null) {
+ return new ApexAPIResult();
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + key.getID() + DOES_NOT_EXIST);
+ }
+ }
+
+ final Set<AxContextAlbum> contextAlbumSet = apexModel.getPolicyModel().getAlbums().getAll(name, version);
+ if (contextAlbumSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxContextAlbum contextAlbum : contextAlbumSet) {
+ result.addMessage(new ApexModelStringWriter<AxContextAlbum>(false).writeString(contextAlbum,
+ AxContextAlbum.class, jsonMode));
+ apexModel.getPolicyModel().getAlbums().getAlbumsMap().remove(contextAlbum.getKey());
+ keyInformationFacade.deleteKeyInformation(name, version);
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Validate context albums.
+ *
+ * @param name name of the context album, set to null to list all
+ * @param version starting version of the context album, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult validateContextAlbum(final String name, final String version) {
+ try {
+ final Set<AxContextAlbum> contextAlbumSet = apexModel.getPolicyModel().getAlbums().getAll(name, version);
+ if (contextAlbumSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxContextAlbum contextAlbum : contextAlbumSet) {
+ final AxValidationResult validationResult = contextAlbum.validate(new AxValidationResult());
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(contextAlbum.getKey(),
+ AxArtifactKey.class, jsonMode));
+ result.addMessage(validationResult.toString());
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ContextSchemaFacade.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ContextSchemaFacade.java
new file mode 100644
index 000000000..3f7f75652
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ContextSchemaFacade.java
@@ -0,0 +1,240 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.util.Properties;
+import java.util.Set;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelStringWriter;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class acts as a facade for operations towards a policy model for context schema operations.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ContextSchemaFacade {
+ private static final String CONCEPT = "concept ";
+ private static final String CONCEPT_S = "concept(s) ";
+ private static final String DOES_NOT_EXIST = " does not exist";
+ private static final String DO_ES_NOT_EXIST = " do(es) not exist";
+ private static final String ALREADY_EXISTS = " already exists";
+
+ // Apex model we're working towards
+ private final ApexModel apexModel;
+
+ // Properties to use for the model
+ private final Properties apexProperties;
+
+ // Facade classes for working towards the real Apex model
+ private final KeyInformationFacade keyInformationFacade;
+
+ // JSON output on list/delete if set
+ private final boolean jsonMode;
+
+ /**
+ * Constructor to create the context schema facade for the Model API.
+ *
+ * @param apexModel the apex model
+ * @param apexProperties Properties for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise set to false
+ */
+ public ContextSchemaFacade(final ApexModel apexModel, final Properties apexProperties, final boolean jsonMode) {
+ this.apexModel = apexModel;
+ this.apexProperties = apexProperties;
+ this.jsonMode = jsonMode;
+
+ keyInformationFacade = new KeyInformationFacade(apexModel, apexProperties, jsonMode);
+ }
+
+ /**
+ * Create a context schema.
+ *
+ * @param name name of the context schema
+ * @param version version of the context schema, set to null to use the default version
+ * @param schemaFlavour a string identifying the flavour of this context schema
+ * @param schemaDefinition a string containing the definition of this context schema
+ * @param uuid context schema UUID, set to null to generate a UUID
+ * @param description context schema description, set to null to generate a description
+ * @return result of the operation
+ */
+ public ApexAPIResult createContextSchema(final String name, final String version, final String schemaFlavour, final String schemaDefinition,
+ final String uuid, final String description) {
+ try {
+ Assertions.argumentNotNull(schemaFlavour, "schemaFlavour may not be null");
+
+ final AxArtifactKey key = new AxArtifactKey();
+ key.setName(name);
+ if (version != null) {
+ key.setVersion(version);
+ }
+ else {
+ key.setVersion(apexProperties.getProperty("DEFAULT_CONCEPT_VERSION"));
+ }
+
+ if (apexModel.getPolicyModel().getSchemas().getSchemasMap().containsKey(key)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS, CONCEPT + key.getID() + ALREADY_EXISTS);
+ }
+
+ apexModel.getPolicyModel().getSchemas().getSchemasMap().put(key, new AxContextSchema(key, schemaFlavour, schemaDefinition));
+
+ if (apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().containsKey(key)) {
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ }
+ else {
+ return keyInformationFacade.createKeyInformation(name, version, uuid, description);
+ }
+ }
+ catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update a context schema.
+ *
+ * @param name name of the context schema
+ * @param version version of the context schema, set to null to update the latest version
+ * @param schemaFlavour a string identifying the flavour of this context schema
+ * @param schemaDefinition a string containing the definition of this context schema
+ * @param uuid context schema UUID, set to null to not update
+ * @param description context schema description, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updateContextSchema(final String name, final String version, final String schemaFlavour, final String schemaDefinition,
+ final String uuid, final String description) {
+ try {
+ final AxContextSchema schema = apexModel.getPolicyModel().getSchemas().get(name, version);
+ if (schema == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST, CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (schemaFlavour != null) {
+ schema.setSchemaFlavour(schemaFlavour);
+ }
+
+ if (schemaDefinition != null) {
+ schema.setSchema(schemaDefinition);
+ }
+
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ }
+ catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List context schemas.
+ *
+ * @param name name of the context schema, set to null to list all
+ * @param version starting version of the context schema, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult listContextSchemas(final String name, final String version) {
+ try {
+ final Set<AxContextSchema> schemaSet = apexModel.getPolicyModel().getSchemas().getAll(name, version);
+ if (name != null && schemaSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST, CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxContextSchema schema : schemaSet) {
+ result.addMessage(new ApexModelStringWriter<AxContextSchema>(false).writeString(schema, AxContextSchema.class, jsonMode));
+ }
+ return result;
+ }
+ catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a context schema.
+ *
+ * @param name name of the context schema
+ * @param version version of the context schema, set to null to delete all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteContextSchema(final String name, final String version) {
+ try {
+ if (version != null) {
+ final AxArtifactKey key = new AxArtifactKey(name, version);
+ final AxContextSchema removedSchema = apexModel.getPolicyModel().getSchemas().getSchemasMap().remove(key);
+ if (removedSchema != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxContextSchema>(false).writeString(removedSchema, AxContextSchema.class, jsonMode));
+ }
+ else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST, CONCEPT + key.getID() + DOES_NOT_EXIST);
+ }
+ }
+
+ final Set<AxContextSchema> schemaSet = apexModel.getPolicyModel().getSchemas().getAll(name, version);
+ if (schemaSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST, CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxContextSchema schema : schemaSet) {
+ result.addMessage(new ApexModelStringWriter<AxContextSchema>(false).writeString(schema, AxContextSchema.class, jsonMode));
+ apexModel.getPolicyModel().getSchemas().getSchemasMap().remove(schema.getKey());
+ keyInformationFacade.deleteKeyInformation(name, version);
+ }
+ return result;
+ }
+ catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Validate context schemas.
+ *
+ * @param name name of the context schema, set to null to list all
+ * @param version starting version of the context schema, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult validateContextSchemas(final String name, final String version) {
+ try {
+ final Set<AxContextSchema> schemaSet = apexModel.getPolicyModel().getSchemas().getAll(name, version);
+ if (schemaSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST, CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxContextSchema schema : schemaSet) {
+ final AxValidationResult validationResult = schema.validate(new AxValidationResult());
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(schema.getKey(), AxArtifactKey.class, jsonMode));
+ result.addMessage(validationResult.toString());
+ }
+ return result;
+ }
+ catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/EventFacade.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/EventFacade.java
new file mode 100644
index 000000000..095d4f9f4
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/EventFacade.java
@@ -0,0 +1,385 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.util.Properties;
+import java.util.Set;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelStringWriter;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
+import org.onap.policy.apex.model.eventmodel.concepts.AxField;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class acts as a facade for operations towards a policy model for event operations
+ * operations.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class EventFacade {
+ private static final String CONCEPT = "concept ";
+ private static final String CONCEPT_S = "concept(s) ";
+ private static final String DOES_NOT_EXIST = " does not exist";
+ private static final String DO_ES_NOT_EXIST = " do(es) not exist";
+ private static final String ALREADY_EXISTS = " already exists";
+
+ // Apex model we're working towards
+ private final ApexModel apexModel;
+
+ // Properties to use for the model
+ private final Properties apexProperties;
+
+ // Facade classes for working towards the real Apex model
+ private final KeyInformationFacade keyInformationFacade;
+
+ // JSON output on list/delete if set
+ private final boolean jsonMode;
+
+ /**
+ * Constructor to create an event facade for the Model API.
+ *
+ * @param apexModel the apex model
+ * @param apexProperties Properties for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ */
+ public EventFacade(final ApexModel apexModel, final Properties apexProperties, final boolean jsonMode) {
+ this.apexModel = apexModel;
+ this.apexProperties = apexProperties;
+ this.jsonMode = jsonMode;
+
+ keyInformationFacade = new KeyInformationFacade(apexModel, apexProperties, jsonMode);
+ }
+
+ /**
+ * Create an event.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to use the default version
+ * @param nameSpace of the event, set to null to use the default value
+ * @param source of the event, set to null to use the default value
+ * @param target of the event, set to null to use the default value
+ * @param uuid event UUID, set to null to generate a UUID
+ * @param description event description, set to null to generate a description
+ * @return result of the operation
+ */
+ public ApexAPIResult createEvent(final String name, final String version, final String nameSpace,
+ final String source, final String target, final String uuid, final String description) {
+ try {
+ final AxArtifactKey key = new AxArtifactKey();
+ key.setName(name);
+ if (version != null) {
+ key.setVersion(version);
+ } else {
+ key.setVersion(apexProperties.getProperty("DEFAULT_CONCEPT_VERSION"));
+ }
+
+ if (apexModel.getPolicyModel().getEvents().getEventMap().containsKey(key)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS, CONCEPT + key.getID() + ALREADY_EXISTS);
+ }
+
+ final AxEvent event = new AxEvent(key);
+
+ event.setNameSpace((nameSpace != null ? nameSpace : apexProperties.getProperty("DEFAULT_EVENT_NAMESPACE")));
+ event.setSource((source != null ? source : apexProperties.getProperty("DEFAULT_EVENT_SOURCE")));
+ event.setTarget((target != null ? target : apexProperties.getProperty("DEFAULT_EVENT_TARGET")));
+
+ apexModel.getPolicyModel().getEvents().getEventMap().put(key, event);
+
+ if (apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().containsKey(key)) {
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } else {
+ return keyInformationFacade.createKeyInformation(name, version, uuid, description);
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update an event.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to use the latest version
+ * @param nameSpace of the event, set to null to not update
+ * @param source of the event, set to null to not update
+ * @param target of the event, set to null to not update
+ * @param uuid event UUID, set to null to not update
+ * @param description event description, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updateEvent(final String name, final String version, final String nameSpace,
+ final String source, final String target, final String uuid, final String description) {
+ try {
+ final AxEvent event = apexModel.getPolicyModel().getEvents().get(name, version);
+ if (event == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (nameSpace != null) {
+ event.setNameSpace(nameSpace);
+ }
+ if (source != null) {
+ event.setSource(source);
+ }
+ if (target != null) {
+ event.setTarget(target);
+ }
+
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List events.
+ *
+ * @param name name of the event, set to null to list all
+ * @param version starting version of the event, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult listEvent(final String name, final String version) {
+ try {
+ final Set<AxEvent> eventSet = apexModel.getPolicyModel().getEvents().getAll(name, version);
+ if (name != null && eventSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxEvent event : eventSet) {
+ result.addMessage(
+ new ApexModelStringWriter<AxEvent>(false).writeString(event, AxEvent.class, jsonMode));
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete an event.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to delete all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteEvent(final String name, final String version) {
+ try {
+ if (version != null) {
+ final AxArtifactKey key = new AxArtifactKey(name, version);
+ final AxEvent removedEvent = apexModel.getPolicyModel().getEvents().getEventMap().remove(key);
+ if (removedEvent != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS, new ApexModelStringWriter<AxEvent>(false)
+ .writeString(removedEvent, AxEvent.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + key.getID() + DOES_NOT_EXIST);
+ }
+ }
+
+ final Set<AxEvent> eventSet = apexModel.getPolicyModel().getEvents().getAll(name, version);
+ if (eventSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxEvent event : eventSet) {
+ result.addMessage(
+ new ApexModelStringWriter<AxEvent>(false).writeString(event, AxEvent.class, jsonMode));
+ apexModel.getPolicyModel().getEvents().getEventMap().remove(event.getKey());
+ keyInformationFacade.deleteKeyInformation(name, version);
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Validate events.
+ *
+ * @param name name of the event, set to null to list all
+ * @param version starting version of the event, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult validateEvent(final String name, final String version) {
+ try {
+ final Set<AxEvent> eventSet = apexModel.getPolicyModel().getEvents().getAll(name, version);
+ if (eventSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxEvent event : eventSet) {
+ final AxValidationResult validationResult = event.validate(new AxValidationResult());
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(event.getKey(),
+ AxArtifactKey.class, jsonMode));
+ result.addMessage(validationResult.toString());
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create an event parameter.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to use the latest version
+ * @param parName of the parameter
+ * @param contextSchemaName name of the parameter context schema
+ * @param contextSchemaVersion version of the parameter context schema, set to null to use the
+ * latest version
+ * @param optional true if the event parameter is optional, false otherwise
+ * @return result of the operation
+ */
+ public ApexAPIResult createEventPar(final String name, final String version, final String parName,
+ final String contextSchemaName, final String contextSchemaVersion, final boolean optional) {
+ try {
+ Assertions.argumentNotNull(parName, "parName may not be null");
+
+ final AxEvent event = apexModel.getPolicyModel().getEvents().get(name, version);
+ if (event == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxReferenceKey refKey = new AxReferenceKey(event.getKey(), parName);
+
+ if (event.getParameterMap().containsKey(refKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ final AxContextSchema schema =
+ apexModel.getPolicyModel().getSchemas().get(contextSchemaName, contextSchemaVersion);
+ if (schema == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextSchemaName + ':' + contextSchemaVersion + DOES_NOT_EXIST);
+ }
+
+ event.getParameterMap().put(refKey.getLocalName(), new AxField(refKey, schema.getKey(), optional));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List event parameters.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to list latest version
+ * @param parName name of the parameter, set to null to list all parameters of the event
+ * @return result of the operation
+ */
+ public ApexAPIResult listEventPar(final String name, final String version, final String parName) {
+ try {
+ final AxEvent event = apexModel.getPolicyModel().getEvents().get(name, version);
+ if (event == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (parName != null) {
+ final AxField eventField = event.getParameterMap().get(parName);
+ if (eventField != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxField>(false).writeString(eventField, AxField.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + parName + DOES_NOT_EXIST);
+ }
+ } else {
+ if (event.getParameterMap().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no parameters defined on event " + event.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxField eventPar : event.getParameterMap().values()) {
+ result.addMessage(
+ new ApexModelStringWriter<AxField>(false).writeString(eventPar, AxField.class, jsonMode));
+ }
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete an event parameter.
+ *
+ * @param name name of the event
+ * @param version version of the event, set to null to use the latest version
+ * @param parName of the parameter, set to null to delete all parameters
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteEventPar(final String name, final String version, final String parName) {
+ try {
+ final AxEvent event = apexModel.getPolicyModel().getEvents().get(name, version);
+ if (event == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ if (parName != null) {
+ if (event.getParameterMap().containsKey(parName)) {
+ result.addMessage(new ApexModelStringWriter<AxField>(false)
+ .writeString(event.getParameterMap().get(parName), AxField.class, jsonMode));
+ event.getParameterMap().remove(parName);
+ return result;
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + parName + DOES_NOT_EXIST);
+ }
+ } else {
+ if (event.getParameterMap().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no parameters defined on event " + event.getKey().getID());
+ }
+
+ for (final AxField eventPar : event.getParameterMap().values()) {
+ result.addMessage(
+ new ApexModelStringWriter<AxField>(false).writeString(eventPar, AxField.class, jsonMode));
+ }
+ event.getParameterMap().clear();
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/KeyInformationFacade.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/KeyInformationFacade.java
new file mode 100644
index 000000000..d9b9cef1a
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/KeyInformationFacade.java
@@ -0,0 +1,244 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.util.Properties;
+import java.util.Set;
+import java.util.UUID;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInfo;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelStringWriter;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+
+/**
+ * This class acts as a facade for operations towards a policy model for key information operations.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class KeyInformationFacade {
+ private static final String CONCEPT = "concept ";
+ private static final String CONCEPT_S = "concept(s) ";
+ private static final String DOES_NOT_EXIST = " does not exist";
+ private static final String DO_ES_NOT_EXIST = " do(es) not exist";
+ private static final String ALREADY_EXISTS = " already exists";
+
+ // Apex model we're working towards
+ private final ApexModel apexModel;
+
+ // Properties to use for the model
+ private final Properties apexProperties;
+
+ // JSON output on list/delete if set
+ private final boolean jsonMode;
+
+ /**
+ * Constructor to create a key information facade for the Model API.
+ *
+ * @param apexModel the apex model
+ * @param apexProperties Properties for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ */
+ public KeyInformationFacade(final ApexModel apexModel, final Properties apexProperties, final boolean jsonMode) {
+ this.apexModel = apexModel;
+ this.apexProperties = apexProperties;
+ this.jsonMode = jsonMode;
+ }
+
+ /**
+ * Create key information.
+ *
+ * @param name name of the concept for the key information
+ * @param version version of the concept for the key information, set to null to use the default
+ * version
+ * @param uuid key information UUID, set to null to generate a UUID
+ * @param description key information description, set to null to generate a description
+ * @return result of the operation
+ */
+ public ApexAPIResult createKeyInformation(final String name, final String version, final String uuid,
+ final String description) {
+ try {
+ final AxArtifactKey key = new AxArtifactKey();
+ key.setName(name);
+ if (version != null) {
+ key.setVersion(version);
+ } else {
+ key.setVersion(apexProperties.getProperty("DEFAULT_CONCEPT_VERSION"));
+ }
+
+ if (apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().containsKey(key)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS, CONCEPT + key.getID() + ALREADY_EXISTS);
+ }
+
+ final AxKeyInfo keyInfo = new AxKeyInfo(key);
+ if (description != null) {
+ keyInfo.setDescription(description);
+ }
+ if (uuid != null) {
+ keyInfo.setUuid(UUID.fromString(uuid));
+ } else {
+ // generate a reproducible UUID
+ keyInfo.setUuid(AxKeyInfo.generateReproducibleUUID(keyInfo.getID() + keyInfo.getDescription()));
+ }
+ apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().put(key, keyInfo);
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update key information.
+ *
+ * @param name name of the concept for the key information
+ * @param version version of the concept for the key information, set to null to update the
+ * latest version
+ * @param uuid key information UUID, set to null to not update
+ * @param description key information description, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updateKeyInformation(final String name, final String version, final String uuid,
+ final String description) {
+ try {
+ final AxKeyInfo keyInfo = apexModel.getPolicyModel().getKeyInformation().get(name, version);
+ if (keyInfo == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ":" + version + DOES_NOT_EXIST);
+ }
+
+ if (description != null) {
+ keyInfo.setDescription(description);
+ }
+
+ if (uuid != null) {
+ keyInfo.setUuid(UUID.fromString(uuid));
+ } else {
+ // generate a reproducible UUID
+ keyInfo.setUuid(AxKeyInfo.generateReproducibleUUID(keyInfo.getID() + keyInfo.getDescription()));
+ }
+
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List key information.
+ *
+ * @param name name of the concept for the key information, set to null to list all
+ * @param version starting version of the concept for the key information, set to null to list
+ * all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult listKeyInformation(final String name, final String version) {
+ try {
+ final Set<AxKeyInfo> keyInfoSet = apexModel.getPolicyModel().getKeyInformation().getAll(name, version);
+ if (name != null && keyInfoSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxKeyInfo keyInfo : keyInfoSet) {
+ result.addMessage(
+ new ApexModelStringWriter<AxKeyInfo>(false).writeString(keyInfo, AxKeyInfo.class, jsonMode));
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete key information.
+ *
+ * @param name name of the concept for the key information
+ * @param version version of the concept for the key information, set to null to delete all
+ * versions
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteKeyInformation(final String name, final String version) {
+ try {
+ if (version != null) {
+ final AxArtifactKey key = new AxArtifactKey(name, version);
+ final AxKeyInfo removedKeyInfo =
+ apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().remove(key);
+ if (removedKeyInfo != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS, new ApexModelStringWriter<AxKeyInfo>(false)
+ .writeString(removedKeyInfo, AxKeyInfo.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + key.getID() + DOES_NOT_EXIST);
+ }
+ }
+
+ final Set<AxKeyInfo> keyInfoSet = apexModel.getPolicyModel().getKeyInformation().getAll(name, version);
+ if (keyInfoSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxKeyInfo keyInfo : keyInfoSet) {
+ result.addMessage(
+ new ApexModelStringWriter<AxKeyInfo>(false).writeString(keyInfo, AxKeyInfo.class, jsonMode));
+ apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().remove(keyInfo.getKey());
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Validate key information.
+ *
+ * @param name name of the concept for the key information
+ * @param version version of the concept for the key information, set to null to validate all
+ * versions
+ * @return result of the operation
+ */
+ public ApexAPIResult validateKeyInformation(final String name, final String version) {
+ try {
+ final Set<AxKeyInfo> keyInfoSet = apexModel.getPolicyModel().getKeyInformation().getAll(name, version);
+ if (keyInfoSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxKeyInfo keyInfo : keyInfoSet) {
+ final AxValidationResult validationResult = keyInfo.validate(new AxValidationResult());
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(keyInfo.getKey(),
+ AxArtifactKey.class, jsonMode));
+ result.addMessage(validationResult.toString());
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ModelFacade.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ModelFacade.java
new file mode 100644
index 000000000..2a6dd3ebf
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ModelFacade.java
@@ -0,0 +1,207 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.util.Properties;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelStringWriter;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class acts as a facade for operations towards a policy model.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ModelFacade {
+ private static final String CONCEPT = "concept ";
+ private static final String DOES_NOT_EXIST = " does not exist";
+ private static final String ALREADY_CREATED = " already created";
+ private static final String NO_VERSION_SPECIFIED = ", no version specified";
+
+ // Apex model we're working towards
+ private final ApexModel apexModel;
+
+ // Properties to use for the model
+ private final Properties apexProperties;
+
+ // Facade classes for working towards the real Apex model
+ private final KeyInformationFacade keyInformationFacade;
+
+ // JSON output on list/delete if set
+ private final boolean jsonMode;
+
+ /**
+ * Constructor to create a model facade for the Apex model.
+ *
+ * @param apexModel the apex model
+ * @param apexProperties Properties for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ */
+ public ModelFacade(final ApexModel apexModel, final Properties apexProperties, final boolean jsonMode) {
+ Assertions.argumentNotNull(apexModel, "apexModel may not be null");
+ Assertions.argumentNotNull(apexProperties, "apexProperties may not be null");
+
+ this.apexModel = apexModel;
+ this.apexProperties = apexProperties;
+ this.jsonMode = jsonMode;
+
+ keyInformationFacade = new KeyInformationFacade(apexModel, apexProperties, jsonMode);
+ }
+
+ /**
+ * Create model.
+ *
+ * @param name name of the model
+ * @param version version of the model, set to null to use the default version
+ * @param uuid model UUID, set to null to generate a UUID
+ * @param description model description, set to null to generate a description
+ * @return result of the operation
+ */
+ public ApexAPIResult createModel(final String name, final String version, final String uuid,
+ final String description) {
+ try {
+ final AxArtifactKey key = new AxArtifactKey();
+ key.setName(name);
+ if (version != null) {
+ key.setVersion(version);
+ } else {
+ final String defaultVersion = apexProperties.getProperty("DEFAULT_CONCEPT_VERSION");
+ if (defaultVersion != null) {
+ key.setVersion(defaultVersion);
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, CONCEPT + name + NO_VERSION_SPECIFIED);
+ }
+ }
+
+ if (!apexModel.getPolicyModel().getKey().equals(AxArtifactKey.getNullKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + apexModel.getPolicyModel().getKey().getID() + ALREADY_CREATED);
+ }
+
+ apexModel.setPolicyModel(new AxPolicyModel(key));
+
+ ApexAPIResult result;
+
+ result = keyInformationFacade.createKeyInformation(name, version, uuid, description);
+ if (result.getResult().equals(ApexAPIResult.RESULT.SUCCESS)) {
+ apexModel.getPolicyModel().getKeyInformation().generateKeyInfo(apexModel.getPolicyModel());
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update model.
+ *
+ * @param name name of the model
+ * @param version version of the model, set to null to update the latest version
+ * @param uuid key information UUID, set to null to not update
+ * @param description policy description, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updateModel(final String name, final String version, final String uuid,
+ final String description) {
+ try {
+ final AxArtifactKey key = new AxArtifactKey();
+ key.setName(name);
+ if (version != null) {
+ key.setVersion(version);
+ } else {
+ final String defaultVersion = apexProperties.getProperty("DEFAULT_CONCEPT_VERSION");
+ if (defaultVersion != null) {
+ key.setVersion(defaultVersion);
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED,
+ CONCEPT + apexModel.getPolicyModel().getKey().getID() + NO_VERSION_SPECIFIED);
+ }
+ }
+
+ if (apexModel.getPolicyModel().getKey().equals(AxArtifactKey.getNullKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + apexModel.getPolicyModel().getKey().getID() + DOES_NOT_EXIST);
+ }
+
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Get the key of an Apex model.
+ *
+ * @return the result of the operation
+ */
+ public ApexAPIResult getModelKey() {
+ try {
+ final ApexAPIResult result = new ApexAPIResult();
+ final AxArtifactKey modelkey = apexModel.getPolicyModel().getKey();
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(modelkey, AxArtifactKey.class,
+ jsonMode));
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List an Apex model.
+ *
+ * @return the result of the operation
+ */
+ public ApexAPIResult listModel() {
+ try {
+ final ApexAPIResult result = new ApexAPIResult();
+ result.addMessage(new ApexModelStringWriter<AxPolicyModel>(false).writeString(apexModel.getPolicyModel(),
+ AxPolicyModel.class, jsonMode));
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete an Apex model, clear all the concepts in the model.
+ *
+ * @return the result of the operation
+ */
+ public ApexAPIResult deleteModel() {
+ // @formatter:off
+ apexModel.getPolicyModel().getSchemas() .getSchemasMap() .clear();
+ apexModel.getPolicyModel().getEvents() .getEventMap() .clear();
+ apexModel.getPolicyModel().getAlbums() .getAlbumsMap() .clear();
+ apexModel.getPolicyModel().getTasks() .getTaskMap() .clear();
+ apexModel.getPolicyModel().getPolicies() .getPolicyMap() .clear();
+ apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap() .clear();
+ // @formatter:on
+
+ apexModel.setPolicyModel(new AxPolicyModel());
+
+ return new ApexAPIResult();
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ModelHandlerFacade.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ModelHandlerFacade.java
new file mode 100644
index 000000000..89a656a40
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/ModelHandlerFacade.java
@@ -0,0 +1,630 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Files;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+
+import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.dao.ApexDao;
+import org.onap.policy.apex.model.basicmodel.dao.ApexDaoFactory;
+import org.onap.policy.apex.model.basicmodel.dao.DAOParameters;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelFileWriter;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelStringWriter;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelWriter;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicy;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.policymodel.handling.PolicyAnalyser;
+import org.onap.policy.apex.model.policymodel.handling.PolicyAnalysisResult;
+import org.onap.policy.apex.model.policymodel.handling.PolicyModelComparer;
+import org.onap.policy.apex.model.policymodel.handling.PolicyModelMerger;
+import org.onap.policy.apex.model.policymodel.handling.PolicyModelSplitter;
+import org.onap.policy.apex.model.utilities.Assertions;
+import org.onap.policy.apex.model.utilities.ResourceUtils;
+import org.onap.policy.apex.model.utilities.TextFileUtils;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * This class acts as a facade for model handling for the Apex Model API.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ModelHandlerFacade {
+ private static final String FOUND_IN_DATABASE = " found in database";
+ private static final String FILE_NAME_MAY_NOT_BE_NULL = "fileName may not be null";
+ private static final String MODEL = "model ";
+ private static final String ALREADY_LOADED = " already loaded";
+
+ private static final XLogger LOGGER = XLoggerFactory.getXLogger(ModelHandlerFacade.class);
+
+ // Apex model we're working towards
+ private final ApexModel apexModel;
+
+ // JSON output on list/delete if set
+ private final boolean jsonMode;
+
+ /**
+ * This Constructor creates a model handling facade for the given {@link ApexModel}.
+ *
+ * @param apexModel the apex model to manipulate
+ * @param apexProperties properties for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ */
+ public ModelHandlerFacade(final ApexModel apexModel, final Properties apexProperties, final boolean jsonMode) {
+ Assertions.argumentNotNull(apexModel, "apexModel may not be null");
+ Assertions.argumentNotNull(apexProperties, "apexProperties may not be null");
+
+ this.apexModel = apexModel;
+ this.jsonMode = jsonMode;
+ }
+
+ /**
+ * Load an Apex model from a string.
+ *
+ * @param modelString the string with the model
+ * @return the result of the operation
+ */
+ public ApexAPIResult loadFromString(final String modelString) {
+ Assertions.argumentNotNull(modelString, "modelString may not be null");
+
+ if (!apexModel.getPolicyModel().getKey().equals(AxArtifactKey.getNullKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ MODEL + apexModel.getPolicyModel().getKey().getID() + ALREADY_LOADED);
+ }
+
+ ApexAPIResult result = new ApexAPIResult();
+ AxPolicyModel newPolicyModel = loadModelFromString(modelString, result);
+ apexModel.setPolicyModel(newPolicyModel != null ? newPolicyModel : new AxPolicyModel());
+
+ return result;
+ }
+
+ /**
+ * Load an Apex model from a file.
+ *
+ * @param fileName the file name of the file with the model
+ * @return the result of the operation
+ */
+ public ApexAPIResult loadFromFile(final String fileName) {
+ Assertions.argumentNotNull(fileName, FILE_NAME_MAY_NOT_BE_NULL);
+
+ if (!apexModel.getPolicyModel().getKey().equals(AxArtifactKey.getNullKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ MODEL + apexModel.getPolicyModel().getKey().getID() + ALREADY_LOADED);
+ }
+
+ ApexAPIResult result = new ApexAPIResult();
+ AxPolicyModel newPolicyModel = loadModelFromFile(fileName, result);
+ apexModel.setPolicyModel(newPolicyModel != null ? newPolicyModel : new AxPolicyModel());
+
+ return result;
+ }
+
+ /**
+ * Save an Apex model to a file.
+ *
+ * @param fileName the file name
+ * @param xmlFlag if true, save the file in XML format, otherwise save the file in the default
+ * JSON format
+ * @return the result of the operation
+ */
+ public ApexAPIResult saveToFile(final String fileName, final boolean xmlFlag) {
+ Assertions.argumentNotNull(fileName, FILE_NAME_MAY_NOT_BE_NULL);
+
+ ApexModelFileWriter<AxPolicyModel> apexModelFileWriter = new ApexModelFileWriter<>(false);
+
+ try {
+ if (xmlFlag) {
+ apexModelFileWriter.apexModelWriteXMLFile(apexModel.getPolicyModel(), AxPolicyModel.class, fileName);
+ } else {
+ apexModelFileWriter.apexModelWriteJSONFile(apexModel.getPolicyModel(), AxPolicyModel.class, fileName);
+ }
+ return new ApexAPIResult();
+ } catch (ApexException e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Load an Apex model from a database.
+ *
+ * @param modelName the name of the model to load
+ * @param modelVersion the version of the model to load, loads the policy model from the
+ * database with this name, if more than one exist, an exception is thrown
+ * @param daoParameters the parameters to use to access the database over JDBC
+ * @return the result of the operation
+ */
+ public ApexAPIResult loadFromDatabase(final String modelName, final String modelVersion,
+ final DAOParameters daoParameters) {
+ Assertions.argumentNotNull(modelName, "modelName may not be null");
+ Assertions.argumentNotNull(daoParameters, "daoParameters may not be null");
+
+ if (!apexModel.getPolicyModel().getKey().equals(AxArtifactKey.getNullKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ MODEL + apexModel.getPolicyModel().getKey().getID() + ALREADY_LOADED);
+ }
+
+ ApexDao apexDao = null;
+ try {
+ apexDao = new ApexDaoFactory().createApexDao(daoParameters);
+ apexDao.init(daoParameters);
+
+ // Single specific model requested
+ if (modelVersion != null) {
+ AxPolicyModel daoPolicyModel =
+ apexDao.get(AxPolicyModel.class, new AxArtifactKey(modelName, modelVersion));
+
+ if (daoPolicyModel != null) {
+ apexModel.setPolicyModel(daoPolicyModel);
+ return new ApexAPIResult();
+ } else {
+ apexModel.setPolicyModel(new AxPolicyModel());
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, "no policy model with name " + modelName
+ + " and version " + modelVersion + FOUND_IN_DATABASE);
+ }
+ }
+ // Fishing expedition
+ else {
+ return searchInDatabase(modelName, apexDao, apexModel);
+ }
+ } catch (ApexException | ApexRuntimeException e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ } finally {
+ if (apexDao != null) {
+ apexDao.close();
+ }
+ }
+ }
+
+ /**
+ * Search for an Apex model in the database.
+ *
+ * @param modelName the name of the model to load
+ * @param apexDao the DAO to use to find the model
+ * @param apexModel the APEX model we are loading the found model into
+ * @return the result of the operation
+ */
+ private ApexAPIResult searchInDatabase(String modelName, ApexDao apexDao, ApexModel apexModel) {
+ AxPolicyModel foundPolicyModel = null;
+
+ List<AxPolicyModel> policyModelList = apexDao.getAll(AxPolicyModel.class);
+ for (AxPolicyModel dbPolicyModel : policyModelList) {
+ if (dbPolicyModel.getKey().getName().equals(modelName)) {
+ if (foundPolicyModel == null) {
+ foundPolicyModel = dbPolicyModel;
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED,
+ "more than one policy model with name " + modelName + FOUND_IN_DATABASE);
+ }
+ }
+ }
+
+ if (foundPolicyModel != null) {
+ apexModel.setPolicyModel(foundPolicyModel);
+ return new ApexAPIResult();
+ } else {
+ apexModel.setPolicyModel(new AxPolicyModel());
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED,
+ "no policy model with name " + modelName + FOUND_IN_DATABASE);
+ }
+ }
+
+ /**
+ * Save an Apex model to a database.
+ *
+ * @param daoParameters the parameters to use to access the database over JDBC
+ * @return the result of the operation
+ */
+ public ApexAPIResult saveToDatabase(final DAOParameters daoParameters) {
+ ApexDao apexDao = null;
+
+ try {
+ apexDao = new ApexDaoFactory().createApexDao(daoParameters);
+ apexDao.init(daoParameters);
+
+ apexDao.create(apexModel.getPolicyModel());
+ return new ApexAPIResult();
+ } catch (ApexException e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ } finally {
+ if (apexDao != null) {
+ apexDao.close();
+ }
+ }
+ }
+
+ /**
+ * Read an APEX model from a location identified by a URL.
+ *
+ * @param urlString the url string
+ * @return the result of the operation
+ */
+ public ApexAPIResult readFromURL(final String urlString) {
+ Assertions.argumentNotNull(urlString, "urlString may not be null");
+
+ if (!apexModel.getPolicyModel().getKey().equals(AxArtifactKey.getNullKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ MODEL + apexModel.getPolicyModel().getKey().getID() + ALREADY_LOADED);
+ }
+
+ URL apexModelURL;
+ try {
+ apexModelURL = new URL(urlString);
+ } catch (MalformedURLException e) {
+ ApexAPIResult result = new ApexAPIResult(ApexAPIResult.RESULT.FAILED);
+ result.addMessage("URL string " + urlString + " is not a valid URL");
+ result.addThrowable(e);
+ return result;
+ }
+
+ try {
+ ApexModelReader<AxPolicyModel> apexModelReader = new ApexModelReader<>(AxPolicyModel.class);
+ apexModelReader.setValidateFlag(false);
+ AxPolicyModel newPolicyModel = apexModelReader.read(apexModelURL.openStream());
+ apexModel.setPolicyModel(newPolicyModel != null ? newPolicyModel : new AxPolicyModel());
+ return new ApexAPIResult();
+ } catch (ApexModelException | IOException e) {
+ apexModel.setPolicyModel(new AxPolicyModel());
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Write an APEX model to a location identified by a URL.
+ *
+ * @param urlString the URL to read the model from
+ * @param xmlFlag if true, save the file in XML format, otherwise save the file in the default
+ * JSON format
+ * @return the result of the operation
+ */
+ public ApexAPIResult writeToURL(final String urlString, final boolean xmlFlag) {
+ Assertions.argumentNotNull(urlString, "urlString may not be null");
+
+ URL apexModelURL;
+ try {
+ apexModelURL = new URL(urlString);
+ } catch (MalformedURLException e) {
+ ApexAPIResult result = new ApexAPIResult(ApexAPIResult.RESULT.FAILED);
+ result.addMessage("URL string " + urlString + " is not a valid URL");
+ result.addThrowable(e);
+ return result;
+ }
+
+ try {
+ ApexModelWriter<AxPolicyModel> apexModelWriter = new ApexModelWriter<>(AxPolicyModel.class);
+ apexModelWriter.setValidateFlag(false);
+ apexModelWriter.setJsonOutput(!xmlFlag);
+
+ // Open the URL for output and write the model
+ URLConnection urlConnection = apexModelURL.openConnection();
+ urlConnection.setDoOutput(true);
+
+ apexModelWriter.write(apexModel.getPolicyModel(), urlConnection.getOutputStream());
+ return new ApexAPIResult();
+ } catch (ApexModelException | IOException e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Analyse an Apex model that shows the concept usage references of a policy model.
+ *
+ * @return the result of the operation
+ */
+ public ApexAPIResult analyse() {
+ PolicyAnalysisResult analysisResult = new PolicyAnalyser().analyse(apexModel.getPolicyModel());
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS, analysisResult.toString());
+ }
+
+ /**
+ * Validate an Apex model, checking all concepts and references in the model.
+ *
+ * @return the result of the operation
+ */
+ public ApexAPIResult validate() {
+ ApexAPIResult result = new ApexAPIResult();
+ try {
+ AxValidationResult validationResult = apexModel.getPolicyModel().validate(new AxValidationResult());
+
+ if (!validationResult.isValid()) {
+ result.setResult(ApexAPIResult.RESULT.FAILED);
+ }
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false)
+ .writeString(apexModel.getPolicyModel().getKey(), AxArtifactKey.class, jsonMode));
+ result.addMessage(validationResult.toString());
+ return result;
+ } catch (Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Compare to Apex models, returning the differences between the models.
+ *
+ * @param otherModelFileName the file name of the other model
+ * @param diffsOnly only returns differences between the model when set
+ * @param keysOnly only returns the keys that are different when set, when not set values are
+ * also returned
+ * @return the result of the operation
+ */
+ public ApexAPIResult compare(final String otherModelFileName, final boolean diffsOnly, final boolean keysOnly) {
+ ApexAPIResult result = new ApexAPIResult();
+ try {
+ AxPolicyModel otherPolicyModel = loadModelFromFile(otherModelFileName, result);
+ if (!result.getResult().equals(ApexAPIResult.RESULT.SUCCESS)) {
+ return result;
+ }
+
+ PolicyModelComparer policyModelComparer =
+ new PolicyModelComparer(apexModel.getPolicyModel(), otherPolicyModel);
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false)
+ .writeString(apexModel.getPolicyModel().getKey(), AxArtifactKey.class, jsonMode));
+ result.addMessage(policyModelComparer.toString());
+
+ return result;
+ } catch (Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Compare two Apex models, returning the differences between the models.
+ *
+ * @param otherModelString the other model as a string
+ * @param diffsOnly only returns differences between the model when set
+ * @param keysOnly only returns the keys that are different when set, when not set values are
+ * also returned
+ * @return the result of the operation
+ */
+ public ApexAPIResult compareWithString(final String otherModelString, final boolean diffsOnly,
+ final boolean keysOnly) {
+ ApexAPIResult result = new ApexAPIResult();
+ try {
+ AxPolicyModel otherPolicyModel = loadModelFromString(otherModelString, result);
+ if (!result.getResult().equals(ApexAPIResult.RESULT.SUCCESS)) {
+ return result;
+ }
+
+ PolicyModelComparer policyModelComparer =
+ new PolicyModelComparer(apexModel.getPolicyModel(), otherPolicyModel);
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false)
+ .writeString(apexModel.getPolicyModel().getKey(), AxArtifactKey.class, jsonMode));
+ result.addMessage(policyModelComparer.toString());
+
+ return result;
+ } catch (Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Split out a sub model from an Apex model that contains a given subset of the policies in the
+ * original model.
+ *
+ * @param targetModelName the file name of the target model in which to store the model split
+ * out from the original model
+ * @param splitOutPolicies the policies form the original model to include in the split out
+ * model, specified as a comma delimited list of policy names
+ * @return the result of the operation
+ */
+ public ApexAPIResult split(final String targetModelName, final String splitOutPolicies) {
+ Set<AxArtifactKey> requiredPolicySet = new LinkedHashSet<>();
+
+ // Split the policy names on comma
+ String[] policyNames = splitOutPolicies.split(",");
+
+ // Iterate over the policy names
+ for (String policyName : policyNames) {
+ // Split out this specific policy
+ AxPolicy requiredPolicy = apexModel.getPolicyModel().getPolicies().get(policyName);
+
+ if (requiredPolicy != null) {
+ requiredPolicySet.add(requiredPolicy.getKey());
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED,
+ "policy for policy name " + policyName + " not found in model");
+ }
+ }
+
+ try {
+ AxPolicyModel splitPolicyModel =
+ PolicyModelSplitter.getSubPolicyModel(apexModel.getPolicyModel(), requiredPolicySet, false);
+
+ ApexModelFileWriter<AxPolicyModel> apexModelFileWriter = new ApexModelFileWriter<>(false);
+ apexModelFileWriter.apexModelWriteJSONFile(splitPolicyModel, AxPolicyModel.class, targetModelName);
+ return new ApexAPIResult();
+ } catch (ApexException e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Split out a sub model from an Apex model that contains a given subset of the policies in the
+ * original model, return the split model in the result as a string.
+ *
+ * @param splitOutPolicies the policies form the original model to include in the split out
+ * model, specified as a comma delimited list of policy names
+ * @return the result of the operation
+ */
+ public ApexAPIResult split(final String splitOutPolicies) {
+ ApexAPIResult splitResult = new ApexAPIResult();
+ File tempSplitPolicyFile = null;
+ try {
+ tempSplitPolicyFile = File.createTempFile("ApexTempPolicy", null);
+
+ // Split the policy into a temporary file
+ splitResult = split(tempSplitPolicyFile.getCanonicalPath(), splitOutPolicies);
+ if (splitResult.isNOK()) {
+ return splitResult;
+ }
+
+ // Get the policy model into a string
+ String splitPolicyModelString = TextFileUtils.getTextFileAsString(tempSplitPolicyFile.getCanonicalPath());
+
+ // Return the policy model
+ splitResult.addMessage(splitPolicyModelString);
+ return splitResult;
+ } catch (Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED,
+ "split of policy model " + apexModel.getPolicyModel().getID() + " failed", e);
+ } finally {
+ if (tempSplitPolicyFile != null) {
+ try {
+ Files.delete(tempSplitPolicyFile.toPath());
+ } catch (IOException e) {
+ LOGGER.debug("delete of temporary file failed", e);
+ }
+ }
+ }
+ }
+
+ /**
+ * Merge two Apex models together.
+ *
+ * @param mergeInModelName the file name of the model to merge into the current model
+ * @param keepOriginal if this flag is set to true, if a concept exists in both models, the
+ * original model copy of that concept is kept, if the flag is set to false, then the
+ * copy of the concept from the mergeInModel overwrites the concept in the original model
+ * @return the result of the operation
+ */
+ public ApexAPIResult merge(final String mergeInModelName, final boolean keepOriginal) {
+ ApexAPIResult result = new ApexAPIResult();
+ AxPolicyModel mergeInPolicyModel = loadModelFromFile(mergeInModelName, result);
+ if (!result.getResult().equals(ApexAPIResult.RESULT.SUCCESS)) {
+ return result;
+ }
+
+ try {
+ AxPolicyModel mergedPolicyModel = PolicyModelMerger.getMergedPolicyModel(apexModel.getPolicyModel(),
+ mergeInPolicyModel, keepOriginal, false);
+ apexModel.setPolicyModel(mergedPolicyModel != null ? mergedPolicyModel : new AxPolicyModel());
+ return new ApexAPIResult();
+ } catch (ApexModelException e) {
+ apexModel.setPolicyModel(new AxPolicyModel());
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Merge two Apex models together.
+ *
+ * @param otherModelString the model to merge as a string
+ * @param keepOriginal if this flag is set to true, if a concept exists in both models, the
+ * original model copy of that concept is kept, if the flag is set to false, then the
+ * copy of the concept from the mergeInModel overwrites the concept in the original model
+ * @return the result of the operation
+ */
+ public ApexAPIResult mergeWithString(final String otherModelString, final boolean keepOriginal) {
+ ApexAPIResult result = new ApexAPIResult();
+ AxPolicyModel mergeInPolicyModel = loadModelFromString(otherModelString, result);
+ if (!result.getResult().equals(ApexAPIResult.RESULT.SUCCESS)) {
+ return result;
+ }
+
+ try {
+ AxPolicyModel mergedPolicyModel = PolicyModelMerger.getMergedPolicyModel(apexModel.getPolicyModel(),
+ mergeInPolicyModel, keepOriginal, false);
+ apexModel.setPolicyModel(mergedPolicyModel != null ? mergedPolicyModel : new AxPolicyModel());
+ return new ApexAPIResult();
+ } catch (ApexModelException e) {
+ apexModel.setPolicyModel(new AxPolicyModel());
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Load a policy model from a file.
+ *
+ * @param fileName the name of the file containing the model
+ * @param result the result of the operation
+ * @return the model
+ */
+ private AxPolicyModel loadModelFromFile(final String fileName, final ApexAPIResult result) {
+ Assertions.argumentNotNull(fileName, FILE_NAME_MAY_NOT_BE_NULL);
+
+ AxPolicyModel readModel = null;
+
+ final URL apexModelURL = ResourceUtils.getLocalFile(fileName);
+ if (apexModelURL == null) {
+ result.setResult(ApexAPIResult.RESULT.FAILED);
+ result.addMessage("file " + fileName + " not found");
+ return null;
+ }
+
+ try {
+ ApexModelReader<AxPolicyModel> apexModelReader = new ApexModelReader<>(AxPolicyModel.class);
+ apexModelReader.setValidateFlag(false);
+ readModel = apexModelReader.read(apexModelURL.openStream());
+ result.setResult(ApexAPIResult.RESULT.SUCCESS);
+ return readModel;
+ } catch (Exception e) {
+ result.setResult(ApexAPIResult.RESULT.FAILED);
+ result.addThrowable(e);
+ return null;
+ }
+ }
+
+ /**
+ * Load a policy model from a string.
+ *
+ * @param modelString the string containing the model
+ * @param result the result of the operation
+ * @return the model
+ */
+ private AxPolicyModel loadModelFromString(final String modelString, final ApexAPIResult result) {
+ Assertions.argumentNotNull(modelString, "modelString may not be null");
+
+ AxPolicyModel readModel = null;
+
+ InputStream modelStringStream = new ByteArrayInputStream(modelString.getBytes());
+
+ try {
+ ApexModelReader<AxPolicyModel> apexModelReader = new ApexModelReader<>(AxPolicyModel.class);
+ apexModelReader.setValidateFlag(false);
+ readModel = apexModelReader.read(modelStringStream);
+ result.setResult(ApexAPIResult.RESULT.SUCCESS);
+ return readModel;
+ } catch (Exception e) {
+ result.setResult(ApexAPIResult.RESULT.FAILED);
+ result.addThrowable(e);
+ return null;
+ }
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/PolicyFacade.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/PolicyFacade.java
new file mode 100644
index 000000000..f33627e44
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/PolicyFacade.java
@@ -0,0 +1,1383 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelStringWriter;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicy;
+import org.onap.policy.apex.model.policymodel.concepts.AxState;
+import org.onap.policy.apex.model.policymodel.concepts.AxStateFinalizerLogic;
+import org.onap.policy.apex.model.policymodel.concepts.AxStateOutput;
+import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskOutputType;
+import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference;
+import org.onap.policy.apex.model.policymodel.concepts.AxTask;
+import org.onap.policy.apex.model.policymodel.concepts.AxTaskSelectionLogic;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class acts as a facade for operations towards a policy model for policy operations.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class PolicyFacade {
+ private static final String STATE_NAME_MAY_NOT_BE_NULL = "stateName may not be null";
+ private static final String DOES_NOT_EXIST_ON_STATE = " does not exist on state ";
+ private static final String STATE_FINALIZER_LOGIC = "state finalizer logic ";
+ private static final String DO_ES_NOT_EXIST = " do(es) not exist";
+ private static final String CONCEPT_S = "concept(s) ";
+ private static final String DOES_NOT_EXIST = " does not exist";
+ private static final String CONCEPT = "concept ";
+ private static final String ALREADY_EXISTS = " already exists";
+
+ // Apex model we're working towards
+ private final ApexModel apexModel;
+
+ // Properties to use for the model
+ private final Properties apexProperties;
+
+ // Facade classes for working towards the real Apex model
+ private final KeyInformationFacade keyInformationFacade;
+
+ // JSON output on list/delete if set
+ private final boolean jsonMode;
+
+ /**
+ * Constructor that creates a policy facade for the Apex Model API.
+ *
+ * @param apexModel the apex model
+ * @param apexProperties Properties for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ */
+ public PolicyFacade(final ApexModel apexModel, final Properties apexProperties, final boolean jsonMode) {
+ this.apexModel = apexModel;
+ this.apexProperties = apexProperties;
+ this.jsonMode = jsonMode;
+
+ keyInformationFacade = new KeyInformationFacade(apexModel, apexProperties, jsonMode);
+ }
+
+ /**
+ * Create a policy.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the default version
+ * @param template template used to create the policy, set to null to use the default template
+ * @param firstState the first state of the policy
+ * @param uuid policy UUID, set to null to generate a UUID
+ * @param description policy description, set to null to generate a description
+ * @return result of the operation
+ */
+ public ApexAPIResult createPolicy(final String name, final String version, final String template,
+ final String firstState, final String uuid, final String description) {
+ try {
+ final AxArtifactKey key = new AxArtifactKey();
+ key.setName(name);
+ if (version != null) {
+ key.setVersion(version);
+ } else {
+ key.setVersion(apexProperties.getProperty("DEFAULT_CONCEPT_VERSION"));
+ }
+
+ String t = template;
+ if (t == null) {
+ t = apexProperties.getProperty("DEFAULT_POLICY_TEMPLATE");
+ }
+
+ if (apexModel.getPolicyModel().getPolicies().getPolicyMap().containsKey(key)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS, CONCEPT + key.getID() + ALREADY_EXISTS);
+ }
+
+ final AxPolicy policy = new AxPolicy(key);
+ policy.setTemplate(t);
+ policy.setFirstState(firstState);
+
+ apexModel.getPolicyModel().getPolicies().getPolicyMap().put(key, policy);
+
+ if (apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().containsKey(key)) {
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } else {
+ return keyInformationFacade.createKeyInformation(name, version, uuid, description);
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update a policy.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param template template used to create the policy, set to null to not update
+ * @param firstState the first state of the policy
+ * @param uuid policy UUID, set to null to not update
+ * @param description policy description, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updatePolicy(final String name, final String version, final String template,
+ final String firstState, final String uuid, final String description) {
+ try {
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (template != null) {
+ policy.setTemplate(template);
+ }
+ if (firstState != null) {
+ policy.setFirstState(firstState);
+ }
+
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List policies.
+ *
+ * @param name name of the policy, set to null to list all
+ * @param version starting version of the policy, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult listPolicy(final String name, final String version) {
+ try {
+ final Set<AxPolicy> policySet = apexModel.getPolicyModel().getPolicies().getAll(name, version);
+ if (name != null && policySet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxPolicy policy : policySet) {
+ result.addMessage(
+ new ApexModelStringWriter<AxPolicy>(false).writeString(policy, AxPolicy.class, jsonMode));
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a policy.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult deletePolicy(final String name, final String version) {
+ try {
+ if (version != null) {
+ final AxArtifactKey key = new AxArtifactKey(name, version);
+ final AxPolicy removedPolicy = apexModel.getPolicyModel().getPolicies().getPolicyMap().remove(key);
+ if (removedPolicy != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS, new ApexModelStringWriter<AxPolicy>(false)
+ .writeString(removedPolicy, AxPolicy.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + key.getID() + DOES_NOT_EXIST);
+ }
+ }
+
+ final Set<AxPolicy> policySet = apexModel.getPolicyModel().getPolicies().getAll(name, version);
+ if (policySet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxPolicy policy : policySet) {
+ result.addMessage(
+ new ApexModelStringWriter<AxPolicy>(false).writeString(policy, AxPolicy.class, jsonMode));
+ apexModel.getPolicyModel().getPolicies().getPolicyMap().remove(policy.getKey());
+ keyInformationFacade.deleteKeyInformation(name, version);
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Validate policies.
+ *
+ * @param name name of the policy, set to null to list all
+ * @param version starting version of the policy, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult validatePolicy(final String name, final String version) {
+ try {
+ final Set<AxPolicy> policySet = apexModel.getPolicyModel().getPolicies().getAll(name, version);
+ if (policySet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxPolicy policy : policySet) {
+ final AxValidationResult validationResult = policy.validate(new AxValidationResult());
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(policy.getKey(),
+ AxArtifactKey.class, jsonMode));
+ result.addMessage(validationResult.toString());
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create a policy state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param triggerName name of the trigger event for this state
+ * @param triggerVersion version of the trigger event for this state, set to null to use the
+ * latest version
+ * @param defaultTaskName the default task name
+ * @param defaltTaskVersion the default task version, set to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult createPolicyState(final String name, final String version, final String stateName,
+ final String triggerName, final String triggerVersion, final String defaultTaskName,
+ final String defaltTaskVersion) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxReferenceKey refKey = new AxReferenceKey(policy.getKey(), stateName);
+
+ if (policy.getStateMap().containsKey(refKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ final AxEvent triggerEvent = apexModel.getPolicyModel().getEvents().get(triggerName, triggerVersion);
+ if (triggerEvent == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + triggerName + ':' + triggerVersion + DOES_NOT_EXIST);
+ }
+
+ final AxTask defaultTask = apexModel.getPolicyModel().getTasks().get(defaultTaskName, defaltTaskVersion);
+ if (defaultTask == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + defaultTaskName + ':' + defaltTaskVersion + DOES_NOT_EXIST);
+ }
+
+ final AxState state = new AxState(refKey);
+ state.setTrigger(triggerEvent.getKey());
+ state.setDefaultTask(defaultTask.getKey());
+
+ policy.getStateMap().put(state.getKey().getLocalName(), state);
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update a policy state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param triggerName name of the trigger event for this state, set to null to not update
+ * @param triggerVersion version of the trigger event for this state, set to use latest version
+ * of trigger event
+ * @param defaultTaskName the default task name, set to null to not update
+ * @param defaltTaskVersion the default task version, set to use latest version of default task
+ * @return result of the operation
+ */
+ public ApexAPIResult updatePolicyState(final String name, final String version, final String stateName,
+ final String triggerName, final String triggerVersion, final String defaultTaskName,
+ final String defaltTaskVersion) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ if (triggerName != null) {
+ final AxEvent triggerEvent = apexModel.getPolicyModel().getEvents().get(triggerName, triggerVersion);
+ if (triggerEvent == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + triggerName + ':' + triggerVersion + DOES_NOT_EXIST);
+ }
+ state.setTrigger(triggerEvent.getKey());
+ }
+
+ if (defaultTaskName != null) {
+ final AxTask defaultTask =
+ apexModel.getPolicyModel().getTasks().get(defaultTaskName, defaltTaskVersion);
+ if (defaultTask == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + defaultTaskName + ':' + defaltTaskVersion + DOES_NOT_EXIST);
+ }
+ state.setDefaultTask(defaultTask.getKey());
+ }
+
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List policy states.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state, set to null to list all states of the policy
+ * @return result of the operation
+ */
+ public ApexAPIResult listPolicyState(final String name, final String version, final String stateName) {
+ try {
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (stateName != null) {
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxState>(false).writeString(state, AxState.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + state + DOES_NOT_EXIST);
+ }
+ } else {
+ if (policy.getStateMap().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no states defined on policy " + policy.getKey().getID());
+ }
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxState state : policy.getStateMap().values()) {
+ result.addMessage(
+ new ApexModelStringWriter<AxState>(false).writeString(state, AxState.class, jsonMode));
+ }
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a policy state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state, set to null to delete all states
+ * @return result of the operation
+ */
+ public ApexAPIResult deletePolicyState(final String name, final String version, final String stateName) {
+ try {
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ if (stateName != null) {
+ if (policy.getStateMap().containsKey(stateName)) {
+ result.addMessage(new ApexModelStringWriter<AxState>(false)
+ .writeString(policy.getStateMap().get(stateName), AxState.class, jsonMode));
+ policy.getStateMap().remove(stateName);
+ return result;
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + stateName + DOES_NOT_EXIST);
+ }
+ } else {
+ if (policy.getStateMap().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no states defined on policy " + policy.getKey().getID());
+ }
+ for (final AxState state : policy.getStateMap().values()) {
+ result.addMessage(
+ new ApexModelStringWriter<AxState>(false).writeString(state, AxState.class, jsonMode));
+ }
+ policy.getStateMap().clear();
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create task selection logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param logicFlavour the task selection logic flavour for the state, set to null to use the
+ * default task logic flavour
+ * @param logic the source code for the logic of the state
+ * @return result of the operation
+ */
+ public ApexAPIResult createPolicyStateTaskSelectionLogic(final String name, final String version,
+ final String stateName, final String logicFlavour, final String logic) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ // There is only one logic item associated with a state so we use a hard coded logic
+ // name
+ final AxReferenceKey refKey = new AxReferenceKey(state.getKey(), "TaskSelectionLogic");
+
+ if (!state.getTaskSelectionLogic().getKey().getLocalName().equals(AxKey.NULL_KEY_NAME)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ state.setTaskSelectionLogic(new AxTaskSelectionLogic(refKey, logicFlavour, logic));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update task selection logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param logicFlavour the task selection logic flavour for the state, set to null to not update
+ * @param logic the source code for the logic of the state, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updatePolicyStateTaskSelectionLogic(final String name, final String version,
+ final String stateName, final String logicFlavour, final String logic) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ if (state.getTaskSelectionLogic().getKey().getLocalName().equals(AxKey.NULL_KEY_NAME)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + state.getTaskSelectionLogic().getKey().getID() + DOES_NOT_EXIST);
+ }
+
+ final AxTaskSelectionLogic taskSelectionLogic = state.getTaskSelectionLogic();
+ if (logicFlavour != null) {
+ taskSelectionLogic.setLogicFlavour(logicFlavour);
+ }
+ if (logic != null) {
+ taskSelectionLogic.setLogic(logic);
+ }
+
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List task selection logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @return result of the operation
+ */
+ public ApexAPIResult listPolicyStateTaskSelectionLogic(final String name, final String version,
+ final String stateName) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxTaskSelectionLogic>(false).writeString(state.getTaskSelectionLogic(),
+ AxTaskSelectionLogic.class, jsonMode));
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete task selection logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @return result of the operation
+ */
+ public ApexAPIResult deletePolicyStateTaskSelectionLogic(final String name, final String version,
+ final String stateName) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ if (state.getTaskSelectionLogic().getKey().getLocalName().equals(AxKey.NULL_KEY_NAME)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + state.getTaskSelectionLogic().getKey().getID() + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ result.addMessage(new ApexModelStringWriter<AxTaskSelectionLogic>(false)
+ .writeString(state.getTaskSelectionLogic(), AxTaskSelectionLogic.class, jsonMode));
+ state.setTaskSelectionLogic(new AxTaskSelectionLogic());
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create a policy state output.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param outputName of the state output
+ * @param eventName name of the output event for this state output
+ * @param eventVersion version of the output event for this state output, set to null to use the
+ * latest version
+ * @param nextState for this state to transition to, set to null if this is the last state that
+ * the policy transitions to on this branch
+ * @return result of the operation
+ */
+ public ApexAPIResult createPolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName, final String eventName, final String eventVersion, final String nextState) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+ Assertions.argumentNotNull(outputName, "outputName may not be null");
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "Policy concept " + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "State concept " + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final AxReferenceKey refKey = new AxReferenceKey(state.getKey(), outputName);
+ if (state.getStateOutputs().containsKey(refKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ "Output concept " + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ final AxEvent event = apexModel.getPolicyModel().getEvents().get(eventName, eventVersion);
+ if (event == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "Event concept " + eventName + ':' + eventVersion + DOES_NOT_EXIST);
+ }
+
+ AxReferenceKey nextStateKey = AxReferenceKey.getNullKey();
+ if (nextState != null && !(AxReferenceKey.getNullKey().getLocalName().equals(nextState))) {
+ if (state.getKey().getLocalName().equals(nextState)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED,
+ "next state " + nextState + " of a state cannot be the state itself");
+ }
+ nextStateKey = new AxReferenceKey(state.getKey().getParentArtifactKey(), nextState);
+
+ if (!policy.getStateMap().containsKey(nextState)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "Next state concept " + nextStateKey.getID() + DOES_NOT_EXIST);
+ }
+ }
+
+ state.getStateOutputs().put(refKey.getLocalName(), new AxStateOutput(refKey, event.getKey(), nextStateKey));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List policy state outputs.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param outputName of the state output, set to null to list all outputs of the state
+ * @return result of the operation
+ */
+ public ApexAPIResult listPolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ if (outputName != null) {
+ final AxStateOutput stateOutput = state.getStateOutputs().get(outputName);
+ if (stateOutput != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxStateOutput>(false).writeString(stateOutput,
+ AxStateOutput.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + state.getKey().getID() + ':' + outputName + DOES_NOT_EXIST);
+ }
+ } else {
+ if (state.getStateOutputs().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no state output concepts exist for state " + state.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+
+ for (final AxStateOutput stateOutput : state.getStateOutputs().values()) {
+ result.addMessage(new ApexModelStringWriter<AxStateOutput>(false).writeString(stateOutput,
+ AxStateOutput.class, jsonMode));
+ }
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a policy state output.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param outputName of the state output, set to null to delete all state outputs
+ * @return result of the operation
+ */
+ public ApexAPIResult deletePolicyStateOutput(final String name, final String version, final String stateName,
+ final String outputName) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ if (outputName != null) {
+ final AxStateOutput stateOutput = state.getStateOutputs().get(outputName);
+ if (stateOutput != null) {
+ final ApexAPIResult result = new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxStateOutput>(false).writeString(stateOutput,
+ AxStateOutput.class, jsonMode));
+ state.getStateOutputs().remove(outputName);
+ return result;
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + state.getKey().getID() + ':' + outputName + DOES_NOT_EXIST);
+ }
+ } else {
+ if (state.getStateOutputs().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no state output concepts exist for state " + state.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+
+ for (final Entry<String, AxStateOutput> stateOutputEntry : state.getStateOutputs().entrySet()) {
+ result.addMessage(new ApexModelStringWriter<AxStateOutput>(false)
+ .writeString(stateOutputEntry.getValue(), AxStateOutput.class, jsonMode));
+ }
+ state.getStateOutputs().clear();
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create policy finalizer logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param finalizerLogicName name of the state finalizer logic
+ * @param logicFlavour the policy finalizer logic flavour for the state, set to null to use the
+ * default task logic flavour
+ * @param logic the source code for the logic of the state
+ * @return result of the operation
+ */
+ public ApexAPIResult createPolicyStateFinalizerLogic(final String name, final String version,
+ final String stateName, final String finalizerLogicName, final String logicFlavour, final String logic) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+ Assertions.argumentNotNull(finalizerLogicName, "finalizerlogicName may not be null");
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final AxReferenceKey refKey = new AxReferenceKey(state.getKey(), finalizerLogicName);
+
+ if (state.getStateFinalizerLogicMap().containsKey(refKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ state.getStateFinalizerLogicMap().put(finalizerLogicName,
+ new AxStateFinalizerLogic(refKey, logicFlavour, logic));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update policy finalizer logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param finalizerLogicName name of the state finalizer logic
+ * @param logicFlavour the policy finalizer logic flavour for the state, set to null to not
+ * update
+ * @param logic the source code for the logic of the state, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updatePolicyStateFinalizerLogic(final String name, final String version,
+ final String stateName, final String finalizerLogicName, final String logicFlavour, final String logic) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+ Assertions.argumentNotNull(finalizerLogicName, "finalizerLogicName may not be null");
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final AxReferenceKey refKey = new AxReferenceKey(state.getKey(), finalizerLogicName);
+ final AxStateFinalizerLogic stateFinalizerLogic =
+ state.getStateFinalizerLogicMap().get(refKey.getKey().getLocalName());
+ if (stateFinalizerLogic == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ STATE_FINALIZER_LOGIC + refKey.getID() + DOES_NOT_EXIST);
+ }
+
+ if (logicFlavour != null) {
+ stateFinalizerLogic.setLogicFlavour(logicFlavour);
+ }
+ if (logic != null) {
+ stateFinalizerLogic.setLogic(logic);
+ }
+
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List policy finalizer logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param finalizerLogicName name of the state finalizer logic
+ * @return result of the operation
+ */
+ public ApexAPIResult listPolicyStateFinalizerLogic(final String name, final String version, final String stateName,
+ final String finalizerLogicName) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ if (finalizerLogicName != null) {
+ final AxReferenceKey refKey = new AxReferenceKey(state.getKey(), finalizerLogicName);
+ final AxStateFinalizerLogic stateFinalizerLogic =
+ state.getStateFinalizerLogicMap().get(refKey.getKey().getLocalName());
+ if (stateFinalizerLogic == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ STATE_FINALIZER_LOGIC + refKey.getID() + DOES_NOT_EXIST);
+ }
+
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxStateFinalizerLogic>(false).writeString(stateFinalizerLogic,
+ AxStateFinalizerLogic.class, jsonMode));
+ } else {
+ if (state.getStateFinalizerLogicMap().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no state finalizer logic defined on state " + state.getKey().getID());
+ }
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxStateFinalizerLogic stateFinalizerLogic : state.getStateFinalizerLogicMap().values()) {
+ result.addMessage(new ApexModelStringWriter<AxStateFinalizerLogic>(false)
+ .writeString(stateFinalizerLogic, AxStateFinalizerLogic.class, jsonMode));
+ }
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete policy finalizer logic for a state.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param finalizerLogicName name of the state finalizer logic
+ * @return result of the operation
+ */
+ public ApexAPIResult deletePolicyStateFinalizerLogic(final String name, final String version,
+ final String stateName, final String finalizerLogicName) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ if (finalizerLogicName != null) {
+ final AxReferenceKey refKey = new AxReferenceKey(state.getKey(), finalizerLogicName);
+ final AxStateFinalizerLogic stateFinalizerLogic =
+ state.getStateFinalizerLogicMap().get(refKey.getKey().getLocalName());
+ if (stateFinalizerLogic == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ STATE_FINALIZER_LOGIC + refKey.getID() + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ result.addMessage(new ApexModelStringWriter<AxStateFinalizerLogic>(false)
+ .writeString(stateFinalizerLogic, AxStateFinalizerLogic.class, jsonMode));
+ state.getStateFinalizerLogicMap().remove(refKey.getLocalName());
+ return result;
+ } else {
+ if (state.getStateFinalizerLogicMap().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no state finalizer logic defined on state " + state.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxStateFinalizerLogic stateFinalizerLogic : state.getStateFinalizerLogicMap().values()) {
+ result.addMessage(new ApexModelStringWriter<AxStateFinalizerLogic>(false)
+ .writeString(stateFinalizerLogic, AxStateFinalizerLogic.class, jsonMode));
+ }
+ state.getStateFinalizerLogicMap().clear();
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create a policy state task reference.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param taskLocalName the task local name
+ * @param taskName name of the task
+ * @param taskVersion version of the task, set to null to use the latest version
+ * @param outputType Type of output for the task, must be DIRECT for direct output to a state
+ * output or LOGIC for output to state finalizer logic
+ * @param outputName the name of the state output or state state finalizer logic to handle the
+ * task output
+ * @return result of the operation
+ */
+ // CHECKSTYLE:OFF: checkstyle:parameterNumber
+ public ApexAPIResult createPolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskLocalName, final String taskName, final String taskVersion, final String outputType,
+ final String outputName) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+ Assertions.argumentNotNull(outputName, "outputName may not be null");
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(taskName, taskVersion);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + taskName + ':' + taskVersion + DOES_NOT_EXIST);
+ }
+
+ if (state.getTaskReferences().containsKey(task.getKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS, "task " + task.getKey().getID()
+ + " already has reference with output " + state.getTaskReferences().get(task.getKey()));
+ }
+
+ AxReferenceKey refKey;
+ if (taskLocalName == null) {
+ refKey = new AxReferenceKey(state.getKey(), state.getKey().getParentKeyName());
+ } else {
+ refKey = new AxReferenceKey(state.getKey(), taskLocalName);
+ }
+
+ // The reference to the output we're using here
+ final AxReferenceKey outputRefKey = new AxReferenceKey(state.getKey(), outputName);
+
+ final AxStateTaskOutputType stateTaskOutputType = AxStateTaskOutputType.valueOf(outputType);
+ if (stateTaskOutputType.equals(AxStateTaskOutputType.DIRECT)) {
+ if (!state.getStateOutputs().containsKey(outputRefKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "state output concept " + outputRefKey.getID() + DOES_NOT_EXIST);
+ }
+ } else if (stateTaskOutputType.equals(AxStateTaskOutputType.LOGIC)) {
+ if (!state.getStateFinalizerLogicMap().containsKey(outputRefKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "state finalizer logic concept " + outputRefKey.getID() + DOES_NOT_EXIST);
+ }
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, "output type " + outputType + " invalid");
+ }
+
+ state.getTaskReferences().put(task.getKey(),
+ new AxStateTaskReference(refKey, stateTaskOutputType, outputRefKey));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+ // CHECKSTYLE:ON: checkstyle:parameterNumber
+
+ /**
+ * List policy state task references.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param taskName name of the task, set to null to list all task references
+ * @param taskVersion version of the task, set to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult listPolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskName, final String taskVersion) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ boolean found = false;
+ for (final Entry<AxArtifactKey, AxStateTaskReference> taskReferenceEntry : state.getTaskReferences()
+ .entrySet()) {
+ if (taskName == null) {
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false)
+ .writeString(taskReferenceEntry.getKey(), AxArtifactKey.class, jsonMode));
+ result.addMessage(new ApexModelStringWriter<AxStateTaskReference>(false)
+ .writeString(taskReferenceEntry.getValue(), AxStateTaskReference.class, jsonMode));
+ found = true;
+ continue;
+ }
+ if (!taskReferenceEntry.getKey().getName().equals(taskName)) {
+ continue;
+ }
+
+ if (taskVersion != null && !taskReferenceEntry.getKey().getVersion().equals(taskVersion)) {
+ continue;
+ }
+
+ found = true;
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false)
+ .writeString(taskReferenceEntry.getKey(), AxArtifactKey.class, jsonMode));
+ result.addMessage(new ApexModelStringWriter<AxStateTaskReference>(false)
+ .writeString(taskReferenceEntry.getValue(), AxStateTaskReference.class, jsonMode));
+ }
+ if (found) {
+ return result;
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no task references found for state " + state.getKey().getID());
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a policy state task reference.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param taskName name of the task, set to null to delete all task references
+ * @param taskVersion version of the task, set to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult deletePolicyStateTaskRef(final String name, final String version, final String stateName,
+ final String taskName, final String taskVersion) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final Set<AxArtifactKey> deleteSet = new TreeSet<>();
+
+ for (final AxArtifactKey taskReferenceKey : state.getTaskReferences().keySet()) {
+ if (taskName == null) {
+ deleteSet.add(taskReferenceKey);
+ continue;
+ }
+ if (!taskReferenceKey.getName().equals(taskName)) {
+ continue;
+ }
+
+ if (taskVersion != null && !taskReferenceKey.getVersion().equals(taskVersion)) {
+ continue;
+ }
+ deleteSet.add(taskReferenceKey);
+ }
+ if (deleteSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + taskName + ':' + taskVersion + DOES_NOT_EXIST_ON_STATE + state.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxArtifactKey keyToDelete : deleteSet) {
+ state.getTaskReferences().remove(keyToDelete);
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(keyToDelete,
+ AxArtifactKey.class, jsonMode));
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create a policy state context album reference.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param contextAlbumName name of the context album for the context album reference
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult createPolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final AxContextAlbum contextAlbum =
+ apexModel.getPolicyModel().getAlbums().get(contextAlbumName, contextAlbumVersion);
+ if (contextAlbum == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextAlbumName + ':' + contextAlbumVersion + DOES_NOT_EXIST);
+ }
+
+ if (state.getContextAlbumReferences().contains(contextAlbum.getKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS, "concept album reference for concept "
+ + contextAlbum.getKey().getID() + " already exists in state");
+ }
+
+ state.getContextAlbumReferences().add(contextAlbum.getKey());
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List policy state context album references.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the latest version
+ * @param stateName of the state
+ * @param contextAlbumName name of the context album for the context album reference, set to
+ * null to list all task context album references
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult listPolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ boolean found = false;
+ for (final AxArtifactKey albumKey : state.getContextAlbumReferences()) {
+ if (contextAlbumName == null) {
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(albumKey,
+ AxArtifactKey.class, jsonMode));
+ found = true;
+ continue;
+ }
+
+ if (!albumKey.getName().equals(contextAlbumName)) {
+ continue;
+ }
+
+ if (contextAlbumVersion == null || albumKey.getVersion().equals(contextAlbumVersion)) {
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(albumKey,
+ AxArtifactKey.class, jsonMode));
+ found = true;
+ }
+ }
+ if (!found) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST, CONCEPT + contextAlbumName + ':'
+ + contextAlbumVersion + DOES_NOT_EXIST_ON_STATE + state.getKey().getID());
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a policy state context album reference.
+ *
+ * @param name name of the policy
+ * @param version version of the policy, set to null to use the default version
+ * @param stateName of the state
+ * @param contextAlbumName name of the context album for the context album reference, set to
+ * null to delete all task context album references
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult deletePolicyStateContextRef(final String name, final String version, final String stateName,
+ final String contextAlbumName, final String contextAlbumVersion) {
+ try {
+ Assertions.argumentNotNull(stateName, STATE_NAME_MAY_NOT_BE_NULL);
+
+ final AxPolicy policy = apexModel.getPolicyModel().getPolicies().get(name, version);
+ if (policy == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxState state = policy.getStateMap().get(stateName);
+ if (state == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + policy.getKey().getID() + ':' + stateName + DOES_NOT_EXIST);
+ }
+
+ final Set<AxArtifactKey> deleteSet = new TreeSet<>();
+
+ for (final AxArtifactKey albumKey : state.getContextAlbumReferences()) {
+ if (contextAlbumName == null) {
+ deleteSet.add(albumKey);
+ continue;
+ }
+
+ if (!albumKey.getName().equals(contextAlbumName)) {
+ continue;
+ }
+
+ if (contextAlbumVersion == null || albumKey.getVersion().equals(contextAlbumVersion)) {
+ deleteSet.add(albumKey);
+ }
+ }
+ if (deleteSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST, CONCEPT + contextAlbumName + ':'
+ + contextAlbumVersion + DOES_NOT_EXIST_ON_STATE + state.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxArtifactKey keyToDelete : deleteSet) {
+ state.getContextAlbumReferences().remove(keyToDelete);
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(keyToDelete,
+ AxArtifactKey.class, jsonMode));
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/TaskFacade.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/TaskFacade.java
new file mode 100644
index 000000000..923814daf
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/TaskFacade.java
@@ -0,0 +1,893 @@
+/*-
+ * ============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=========================================================
+ */
+
+package org.onap.policy.apex.model.modelapi.impl;
+
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelStringWriter;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.apex.model.eventmodel.concepts.AxInputField;
+import org.onap.policy.apex.model.eventmodel.concepts.AxOutputField;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+import org.onap.policy.apex.model.policymodel.concepts.AxTask;
+import org.onap.policy.apex.model.policymodel.concepts.AxTaskLogic;
+import org.onap.policy.apex.model.policymodel.concepts.AxTaskParameter;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class acts as a facade for operations towards a policy model for task operations.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TaskFacade {
+ private static final String CONCEPT = "concept ";
+ private static final String CONCEPT_S = "concept(s) ";
+ private static final String DOES_NOT_EXIST = " does not exist";
+ private static final String DO_ES_NOT_EXIST = " do(es) not exist";
+ private static final String ALREADY_EXISTS = " already exists";
+
+ // Apex model we're working towards
+ private final ApexModel apexModel;
+
+ // Properties to use for the model
+ private final Properties apexProperties;
+
+ // Facade classes for working towards the real Apex model
+ private final KeyInformationFacade keyInformationFacade;
+
+ // JSON output on list/delete if set
+ private final boolean jsonMode;
+
+ /**
+ * Constructor that creates a task facade for the Apex Model API.
+ *
+ * @param apexModel the apex model
+ * @param apexProperties Properties for the model
+ * @param jsonMode set to true to return JSON strings in list and delete operations, otherwise
+ * set to false
+ */
+ public TaskFacade(final ApexModel apexModel, final Properties apexProperties, final boolean jsonMode) {
+ this.apexModel = apexModel;
+ this.apexProperties = apexProperties;
+ this.jsonMode = jsonMode;
+
+ keyInformationFacade = new KeyInformationFacade(apexModel, apexProperties, jsonMode);
+ }
+
+ /**
+ * Create a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the default version
+ * @param uuid task UUID, set to null to generate a UUID
+ * @param description task description, set to null to generate a description
+ * @return result of the operation
+ */
+ public ApexAPIResult createTask(final String name, final String version, final String uuid,
+ final String description) {
+ try {
+ final AxArtifactKey key = new AxArtifactKey();
+ key.setName(name);
+ if (version != null) {
+ key.setVersion(version);
+ } else {
+ key.setVersion(apexProperties.getProperty("DEFAULT_CONCEPT_VERSION"));
+ }
+
+ if (apexModel.getPolicyModel().getTasks().getTaskMap().containsKey(key)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS, CONCEPT + key.getID() + ALREADY_EXISTS);
+ }
+
+ apexModel.getPolicyModel().getTasks().getTaskMap().put(key, new AxTask(key));
+
+ if (apexModel.getPolicyModel().getKeyInformation().getKeyInfoMap().containsKey(key)) {
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } else {
+ return keyInformationFacade.createKeyInformation(name, version, uuid, description);
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param uuid task UUID, set to null to not update
+ * @param description task description, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updateTask(final String name, final String version, final String uuid,
+ final String description) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ return keyInformationFacade.updateKeyInformation(name, version, uuid, description);
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List tasks.
+ *
+ * @param name name of the task, set to null to list all
+ * @param version starting version of the task, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult listTask(final String name, final String version) {
+ try {
+ final Set<AxTask> taskSet = apexModel.getPolicyModel().getTasks().getAll(name, version);
+ if (name != null && taskSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxTask task : taskSet) {
+ result.addMessage(new ApexModelStringWriter<AxTask>(false).writeString(task, AxTask.class, jsonMode));
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteTask(final String name, final String version) {
+ try {
+ if (version != null) {
+ final AxArtifactKey key = new AxArtifactKey(name, version);
+ final AxTask removedTask = apexModel.getPolicyModel().getTasks().getTaskMap().remove(key);
+ if (removedTask != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxTask>(false).writeString(removedTask, AxTask.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + key.getID() + DOES_NOT_EXIST);
+ }
+ }
+
+ final Set<AxTask> taskSet = apexModel.getPolicyModel().getTasks().getAll(name, version);
+ if (taskSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxTask task : taskSet) {
+ result.addMessage(new ApexModelStringWriter<AxTask>(false).writeString(task, AxTask.class, jsonMode));
+ apexModel.getPolicyModel().getTasks().getTaskMap().remove(task.getKey());
+ keyInformationFacade.deleteKeyInformation(name, version);
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Validate tasks.
+ *
+ * @param name name of the task, set to null to list all
+ * @param version starting version of the task, set to null to list all versions
+ * @return result of the operation
+ */
+ public ApexAPIResult validateTask(final String name, final String version) {
+ try {
+ final Set<AxTask> taskSet = apexModel.getPolicyModel().getTasks().getAll(name, version);
+ if (taskSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT_S + name + ':' + version + DO_ES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxTask task : taskSet) {
+ final AxValidationResult validationResult = task.validate(new AxValidationResult());
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(task.getKey(),
+ AxArtifactKey.class, jsonMode));
+ result.addMessage(validationResult.toString());
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create logic for a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param logicFlavour the task logic flavour for the task, set to null to use the default task
+ * logic flavour
+ * @param logic the source code for the logic of the task
+ * @return result of the operation
+ */
+ public ApexAPIResult createTaskLogic(final String name, final String version, final String logicFlavour,
+ final String logic) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ // There is only one logic item associated with a task so we use a hard coded logic name
+ final AxReferenceKey refKey = new AxReferenceKey(task.getKey(), "TaskLogic");
+
+ if (!task.getTaskLogic().getKey().getLocalName().equals(AxKey.NULL_KEY_NAME)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ task.setTaskLogic(new AxTaskLogic(refKey, logicFlavour, logic));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Update logic for a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param logicFlavour the task logic flavour for the task, set to null to not update
+ * @param logic the source code for the logic of the task, set to null to not update
+ * @return result of the operation
+ */
+ public ApexAPIResult updateTaskLogic(final String name, final String version, final String logicFlavour,
+ final String logic) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (task.getTaskLogic().getKey().getLocalName().equals(AxKey.NULL_KEY_NAME)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + task.getTaskLogic().getKey().getID() + DOES_NOT_EXIST);
+ }
+
+ final AxTaskLogic taskLogic = task.getTaskLogic();
+ if (logicFlavour != null) {
+ taskLogic.setLogicFlavour(logicFlavour);
+ }
+ if (logic != null) {
+ taskLogic.setLogic(logic);
+ }
+
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List task logic.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to list the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult listTaskLogic(final String name, final String version) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS, new ApexModelStringWriter<AxTaskLogic>(false)
+ .writeString(task.getTaskLogic(), AxTaskLogic.class, jsonMode));
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete logic for a task.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteTaskLogic(final String name, final String version) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (task.getTaskLogic().getKey().getLocalName().equals(AxKey.NULL_KEY_NAME)) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + task.getTaskLogic().getKey().getID() + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ result.addMessage(new ApexModelStringWriter<AxTaskLogic>(false).writeString(task.getTaskLogic(),
+ AxTaskLogic.class, jsonMode));
+ task.setTaskLogic(new AxTaskLogic());
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create a task input field.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName of the input field
+ * @param contextSchemaName name of the input field context schema
+ * @param contextSchemaVersion version of the input field context schema, set to null to use the
+ * latest version
+ * @param optional true if the task field is optional, false otherwise
+ * @return result of the operation
+ */
+ public ApexAPIResult createTaskInputField(final String name, final String version, final String fieldName,
+ final String contextSchemaName, final String contextSchemaVersion, final boolean optional) {
+ try {
+ Assertions.argumentNotNull(fieldName, "fieldName may not be null");
+
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxReferenceKey refKey =
+ new AxReferenceKey(task.getKey().getName(), task.getKey().getVersion(), "inputFields", fieldName);
+
+ if (task.getInputFields().containsKey(refKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ final AxContextSchema schema =
+ apexModel.getPolicyModel().getSchemas().get(contextSchemaName, contextSchemaVersion);
+ if (schema == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextSchemaName + ':' + contextSchemaVersion + DOES_NOT_EXIST);
+ }
+
+ task.getInputFields().put(refKey.getLocalName(), new AxInputField(refKey, schema.getKey(), optional));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List task input fields.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName field name of the input field, set to null to list all input fields of the
+ * task
+ * @return result of the operation
+ */
+ public ApexAPIResult listTaskInputField(final String name, final String version, final String fieldName) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (fieldName != null) {
+ final AxInputField inputField = task.getInputFields().get(fieldName);
+ if (inputField != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxInputField>(false).writeString(inputField, AxInputField.class,
+ jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + inputField + DOES_NOT_EXIST);
+ }
+ } else {
+ if (task.getInputFields().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no input fields defined on task " + task.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxInputField field : task.getInputFields().values()) {
+ result.addMessage(new ApexModelStringWriter<AxInputField>(false).writeString(field,
+ AxInputField.class, jsonMode));
+ }
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+
+ }
+
+ /**
+ * Delete a task input field.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName of the input field, set to null to delete all input fields
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteTaskInputField(final String name, final String version, final String fieldName) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ if (fieldName != null) {
+ if (task.getInputFields().containsKey(fieldName)) {
+ result.addMessage(new ApexModelStringWriter<AxInputField>(false)
+ .writeString(task.getInputFields().get(fieldName), AxInputField.class, jsonMode));
+ task.getInputFields().remove(fieldName);
+ return result;
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + fieldName + DOES_NOT_EXIST);
+ }
+ } else {
+ if (task.getInputFields().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no input fields defined on task " + task.getKey().getID());
+ }
+
+ for (final AxInputField field : task.getInputFields().values()) {
+ result.addMessage(new ApexModelStringWriter<AxInputField>(false).writeString(field,
+ AxInputField.class, jsonMode));
+ }
+ task.getInputFields().clear();
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+
+ }
+
+ /**
+ * Create a task output field.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName of the output field
+ * @param contextSchemaName name of the output field context schema
+ * @param contextSchemaVersion version of the output field context schema, set to null to use
+ * the latest version
+ * @param optional true if the task field is optional, false otherwise
+ * @return result of the operation
+ */
+ public ApexAPIResult createTaskOutputField(final String name, final String version, final String fieldName,
+ final String contextSchemaName, final String contextSchemaVersion, final boolean optional) {
+ try {
+ Assertions.argumentNotNull(fieldName, "fieldName may not be null");
+
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxReferenceKey refKey =
+ new AxReferenceKey(task.getKey().getName(), task.getKey().getVersion(), "outputFields", fieldName);
+
+ if (task.getOutputFields().containsKey(refKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ final AxContextSchema schema =
+ apexModel.getPolicyModel().getSchemas().get(contextSchemaName, contextSchemaVersion);
+ if (schema == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextSchemaName + ':' + contextSchemaVersion + DOES_NOT_EXIST);
+ }
+
+ task.getOutputFields().put(refKey.getLocalName(), new AxOutputField(refKey, schema.getKey(), optional));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List task output fields.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName field name of the output field, set to null to list all output fields of the
+ * task
+ * @return result of the operation
+ */
+ public ApexAPIResult listTaskOutputField(final String name, final String version, final String fieldName) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (fieldName != null) {
+ final AxOutputField outputField = task.getOutputFields().get(fieldName);
+ if (outputField != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxOutputField>(false).writeString(outputField,
+ AxOutputField.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + outputField + DOES_NOT_EXIST);
+ }
+ } else {
+ if (task.getOutputFields().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no output fields defined on task " + task.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxOutputField field : task.getOutputFields().values()) {
+ result.addMessage(new ApexModelStringWriter<AxOutputField>(false).writeString(field,
+ AxOutputField.class, jsonMode));
+ }
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a task output field.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param fieldName of the output field, set to null to delete all output fields
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteTaskOutputField(final String name, final String version, final String fieldName) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ if (fieldName != null) {
+ if (task.getOutputFields().containsKey(fieldName)) {
+ result.addMessage(new ApexModelStringWriter<AxOutputField>(false)
+ .writeString(task.getOutputFields().get(fieldName), AxOutputField.class, jsonMode));
+ task.getOutputFields().remove(fieldName);
+ return result;
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + fieldName + DOES_NOT_EXIST);
+ }
+ } else {
+ if (task.getOutputFields().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no output fields defined on task " + task.getKey().getID());
+ }
+
+ for (final AxOutputField field : task.getOutputFields().values()) {
+ result.addMessage(new ApexModelStringWriter<AxOutputField>(false).writeString(field,
+ AxOutputField.class, jsonMode));
+ }
+ task.getOutputFields().clear();
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create a task parameter.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param parName of the parameter
+ * @param defaultValue of the parameter
+ * @return result of the operation
+ */
+ public ApexAPIResult createTaskParameter(final String name, final String version, final String parName,
+ final String defaultValue) {
+ try {
+ Assertions.argumentNotNull(parName, "parName may not be null");
+
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxReferenceKey refKey = new AxReferenceKey(task.getKey(), parName);
+
+ if (task.getTaskParameters().containsKey(refKey.getLocalName())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS,
+ CONCEPT + refKey.getID() + ALREADY_EXISTS);
+ }
+
+ task.getTaskParameters().put(refKey.getLocalName(), new AxTaskParameter(refKey, defaultValue));
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List task parameters.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param parName name of the parameter, set to null to list all parameters of the task
+ * @return result of the operation
+ */
+ public ApexAPIResult listTaskParameter(final String name, final String version, final String parName) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ if (parName != null) {
+ final AxTaskParameter taskParameter = task.getTaskParameters().get(parName);
+ if (taskParameter != null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.SUCCESS,
+ new ApexModelStringWriter<AxTaskParameter>(false).writeString(taskParameter,
+ AxTaskParameter.class, jsonMode));
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + taskParameter + DOES_NOT_EXIST);
+ }
+ } else {
+ if (task.getTaskParameters().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no task parameters defined on task " + task.getKey().getID());
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxTaskParameter parameter : task.getTaskParameters().values()) {
+ result.addMessage(new ApexModelStringWriter<AxTaskParameter>(false).writeString(parameter,
+ AxTaskParameter.class, jsonMode));
+ }
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a task parameter.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param parName of the parameter, set to null to delete all task parameters
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteTaskParameter(final String name, final String version, final String parName) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ if (parName != null) {
+ if (task.getTaskParameters().containsKey(parName)) {
+ result.addMessage(new ApexModelStringWriter<AxTaskParameter>(false)
+ .writeString(task.getTaskParameters().get(parName), AxTaskParameter.class, jsonMode));
+ task.getTaskParameters().remove(parName);
+ return result;
+ } else {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + ':' + parName + DOES_NOT_EXIST);
+ }
+ } else {
+ if (task.getTaskParameters().size() == 0) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ "no task parameters defined on task " + task.getKey().getID());
+ }
+
+ for (final AxTaskParameter parameter : task.getTaskParameters().values()) {
+ result.addMessage(new ApexModelStringWriter<AxTaskParameter>(false).writeString(parameter,
+ AxTaskParameter.class, jsonMode));
+ }
+ task.getTaskParameters().clear();
+ return result;
+ }
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Create a task context album reference.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param contextAlbumName name of the context album for the context album reference
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult createTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final AxContextAlbum contextAlbum =
+ apexModel.getPolicyModel().getAlbums().get(contextAlbumName, contextAlbumVersion);
+ if (contextAlbum == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextAlbumName + ':' + contextAlbumVersion + DOES_NOT_EXIST);
+ }
+
+ if (task.getContextAlbumReferences().contains(contextAlbum.getKey())) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_EXISTS, "context album reference for concept "
+ + contextAlbum.getKey().getID() + " already exists in task");
+ }
+
+ task.getContextAlbumReferences().add(contextAlbum.getKey());
+ return new ApexAPIResult();
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * List task context album references.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param contextAlbumName name of the context album for the context album reference, set to
+ * null to list all task context album references
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult listTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final ApexAPIResult result = new ApexAPIResult();
+ boolean found = false;
+ for (final AxArtifactKey albumKey : task.getContextAlbumReferences()) {
+ if (contextAlbumName == null) {
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(albumKey,
+ AxArtifactKey.class, jsonMode));
+ found = true;
+ continue;
+ }
+
+ if (!albumKey.getName().equals(contextAlbumName)) {
+ continue;
+ }
+
+ if (contextAlbumVersion == null || albumKey.getVersion().equals(contextAlbumVersion)) {
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(albumKey,
+ AxArtifactKey.class, jsonMode));
+ found = true;
+ }
+ }
+ if (!found) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextAlbumName + ':' + contextAlbumVersion + DOES_NOT_EXIST);
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+
+ /**
+ * Delete a task context album reference.
+ *
+ * @param name name of the task
+ * @param version version of the task, set to null to use the latest version
+ * @param contextAlbumName name of the context album for the context album reference, set to
+ * null to delete all task context album references
+ * @param contextAlbumVersion version of the context album for the context album reference, set
+ * to null to use the latest version
+ * @return result of the operation
+ */
+ public ApexAPIResult deleteTaskContextRef(final String name, final String version, final String contextAlbumName,
+ final String contextAlbumVersion) {
+ try {
+ final AxTask task = apexModel.getPolicyModel().getTasks().get(name, version);
+ if (task == null) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + name + ':' + version + DOES_NOT_EXIST);
+ }
+
+ final Set<AxArtifactKey> deleteSet = new TreeSet<>();
+
+ for (final AxArtifactKey albumKey : task.getContextAlbumReferences()) {
+ if (contextAlbumName == null) {
+ deleteSet.add(albumKey);
+ continue;
+ }
+
+ if (!albumKey.getName().equals(contextAlbumName)) {
+ continue;
+ }
+
+ if (contextAlbumVersion == null || albumKey.getVersion().equals(contextAlbumVersion)) {
+ deleteSet.add(albumKey);
+ }
+ }
+
+ if (deleteSet.isEmpty()) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.CONCEPT_DOES_NOT_EXIST,
+ CONCEPT + contextAlbumName + ':' + contextAlbumVersion + DOES_NOT_EXIST);
+ }
+ final ApexAPIResult result = new ApexAPIResult();
+ for (final AxArtifactKey keyToDelete : deleteSet) {
+ task.getContextAlbumReferences().remove(keyToDelete);
+ result.addMessage(new ApexModelStringWriter<AxArtifactKey>(false).writeString(keyToDelete,
+ AxArtifactKey.class, jsonMode));
+ }
+ return result;
+ } catch (final Exception e) {
+ return new ApexAPIResult(ApexAPIResult.RESULT.FAILED, e);
+ }
+ }
+}
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/package-info.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/package-info.java
new file mode 100644
index 000000000..f31542044
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/impl/package-info.java
@@ -0,0 +1,27 @@
+/*-
+ * ============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=========================================================
+ */
+
+/**
+ * Provides an implementation of the APEX Model API that holds an APEX model and manipulates its
+ * various parts in response to operations called over the Model API.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+package org.onap.policy.apex.model.modelapi.impl;
diff --git a/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/package-info.java b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/package-info.java
new file mode 100644
index 000000000..97e8db4ea
--- /dev/null
+++ b/model/model-api/src/main/java/org/onap/policy/apex/model/modelapi/package-info.java
@@ -0,0 +1,27 @@
+/*-
+ * ============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=========================================================
+ */
+
+/**
+ * Provides an API to APEX models so that they can be manipulated over a common interface by CLI and
+ * GUI based editors and other development tools.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+package org.onap.policy.apex.model.modelapi;