Adding apex auth modules 39/49939/1
authorwaqas.ikram <waqas.ikram@ericsson.com>
Fri, 1 Jun 2018 13:23:01 +0000 (14:23 +0100)
committerwaqas.ikram <waqas.ikram@ericsson.com>
Fri, 1 Jun 2018 13:23:04 +0000 (14:23 +0100)
Change-Id: Iec210465636458f0c104c99893440706279062f0
Issue-ID: POLICY-860
Signed-off-by: waqas.ikram <waqas.ikram@ericsson.com>
62 files changed:
auth/cli-codegen/pom.xml [new file with mode: 0644]
auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/CGCliEditor.java [new file with mode: 0644]
auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/CgStringRenderer.java [new file with mode: 0644]
auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/package-info.java [new file with mode: 0644]
auth/cli-codegen/src/main/resources/org/onap/policy/apex/auth/clicodegen/cli-editor.stg [new file with mode: 0644]
auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/StErrorListener.java [new file with mode: 0644]
auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/TestSTG.java [new file with mode: 0644]
auth/cli-editor/pom.xml [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexCLIEditorMain.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelHandler.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelProperties.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIArgument.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIArgumentValue.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLICommand.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLICommands.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIEditorLoop.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIException.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLILineParser.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIParameterParser.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIParameters.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/KeywordNode.java [new file with mode: 0644]
auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/package-info.java [new file with mode: 0644]
auth/cli-editor/src/main/resources/etc/editor/ApexModelProperties.json [new file with mode: 0644]
auth/cli-editor/src/main/resources/etc/editor/Commands.json [new file with mode: 0644]
auth/cli-editor/src/main/resources/examples/scripts/ShellPolicyModel.apex [new file with mode: 0644]
auth/cli-editor/src/main/resources/examples/scripts/ShellPolicyModelAddSchema.apex [new file with mode: 0644]
auth/cli-editor/src/main/resources/examples/scripts/TestPolicyAvroEventContext.apex [new file with mode: 0644]
auth/cli-editor/src/main/resources/examples/scripts/TestPolicyJavaEventContext.apex [new file with mode: 0644]
auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorEventsContext.java [new file with mode: 0644]
auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorOptions.java [new file with mode: 0644]
auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorScripting.java [new file with mode: 0644]
auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestContextAlbums.java [new file with mode: 0644]
auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestFileMacro.java [new file with mode: 0644]
auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestLogicBlock.java [new file with mode: 0644]
auth/cli-editor/src/test/resources/compare/AvroSchemaModel_Compare.json [new file with mode: 0644]
auth/cli-editor/src/test/resources/compare/ContextAlbumsModel_Compare.json [new file with mode: 0644]
auth/cli-editor/src/test/resources/compare/FileMacroModel_Compare.json [new file with mode: 0644]
auth/cli-editor/src/test/resources/compare/FileMacro_Compare.log [new file with mode: 0644]
auth/cli-editor/src/test/resources/compare/FuzzyPolicyModel_Compare.json [new file with mode: 0644]
auth/cli-editor/src/test/resources/compare/LogicBlockModel_Compare.json [new file with mode: 0644]
auth/cli-editor/src/test/resources/logback-test.xml [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile0.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile1.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile2.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile3.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile4.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile5.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile6.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile7.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile8.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/macros/MacroFile9.apexmacro [new file with mode: 0644]
auth/cli-editor/src/test/resources/scripts/AvroSchema.apex [new file with mode: 0644]
auth/cli-editor/src/test/resources/scripts/ContextAlbums.apex [new file with mode: 0644]
auth/cli-editor/src/test/resources/scripts/FileMacro.apex [new file with mode: 0644]
auth/cli-editor/src/test/resources/scripts/LogicBlock.apex [new file with mode: 0644]
auth/cli-editor/src/test/resources/scripts/SampleLBPolicy.apex [new file with mode: 0644]
auth/cli-editor/src/test/resources/scripts/SampleLBPolicy_WithMap.apex [new file with mode: 0644]
auth/pom.xml [new file with mode: 0644]
model/utilities/pom.xml
model/utilities/src/main/java/org/onap/policy/apex/model/utilities/json/JSONHandler.java [new file with mode: 0644]
model/utilities/src/test/java/org/onap/policy/apex/model/utilities/json/JSONHandlerTest.java [new file with mode: 0644]
pom.xml

diff --git a/auth/cli-codegen/pom.xml b/auth/cli-codegen/pom.xml
new file mode 100644 (file)
index 0000000..e1d35d8
--- /dev/null
@@ -0,0 +1,42 @@
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 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=========================================================
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.policy.apex-pdp.auth</groupId>
+        <artifactId>auth</artifactId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>cli-codegen</artifactId>
+    <name>${project.artifactId}</name>
+    <description>ST4 based ode Generation module for CLI Editor create commands</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.antlr</groupId>
+            <artifactId>ST4</artifactId>
+            <version>4.0.8</version>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/CGCliEditor.java b/auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/CGCliEditor.java
new file mode 100644 (file)
index 0000000..ca41e5f
--- /dev/null
@@ -0,0 +1,515 @@
+/*-
+ * ============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.auth.clicodegen;
+
+import java.util.List;
+
+import org.stringtemplate.v4.ST;
+import org.stringtemplate.v4.STGroupFile;
+
+/**
+ * Code generator generating expressions for the APEX CLI Editor.
+ *
+ * @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+ */
+public class CGCliEditor {
+    // CHECKSTYLE:OFF: ParameterNumber
+
+    /** The name of the STG file for the code generator. */
+    public static final String STG_FILE = "org/onap/policy/apex/auth/clicodegen/cli-editor.stg";
+
+    /** The String Template Group, taken from the context. */
+    private final STGroupFile stg;
+
+    /** The ST for the model, loaded from the STG. */
+    private final ST model;
+
+    /** A default name space, set from specification. */
+    private String defaultNamespace;
+
+    /**
+     * Creates a new code generator.
+     */
+    public CGCliEditor() {
+        stg = new STGroupFile(STG_FILE);
+        stg.registerRenderer(String.class, new CgStringRenderer(), true);
+        model = stg.getInstanceOf("policyModel");
+    }
+
+    /**
+     * Adds model parameters to the template.
+     * 
+     * @param name the name of the mode, must not be blank
+     * @param version a version, can be null
+     * @param uuid a UUID, can be null
+     * @param description a description, must not be blank
+     */
+    public void addModelParams(final String name, final String version, final String uuid, final String description) {
+        if (name == null || name.isEmpty()) {
+            throw new IllegalArgumentException("model name should not be blank");
+        }
+        if (description == null || description.isEmpty()) {
+            throw new IllegalArgumentException("model description should not be blank");
+        }
+
+        model.add("name", name);
+        model.add("version", version);
+        model.add("uuid", uuid);
+        model.add("description", description);
+    }
+
+    /**
+     * Returns the model.
+     * 
+     * @return the model
+     */
+    public ST getModel() {
+        return model;
+    }
+
+    /**
+     * Sets the default name space.
+     * 
+     * @param nameSpace new name space, ignored if blank
+     */
+    public void setDefaultNamespace(final String nameSpace) {
+        if (nameSpace != null && !nameSpace.isEmpty()) {
+            defaultNamespace = nameSpace;
+        }
+    }
+
+    /**
+     * Adds a new schema declaration to the model.
+     * 
+     * @param name the name of the schema
+     * @param version the version of the declaration
+     * @param uuid the UUID for the declaration
+     * @param description a description of the schema
+     * @param flavour the flavour of the schema declaration, e.g. Java or Avro
+     * @param schema the actual schema declaration, either a string or as <code>LS schema LE</code>
+     */
+    public void addSchemaDeclaration(final String name, final String version, final String uuid,
+            final String description, final String flavour, final String schema) {
+        final ST st = stg.getInstanceOf("schemaDecl");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("uuid", uuid);
+        st.add("description", description);
+        st.add("flavour", flavour);
+        st.add("schema", schema);
+        model.add("declarations", st);
+    }
+
+    /**
+     * Adds a new context album declaration to the model.
+     * 
+     * @param name the name of the context album
+     * @param version the version of the context album
+     * @param uuid a UUID for the declaration
+     * @param description a description for the context album
+     * @param scope the scope
+     * @param writable a flag for writable context
+     * @param schemaName the name of the schema
+     * @param schemaVersion the version of the declaration
+     */
+    public void addContextAlbumDeclaration(final String name, final String version, final String uuid,
+            final String description, final String scope, final boolean writable, final String schemaName,
+            final String schemaVersion) {
+        final ST st = stg.getInstanceOf("ctxAlbumDecl");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("uuid", uuid);
+        st.add("description", description);
+        st.add("scope", scope);
+        st.add("writable", writable);
+        st.add("schemaName", schemaName);
+        st.add("schemaVersion", schemaVersion);
+        model.add("declarations", st);
+    }
+
+    /**
+     * Creates a new event field definition which belongs to an event.
+     * 
+     * @param eventName the event name
+     * @param version the event version
+     * @param fieldName the name for the field in the event
+     * @param fieldSchema the schema of the field
+     * @param fieldSchemaVersion the version of the schema
+     * @param optional a flag for optional fields
+     * @return a CLI command for event field definition
+     */
+    public ST createEventFieldDefinition(final String eventName, final String version, final String fieldName,
+            final String fieldSchema, final String fieldSchemaVersion, final boolean optional) {
+        final ST st = stg.getInstanceOf("eventDefField");
+        st.add("eventName", eventName);
+        st.add("version", version);
+        st.add("fieldName", fieldName);
+        st.add("fieldSchema", fieldSchema);
+        st.add("fieldSchemaVersion", fieldSchemaVersion);
+        st.add("optional", optional);
+        return st;
+    }
+
+    /**
+     * Creates a new task logic definition which belongs to a task.
+     * 
+     * @param taskName the name of the task
+     * @param version the task version
+     * @param flavour the flavour, e.g. JAVA or JAVASCRIPT
+     * @param logic the actual logic (use either a string or a multi-line with
+     *        <code>LS some code LE</code>
+     * @return a CLI command for task definition, logic
+     */
+    public ST createTaskDefLogic(final String taskName, final String version, final String flavour,
+            final String logic) {
+        final ST st = stg.getInstanceOf("taskDefLogic");
+        st.add("taskName", taskName);
+        st.add("version", version);
+        st.add("flavour", flavour);
+        st.add("logic", logic);
+        return st;
+    }
+
+    /**
+     * Adds a new event declaration to the model.
+     * 
+     * @param name the event name
+     * @param version the event version
+     * @param uuid a UUID for the definition
+     * @param description a description of the event
+     * @param nameSpace the name space for the event
+     * @param source a source sending the event
+     * @param target a target receiving the event
+     * @param fields any event fields
+     */
+    public void addEventDeclaration(final String name, final String version, final String uuid,
+            final String description, final String nameSpace, final String source, final String target,
+            final List<ST> fields) {
+        final ST st = stg.getInstanceOf("eventDecl");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("uuid", uuid);
+        st.add("description", description);
+        st.add("source", source);
+        st.add("target", target);
+        st.add("fields", fields);
+
+        if (nameSpace != null) {
+            st.add("nameSpace", nameSpace);
+        } else if (defaultNamespace != null) {
+            st.add("nameSpace", defaultNamespace);
+        }
+
+        model.add("declarations", st);
+    }
+
+    /**
+     * Adds a new task declaration to the model.
+     * 
+     * @param name the name of the task
+     * @param version the version of the task
+     * @param uuid a UUID for the definition
+     * @param description a description of the task
+     * @param infields all infields for the task
+     * @param outfields all outfields for the task
+     * @param logic the logic for the task
+     * @param parameters any task parameter
+     * @param contextRefs any context reference
+     */
+    public void addTaskDeclaration(final String name, final String version, final String uuid, final String description,
+            final List<ST> infields, final List<ST> outfields, final ST logic, final List<ST> parameters,
+            final List<ST> contextRefs) {
+        final ST st = stg.getInstanceOf("taskDecl");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("uuid", uuid);
+        st.add("description", description);
+        st.add("infields", infields);
+        st.add("outfields", outfields);
+        st.add("logic", logic);
+        st.add("parameters", parameters);
+        st.add("contextRefs", contextRefs);
+        model.add("declarations", st);
+    }
+
+    /**
+     * Adds a new policy definition to the model.
+     * 
+     * @param name the name of the policy
+     * @param version the version of the policy
+     * @param uuid a UUID for the definition
+     * @param description a description of the policy
+     * @param template the template type for this policy
+     * @param firstState the first state of the policy
+     * @param states all policy states
+     */
+    public void addPolicyDefinition(final String name, final String version, final String uuid,
+            final String description, final String template, final String firstState, final List<ST> states) {
+        final ST st = stg.getInstanceOf("policyDef");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("uuid", uuid);
+        st.add("description", description);
+        st.add("template", template);
+        st.add("firstState", firstState);
+        st.add("states", states);
+        model.add("definitions", st);
+    }
+
+    /**
+     * Creates a new task infield definition.
+     * 
+     * @param taskName the name of the task
+     * @param version the version of the task
+     * @param fieldName the name of the infield
+     * @param fieldSchema the schema for the infield
+     * @param fieldSchemaVersion the version of the schema
+     * @return a CLI command for task infield definition
+     */
+    public ST createTaskDefinitionInfields(final String taskName, final String version, final String fieldName,
+            final String fieldSchema, final String fieldSchemaVersion) {
+        final ST st = stg.getInstanceOf("taskDefInputFields");
+        st.add("taskName", taskName);
+        st.add("version", version);
+        st.add("fieldName", fieldName);
+        st.add("fieldSchema", fieldSchema);
+        st.add("fieldSchemaVersion", fieldSchemaVersion);
+        return st;
+    }
+
+    /**
+     * Creates a new task outfield definition.
+     * 
+     * @param taskName the name of the task
+     * @param version the version of the task
+     * @param fieldName the name of the outfield
+     * @param fieldSchema the schema for the outfield
+     * @param fieldSchemaVersion the version of the schema
+     * @return a CLI command for task outfield definition
+     */
+    public ST createTaskDefinitionOutfields(final String taskName, final String version, final String fieldName,
+            final String fieldSchema, final String fieldSchemaVersion) {
+        final ST st = stg.getInstanceOf("taskDefOutputFields");
+        st.add("taskName", taskName);
+        st.add("version", version);
+        st.add("fieldName", fieldName);
+        st.add("fieldSchema", fieldSchema);
+        st.add("fieldSchemaVersion", fieldSchemaVersion);
+        return st;
+    }
+
+    /**
+     * Creates a new task parameter definition belonging to a task.
+     * 
+     * @param name the name of the task
+     * @param version the version of the task
+     * @param parName the parameter name
+     * @param defaultValue a default value for the parameter
+     * @return a CLI command for a task parameter definition
+     */
+    public ST createTaskDefinitionParameters(final String name, final String version, final String parName,
+            final String defaultValue) {
+        final ST st = stg.getInstanceOf("taskDefParameter");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("parName", parName);
+        st.add("defaultValue", defaultValue);
+        return st;
+    }
+
+    /**
+     * Creates a new task definition context reference which belongs to a task.
+     * 
+     * @param name the name of the task
+     * @param version the version of the task
+     * @param albumName the name of the context album
+     * @param albumVersion the version of the context album
+     * @return a CLI command for a task context reference definition
+     */
+    public ST createTaskDefinitionContextRef(final String name, final String version, final String albumName,
+            final String albumVersion) {
+        final ST st = stg.getInstanceOf("taskDefCtxRef");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("albumName", albumName);
+        st.add("albumVersion", albumVersion);
+        return st;
+    }
+
+    /**
+     * Creates a new policy state task definition for a task which belongs to a state which belongs
+     * to a policy.
+     * 
+     * @param policyName the name of the policy
+     * @param version the version of the policy
+     * @param stateName the name of the new state
+     * @param taskLocalName the local (in policy and state) name of the task
+     * @param taskName the identifier of the task (previously defined as a task)
+     * @param taskVersion the version of the task definition
+     * @param outputType the output type
+     * @param outputName the output name
+     * @return a CLI command for a policy state task definition
+     */
+    public ST createPolicyStateTask(final String policyName, final String version, final String stateName,
+            final String taskLocalName, final String taskName, final String taskVersion, final String outputType,
+            final String outputName) {
+        final ST st = stg.getInstanceOf("policyStateTask");
+        st.add("policyName", policyName);
+        st.add("version", version);
+        st.add("stateName", stateName);
+        st.add("taskLocalName", taskLocalName);
+        st.add("taskName", taskName);
+        st.add("taskVersion", taskVersion);
+        st.add("outputType", outputType);
+        st.add("outputName", outputName);
+        return st;
+    }
+
+    /**
+     * Creates a new policy state output definition for a state which belongs to a policy.
+     * 
+     * @param policyName the name of the policy
+     * @param version the version of the policy
+     * @param stateName the name of the new state
+     * @param outputName the name of the new output
+     * @param eventName the event name for the output
+     * @param eventVersion the version of the event for the output
+     * @param nextState the next state if any
+     * @return a CLI command for a state output definition
+     */
+    public ST createPolicyStateOutput(final String policyName, final String version, final String stateName,
+            final String outputName, final String eventName, final String eventVersion, final String nextState) {
+        final ST st = stg.getInstanceOf("policyStateOutput");
+        st.add("policyName", policyName);
+        st.add("version", version);
+        st.add("stateName", stateName);
+        st.add("outputName", outputName);
+        st.add("eventName", eventName);
+        st.add("eventVersion", eventVersion);
+        st.add("nextState", nextState);
+        return st;
+    }
+
+    /**
+     * Creates a new policy state definition for a state which belongs to a policy.
+     * 
+     * @param policyName the name of the policy
+     * @param version the version of the policy
+     * @param stateName the name of the new state
+     * @param triggerName the name of the trigger event
+     * @param triggerVersion the version of the trigger event
+     * @param defaultTask the identifier of the default task
+     * @param defaultTaskVersion the version of the default task
+     * @param outputs the output definitions of the state
+     * @param tasks the task definition of the state
+     * @param tsLogic the task selection logic of the state
+     * @param finalizerLogics the finalizer logics for the state
+     * @param ctxRefs any context reference for the state
+     * @return a CLI command for a policy state definition
+     */
+    public ST createPolicyStateDef(final String policyName, final String version, final String stateName,
+            final String triggerName, final String triggerVersion, final String defaultTask,
+            final String defaultTaskVersion, final List<ST> outputs, final List<ST> tasks, final List<ST> tsLogic,
+            final List<ST> finalizerLogics, final List<ST> ctxRefs) {
+        final ST st = stg.getInstanceOf("policyStateDef");
+        st.add("policyName", policyName);
+        st.add("version", version);
+        st.add("stateName", stateName);
+        st.add("triggerName", triggerName);
+        st.add("triggerVersion", triggerVersion);
+        st.add("defaultTask", defaultTask);
+        st.add("defaultTaskVersion", defaultTaskVersion);
+        st.add("outputs", outputs);
+        st.add("tasks", tasks);
+        st.add("tsLogic", tsLogic);
+        st.add("finalizerLogics", finalizerLogics);
+        st.add("ctxRefs", ctxRefs);
+        return st;
+    }
+
+    /**
+     * Creates a new task selection logic definition for a state which belongs to a policy.
+     * 
+     * @param name the name of the policy
+     * @param version the version of the policy
+     * @param stateName the name of the state
+     * @param logicFlavour the flavour, e.g. JAVA or JAVASCRIPT
+     * @param logic the actual logic (use either a string or a multi-line with
+     *        <code>LS some code LE</code>
+     * @return a CLI command for task selection logic definition
+     */
+    public ST createPolicyStateDefTaskSelLogic(final String name, final String version, final String stateName,
+            final String logicFlavour, final String logic) {
+        final ST st = stg.getInstanceOf("policyStateTaskSelectionLogic");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("stateName", stateName);
+        st.add("logicFlavour", logicFlavour);
+        st.add("logic", logic);
+        return st;
+    }
+
+    /**
+     * Creates a new state finalizer definition for a state which belongs to a policy.
+     * 
+     * @param name the name of the policy
+     * @param version the version of the policy
+     * @param stateName the name of the state
+     * @param finalizerLogicName name of the finalizer logic
+     * @param logicFlavour the flavour, e.g. JAVA or JAVASCRIPT
+     * @param logic the actual logic (use either a string or a multi-line with
+     *        <code>LS some code LE</code>
+     * @return a CLI command for finalizer definition
+     */
+    public ST createPolicyStateDefFinalizerLogic(final String name, final String version, final String stateName,
+            final String finalizerLogicName, final String logicFlavour, final String logic) {
+        final ST st = stg.getInstanceOf("policyStateFinalizerLogic");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("stateName", stateName);
+        st.add("finalizerLogicName", finalizerLogicName);
+        st.add("logicFlavour", logicFlavour);
+        st.add("logic", logic);
+        return st;
+    }
+
+    /**
+     * Creates a new policy state context reference for a state which belongs to a policy.
+     * 
+     * @param name the name of the policy
+     * @param version the version of the policy
+     * @param stateName the name of the state
+     * @param albumName the name of the album
+     * @param albumVersion the version of the album
+     * @return a CLI command for state context reference
+     */
+    public ST createPolicyStateDefContextRef(final String name, final String version, final String stateName,
+            final String albumName, final String albumVersion) {
+        final ST st = stg.getInstanceOf("policyStateContextRef");
+        st.add("name", name);
+        st.add("version", version);
+        st.add("stateName", stateName);
+        st.add("albumName", albumName);
+        st.add("albumVersion", albumVersion);
+        return st;
+    }
+
+}
diff --git a/auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/CgStringRenderer.java b/auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/CgStringRenderer.java
new file mode 100644 (file)
index 0000000..50600f9
--- /dev/null
@@ -0,0 +1,71 @@
+/*-
+ * ============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.auth.clicodegen;
+
+import java.util.Locale;
+
+import org.stringtemplate.v4.AttributeRenderer;
+import org.stringtemplate.v4.StringRenderer;
+
+/**
+ * String object renderer for the code generator.
+ *
+ * @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+ * @author John Keeney (John.Keeney@ericsson.com)
+ */
+public class CgStringRenderer implements AttributeRenderer {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.stringtemplate.v4.AttributeRenderer#toString(java.lang.Object, java.lang.String,
+     * java.util.Locale)
+     */
+    @Override
+    public String toString(final Object o, final String format, final Locale locale) {
+        if ("doQuotes".equals(format)) {
+            if (o == null) {
+                return null;
+            }
+            String ret = o.toString();
+            if (ret.length() == 0) {
+                return "\"\"";
+            }
+            if (!ret.startsWith("\"")) {
+                ret = "\"" + ret + "\"";
+            }
+            return ret;
+        }
+
+        if ("doDescription".equals(format)) {
+            String ret = o.toString();
+            if (ret.contains("\n") || ret.contains("\"")) {
+                ret = "LS" + "\n" + ret + "\n" + "LE";
+            } else {
+                ret = this.toString(o, "doQuotes", locale);
+            }
+            return ret;
+        }
+
+        // return the default string renderer if we don't know otherwise
+        return new StringRenderer().toString(o, format, locale);
+    }
+}
diff --git a/auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/package-info.java b/auth/cli-codegen/src/main/java/org/onap/policy/apex/auth/clicodegen/package-info.java
new file mode 100644 (file)
index 0000000..248b26d
--- /dev/null
@@ -0,0 +1,26 @@
+/*-
+ * ============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=========================================================
+ */
+
+/**
+ * Code generation utilities, including STG, for CLI editor commands.
+ * 
+ * @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+ */
+package org.onap.policy.apex.auth.clicodegen;
diff --git a/auth/cli-codegen/src/main/resources/org/onap/policy/apex/auth/clicodegen/cli-editor.stg b/auth/cli-codegen/src/main/resources/org/onap/policy/apex/auth/clicodegen/cli-editor.stg
new file mode 100644 (file)
index 0000000..5f05f39
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * ============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=========================================================
+ */
+
+/*
+ * Template for creating APEX CLI Editor Commands.
+ *
+ * @package    com.ericsson.apex.apps.pdsls.base
+ * @author     Sven van der Meer &lt;sven.van.der.meer@ericsson.com&gt;
+ */
+
+policyModel(name, version, uuid, description, declarations, definitions) ::= <<
+model create name=<name><if(version)> version=<version><endif><if(uuid)> uuid=<uuid><endif> description=<description; format="doDescription">
+
+<declarations:{decl|<decl>}; separator="\n">
+
+<definitions:{def|<def>}; separator="\n">
+
+>>
+
+schemaDecl(name, version, uuid, description, flavour, schema) ::= <<
+schema create name=<name><if(version)> version=<version><endif><if(uuid)> uuid=<uuid><endif> description=<description; format="doDescription"> flavour=<flavour> schema=<schema>
+
+>>
+
+
+ctxAlbumDecl(name, version, uuid, description, scope, writable, schemaName, schemaVersion) ::= <<
+album create name=<name><if(version)> version=<version><endif><if(uuid)> uuid=<uuid><endif> description=<description; format="doDescription"> scope=<scope> writable=<writable> schemaName=<schemaName><if(schemaVersion)> schemaVersion=<schemaVersion><endif>
+>>
+
+
+eventDecl(name, version, uuid, description, nameSpace, source, target, fields) ::= <<
+event create name=<name><if(version)> version=<version><endif><if(uuid)> uuid=<uuid><endif> description=<description; format="doDescription"><if(nameSpace)> nameSpace=<nameSpace><endif><if(source)> source=<source; format="doQuotes"><endif><if(target)> target=<target; format="doQuotes"><endif>
+<fields:{field|<field>}; separator="\n">
+
+>>
+
+eventDefField(eventName, version, fieldName, fieldSchema, fieldSchemaVersion, optional) ::= <<
+event parameter create name=<eventName><if(version)> version=<version><endif> parName=<fieldName> schemaName=<fieldSchema><if(fieldSchemaVersion)> schemaVersion=<fieldSchemaVersion><endif><if(optional)> optional=<optional><endif>
+>>
+
+
+taskDecl(name, version, uuid, description, infields, outfields, logic, parameters, contextRefs) ::= <<
+task create name=<name><if(version)> version=<version><endif><if(uuid)> uuid=<uuid><endif> description=<description; format="doDescription">
+<infields:{field|<field>}; separator="\n">
+<outfields:{field|<field>}; separator="\n">
+<logic>
+<parameters:{parameter|<parameter>}; separator="\n">
+<contextRefs:{contextRef|<contextRef>}; separator="\n">
+>>
+
+taskDefInputFields(taskName, version, fieldName, fieldSchema, fieldSchemaVersion) ::= <<
+task inputfield create name=<taskName><if(version)> version=<version><endif> fieldName=<fieldName> schemaName=<fieldSchema><if(fieldSchemaVersion)> schemaVersion=<fieldSchemaVersion><endif>
+>>
+
+taskDefOutputFields(taskName, version, fieldName, fieldSchema, fieldSchemaVersion) ::= <<
+task outputfield create name=<taskName><if(version)> version=<version><endif> fieldName=<fieldName> schemaName=<fieldSchema><if(fieldSchemaVersion)> schemaVersion=<fieldSchemaVersion><endif>
+>>
+
+taskDefLogic(taskName, version, flavour, logic) ::= <<
+task logic create name=<taskName><if(version)> version=<version><endif> logicFlavour=<flavour> logic=LS
+<logic>
+LE
+>>
+
+taskDefParameter(name, version, parName, defaultValue) ::= <<
+task parameter create name=<name><if(version)> version=<version><endif> parName=<parName> defaultValue=<defaultValue>
+>>
+
+taskDefCtxRef(name, version, albumName, albumVersion) ::= <<
+task contextref create name=<name><if(version)> version=<version><endif> albumName=<albumName><if(albumVersion)> albumVersion=<albumVersion><endif>
+>>
+
+
+policyDef(name, version, uuid, description, template, firstState, states) ::= <<
+policy create name=<name><if(version)> version=<version><endif><if(uuid)> uuid=<uuid><endif> description=<description; format="doDescription"><if(template)> template=<template><endif> firstState=<firstState>
+<states:{state|<state>}; separator="\n\n">
+
+
+>>
+
+policyStateDef(policyName, version, stateName, triggerName, triggerVersion, defaultTask, defaultTaskVersion, outputs, tasks, tsLogic, finalizerLogics, ctxRefs) ::= <<
+policy state create name=<policyName><if(version)> version=<version><endif> stateName=<stateName> triggerName=<triggerName><if(triggerVersion)> triggerVersion=<triggerVersion><endif> defaultTaskName=<defaultTask><if(defaultTaskVersion)> defaultTaskVersion=<defaultTaskVersion><endif>
+<outputs:{output|<output>}; separator="\n">
+<tasks:{task|<task>}; separator="\n">
+<tsLogic>
+<finalizerLogics:{finalizerLogic|<finalizerLogic>}; separator="\n">
+<ctxRefs:{ctxRef|<ctxRef>}; separator="\n">
+>>
+
+policyStateOutput(policyName, version, stateName, outputName, eventName, eventVersion, nextState) ::= <<
+policy state output create name=<policyName><if(version)> version=<version><endif> stateName=<stateName> outputName=<outputName> eventName=<eventName><if(eventVersion)> eventVersion=<eventVersion><endif><if(nextState)> nextState=<nextState><endif>
+>>
+
+policyStateTaskSelectionLogic(name, version, stateName, logicFlavour, logic) ::= <<
+policy state selecttasklogic create name=<name><if(version)> version=<version><endif> stateName=<stateName><if(logicFlavour)> logicFlavour=<logicFlavour><endif><if(logic)> logic=LS
+<logic>
+LE<endif>
+>>
+
+policyStateTask(policyName, version, stateName, taskLocalName, taskName, taskVersion, outputType, outputName) ::= <<
+policy state taskref create name=<policyName><if(version)> version=<version><endif> stateName=<stateName><if(taskLocalName)> taskLocalName=<taskLocalName><endif> taskName=<taskName><if(taskVersion)> taskVersion=<taskVersion><endif> outputType=<outputType> outputName=<outputName>
+>>
+
+policyStateFinalizerLogic(name, version, stateName, finalizerLogicName, logicFlavour, logic) ::= <<
+policy state finalizerlogic create name=<name><if(version)> version=<version><endif> stateName=<stateName> finalizerLogicName=<finalizerLogicName><if(logicFlavour)> logicFlavour=<logicFlavour><endif><if(logic)> logic=LS
+<logic>
+LE<endif>
+>>
+
+policyStateContextRef(name, version, stateName, albumName, albumVersion) ::= <<
+policy state contextref create name=<name><if(version)> version=<version><endif> stateName=<stateName> albumName=<albumName><if(albumVersion)> albumVersion=<albumVersion><endif>
+>>
diff --git a/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/StErrorListener.java b/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/StErrorListener.java
new file mode 100644 (file)
index 0000000..ed703da
--- /dev/null
@@ -0,0 +1,111 @@
+/*-
+ * ============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.auth.clicodegen;
+
+import org.stringtemplate.v4.STErrorListener;
+import org.stringtemplate.v4.misc.STMessage;
+
+/**
+ * Customized ST error listener.
+ *
+ * @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+ */
+public class StErrorListener implements STErrorListener {
+
+    /** Counts errors of the listener. */
+    private int errorCount;
+
+    /* (non-Javadoc)
+     * @see org.stringtemplate.v4.STErrorListener#IOError(org.stringtemplate.v4.misc.STMessage)
+     */
+    @Override
+    public void IOError(final STMessage msg) {
+        switch (msg.error) {
+        default:
+            this.registerErrors(msg);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.stringtemplate.v4.STErrorListener#compileTimeError(org.stringtemplate.v4.misc.STMessage)
+     */
+    @Override
+    public void compileTimeError(final STMessage msg) {
+        switch (msg.error) {
+        default:
+            this.registerErrors(msg);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.stringtemplate.v4.STErrorListener#internalError(org.stringtemplate.v4.misc.STMessage)
+     */
+    @Override
+    public void internalError(final STMessage msg) {
+        switch (msg.error) {
+        default:
+            this.registerErrors(msg);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.stringtemplate.v4.STErrorListener#runTimeError(org.stringtemplate.v4.misc.STMessage)
+     */
+    @Override
+    public void runTimeError(final STMessage msg) {
+        switch (msg.error) {
+        case NO_SUCH_PROPERTY:
+        case ARGUMENT_COUNT_MISMATCH:
+        case ANON_ARGUMENT_MISMATCH:
+            break;
+        default:
+            this.registerErrors(msg);
+        }
+    }
+
+    /**
+     * Registers an error with the local error listener and increases the error count.
+     * 
+     * @param msg error message
+     */
+    protected void registerErrors(final STMessage msg) {
+        setErrorCount(getErrorCount() + 1);
+        System.err.println("STG/ST (" + msg.error + ") " + msg.arg + " -> " + msg.cause);
+    }
+
+    /**
+     * Gets the error count.
+     *
+     * @return the error count
+     */
+    protected int getErrorCount() {
+        return errorCount;
+    }
+
+    /**
+     * Sets the error count.
+     *
+     * @param errorCount the new error count
+     */
+    protected void setErrorCount(final int errorCount) {
+        this.errorCount = errorCount;
+    }
+}
diff --git a/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/TestSTG.java b/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/TestSTG.java
new file mode 100644 (file)
index 0000000..1fbc78d
--- /dev/null
@@ -0,0 +1,138 @@
+/*-
+ * ============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.auth.clicodegen;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.junit.Test;
+import org.onap.policy.apex.auth.clicodegen.CGCliEditor;
+import org.stringtemplate.v4.STGroup;
+import org.stringtemplate.v4.STGroupFile;
+
+/**
+ * Test for the CG CLI Editor STG file.
+ *
+ * @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+ */
+public class TestSTG {
+
+    /**
+     * Get the chunks for the codegen.
+     *
+     * @return the chunks
+     */
+    private static Map<String, List<String>> getCodeGenChunks() {
+        // CHECKSTYLE:OFF: LineLength
+
+        final Map<String, List<String>> chunks = new LinkedHashMap<>();
+
+        chunks.put("/policyModel",
+                Arrays.asList("name", "version", "uuid", "description", "declarations", "definitions"));
+        chunks.put("/schemaDecl", Arrays.asList("name", "version", "uuid", "description", "flavour", "schema"));
+        chunks.put("/ctxAlbumDecl", Arrays.asList("name", "version", "uuid", "description", "scope", "writable",
+                "schemaName", "schemaVersion"));
+        chunks.put("/eventDecl",
+                Arrays.asList("name", "version", "uuid", "description", "nameSpace", "source", "target", "fields"));
+        chunks.put("/eventDefField",
+                Arrays.asList("eventName", "version", "fieldName", "fieldSchema", "fieldSchemaVersion", "optional"));
+        chunks.put("/taskDecl",
+                Arrays.asList("name", "version", "uuid", "description", "infields", "outfields", "logic"));
+        chunks.put("/taskDefInputFields",
+                Arrays.asList("taskName", "version", "fieldName", "fieldSchema", "fieldSchemaVersion"));
+        chunks.put("/taskDefOutputFields",
+                Arrays.asList("taskName", "version", "fieldName", "fieldSchema", "fieldSchemaVersion"));
+        chunks.put("/taskDefLogic", Arrays.asList("taskName", "version", "flavour", "logic"));
+        chunks.put("/taskDefParameter", Arrays.asList("name", "version", "parName", "defaultValue"));
+        chunks.put("/taskDefCtxRef", Arrays.asList("name", "version", "albumName", "albumVersion"));
+        chunks.put("/policyDef", Arrays.asList("name", "version", "uuid", "description", "template", "firstState"));
+        chunks.put("/policyStateDef", Arrays.asList("policyName", "version", "stateName", "triggerName",
+                "triggerVersion", "defaultTask", "defaultTaskVersion", "outputs", "tasks"));
+        chunks.put("/policyStateOutput", Arrays.asList("policyName", "version", "stateName", "outputName", "eventName",
+                "eventVersion", "nextState"));
+        chunks.put("/policyStateTaskSelectionLogic",
+                Arrays.asList("name", "version", "stateName", "logicFlavour", "logic"));
+        chunks.put("/policyStateTask", Arrays.asList("policyName", "version", "stateName", "taskLocalName", "taskName",
+                "taskVersion", "outputType", "outputName"));
+        chunks.put("/policyStateFinalizerLogic",
+                Arrays.asList("name", "version", "stateName", "finalizerLogicName", "logicFlavour", "logic"));
+        chunks.put("/policyStateContextRef",
+                Arrays.asList("name", "version", "stateName", "albumName", "albumVersion"));
+
+        return chunks;
+        // CHECKSTYLE:ON: LineLength
+    }
+
+    /** Test STG load. */
+    @Test
+    public void testSTGLoad() {
+        final StErrorListener errListener = new StErrorListener();
+        final STGroupFile stg = new STGroupFile(CGCliEditor.STG_FILE);
+        stg.setListener(errListener);
+
+        stg.getTemplateNames(); // dummy to compile group and get errors
+        assertEquals(0, errListener.getErrorCount());
+    }
+
+    /** Test STG chunks. */
+    @Test
+    public void testSTGChunks() {
+        final StErrorListener errListener = new StErrorListener();
+        final STGroupFile stg = new STGroupFile(CGCliEditor.STG_FILE);
+        stg.setListener(errListener);
+
+        stg.getTemplateNames(); // dummy to compile group and get errors
+        final Map<String, List<String>> chunks = getCodeGenChunks();
+        String error = "";
+        final Set<String> definedNames = stg.getTemplateNames();
+        for (final STGroup group : stg.getImportedGroups()) {
+            definedNames.addAll(group.getTemplateNames());
+        }
+        final Set<String> requiredNames = chunks.keySet();
+
+        for (final String required : requiredNames) {
+            if (!definedNames.contains(required)) {
+                error += " - target STG does not define template for <" + required + ">\n";
+            } else {
+                final Set<String> definedParams = ((stg.getInstanceOf(required).getAttributes() == null)
+                        ? new TreeSet<String>() : stg.getInstanceOf(required).getAttributes().keySet());
+                final List<String> requiredParams = chunks.get(required);
+                for (final String reqArg : requiredParams) {
+                    if (!definedParams.contains(reqArg)) {
+                        error += " - target STG with template <" + required + "> does not define argument <" + reqArg
+                                + ">\n";
+                    }
+                }
+            }
+        }
+
+        if (!("".equals(error))) {
+            System.err.println(error);
+        }
+        assertEquals(0, error.length());
+    }
+}
diff --git a/auth/cli-editor/pom.xml b/auth/cli-editor/pom.xml
new file mode 100644 (file)
index 0000000..1f1863d
--- /dev/null
@@ -0,0 +1,47 @@
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 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=========================================================
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.policy.apex-pdp.auth</groupId>
+        <artifactId>auth</artifactId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>cli-editor</artifactId>
+    <name>${project.artifactId}</name>
+    <description>Command line editor for Apex models</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.policy.apex-pdp.model</groupId>
+            <artifactId>model-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-cli</groupId>
+            <artifactId>commons-cli</artifactId>
+            <version>1.4</version>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexCLIEditorMain.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexCLIEditorMain.java
new file mode 100644 (file)
index 0000000..4a2635e
--- /dev/null
@@ -0,0 +1,195 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.onap.policy.apex.model.utilities.json.JSONHandler;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * This class initiates an Apex CLI editor from a java main method.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ApexCLIEditorMain {
+    // Get a reference to the logger
+    private static final XLogger LOGGER = XLoggerFactory.getXLogger(ApexCLIEditorMain.class);
+
+    // The editor parameters
+    private CLIParameters parameters;
+
+    // The CLI commands read in from JSON
+    private CLICommands commands;
+
+    // The Apex model properties read in from JSON
+    private ApexModelProperties apexModelProperties;
+
+    // The number of errors encountered in command processing
+    private int errorCount = 0;
+
+    /**
+     * Instantiates the Apex CLI editor.
+     *
+     * @param args the command line arguments
+     */
+    public ApexCLIEditorMain(final String[] args) {
+        LOGGER.info("Starting Apex CLI editor " + Arrays.toString(args) + " . . .");
+
+        try {
+            final CLIParameterParser parser = new CLIParameterParser();
+            parameters = parser.parse(args);
+
+            if (parameters.isHelpSet()) {
+                parser.help(ApexCLIEditorMain.class.getCanonicalName());
+                return;
+            }
+            parameters.validate();
+        } catch (final Exception e) {
+            LOGGER.error("start of Apex command line editor failed, " + e.getMessage());
+            errorCount++;
+            return;
+        }
+
+        LOGGER.debug("parameters are: " + parameters.toString());
+
+        // Read the command definitions
+        try {
+            commands = new JSONHandler<CLICommands>().read(CLICommands.class, parameters.getMetadataStream());
+            LOGGER.debug("found " + commands.getCommandSet().size() + " commands");
+        } catch (final Exception e) {
+            LOGGER.error("start of Apex command line editor failed, error reading command metadata from "
+                    + parameters.getMetadataLocation());
+            LOGGER.error(e.getMessage());
+            errorCount++;
+            return;
+        }
+
+        // The JSON processing returns null if there is an empty file
+        if (null == commands) {
+            LOGGER.error("start of Apex command line editor failed, no commands found in "
+                    + parameters.getApexPropertiesLocation());
+            errorCount++;
+            return;
+        }
+
+        // Read the Apex properties
+        try {
+            apexModelProperties = new JSONHandler<ApexModelProperties>().read(ApexModelProperties.class,
+                    parameters.getApexPropertiesStream());
+            LOGGER.debug("model properties are: " + apexModelProperties.toString());
+        } catch (final Exception e) {
+            LOGGER.error("start of Apex command line editor failed, error reading Apex model properties from "
+                    + parameters.getApexPropertiesLocation());
+            LOGGER.error(e.getMessage());
+            errorCount++;
+            return;
+        }
+
+        // The JSON processing returns null if there is an empty file
+        if (apexModelProperties == null) {
+            LOGGER.error("start of Apex command line editor failed, no Apex model properties found in "
+                    + parameters.getApexPropertiesLocation());
+            errorCount++;
+            return;
+        }
+
+        // Find the system commands
+        final Set<KeywordNode> systemCommandNodes = new TreeSet<>();
+        for (final CLICommand command : commands.getCommandSet()) {
+            if (command.isSystemCommand()) {
+                systemCommandNodes.add(new KeywordNode(command.getName(), command));
+            }
+        }
+
+        // Read in the command hierarchy, this builds a tree of commands
+        final KeywordNode rootKeywordNode = new KeywordNode("root");
+        for (final CLICommand command : commands.getCommandSet()) {
+            rootKeywordNode.processKeywords(command.getKeywordlist(), command);
+        }
+        rootKeywordNode.addSystemCommandNodes(systemCommandNodes);
+
+        // Create the model we will work towards
+        ApexModelHandler modelHandler = null;
+        try {
+            modelHandler =
+                    new ApexModelHandler(apexModelProperties.getProperties(), parameters.getInputModelFileName());
+        } catch (final Exception e) {
+            LOGGER.error("execution of Apex command line editor failed: " + e.getMessage());
+            errorCount++;
+            return;
+        }
+
+        final CLIEditorLoop cliEditorLoop =
+                new CLIEditorLoop(apexModelProperties.getProperties(), modelHandler, rootKeywordNode);
+        try {
+            errorCount =
+                    cliEditorLoop.runLoop(parameters.getCommandInputStream(), parameters.getOutputStream(), parameters);
+
+            if (errorCount == 0) {
+                LOGGER.info("Apex CLI editor completed execution");
+            } else {
+                LOGGER.error("execution of Apex command line editor failed: " + errorCount
+                        + " command execution failure(s) occurred");
+            }
+        } catch (final IOException e) {
+            LOGGER.error("execution of Apex command line editor failed: " + e.getMessage());
+            return;
+        }
+    }
+
+    /**
+     * Get the number of errors encountered in command processing
+     * 
+     * @return the number of errors
+     */
+    public int getErrorCount() {
+        return errorCount;
+    }
+
+    /**
+     * Sets the number of errors encountered in command processing.
+     * 
+     * @param errorCount the number of errors
+     */
+    public void setErrorCount(final int errorCount) {
+        this.errorCount = errorCount;
+    }
+
+
+    /**
+     * The main method, kicks off the editor.
+     *
+     * @param args the arguments
+     */
+    public static void main(final String[] args) {
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(args);
+
+        // Only call system.exit on errors as it brings the JVM down
+        if (cliEditor.getErrorCount() > 0) {
+            System.exit(cliEditor.getErrorCount());
+        }
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelHandler.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelHandler.java
new file mode 100644 (file)
index 0000000..a5e5302
--- /dev/null
@@ -0,0 +1,185 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.io.PrintWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Properties;
+import java.util.TreeMap;
+
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexModel;
+import org.onap.policy.apex.model.modelapi.ApexModelFactory;
+
+/**
+ * This class instantiates and holds the Apex model being manipulated by the editor.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ApexModelHandler {
+    private ApexModel apexModel = null;
+
+    /**
+     * Create the Apex Model with the properties specified.
+     *
+     * @param properties The properties of the Apex model
+     */
+    public ApexModelHandler(final Properties properties) {
+        apexModel = new ApexModelFactory().createApexModel(properties, true);
+    }
+
+    /**
+     * Create the Apex Model with the properties specified and load it from a file.
+     *
+     * @param properties The properties of the Apex model
+     * @param modelFileName The name of the model file to edit
+     */
+    public ApexModelHandler(final Properties properties, final String modelFileName) {
+        this(properties);
+
+        if (modelFileName == null) {
+            return;
+        }
+
+        final ApexAPIResult result = apexModel.loadFromFile(modelFileName);
+        if (result.isNOK()) {
+            throw new CLIException(result.getMessages().get(0));
+        }
+    }
+
+    /**
+     * Execute a command on the Apex model.
+     *
+     * @param command The command to execute
+     * @param argumentValues Arguments of the command
+     * @param writer A writer to which to write output
+     * @return the result of the executed command
+     */
+    public ApexAPIResult executeCommand(final CLICommand command,
+            final TreeMap<String, CLIArgumentValue> argumentValues, final PrintWriter writer) {
+        // Get the method
+        final Method apiMethod = getCommandMethod(command);
+
+        // Get the method arguments
+        final Object[] parameterArray = getParameterArray(command, argumentValues, apiMethod);
+
+        try {
+            final Object returnObject = apiMethod.invoke(apexModel, parameterArray);
+
+            if (returnObject instanceof ApexAPIResult) {
+                final ApexAPIResult result = (ApexAPIResult) returnObject;
+                writer.println(result);
+                return result;
+            } else {
+                throw new CLIException(
+                        "invocation of specified method \"" + command.getApiMethod() + "\" failed for command \""
+                                + command.getName() + "\" the returned object is not an instance of ApexAPIResult");
+            }
+        } catch (IllegalAccessException | IllegalArgumentException e) {
+            writer.println("invocation of specified method \"" + command.getApiMethod() + "\" failed for command \""
+                    + command.getName() + "\"");
+            e.printStackTrace(writer);
+            throw new CLIException("invocation of specified method \"" + command.getApiMethod()
+                    + "\" failed for command \"" + command.getName() + "\"", e);
+        } catch (final InvocationTargetException e) {
+            writer.println("invocation of specified method \"" + command.getApiMethod() + "\" failed for command \""
+                    + command.getName() + "\"");
+            e.getCause().printStackTrace(writer);
+            throw new CLIException("invocation of specified method \"" + command.getApiMethod()
+                    + "\" failed for command \"" + command.getName() + "\"", e);
+        }
+    }
+
+    /**
+     * Find the API method for the command.
+     *
+     * @param command The command
+     * @return the API method
+     */
+    private Method getCommandMethod(final CLICommand command) {
+        final String className = command.getAPIClassName();
+        final String methodName = command.getAPIMethodName();
+
+        try {
+            final Class<? extends Object> apiClass = Class.forName(className);
+            for (final Method apiMethod : apiClass.getMethods()) {
+                if (apiMethod.getName().equals(methodName)) {
+                    return apiMethod;
+                }
+            }
+            throw new CLIException("specified method \"" + command.getApiMethod() + "\" not found for command \""
+                    + command.getName() + "\"");
+        } catch (final ClassNotFoundException e) {
+            throw new CLIException("specified class \"" + command.getApiMethod() + "\" not found for command \""
+                    + command.getName() + "\"");
+        }
+    }
+
+    /**
+     * Get the arguments of the command as an ordered array of objects ready for the method.
+     *
+     * @param command the command that invoked the method
+     * @param argumentValues the argument values for the method
+     * @param apiMethod the method itself
+     * @return the argument list
+     */
+    private Object[] getParameterArray(final CLICommand command, final TreeMap<String, CLIArgumentValue> argumentValues,
+            final Method apiMethod) {
+        final Object[] parameterArray = new Object[argumentValues.size()];
+
+        int i = 0;
+        try {
+            for (final Class<?> parametertype : apiMethod.getParameterTypes()) {
+                final String parameterValue =
+                        argumentValues.get(command.getArgumentList().get(i).getArgumentName()).getValue();
+
+                if (parametertype.equals(boolean.class)) {
+                    parameterArray[i] = (boolean) Boolean.valueOf(parameterValue);
+                } else {
+                    parameterArray[i] = parameterValue;
+                }
+                i++;
+            }
+        } catch (final Exception e) {
+            throw new CLIException("number of argument mismatch on method \"" + command.getApiMethod()
+                    + "\" for command \"" + command.getName() + "\"");
+        }
+
+        return parameterArray;
+    }
+
+    /**
+     * Save the model to a string.
+     *
+     * @param messageWriter the writer to write status messages to
+     * @return the string
+     */
+    public String writeModelToString(final PrintWriter messageWriter) {
+        final ApexAPIResult result = apexModel.listModel();
+
+        if (result.isOK()) {
+            return result.getMessage();
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelProperties.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/ApexModelProperties.java
new file mode 100644 (file)
index 0000000..6ed6828
--- /dev/null
@@ -0,0 +1,215 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.util.Properties;
+
+/**
+ * This class contains the definitions of Apex model properties.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ApexModelProperties {
+    /** The default version that will be used for concepts. */
+    public static final String DEFAULT_CONCEPT_VERSION = "0.0.1";
+
+    /** The default name space that will be used for concepts. */
+    public static final String DEFAULT_EVENT_NAMESPACE = "org.onap.policy.apex";
+
+    /** The default source that will be used for events. */
+    public static final String DEFAULT_EVENT_SOURCE = "eventSource";
+
+    /** The default target that will be used for events. */
+    public static final String DEFAULT_EVENT_TARGET = "eventTarget";
+
+    /** The default logic block start token. */
+    public static final String DEFAULT_LOGIC_BLOCK_START_TAG = "LB{";
+
+    /** The default logic block end token. */
+    public static final String DEFAULT_LOGIC_BLOCK_END_TAG = "}LB";
+
+    /** The default logic block end token. */
+    public static final String DEFAULT_POLICY_TEMPLATE = "FREEFORM";
+
+    /** The default macro file token. */
+    public static final String DEFAULT_MACRO_FILE_TAG = "#MACROFILE:";
+
+    // @formatter:off
+    private String defaultConceptVersion     = DEFAULT_CONCEPT_VERSION;
+    private String defaultEventNamespace     = DEFAULT_EVENT_NAMESPACE;
+    private String defaultEventSource        = DEFAULT_EVENT_SOURCE;
+    private String defaultEventTarget        = DEFAULT_EVENT_TARGET;
+    private String defaultLogicBlockStartTag = DEFAULT_LOGIC_BLOCK_START_TAG;
+    private String defaultLogicBlockEndTag   = DEFAULT_LOGIC_BLOCK_END_TAG;
+    private String defaultPolicyTemplate     = DEFAULT_POLICY_TEMPLATE;
+    private String defaultMacroFileTag       = DEFAULT_MACRO_FILE_TAG;
+    // @formatter:on
+
+    /**
+     * Gets the default property values for the Apex CLI editor.
+     *
+     * @return the default properties
+     */
+    public Properties getProperties() {
+        final Properties properties = new Properties();
+        // @formatter:off
+        properties.setProperty("DEFAULT_CONCEPT_VERSION", defaultConceptVersion);
+        properties.setProperty("DEFAULT_EVENT_NAMESPACE", defaultEventNamespace);
+        properties.setProperty("DEFAULT_EVENT_SOURCE", defaultEventSource);
+        properties.setProperty("DEFAULT_EVENT_TARGET", defaultEventTarget);
+        properties.setProperty("DEFAULT_LOGIC_BLOCK_START_TAG", defaultLogicBlockStartTag);
+        properties.setProperty("DEFAULT_LOGIC_BLOCK_END_TAG", defaultLogicBlockEndTag);
+        properties.setProperty("DEFAULT_MACRO_FILE_TAG", defaultMacroFileTag);
+        // @formatter:on
+        return properties;
+    }
+
+    /**
+     * Gets the default concept version.
+     *
+     * @return the default concept version
+     */
+    public String getDefaultConceptVersion() {
+        return defaultConceptVersion;
+    }
+
+    /**
+     * Sets the default concept version.
+     *
+     * @param defaultConceptVersion the default concept version
+     */
+    public void setDefaultConceptVersion(final String defaultConceptVersion) {
+        this.defaultConceptVersion = defaultConceptVersion;
+    }
+
+    /**
+     * Gets the default event namespace.
+     *
+     * @return the default event namespace
+     */
+    public String getDefaultEventNamespace() {
+        return defaultEventNamespace;
+    }
+
+    /**
+     * Sets the default event namespace.
+     *
+     * @param defaultEventNamespace the default event namespace
+     */
+    public void setDefaultEventNamespace(final String defaultEventNamespace) {
+        this.defaultEventNamespace = defaultEventNamespace;
+    }
+
+    /**
+     * Gets the default event source.
+     *
+     * @return the default event source
+     */
+    public String getDefaultEventSource() {
+        return defaultEventSource;
+    }
+
+    /**
+     * Sets the default event source.
+     *
+     * @param defaultEventSource the default event source
+     */
+    public void setDefaultEventSource(final String defaultEventSource) {
+        this.defaultEventSource = defaultEventSource;
+    }
+
+    /**
+     * Gets the default event target.
+     *
+     * @return the default event target
+     */
+    public String getDefaultEventTarget() {
+        return defaultEventTarget;
+    }
+
+    /**
+     * Sets the default event target.
+     *
+     * @param defaultEventTarget the default event target
+     */
+    public void setDefaultEventTarget(final String defaultEventTarget) {
+        this.defaultEventTarget = defaultEventTarget;
+    }
+
+    /**
+     * Gets the default logic block start tag.
+     *
+     * @return the default logic block start tag
+     */
+    public String getDefaultLogicBlockStartTag() {
+        return defaultLogicBlockStartTag;
+    }
+
+    /**
+     * Gets the default logic block end tag.
+     *
+     * @return the default logic block end tag
+     */
+    public String getDefaultLogicBlockEndTag() {
+        return defaultLogicBlockEndTag;
+    }
+
+    /**
+     * Gets the default policy template type.
+     *
+     * @return the default policy template
+     */
+    public String getDefaultPolicyTemplate() {
+        return defaultPolicyTemplate;
+    }
+
+    /**
+     * Sets the default policy template type.
+     *
+     * @param defaultPolicyTemplate the new default policy template
+     */
+    public void setDefaultPolicyTemplate(final String defaultPolicyTemplate) {
+        this.defaultPolicyTemplate = defaultPolicyTemplate;
+    }
+
+    /**
+     * Gets the default macro file tag.
+     *
+     * @return the default macro file end tag
+     */
+    public String getDefaultMacroFileTag() {
+        return defaultMacroFileTag;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "ApexModelProperties [defaultConceptVersion=" + defaultConceptVersion + ", defaultEventNamespace="
+                + defaultEventNamespace + ", defaultEventSource=" + defaultEventSource + ", defaultEventTarget="
+                + defaultEventTarget + ", defaultLogicBlockStartTag=" + defaultLogicBlockStartTag
+                + ", defaultLogicBlockEndTag=" + defaultLogicBlockEndTag + ", defaultPolicyTemplate="
+                + defaultPolicyTemplate + ", defaultMacroFileTag=" + defaultMacroFileTag + "]";
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIArgument.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIArgument.java
new file mode 100644 (file)
index 0000000..b215f69
--- /dev/null
@@ -0,0 +1,144 @@
+/*-
+ * ============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.auth.clieditor;
+
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class holds the definition of an argument of a CLI command.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLIArgument implements Comparable<CLIArgument> {
+    private final String argumentName;
+    private final boolean nullable;
+    private final String description;
+
+    /**
+     * This Constructor constructs a non nullable command line argument with a blank name and
+     * description.
+     */
+    public CLIArgument() {
+        this("", false, "");
+    }
+
+    /**
+     * This Constructor constructs a non nullable command line argument with the given name and
+     * description.
+     *
+     * @param incomingArgumentName the argument name
+     */
+    public CLIArgument(final String incomingArgumentName) {
+        this(incomingArgumentName, false, "");
+    }
+
+    /**
+     * This Constructor constructs a command line argument with the given name, nullability, and
+     * description.
+     *
+     * @param argumentName the argument name
+     * @param nullable the nullable
+     * @param description the description
+     */
+    public CLIArgument(final String argumentName, final boolean nullable, final String description) {
+        this.argumentName = argumentName;
+        this.nullable = nullable;
+        this.description = description;
+    }
+
+    /**
+     * Gets the argument name.
+     *
+     * @return the argument name
+     */
+    public String getArgumentName() {
+        return argumentName;
+    }
+
+    /**
+     * Checks if the argument is nullable.
+     *
+     * @return true, if checks if the argument is nullable
+     */
+    public boolean isNullable() {
+        return nullable;
+    }
+
+    /**
+     * Gets the argument description.
+     *
+     * @return the argument description
+     */
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * Gets the argument help.
+     *
+     * @return the argument help
+     */
+    public String getHelp() {
+        final StringBuilder builder = new StringBuilder();
+        builder.append(argumentName);
+        builder.append(nullable ? ": (O) " : ": (M) ");
+        builder.append(description);
+        return builder.toString();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "CLIArgument [argumentName=" + argumentName + ", nullable=" + nullable + ", description=" + description
+                + "]";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(final CLIArgument otherArgument) {
+        Assertions.argumentNotNull(otherArgument, "comparison object may not be null");
+
+        if (this == otherArgument) {
+            return 0;
+        }
+        if (getClass() != otherArgument.getClass()) {
+            return this.hashCode() - otherArgument.hashCode();
+        }
+
+        final CLIArgument other = otherArgument;
+
+        if (!argumentName.equals(other.argumentName)) {
+            return argumentName.compareTo(other.argumentName);
+        }
+        if (nullable != other.nullable) {
+            return (this.hashCode() - other.hashCode());
+        }
+        return description.compareTo(otherArgument.description);
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIArgumentValue.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIArgumentValue.java
new file mode 100644 (file)
index 0000000..d87a8dc
--- /dev/null
@@ -0,0 +1,91 @@
+/*-
+ * ============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.auth.clieditor;
+
+/**
+ * This class represents an argument used on a command and its value.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLIArgumentValue {
+    private final CLIArgument cliArgument;
+    private boolean specified;
+    private String value;
+
+    /**
+     * The Constructor creates an argument value for the given argument, has not been set, and has
+     * no value.
+     *
+     * @param cliArgument the argument for which this object is a value
+     */
+    public CLIArgumentValue(final CLIArgument cliArgument) {
+        this.cliArgument = cliArgument;
+        specified = false;
+        value = null;
+    }
+
+    /**
+     * Gets the argument for which this object is a value.
+     *
+     * @return the argument for which this object is a value
+     */
+    public CLIArgument getCliArgument() {
+        return cliArgument;
+    }
+
+    /**
+     * Checks if the argument value is specified.
+     *
+     * @return true, if the argument value is specified
+     */
+    public boolean isSpecified() {
+        return specified;
+    }
+
+    /**
+     * Gets the argument value.
+     *
+     * @return the argument value
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Sets the argument value.
+     *
+     * @param value the argument value
+     */
+    public void setValue(final String value) {
+        this.value = value;
+        specified = true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "CLIArgumentValue [cliArgument=" + cliArgument + ", specified=" + specified + ", value=" + value + "]";
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLICommand.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLICommand.java
new file mode 100644 (file)
index 0000000..74f4a6f
--- /dev/null
@@ -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.auth.clieditor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class represents a single Apex CLI command that is issued to the Apex Editor Java API
+ * {@link com.ericsson.apex.model.modelapi.ApexEditorAPI}.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLICommand implements Comparable<CLICommand> {
+    private String name = "";
+    private final List<String> keywordlist = new ArrayList<>();
+    private final List<CLIArgument> argumentList = new ArrayList<>();
+    private String apiMethod = "";
+    private boolean systemCommand = false;
+    private String description = "";
+
+    /**
+     * Gets the class name of the class that executes this command in the Java API.
+     *
+     * @return the class name of the class that executes this command in the Java API
+     */
+    public String getAPIClassName() {
+        final int lastDotPos = apiMethod.lastIndexOf('.');
+        if (lastDotPos == -1) {
+            throw new CLIException("invalid API method name specified on command \"" + name
+                    + "\", class name not found: " + apiMethod);
+        }
+        return apiMethod.substring(0, lastDotPos);
+    }
+
+    /**
+     * Gets the method name of the method that executes this command in the Java API.
+     *
+     * @return the the method name of the method that executes this command in the Java API
+     */
+    public String getAPIMethodName() {
+        final int lastDotPos = apiMethod.lastIndexOf('.');
+        if (lastDotPos == -1) {
+            throw new CLIException("invalid API method name specified on command \"" + name
+                    + "\", class name not found: " + apiMethod);
+        }
+        if (lastDotPos == apiMethod.length() - 1) {
+            throw new CLIException("no API method name specified on command \"" + name + "\": " + apiMethod);
+        }
+        return apiMethod.substring(lastDotPos + 1);
+    }
+
+    /**
+     * Gets the name of the editor command.
+     *
+     * @return the name of the editor command
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Sets the name of the editor command.
+     *
+     * @param name the name of the editor command
+     */
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    /**
+     * Gets the list of keywords for this command.
+     *
+     * @return the list of keywords for this command
+     */
+    public List<String> getKeywordlist() {
+        return keywordlist;
+    }
+
+    /**
+     * Gets the list of arguments for this command.
+     *
+     * @return the list of arguments for this command
+     */
+    public List<CLIArgument> getArgumentList() {
+        return argumentList;
+    }
+
+    /**
+     * Gets the method of the method that executes this command in the Java API.
+     *
+     * @return the method of the method that executes this command in the Java API
+     */
+    public String getApiMethod() {
+        return apiMethod;
+    }
+
+    /**
+     * Sets the method of the method that executes this command in the Java API.
+     *
+     * @param apiMethod the method of the method that executes this command in the Java API
+     */
+    public void setApiMethod(final String apiMethod) {
+        this.apiMethod = apiMethod;
+    }
+
+    /**
+     * Gets the description of the command.
+     *
+     * @return the description of the command
+     */
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * Sets the description of the command.
+     *
+     * @param description the description of the command
+     */
+    public void setDescription(final String description) {
+        this.description = description;
+    }
+
+    /**
+     * Checks if this command is a system command.
+     *
+     * @return true, if this command is a system command
+     */
+    public boolean isSystemCommand() {
+        return systemCommand;
+    }
+
+    /**
+     * Sets whether this command is a system command.
+     *
+     * @param systemCommand whether this command is a system command
+     */
+    public void setSystemCommand(final boolean systemCommand) {
+        this.systemCommand = systemCommand;
+    }
+
+    /**
+     * Gets help for this command.
+     *
+     * @return the help for this command
+     */
+    public String getHelp() {
+        final StringBuilder builder = new StringBuilder();
+        for (final String keyword : keywordlist) {
+            builder.append(keyword);
+            builder.append(' ');
+        }
+        builder.append('{');
+        builder.append(name);
+        builder.append("}: ");
+        builder.append(description);
+
+        for (final CLIArgument argument : argumentList) {
+            if (argument == null) {
+                continue;
+            }
+            builder.append("\n\t");
+            builder.append(argument.getHelp());
+        }
+        return builder.toString();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "CLICommand [name=" + name + ",keywordlist=" + keywordlist + ", argumentList=" + argumentList
+                + ", apiMethod=" + apiMethod + ", systemCommand=" + systemCommand + ", description=" + description
+                + "]";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(final CLICommand otherCommand) {
+        Assertions.argumentNotNull(otherCommand, "comparison object may not be null");
+
+        if (this == otherCommand) {
+            return 0;
+        }
+        if (getClass() != otherCommand.getClass()) {
+            return this.hashCode() - otherCommand.hashCode();
+        }
+
+        final CLICommand other = otherCommand;
+
+        for (int i = 0, j = 0;; i++, j++) {
+            if (i < keywordlist.size() && j < otherCommand.keywordlist.size()) {
+                if (!keywordlist.get(i).equals(other.keywordlist.get(j))) {
+                    return keywordlist.get(i).compareTo(other.keywordlist.get(j));
+                }
+            } else if (i == keywordlist.size() && j == otherCommand.keywordlist.size()) {
+                break;
+            } else if (i == keywordlist.size()) {
+                return -1;
+            } else {
+                return 1;
+            }
+        }
+        if (!argumentList.equals(other.argumentList)) {
+            return (argumentList.hashCode() - other.argumentList.hashCode());
+        }
+        if (systemCommand != other.systemCommand) {
+            return (this.hashCode() - other.hashCode());
+        }
+        return apiMethod.compareTo(other.apiMethod);
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLICommands.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLICommands.java
new file mode 100644 (file)
index 0000000..4c9bab0
--- /dev/null
@@ -0,0 +1,42 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * This class contains the CLI commands read in from a JSON file.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLICommands {
+    private final Set<CLICommand> commandList = new TreeSet<>();
+
+    /**
+     * Gets the command set.
+     *
+     * @return the command set
+     */
+    public Set<CLICommand> getCommandSet() {
+        return commandList;
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIEditorLoop.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIEditorLoop.java
new file mode 100644 (file)
index 0000000..5606489
--- /dev/null
@@ -0,0 +1,543 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.AbstractMap.SimpleEntry;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.TreeMap;
+
+import org.onap.policy.apex.model.modelapi.ApexAPIResult;
+import org.onap.policy.apex.model.modelapi.ApexAPIResult.RESULT;
+import org.onap.policy.apex.model.utilities.TextFileUtils;
+import org.onap.policy.apex.model.utilities.TreeMapUtils;
+
+/**
+ * This class implements the editor loop, the loop of execution that continuously executes commands
+ * until the quit command is issued or EOF is detected on input.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLIEditorLoop {
+    // The model handler that is handling the API towards the Apex model being editied
+    private final ApexModelHandler modelHandler;
+
+    // Holds the current location in the keyword hierarchy
+    private final ArrayDeque<KeywordNode> keywordNodeDeque = new ArrayDeque<>();
+
+    // Logic block tags
+    private final String logicBlockStartTag;
+    private final String logicBlockEndTag;
+
+    // File Macro tag
+    private final String macroFileTag;
+
+    /**
+     * Initiate the loop with the keyword node tree.
+     *
+     * @param properties The CLI editor properties defined for execution
+     * @param modelHandler the model handler that will handle commands
+     * @param rootKeywordNode The root keyword node tree
+     */
+    public CLIEditorLoop(final Properties properties, final ApexModelHandler modelHandler,
+            final KeywordNode rootKeywordNode) {
+        this.modelHandler = modelHandler;
+        keywordNodeDeque.push(rootKeywordNode);
+
+        logicBlockStartTag = properties.getProperty("DEFAULT_LOGIC_BLOCK_START_TAG");
+        logicBlockEndTag = properties.getProperty("DEFAULT_LOGIC_BLOCK_END_TAG");
+        macroFileTag = properties.getProperty("DEFAULT_MACRO_FILE_TAG");
+    }
+
+    /**
+     * Run a command loop.
+     *
+     * @param inputStream The stream to read commands from
+     * @param outputStream The stream to write command output and messages to
+     * @param parameters The parameters for the CLI editor
+     * @return the exit code from command processing
+     * @throws IOException Thrown on exceptions on IO
+     */
+    public int runLoop(final InputStream inputStream, final OutputStream outputStream, final CLIParameters parameters)
+            throws IOException {
+        // Readers and writers for input and output
+        final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
+        final PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream));
+
+        // The parser parses the input lines into commands and arguments
+        final CLILineParser parser = new CLILineParser();
+
+        // The main loop for command handing, it continues until EOF on the input stream or until a
+        // quit command
+        int errorCount = 0;
+        ApexAPIResult result = new ApexAPIResult();
+        while (result.getResult() != RESULT.FINISHED) {
+            if (!parameters.isIgnoreCommandFailures() && errorCount > 0) {
+                break;
+            }
+
+            // Output prompt and get a line of input
+            writer.print(getPrompt());
+            writer.flush();
+            String line = reader.readLine();
+            if (line == null) {
+                break;
+            }
+
+            // Expand any macros in the script
+            try {
+                while (line.contains(macroFileTag)) {
+                    line = expandMacroFile(parameters, line);
+                }
+            }
+            // Print any error messages from command parsing and finding
+            catch (final CLIException e) {
+                writer.println(e.getMessage());
+                errorCount++;
+                continue;
+            }
+
+            if (parameters.isEchoSet()) {
+                writer.println(line);
+            }
+
+            String logicBlock = null;
+            if (line.trim().endsWith(logicBlockStartTag)) {
+                line = line.replace(logicBlockStartTag, "").trim();
+
+                logicBlock = "";
+                while (true) {
+                    String logicLine = reader.readLine();
+                    if (logicLine == null) {
+                        logicBlock = null;
+                        break;
+                    }
+
+                    try {
+                        while (logicLine.contains(macroFileTag)) {
+                            logicLine = expandMacroFile(parameters, logicLine);
+                        }
+                    }
+                    // Print any error messages from command parsing and finding
+                    catch (final CLIException e) {
+                        writer.println(e.getMessage());
+                        errorCount++;
+                        continue;
+                    }
+
+                    if (parameters.isEchoSet()) {
+                        writer.println(logicLine);
+                    }
+
+                    if (logicLine.trim().endsWith(logicBlockEndTag)) {
+                        logicBlock += logicLine.replace(logicBlockEndTag, "").trim() + "\n";
+                        break;
+                    } else {
+                        logicBlock += logicLine + "\n";
+                    }
+                }
+            }
+
+            try {
+                // Parse the line into a list of commands and arguments
+                final ArrayList<String> commandWords = parser.parse(line, logicBlock);
+
+                // Find the command, if the command is null, then we are simply changing position in
+                // the hierarchy
+                final CLICommand command = findCommand(commandWords);
+                if (command != null) {
+                    // Check the arguments of the command
+                    final TreeMap<String, CLIArgumentValue> argumentValues = getArgumentValues(command, commandWords);
+
+                    // Execute the command, a FINISHED result means a command causes the loop to
+                    // leave execution
+                    result = executeCommand(command, argumentValues, writer);
+                    if (result.isNOK()) {
+                        errorCount++;
+                    }
+                }
+            }
+            // Print any error messages from command parsing and finding
+            catch (final CLIException e) {
+                writer.println(e.getMessage());
+                errorCount++;
+            } catch (final Exception e) {
+                e.printStackTrace(writer);
+            }
+        }
+
+        // Get the output model
+        if (!parameters.isSuppressModelOutputSet()) {
+            final String modelString = modelHandler.writeModelToString(writer);
+
+            if (parameters.checkSetOutputModelFileName()) {
+                TextFileUtils.putStringAsTextFile(modelString, parameters.getOutputModelFileName());
+            } else {
+                System.out.println(modelString);
+            }
+        }
+
+        reader.close();
+        writer.close();
+
+        return errorCount;
+    }
+
+    /**
+     * Output a prompt that indicates where in the keyword hierarchy we are.
+     *
+     * @return A string with the prompt
+     */
+    private String getPrompt() {
+        final StringBuilder builder = new StringBuilder();
+        final Iterator<KeywordNode> keynodeDequeIter = keywordNodeDeque.descendingIterator();
+
+        while (keynodeDequeIter.hasNext()) {
+            builder.append('/');
+            builder.append(keynodeDequeIter.next().getKeyword());
+        }
+        builder.append("> ");
+
+        return builder.toString();
+    }
+
+    /**
+     * Finds a command for the given input command words. Command words need only ne specified
+     * enough to uniquely identify them. Therefore, "p s o c" will find the command "policy state
+     * output create"
+     *
+     * @param commandWords The commands and arguments parsed from the command line by the parser
+     * @return The found command
+     */
+
+    private CLICommand findCommand(final ArrayList<String> commandWords) {
+        CLICommand command = null;
+
+        final KeywordNode startKeywordNode = keywordNodeDeque.peek();
+
+        // Go down through the keywords searching for the command
+        for (int i = 0; i < commandWords.size(); i++) {
+            final KeywordNode searchKeywordNode = keywordNodeDeque.peek();
+
+            // We have got to the arguments, time to stop looking
+            if (commandWords.get(i).indexOf('=') > 0) {
+                unwindStack(startKeywordNode);
+                throw new CLIException("command not found: " + stringAL2String(commandWords));
+            }
+
+            // If the node entries found is not equal to one, then we have either no command or more
+            // than one command matching
+            final List<Entry<String, KeywordNode>> foundNodeEntries =
+                    TreeMapUtils.findMatchingEntries(searchKeywordNode.getChildren(), commandWords.get(i));
+            if (foundNodeEntries.size() == 0) {
+                unwindStack(startKeywordNode);
+                throw new CLIException("command not found: " + stringAL2String(commandWords));
+            } else if (foundNodeEntries.size() > 1) {
+                unwindStack(startKeywordNode);
+                throw new CLIException("multiple commands matched: " + stringAL2String(commandWords) + " ["
+                        + nodeAL2String(foundNodeEntries) + ']');
+            }
+
+            // Record the fully expanded command word
+            commandWords.set(i, foundNodeEntries.get(0).getKey());
+
+            // Check if there is a command
+            final KeywordNode childKeywordNode = foundNodeEntries.get(0).getValue();
+            command = childKeywordNode.getCommand();
+
+            // If the command is null, we go into a sub mode, otherwise we unwind the stack of
+            // commands and return the found command
+            if (command == null) {
+                keywordNodeDeque.push(childKeywordNode);
+            } else {
+                unwindStack(startKeywordNode);
+                return command;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Unwind the stack of keyword node entries we have placed on the queue in a command search.
+     *
+     * @param startKeywordNode The point on the queue we want to unwind to
+     */
+    private void unwindStack(final KeywordNode startKeywordNode) {
+        // Unwind the stack
+        while (true) {
+            if (keywordNodeDeque.peek().equals(startKeywordNode)) {
+                return;
+            }
+            keywordNodeDeque.pop();
+        }
+    }
+
+    /**
+     * Check the arguments of the command.
+     *
+     * @param command The command to check
+     * @param commandWords The command words entered
+     * @return the argument values
+     */
+    private TreeMap<String, CLIArgumentValue> getArgumentValues(final CLICommand command,
+            final ArrayList<String> commandWords) {
+        final TreeMap<String, CLIArgumentValue> argumentValues = new TreeMap<>();
+        for (final CLIArgument argument : command.getArgumentList()) {
+            if (argument != null) {
+                argumentValues.put(argument.getArgumentName(), new CLIArgumentValue(argument));
+            }
+        }
+
+        // Set the value of the arguments
+        for (final Entry<String, String> argument : getCommandArguments(commandWords)) {
+            final List<Entry<String, CLIArgumentValue>> foundArguments =
+                    TreeMapUtils.findMatchingEntries(argumentValues, argument.getKey());
+            if (foundArguments.size() == 0) {
+                throw new CLIException("command " + stringAL2String(commandWords) + ": " + " argument \""
+                        + argument.getKey() + "\" not allowed on command");
+            } else if (foundArguments.size() > 1) {
+                throw new CLIException("command " + stringAL2String(commandWords) + ": " + " argument " + argument
+                        + " matches multiple arguments [" + argumentAL2String(foundArguments) + ']');
+            }
+
+            // Set the value of the argument, stripping off any quotes
+            final String argumentValue = argument.getValue().replaceAll("^\"", "").replaceAll("\"$", "");
+            foundArguments.get(0).getValue().setValue(argumentValue);
+        }
+
+        // Now check all mandatory arguments are set
+        for (final CLIArgumentValue argumentValue : argumentValues.values()) {
+            if (!argumentValue.isSpecified()) {
+                // Argument values are null by default so if this argument is not nullable it is
+                // mandatory
+                if (!argumentValue.getCliArgument().isNullable()) {
+                    throw new CLIException("command " + stringAL2String(commandWords) + ": " + " mandatory argument \""
+                            + argumentValue.getCliArgument().getArgumentName() + "\" not specified");
+                }
+            }
+        }
+
+        return argumentValues;
+    }
+
+    /**
+     * Get the arguments of the command, the command words have already been conditioned into an
+     * array starting with the command words and ending with the arguments as name=value tuples.
+     *
+     * @param commandWords The command words entered by the user
+     * @return the arguments as an entry array list
+     */
+    private ArrayList<Entry<String, String>> getCommandArguments(final ArrayList<String> commandWords) {
+        final ArrayList<Entry<String, String>> arguments = new ArrayList<>();
+
+        // Iterate over the command words, arguments are of the format name=value
+        for (final String word : commandWords) {
+            final int equalsPos = word.indexOf('=');
+            if (equalsPos > 0) {
+                arguments.add(
+                        new SimpleEntry<>(word.substring(0, equalsPos), word.substring(equalsPos + 1, word.length())));
+            }
+        }
+
+        return arguments;
+    }
+
+    /**
+     * Execute system and editor commands.
+     *
+     * @param command The command to execute
+     * @param argumentValues The arguments input on the command line to invoke the command
+     * @param writer The writer to use for any output from the command
+     * @return the result of execution of the command
+     */
+    private ApexAPIResult executeCommand(final CLICommand command,
+            final TreeMap<String, CLIArgumentValue> argumentValues, final PrintWriter writer) {
+        if (command.isSystemCommand()) {
+            return exceuteSystemCommand(command, writer);
+        } else {
+            return modelHandler.executeCommand(command, argumentValues, writer);
+        }
+    }
+
+    /**
+     * Execute system commands.
+     *
+     * @param command The command to execute
+     * @param writer The writer to use for any output from the command
+     * @return the result of execution of the command
+     */
+    private ApexAPIResult exceuteSystemCommand(final CLICommand command, final PrintWriter writer) {
+        if (command.getName().equals("back")) {
+            return executeBackCommand();
+        } else if (command.getName().equals("help")) {
+            return executeHelpCommand(writer);
+        } else if (command.getName().equals("quit")) {
+            return executeQuitCommand();
+        } else {
+            return new ApexAPIResult(RESULT.SUCCESS);
+        }
+    }
+
+    /**
+     * Execute the "back" command.
+     *
+     * @return the result of execution of the command
+     */
+    private ApexAPIResult executeBackCommand() {
+        if (keywordNodeDeque.size() > 1) {
+            keywordNodeDeque.pop();
+        }
+        return new ApexAPIResult(RESULT.SUCCESS);
+    }
+
+    /**
+     * Execute the "quit" command.
+     *
+     * @return the result of execution of the command
+     */
+    private ApexAPIResult executeQuitCommand() {
+        return new ApexAPIResult(RESULT.FINISHED);
+    }
+
+    /**
+     * Execute the "help" command.
+     *
+     * @param writer The writer to use for output from the command
+     * @return the result of execution of the command
+     */
+    private ApexAPIResult executeHelpCommand(final PrintWriter writer) {
+        for (final CLICommand command : keywordNodeDeque.peek().getCommands()) {
+            writer.println(command.getHelp());
+        }
+        return new ApexAPIResult(RESULT.SUCCESS);
+    }
+
+    /**
+     * Helper method to output an array list of keyword node entries to a string.
+     *
+     * @param nodeEntryArrayList the array list of keyword node entries
+     * @return the string
+     */
+    private String nodeAL2String(final List<Entry<String, KeywordNode>> nodeEntryArrayList) {
+        final ArrayList<String> stringArrayList = new ArrayList<>();
+        for (final Entry<String, KeywordNode> node : nodeEntryArrayList) {
+            stringArrayList.add(node.getValue().getKeyword());
+        }
+
+        return stringAL2String(stringArrayList);
+    }
+
+    /**
+     * Helper method to output an array list of argument entries to a string.
+     *
+     * @param argumentArrayList the argument array list
+     * @return the string
+     */
+    private String argumentAL2String(final List<Entry<String, CLIArgumentValue>> argumentArrayList) {
+        final ArrayList<String> stringArrayList = new ArrayList<>();
+        for (final Entry<String, CLIArgumentValue> argument : argumentArrayList) {
+            stringArrayList.add(argument.getValue().getCliArgument().getArgumentName());
+        }
+
+        return stringAL2String(stringArrayList);
+    }
+
+    /**
+     * Helper method to output an array list of strings to a string.
+     *
+     * @param stringArrayList the array list of strings
+     * @return the string
+     */
+    private String stringAL2String(final List<String> stringArrayList) {
+        final StringBuilder builder = new StringBuilder();
+        boolean first = true;
+        for (final String word : stringArrayList) {
+            if (first) {
+                first = false;
+            } else {
+                builder.append(',');
+            }
+            builder.append(word);
+        }
+
+        return builder.toString();
+    }
+
+    /**
+     * This method reads in the file from a file macro statement, expands the macro, and replaces
+     * the Macro tag in the line with the file contents.
+     * 
+     * @param parameters The parameters for the CLI editor
+     * @param line The line with the macro keyword in it
+     * @return the expanded line
+     */
+    private String expandMacroFile(final CLIParameters parameters, final String line) {
+        final int macroTagPos = line.indexOf(macroFileTag);
+
+        // Get the line before and after the macro tag
+        final String lineBeforeMacroTag = line.substring(0, macroTagPos);
+        final String lineAfterMacroTag = line.substring(macroTagPos + macroFileTag.length()).replaceAll("^\\s*", "");
+
+        // Get the file name that is the argument of the Macro tag
+        final String[] lineWords = lineAfterMacroTag.split("\\s+");
+
+        if (lineWords.length == 0) {
+            throw new CLIException("no file name specified for Macro File Tag");
+        }
+
+        // Get the macro file name and the remainder of the line after the file name
+        String macroFileName = lineWords[0];
+        final String lineAfterMacroFileName = lineAfterMacroTag.replaceFirst(macroFileName, "");
+
+        if (macroFileName.length() > 2 && macroFileName.startsWith("\"") && macroFileName.endsWith("\"")) {
+            macroFileName = macroFileName.substring(1, macroFileName.length() - 1);
+        } else {
+            throw new CLIException(
+                    "macro file name \"" + macroFileName + "\" must exist and be quoted with double quotes \"\"");
+        }
+
+        // Append the working directory to the macro file name
+        macroFileName = parameters.getWorkingDirectory() + File.separatorChar + macroFileName;
+
+        // Now, get the text file for the argument of the macro
+        String macroFileContents = null;
+        try {
+            macroFileContents = TextFileUtils.getTextFileAsString(macroFileName);
+        } catch (final IOException e) {
+            throw new CLIException("file \"" + macroFileName + "\" specified in Macro File Tag not found", e);
+        }
+
+        return lineBeforeMacroTag + macroFileContents + lineAfterMacroFileName;
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIException.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIException.java
new file mode 100644 (file)
index 0000000..8e1104c
--- /dev/null
@@ -0,0 +1,49 @@
+/*-
+ * ============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.auth.clieditor;
+
+/**
+ * A run time exception used to report parsing and command input errors.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLIException extends IllegalArgumentException {
+    private static final long serialVersionUID = 6520231162404452427L;
+
+    /**
+     * Create a CLIException with a message.
+     *
+     * @param message the message
+     */
+    public CLIException(final String message) {
+        super(message);
+    }
+
+    /**
+     * Create a CLIException with a message and an exception.
+     *
+     * @param message the message
+     * @param t the t
+     */
+    public CLIException(final String message, final Throwable t) {
+        super(message, t);
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLILineParser.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLILineParser.java
new file mode 100644 (file)
index 0000000..fd4541f
--- /dev/null
@@ -0,0 +1,321 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.util.ArrayList;
+
+/**
+ * This class chops a command line up into commands, parameters and arguments.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLILineParser {
+
+    /**
+     * This method breaks a line of input up into commands, parameters, and arguments. Commands are
+     * standalone words at the beginning of the line, of which there may be multiple Parameters are
+     * single words followed by an '=' character Arguments are single words or a block of quoted
+     * text following an '=' character.
+     *
+     * Format: command [command....] parameter=argument [parameter = argument]
+     *
+     * Examples entity create name=hello description="description of hello" help entity list
+     *
+     * @param line The line to parse
+     * @param logicBlock A block of logic code to be taken literally
+     * @return the string array list
+     */
+    public ArrayList<String> parse(final String line, final String logicBlock) {
+        return checkFormat(
+                mergeArguments(mergeEquals(
+                        splitOnEquals(stripAndSplitWords(mergeQuotes(splitOnChar(stripComments(line), '\"')))))),
+                logicBlock);
+    }
+
+    /**
+     * Strip comments from lines, comments start with a # character.
+     *
+     * @param line the line
+     * @return the line without comments
+     */
+    private String stripComments(final String line) {
+        final int commentPos = line.indexOf('#');
+        if (commentPos == -1) {
+            return line;
+        } else {
+            return line.substring(0, commentPos);
+        }
+    }
+
+    /**
+     * This method merges an array with separate quotes into an array with quotes delimiting the
+     * start and end of quoted words Example [Humpty ],["],[Dumpty sat on the wall],["],[, Humpty
+     * Dumpty had ],["],["],a ["],[great],["],[ fall] becomes [Humpty ],["Dumpty sat on the
+     * wall"],[, Humpty Dumpty had ],[""],[a],["great"],[ fall].
+     *
+     * @param wordsSplitOnQuotes the words split on quotes
+     * @return the merged array list
+     */
+    private ArrayList<String> mergeQuotes(final ArrayList<String> wordsSplitOnQuotes) {
+        final ArrayList<String> wordsWithQuotesMerged = new ArrayList<>();
+
+        for (int i = 0; i < wordsSplitOnQuotes.size();) {
+            if (wordsSplitOnQuotes.get(i).equals("\"")) {
+                String quotedWord = wordsSplitOnQuotes.get(i++);
+
+                for (; i < wordsSplitOnQuotes.size(); i++) {
+                    quotedWord += wordsSplitOnQuotes.get(i);
+                    if (wordsSplitOnQuotes.get(i).equals("\"")) {
+                        i++;
+                        break;
+                    }
+                }
+                if (quotedWord.matches("^\".*\"$")) {
+                    wordsWithQuotesMerged.add(quotedWord);
+                } else {
+                    throw new CLIException("trailing quote found in input " + wordsSplitOnQuotes);
+                }
+            } else {
+                wordsWithQuotesMerged.add(wordsSplitOnQuotes.get(i++));
+            }
+        }
+
+        return wordsWithQuotesMerged;
+    }
+
+    /**
+     * This method splits the words on an array list into an array list where each portion of the
+     * line is split into words by '=', quoted words are ignored Example: aaa = bbb = ccc=ddd=eee =
+     * becomes [aaa ],[=],[bbb ],[=],[ccc],[=],[ddd],[=],[eee ],[=].
+     *
+     * @param words the words
+     * @return the merged array list
+     */
+    private ArrayList<String> splitOnEquals(final ArrayList<String> words) {
+        final ArrayList<String> wordsSplitOnEquals = new ArrayList<>();
+
+        for (final String word : words) {
+            // Is this a quoted word ?
+            if (word.startsWith("\"")) {
+                wordsSplitOnEquals.add(word);
+                continue;
+            }
+
+            // Split on equals character
+            final ArrayList<String> splitWords = splitOnChar(word, '=');
+            for (final String splitWord : splitWords) {
+                wordsSplitOnEquals.add(splitWord);
+            }
+        }
+
+        return wordsSplitOnEquals;
+    }
+
+    /**
+     * This method merges an array with separate equals into an array with equals delimiting the
+     * start of words Example: [aaa ],[=],[bbb ],[=],[ccc],[=],[ddd],[=],[eee ],[=] becomes [aaa
+     * ],[= bbb ],[= ccc],[=ddd],[=eee ],[=].
+     *
+     * @param wordsSplitOnEquals the words split on equals
+     * @return the merged array list
+     */
+    private ArrayList<String> mergeEquals(final ArrayList<String> wordsSplitOnEquals) {
+        final ArrayList<String> wordsWithEqualsMerged = new ArrayList<>();
+
+        for (int i = 0; i < wordsSplitOnEquals.size();) {
+            // Is this a quoted word ?
+            if (wordsSplitOnEquals.get(i).startsWith("\"")) {
+                wordsWithEqualsMerged.add(wordsSplitOnEquals.get(i));
+                continue;
+            }
+
+            if (wordsSplitOnEquals.get(i).equals("=")) {
+                if (i < wordsSplitOnEquals.size() - 1 && !wordsSplitOnEquals.get(i + 1).startsWith("=")) {
+                    wordsWithEqualsMerged.add(wordsSplitOnEquals.get(i) + wordsSplitOnEquals.get(i + 1));
+                    i += 2;
+                } else {
+                    wordsWithEqualsMerged.add(wordsSplitOnEquals.get(i++));
+                }
+            } else {
+                wordsWithEqualsMerged.add(wordsSplitOnEquals.get(i++));
+            }
+        }
+
+        return wordsWithEqualsMerged;
+    }
+
+    /**
+     * This method merges words that start with an '=' character with the previous word if that word
+     * does not start with an '='.
+     *
+     * @param words the words
+     * @return the merged array list
+     */
+    private ArrayList<String> mergeArguments(final ArrayList<String> words) {
+        final ArrayList<String> mergedArguments = new ArrayList<>();
+
+        for (int i = 0; i < words.size(); i++) {
+            // Is this a quoted word ?
+            if (words.get(i).startsWith("\"")) {
+                mergedArguments.add(words.get(i));
+                continue;
+            }
+
+            if (words.get(i).startsWith("=")) {
+                if (i > 0 && !words.get(i - 1).startsWith("=")) {
+                    mergedArguments.remove(mergedArguments.size() - 1);
+                    mergedArguments.add(words.get(i - 1) + words.get(i));
+                } else {
+                    mergedArguments.add(words.get(i));
+                }
+            } else {
+                mergedArguments.add(words.get(i));
+            }
+        }
+
+        return mergedArguments;
+    }
+
+    /**
+     * This method strips all non quoted white space down to single spaces and splits non-quoted
+     * words into separate words.
+     *
+     * @param words the words
+     * @return the array list with white space stripped and words split
+     */
+    private ArrayList<String> stripAndSplitWords(final ArrayList<String> words) {
+        final ArrayList<String> strippedAndSplitWords = new ArrayList<>();
+
+        for (String word : words) {
+            // Is this a quoted word
+            if (word.startsWith("\"")) {
+                strippedAndSplitWords.add(word);
+                continue;
+            }
+
+            // Strip white space by replacing all white space with blanks and then removing leading
+            // and trailing blanks
+            word = word.replaceAll("\\s+", " ").trim();
+
+            if (word.length() == 0) {
+                continue;
+            }
+
+            // Split on space characters
+            final String[] splitWords = word.split(" ");
+            for (final String splitWord : splitWords) {
+                strippedAndSplitWords.add(splitWord);
+            }
+        }
+
+        return strippedAndSplitWords;
+    }
+
+    /**
+     * This method splits a line of text into an array list where each portion of the line is split
+     * into words by a character, with the characters themselves as separate words Example: Humpty
+     * "Dumpty sat on the wall", Humpty Dumpty had ""a "great" fall becomes [Humpty ],["],[Dumpty
+     * sat on the wall],["],[, Humpty Dumpty had ],["],["],a ["],[great],["],[ fall].
+     *
+     * @param line the input line
+     * @param splitChar the split char
+     * @return the split array list
+     */
+    private ArrayList<String> splitOnChar(final String line, final char splitChar) {
+        final ArrayList<String> wordsSplitOnQuotes = new ArrayList<>();
+
+        int currentPos = 0;
+        while (currentPos != -1) {
+            final int quotePos = line.indexOf(splitChar, currentPos);
+            if (quotePos != -1) {
+                if (currentPos < quotePos) {
+                    wordsSplitOnQuotes.add(line.substring(currentPos, quotePos));
+                }
+                wordsSplitOnQuotes.add("" + splitChar);
+                currentPos = quotePos + 1;
+
+                if (currentPos == line.length()) {
+                    currentPos = -1;
+                }
+            } else {
+                wordsSplitOnQuotes.add(line.substring(currentPos));
+                currentPos = quotePos;
+            }
+        }
+
+        return wordsSplitOnQuotes;
+    }
+
+    /**
+     * This method checks that an array list containing a command is in the correct format.
+     *
+     * @param commandWords the command words
+     * @param logicBlock A block of logic code to be taken literally
+     * @return the checked array list
+     */
+    private ArrayList<String> checkFormat(final ArrayList<String> commandWords, final String logicBlock) {
+        // There should be at least one word
+        if (commandWords.size() == 0) {
+            return commandWords;
+        }
+
+        // The first word must be alphanumeric, that is a command
+        if (!commandWords.get(0).matches("^[a-zA-Z0-9]*$")) {
+            throw new CLIException(
+                    "first command word is not alphanumeric or is not a command: " + commandWords.get(0));
+        }
+
+        // Now check that we have a sequence of commands at the beginning
+        int currentWordPos = 0;
+        while (currentWordPos < commandWords.size()) {
+            if (commandWords.get(currentWordPos).matches("^[a-zA-Z0-9]*$")) {
+                currentWordPos++;
+            } else {
+                break;
+            }
+        }
+
+        while (currentWordPos < commandWords.size()) {
+            // From now on we should have a sequence of parameters with arguments delimited by a
+            // single '=' character
+            if (currentWordPos < commandWords.size() - 1 || logicBlock == null) {
+                // No logic block
+                if (commandWords.get(currentWordPos).matches("^[a-zA-Z0-9]+=[a-zA-Z0-9/\"].*$")) {
+                    currentWordPos++;
+                } else {
+                    throw new CLIException(
+                            "command argument is not properly formed: " + commandWords.get(currentWordPos));
+                }
+            } else {
+                // Logic block
+                if (commandWords.get(currentWordPos).matches("^[a-zA-Z0-9]+=")) {
+                    commandWords.set(currentWordPos, commandWords.get(currentWordPos) + logicBlock);
+                    currentWordPos++;
+                } else {
+                    throw new CLIException(
+                            "command argument is not properly formed: " + commandWords.get(currentWordPos));
+                }
+            }
+        }
+
+        return commandWords;
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIParameterParser.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIParameterParser.java
new file mode 100644 (file)
index 0000000..382f23f
--- /dev/null
@@ -0,0 +1,156 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.nio.file.Paths;
+import java.util.Arrays;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+
+/**
+ * This class reads and handles command line parameters to the Apex CLI editor.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLIParameterParser {
+    private static final int MAX_HELP_LINE_LENGTH = 120;
+
+    // Apache Commons CLI options
+    private final Options options;
+
+    /**
+     * Construct the options for the CLI editor.
+     */
+    public CLIParameterParser() {
+        options = new Options();
+        options.addOption(Option.builder("h").longOpt("help").desc("outputs the usage of this command").required(false)
+                .type(Boolean.class).build());
+        options.addOption(Option.builder("m").longOpt("metadata-file").desc("name of the command metadata file to use")
+                .hasArg().argName("CMD_METADATA_FILE").required(false).type(String.class).build());
+        options.addOption(
+                Option.builder("a").longOpt("model-props-file").desc("name of the apex model properties file to use")
+                        .hasArg().argName("MODEL_PROPS_FILE").required(false).type(String.class).build());
+        options.addOption(Option.builder("c").longOpt("command-file")
+                .desc("name of a file containing editor commands to run into the editor").hasArg()
+                .argName("COMMAND_FILE").required(false).type(String.class).build());
+        options.addOption(Option.builder("l").longOpt("log-file")
+                .desc("name of a file that will contain command logs from the editor, will log to standard output if not specified or suppressed with \"-nl\" flag")
+                .hasArg().argName("LOG_FILE").required(false).type(String.class).build());
+        options.addOption(Option.builder("nl").longOpt("no-log")
+                .desc("if specified, no logging or output of commands to standard output or log file is carried out")
+                .required(false).type(Boolean.class).build());
+        options.addOption(Option.builder("nm").longOpt("no-model-output")
+                .desc("if specified, no output of a model to standard output or model output file is carried out, "
+                        + "the user can use the \"save\" command in a script to save a model")
+                .required(false).type(Boolean.class).build());
+        options.addOption(Option.builder("i").longOpt("input-model-file")
+                .desc("name of a file that contains an input model for the editor").hasArg().argName("INPUT_MODEL_FILE")
+                .required(false).type(String.class).build());
+        options.addOption(Option.builder("o").longOpt("output-model-file")
+                .desc("name of a file that will contain the output model for the editor, "
+                        + "will output model to standard output if not specified or suppressed with \"-nm\" flag")
+                .hasArg().argName("OUTPUT_MODEL_FILE").required(false).type(String.class).build());
+        options.addOption(Option.builder("if").longOpt("ignore-failures")
+                .desc("true or false, ignore failures of commands in command files and continue executing the command file")
+                .hasArg().argName("IGNORE_FAILURES_FLAG").required(false).type(Boolean.class).build());
+        options.addOption(Option.builder("wd").longOpt("working-directory")
+                .desc("the working directory that is the root for the CLI editor and is the root from which to look for included macro files")
+                .hasArg().argName("WORKING_DIRECTORY").required(false).type(String.class).build());
+    }
+
+    /**
+     * Parse the command line options.
+     *
+     * @param args The arguments
+     * @return the CLI parameters
+     */
+    public CLIParameters parse(final String[] args) {
+        CommandLine commandLine = null;
+        try {
+            commandLine = new DefaultParser().parse(options, args);
+        } catch (final ParseException e) {
+            throw new CLIException("invalid command line arguments specified : " + e.getMessage());
+        }
+
+        final CLIParameters parameters = new CLIParameters();
+        final String[] remainingArgs = commandLine.getArgs();
+
+        if (remainingArgs.length > 0) {
+            throw new CLIException("too many command line arguments specified : " + Arrays.toString(remainingArgs));
+        }
+
+        if (commandLine.hasOption('h')) {
+            parameters.setHelp(true);
+        }
+        if (commandLine.hasOption('m')) {
+            parameters.setMetadataFileName(commandLine.getOptionValue('m'));
+        }
+        if (commandLine.hasOption('a')) {
+            parameters.setApexPorpertiesFileName(commandLine.getOptionValue('a'));
+        }
+        if (commandLine.hasOption('c')) {
+            parameters.setCommandFileName(commandLine.getOptionValue('c'));
+        }
+        if (commandLine.hasOption('l')) {
+            parameters.setLogFileName(commandLine.getOptionValue('l'));
+        }
+        if (commandLine.hasOption("nl")) {
+            parameters.setSuppressLog(true);
+        }
+        if (commandLine.hasOption("nm")) {
+            parameters.setSuppressModelOutput(true);
+        }
+        if (commandLine.hasOption('i')) {
+            parameters.setInputModelFileName(commandLine.getOptionValue('i'));
+        }
+        if (commandLine.hasOption('o')) {
+            parameters.setOutputModelFileName(commandLine.getOptionValue('o'));
+        }
+        if (commandLine.hasOption("if")) {
+            parameters.setIgnoreCommandFailuresSet(true);
+            parameters.setIgnoreCommandFailures(Boolean.valueOf(commandLine.getOptionValue("if")));
+        } else {
+            parameters.setIgnoreCommandFailuresSet(false);
+        }
+        if (commandLine.hasOption("wd")) {
+            parameters.setWorkingDirectory(commandLine.getOptionValue("wd"));
+        } else {
+            parameters.setWorkingDirectory(Paths.get("").toAbsolutePath().toString());
+        }
+
+        return parameters;
+    }
+
+    /**
+     * Print help information.
+     *
+     * @param mainClassName the main class name
+     */
+    public void help(final String mainClassName) {
+        final HelpFormatter helpFormatter = new HelpFormatter();
+        helpFormatter.printHelp(MAX_HELP_LINE_LENGTH, mainClassName + " [options...]", "options", options, "");
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIParameters.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/CLIParameters.java
new file mode 100644 (file)
index 0000000..476d17e
--- /dev/null
@@ -0,0 +1,571 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.onap.policy.apex.model.utilities.ResourceUtils;
+
+/**
+ * This class reads and handles command line parameters to the Apex CLI editor.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class CLIParameters {
+    // Default location of the command definition meta data in JSON
+    private static final String JSON_COMMAND_METADATA_RESOURCE = "etc/editor/Commands.json";
+    private static final String APEX_MODEL_PROPERTIES_RESOURCE = "etc/editor/ApexModelProperties.json";
+
+    // The editor parameters
+    private boolean helpSet = false;
+    private String metadataFileName = null;
+    private String apexPropertiesFileName = null;
+    private String commandFileName = null;
+    private String inputModelFileName = null;
+    private String outputModelFileName = null;
+    private String workingDirectory = null;
+    private String logFileName = null;
+    private boolean echo = false;
+    private boolean suppressLog = false;
+    private boolean suppressModelOutput = false;
+    private boolean ignoreCommandFailuresSet = false;
+    private boolean ignoreCommandFailures = false;
+
+    /**
+     * Validates the command line parameters.
+     */
+    public void validate() {
+        validateReadableFile("Metadata File", metadataFileName);
+        validateReadableFile("Properties File", apexPropertiesFileName);
+        validateReadableFile("Command File", commandFileName);
+        validateReadableFile("Input Model File", inputModelFileName);
+        validateWritableFile("Output Model File", outputModelFileName);
+        validateWritableFile("Log File", logFileName);
+        validateWritableDirectory("Working Directory", workingDirectory);
+
+        if (isSuppressLogSet()) {
+            setEcho(false);
+        } else {
+            if (checkSetCommandFileName()) {
+                setEcho(true);
+                if (!checkSetIgnoreCommandFailures()) {
+                    setIgnoreCommandFailures(false);
+                }
+            } else {
+                setEcho(false);
+                if (!checkSetIgnoreCommandFailures()) {
+                    setIgnoreCommandFailures(true);
+                }
+            }
+        }
+    }
+
+    /**
+     * Gets the command metadata for the editor commands as a stream.
+     *
+     * @return the command metadata for the editor commands as a stream.
+     * @throws IOException the IO exception
+     */
+    public InputStream getMetadataStream() throws IOException {
+        if (metadataFileName == null) {
+            return ResourceUtils.getResourceAsStream(JSON_COMMAND_METADATA_RESOURCE);
+        } else {
+            return new FileInputStream(new File(metadataFileName));
+        }
+    }
+
+    /**
+     * Gets the location of command metadata for the editor commands.
+     *
+     * @return the location of command metadata for the editor commands
+     */
+    public String getMetadataLocation() {
+        if (metadataFileName == null) {
+            return "resource: \"" + JSON_COMMAND_METADATA_RESOURCE + "\"";
+        } else {
+            return "file: \"" + metadataFileName + "\"";
+        }
+    }
+
+    /**
+     * Gets the properties that are used for command default values as a stream.
+     *
+     * @return the properties that are used for command default values as a stream
+     * @throws IOException the IO exception
+     */
+    public InputStream getApexPropertiesStream() throws IOException {
+        if (apexPropertiesFileName == null) {
+            return ResourceUtils.getResourceAsStream(APEX_MODEL_PROPERTIES_RESOURCE);
+        } else {
+            return new FileInputStream(new File(apexPropertiesFileName));
+        }
+    }
+
+    /**
+     * Gets the location of the properties that are used for command default values.
+     *
+     * @return the location of the properties that are used for command default values
+     */
+    public String getApexPropertiesLocation() {
+        if (metadataFileName == null) {
+            return "resource: \"" + APEX_MODEL_PROPERTIES_RESOURCE + "\"";
+        } else {
+            return "file: \"" + apexPropertiesFileName + "\"";
+        }
+    }
+
+    /**
+     * Gets the input stream on which commands are being received.
+     *
+     * @return the input stream on which commands are being received
+     * @throws IOException the IO exception
+     */
+    public InputStream getCommandInputStream() throws IOException {
+        if (commandFileName == null) {
+            return System.in;
+        } else {
+            return new FileInputStream(new File(commandFileName));
+        }
+    }
+
+    /**
+     * Gets the output stream on which command result messages are being output.
+     *
+     * @return the output stream on which command result messages are being output
+     * @throws IOException the IO exception
+     */
+    public OutputStream getOutputStream() throws IOException {
+        // Check if log suppression is active, if so, consume all output on a byte array output
+        // stream
+        if (isSuppressLogSet()) {
+            return new ByteArrayOutputStream();
+
+        }
+        if (logFileName == null) {
+            return System.out;
+        } else {
+            return new FileOutputStream(new File(logFileName), true);
+        }
+    }
+
+    /**
+     * Validate that a file is readable.
+     *
+     * @param fileTag the file tag, a tag used for information and error messages
+     * @param fileName the file name to check
+     */
+    private void validateReadableFile(final String fileTag, final String fileName) {
+        if (fileName == null) {
+            return;
+        }
+        final File theFile = new File(fileName);
+        if (!theFile.exists()) {
+            throw new CLIException("file " + fileName + " of type " + fileTag + " does not exist");
+        }
+        if (!theFile.isFile()) {
+            throw new CLIException("file " + fileName + " of type " + fileTag + " is not a normal file");
+        }
+        if (!theFile.canRead()) {
+            throw new CLIException("file " + fileName + " of type " + fileTag + " is ureadable");
+        }
+    }
+
+    /**
+     * Validate that a file is writable.
+     *
+     * @param fileTag the file tag, a tag used for information and error messages
+     * @param fileName the file name to check
+     */
+    private void validateWritableFile(final String fileTag, final String fileName) {
+        if (fileName == null) {
+            return;
+        }
+        final File theFile = new File(fileName);
+        if (theFile.exists()) {
+            if (!theFile.isFile()) {
+                throw new CLIException("file " + fileName + " of type " + fileTag + " is not a normal file");
+            }
+            if (!theFile.canWrite()) {
+                throw new CLIException("file " + fileName + " of type " + fileTag + " cannot be written");
+            }
+        } else {
+            try {
+                theFile.createNewFile();
+            } catch (final IOException e) {
+                throw new CLIException("file " + fileName + " cannot be created: " + e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * Validate that a directory exists and is writable.
+     *
+     * @param directoryTag the directory tag, a tag used for information and error messages
+     * @param directoryName the directory name to check
+     */
+    private void validateWritableDirectory(final String directoryTag, final String directoryName) {
+        if (directoryName == null) {
+            return;
+        }
+        final File theDirectory = new File(directoryName);
+        if (theDirectory.exists()) {
+            if (!theDirectory.isDirectory()) {
+                throw new CLIException(
+                        "directory " + directoryName + " of type " + directoryTag + " is not a directory");
+            }
+            if (!theDirectory.canWrite()) {
+                throw new CLIException(
+                        "directory " + directoryName + " of type " + directoryTag + " cannot be written");
+            }
+        }
+    }
+
+    /**
+     * Checks if help is set.
+     *
+     * @return true, if help is set
+     */
+    public boolean isHelpSet() {
+        return helpSet;
+    }
+
+    /**
+     * Sets whether the help flag is set or not.
+     *
+     * @param isHelpSet the value of the help flag
+     */
+    public void setHelp(final boolean isHelpSet) {
+        this.helpSet = isHelpSet;
+    }
+
+    /**
+     * Gets the file name of the command metadata file for the editor commands.
+     *
+     * @return the file name of the command metadata file for the editor commands
+     */
+    public String getMetadataFileName() {
+        return metadataFileName;
+    }
+
+    /**
+     * Sets the file name of the command metadata file for the editor commands.
+     *
+     * @param metadataFileName the file name of the command metadata file for the editor commands
+     */
+    public void setMetadataFileName(final String metadataFileName) {
+        this.metadataFileName = metadataFileName.trim();
+    }
+
+    /**
+     * Check if the file name of the command metadata file for the editor commands is set.
+     *
+     * @return true, if the file name of the command metadata file for the editor commands is set
+     */
+    public boolean checkSetMetadataFileName() {
+        return metadataFileName != null && metadataFileName.length() > 0;
+    }
+
+    /**
+     * Gets the file name of the file containing properties that are used for command default
+     * values.
+     *
+     * @return the file name of the file containing properties that are used for command default
+     *         values
+     */
+    public String getApexPorpertiesFileName() {
+        return apexPropertiesFileName;
+    }
+
+    /**
+     * Sets the file name of the file containing properties that are used for command default
+     * values.
+     *
+     * @param apexPorpertiesFileName the file name of the file containing properties that are used
+     *        for command default values
+     */
+    public void setApexPorpertiesFileName(final String apexPorpertiesFileName) {
+        apexPropertiesFileName = apexPorpertiesFileName.trim();
+    }
+
+    /**
+     * Check if the file name of the file containing properties that are used for command default
+     * values is set.
+     *
+     * @return true, if the file name of the file containing properties that are used for command
+     *         default values is set
+     */
+    public boolean checkSetApexPropertiesFileName() {
+        return apexPropertiesFileName != null && apexPropertiesFileName.length() > 0;
+    }
+
+    /**
+     * Gets the name of the file containing commands to be streamed into the CLI editor.
+     *
+     * @return the name of the file containing commands to be streamed into the CLI editor
+     */
+    public String getCommandFileName() {
+        return commandFileName;
+    }
+
+    /**
+     * Sets the name of the file containing commands to be streamed into the CLI editor.
+     *
+     * @param commandFileName the name of the file containing commands to be streamed into the CLI
+     *        editor
+     */
+    public void setCommandFileName(final String commandFileName) {
+        this.commandFileName = commandFileName.trim();
+    }
+
+    /**
+     * Check if the name of the file containing commands to be streamed into the CLI editor is set.
+     *
+     * @return true, if the name of the file containing commands to be streamed into the CLI editor
+     *         is set
+     */
+    public boolean checkSetCommandFileName() {
+        return commandFileName != null && commandFileName.length() > 0;
+    }
+
+    /**
+     * Gets the name of the file containing the Apex model that will be used to initialize the Apex
+     * model in the CLI editor.
+     *
+     * @return the name of the file containing the Apex model that will be used to initialize the
+     *         Apex model in the CLI editor
+     */
+    public String getInputModelFileName() {
+        return inputModelFileName;
+    }
+
+    /**
+     * Sets the name of the file containing the Apex model that will be used to initialize the Apex
+     * model in the CLI editor.
+     *
+     * @param inputModelFileName the name of the file containing the Apex model that will be used to
+     *        initialize the Apex model in the CLI editor
+     */
+    public void setInputModelFileName(final String inputModelFileName) {
+        this.inputModelFileName = inputModelFileName.trim();
+    }
+
+    /**
+     * Check if the name of the file containing the Apex model that will be used to initialize the
+     * Apex model in the CLI editor is set.
+     *
+     * @return true, if the name of the file containing the Apex model that will be used to
+     *         initialize the Apex model in the CLI editor is set
+     */
+    public boolean checkSetInputModelFileName() {
+        return inputModelFileName != null && inputModelFileName.length() > 0;
+    }
+
+    /**
+     * Gets the name of the file that the Apex CLI editor will save the Apex model to when it exits.
+     *
+     * @return the name of the file that the Apex CLI editor will save the Apex model to when it
+     *         exits
+     */
+    public String getOutputModelFileName() {
+        return outputModelFileName;
+    }
+
+    /**
+     * Sets the name of the file that the Apex CLI editor will save the Apex model to when it exits.
+     *
+     * @param outputModelFileName the name of the file that the Apex CLI editor will save the Apex
+     *        model to when it exits
+     */
+    public void setOutputModelFileName(final String outputModelFileName) {
+        this.outputModelFileName = outputModelFileName.trim();
+    }
+
+    /**
+     * Check if the name of the file that the Apex CLI editor will save the Apex model to when it
+     * exits is set.
+     *
+     * @return true, if the name of the file that the Apex CLI editor will save the Apex model to
+     *         when it exits is set
+     */
+    public boolean checkSetOutputModelFileName() {
+        return outputModelFileName != null && outputModelFileName.length() > 0;
+    }
+
+    /**
+     * Gets the working directory that is the root for CLI editor macro includes.
+     *
+     * @return the CLI editor working directory
+     */
+    public String getWorkingDirectory() {
+        return workingDirectory;
+    }
+
+    /**
+     * Sets the working directory that is the root for CLI editor macro includes.
+     *
+     * @param workingDirectory the CLI editor working directory
+     */
+    public void setWorkingDirectory(final String workingDirectory) {
+        this.workingDirectory = workingDirectory.trim();
+    }
+
+    /**
+     * Gets the name of the file to which the Apex CLI editor will log commands and responses.
+     *
+     * @return the name of the file to which the Apex CLI editor will log commands and responses
+     */
+    public String getLogFileName() {
+        return logFileName;
+    }
+
+    /**
+     * Sets the name of the file to which the Apex CLI editor will log commands and responses.
+     *
+     * @param logFileName the name of the file to which the Apex CLI editor will log commands and
+     *        responses
+     */
+    public void setLogFileName(final String logFileName) {
+        this.logFileName = logFileName.trim();
+    }
+
+    /**
+     * Check if the name of the file to which the Apex CLI editor will log commands and responses is
+     * set.
+     *
+     * @return true, if the name of the file to which the Apex CLI editor will log commands and
+     *         responses is set
+     */
+    public boolean checkSetLogFileName() {
+        return logFileName != null;
+    }
+
+    /**
+     * Checks if the Apex CLI editor is set to echo commands that have been entered.
+     *
+     * @return true, if the Apex CLI editor is set to echo commands that have been entered
+     */
+    public boolean isEchoSet() {
+        return echo;
+    }
+
+    /**
+     * Sets whether the Apex CLI editor should echo commands that have been entered.
+     *
+     * @param echo true, if the Apex CLI editor should echo commands that have been entered
+     */
+    public void setEcho(final boolean echo) {
+        this.echo = echo;
+    }
+
+    /**
+     * Checks whether the Apex CLI editor is set to suppress logging of command output.
+     *
+     * @return true, if the Apex CLI editor is set to suppress logging of command output.
+     */
+    public boolean isSuppressLogSet() {
+        return suppressLog;
+    }
+
+    /**
+     * Sets whether the Apex CLI editor should suppress logging of command output.
+     *
+     * @param suppressLog true, if the Apex CLI editor should suppress logging of command output
+     */
+    public void setSuppressLog(final boolean suppressLog) {
+        this.suppressLog = suppressLog;
+    }
+
+    /**
+     * Checks whether the Apex CLI editor is set to suppress output of its Apex model on exit.
+     *
+     * @return true, if checks if the Apex CLI editor is set to suppress output of its Apex model on
+     *         exit
+     */
+    public boolean isSuppressModelOutputSet() {
+        return suppressModelOutput;
+    }
+
+    /**
+     * Sets whether the Apex CLI editor should suppress output of its Apex model on exit.
+     *
+     * @param suppressModelOutput true, if the Apex CLI editor should suppress output of its Apex
+     *        model on exit
+     */
+    public void setSuppressModelOutput(final boolean suppressModelOutput) {
+        this.suppressModelOutput = suppressModelOutput;
+    }
+
+    /**
+     * Check if the command failures flag is set
+     * 
+     * @return true if the command failures flag has been set
+     */
+    public boolean checkSetIgnoreCommandFailures() {
+        return ignoreCommandFailuresSet;
+    }
+
+    /**
+     * Checks if the command failures flag is set.
+     * 
+     * @param ignoreCommandFailuresSet true if the command failures flag has been set
+     */
+    public void setIgnoreCommandFailuresSet(final boolean ignoreCommandFailuresSet) {
+        this.ignoreCommandFailuresSet = ignoreCommandFailuresSet;
+    }
+
+    /**
+     * Checks if command failures should be ignored and command execution continue.
+     * 
+     * @return true if command failures should be ignored
+     */
+    public boolean isIgnoreCommandFailures() {
+        return ignoreCommandFailures;
+    }
+
+    /**
+     * Sets if command errors should be ignored and command execution continue.
+     * 
+     * @param ignoreCommandFailures true if command errors should be ignored
+     */
+    public void setIgnoreCommandFailures(final boolean ignoreCommandFailures) {
+        this.ignoreCommandFailures = ignoreCommandFailures;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "CLIParameters [helpSet=" + helpSet + ", metadataFileName=" + metadataFileName
+                + ", apexPropertiesFileName=" + apexPropertiesFileName + ", commandFileName=" + commandFileName
+                + ", inputModelFileName=" + inputModelFileName + ", outputModelFileName=" + outputModelFileName
+                + ", logFileName=" + logFileName + ", echo=" + echo + ", suppressLog=" + suppressLog
+                + ", suppressModelOutput=" + suppressModelOutput + "]";
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/KeywordNode.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/KeywordNode.java
new file mode 100644 (file)
index 0000000..06579e0
--- /dev/null
@@ -0,0 +1,188 @@
+/*-
+ * ============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.auth.clieditor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * The Class KeywordNode holds the structure of a command keyword for the Apex CLI editor. The
+ * keyword itself and all its children are held as a recursive tree. This class is used to manage
+ * interactive sub-modes in the Apex CLI editor.
+ */
+public class KeywordNode implements Comparable<KeywordNode> {
+    private final String keyword;
+    private final TreeMap<String, KeywordNode> children;
+    private CLICommand command;
+
+    /**
+     * This Constructor creates a keyword node with the given keyword and no command.
+     *
+     * @param keyword the keyword of the node
+     */
+    public KeywordNode(final String keyword) {
+        this(keyword, null);
+    }
+
+    /**
+     * This Constructor creates a keyword node with the given keyword and command.
+     *
+     * @param keyword the keyword of the keyword node
+     * @param command the command associated with this keyword
+     */
+    public KeywordNode(final String keyword, final CLICommand command) {
+        Assertions.argumentNotNull(keyword, "commands may not be null");
+
+        this.keyword = keyword;
+        children = new TreeMap<>();
+        this.command = command;
+    }
+
+    /**
+     * Process a list of keywords on this keyword node, recursing the keyword node tree, creating
+     * new branches for the keyword list if required. When the end of a branch has been reached,
+     * store the command in that keyword node..
+     *
+     * @param keywordList the list of keywords to process on this keyword node
+     * @param incomingCommand the command
+     */
+    public void processKeywords(final List<String> keywordList, final CLICommand incomingCommand) {
+        if (keywordList.size() <= 0) {
+            this.command = incomingCommand;
+            return;
+        }
+
+        if (!children.containsKey(keywordList.get(0))) {
+            children.put(keywordList.get(0), new KeywordNode(keywordList.get(0)));
+        }
+
+        final ArrayList<String> nextLevelKeywordList = new ArrayList<>(keywordList);
+        nextLevelKeywordList.remove(0);
+        children.get(keywordList.get(0)).processKeywords(nextLevelKeywordList, incomingCommand);
+    }
+
+    /**
+     * Adds the system commands to the keyword node.
+     *
+     * @param systemCommandNodes the system command nodes to add to the keyword node
+     */
+    public void addSystemCommandNodes(final Set<KeywordNode> systemCommandNodes) {
+        if (children.isEmpty()) {
+            return;
+        }
+
+        for (final KeywordNode node : children.values()) {
+            node.addSystemCommandNodes(systemCommandNodes);
+        }
+
+        for (final KeywordNode systemCommandNode : systemCommandNodes) {
+            children.put(systemCommandNode.getKeyword(), systemCommandNode);
+        }
+
+    }
+
+    /**
+     * Gets the keyword of this keyword node.
+     *
+     * @return the keyword of this keyword node
+     */
+    public String getKeyword() {
+        return keyword;
+    }
+
+    /**
+     * Gets the children of this keyword node.
+     *
+     * @return the children of this keyword node
+     */
+    public TreeMap<String, KeywordNode> getChildren() {
+        return children;
+    }
+
+    /**
+     * Gets the command of this keyword node.
+     *
+     * @return the command of this keyword node
+     */
+    public CLICommand getCommand() {
+        return command;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "CommandKeywordNode [keyword=" + keyword + ", children=" + children + ", command=" + command + "]";
+    }
+
+    /**
+     * Gets the commands.
+     *
+     * @return the commands
+     */
+    public Set<CLICommand> getCommands() {
+        final Set<CLICommand> commandSet = new TreeSet<>();
+
+        for (final KeywordNode child : children.values()) {
+            if (child.getCommand() != null) {
+                commandSet.add(child.getCommand());
+            }
+            commandSet.addAll(child.getCommands());
+        }
+
+        return commandSet;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Comparable#compareTo(java.lang.Object)
+     */
+    @Override
+    public int compareTo(final KeywordNode otherKeywordNode) {
+        Assertions.argumentNotNull(otherKeywordNode, "comparison object may not be null");
+
+        if (this == otherKeywordNode) {
+            return 0;
+        }
+        if (getClass() != otherKeywordNode.getClass()) {
+            return this.hashCode() - otherKeywordNode.hashCode();
+        }
+
+        final KeywordNode other = otherKeywordNode;
+
+        if (!keyword.equals(other.keyword)) {
+            return keyword.compareTo(other.keyword);
+        }
+        if (!children.equals(other.children)) {
+            return (children.hashCode() - other.children.hashCode());
+        }
+        return command.compareTo(otherKeywordNode.command);
+    }
+}
diff --git a/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/package-info.java b/auth/cli-editor/src/main/java/org/onap/policy/apex/auth/clieditor/package-info.java
new file mode 100644 (file)
index 0000000..e0e7f74
--- /dev/null
@@ -0,0 +1,28 @@
+/*-
+ * ============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 a command line editor for APEX. The command line editor can be used to interactively
+ * from the command line to edit policy models or it can be executed using scripts containing CLI
+ * commands.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+package org.onap.policy.apex.auth.clieditor;
diff --git a/auth/cli-editor/src/main/resources/etc/editor/ApexModelProperties.json b/auth/cli-editor/src/main/resources/etc/editor/ApexModelProperties.json
new file mode 100644 (file)
index 0000000..bd33d69
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "defaultConceptVersion"     : "0.0.1",
+       "defaultEventNamespace"     : "org.onap.policy.apex.auth.clieditor",
+       "defaultEventSource"        : "CLIEditorSource",
+       "defaultEventTarget"        : "CLIEditorTarget",
+       "defaultLogicBlockStartTag" : "LS",
+       "defaultLogicBlockEndTag"   : "LE",
+       "defaultMacroFileTag"       : "#MACROFILE:"
+}
diff --git a/auth/cli-editor/src/main/resources/etc/editor/Commands.json b/auth/cli-editor/src/main/resources/etc/editor/Commands.json
new file mode 100644 (file)
index 0000000..54ad92a
--- /dev/null
@@ -0,0 +1,2427 @@
+{
+       "commandList": [
+               {
+                       "name": "quit",
+                       "keywordlist": [
+                               "quit"
+                       ],
+                       "argumentList": [],
+                       "systemCommand": "true",
+                       "description": "quit execution of command handling, this command quits immediately without saving the model"
+               },
+               {
+                       "name": "back",
+                       "keywordlist": [
+                               "back"
+                       ],
+                       "argumentList": [],
+                       "systemCommand": "true",
+                       "description": "go back one level in editor context hierarchy"
+               },
+               {
+                       "name": "help",
+                       "keywordlist": [
+                               "help"
+                       ],
+                       "argumentList": [],
+                       "systemCommand": "true",
+                       "description": "output help information appropriate to this point in the editor context hierarchy"
+               },
+               {
+                       "name": "load",
+                       "keywordlist": [
+                               "load"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "fileName",
+                                       "nullable": false,
+                                       "description": "Name of a file containing an Apex model in JSON or XML format"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexModel.loadFromFile",
+                       "description": "Load an Apex model from a file"
+               },
+               {
+                       "name": "save",
+                       "keywordlist": [
+                               "save"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "fileName",
+                                       "nullable": true,
+                                       "description": "Name of the file to save the model to"
+                               },
+                               {
+                                       "argumentName": "xmlFlag",
+                                       "nullable": true,
+                                       "description": "Flag indicating that the model should be saved in XML format, model saved in JSON format if flag is false or is not specified"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexModel.saveToFile",
+                       "description": "Save an Apex model to a file"
+               },
+               {
+                       "name": "analyse",
+                       "keywordlist": [
+                               "analyse"
+                       ],
+                       "argumentList": [],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexModel.analyse",
+                       "description": "Analyse an Apex model to show concept usage"
+               },
+               {
+                       "name": "validate",
+                       "keywordlist": [
+                               "validate"
+                       ],
+                       "argumentList": [],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexModel.validate",
+                       "description": "Validate the entire Apex model to ensure it is consistent"
+               },
+               {
+                       "name": "compare",
+                       "keywordlist": [
+                               "compare"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "otherModelFileName",
+                                       "nullable": false,
+                                       "description": "The file name of the other model"
+                               },
+                               {
+                                       "argumentName": "diffsOnly",
+                                       "nullable": true,
+                                       "description": "Flag indicating that only differences between the model are returned when set"
+                               },
+                               {
+                                       "argumentName": "keysOnly",
+                                       "nullable": true,
+                                       "description": "Flag indicating that only keys are printed when set, more terse output"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexModel.compare",
+                       "description": "Compare an Apex model with another Apex model"
+               },
+               {
+                       "name": "split",
+                       "keywordlist": [
+                               "split"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "targetModelName",
+                                       "nullable": false,
+                                       "description": "the file name of the target model in which to store the model split out from the original model"
+                               },
+                               {
+                                       "argumentName": "splitOutPolicies",
+                                       "nullable": "false",
+                                       "description": "the policies form the original model to include in the split out model, specified as a comma delimited list of policy names"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexModel.split",
+                       "description": "Split an Apex model into a separate Apex model with only the specified policies"
+               },
+               {
+                       "name": "merge",
+                       "keywordlist": [
+                               "merge"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "mergeInModelName",
+                                       "nullable": false,
+                                       "description": "the file name of the model to merge into the current model"
+                               },
+                               {
+                                       "argumentName": "keepOriginal",
+                                       "nullable": "true",
+                                       "description": "if true, if a concept exists in both models, the original model copy of that concept is kept, if false, the mreged model overwrites"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexModel.merge",
+                       "description": "Merge another Apex model into this model"
+               },
+               {
+                       "name": "createModel",
+                       "keywordlist": [
+                               "model",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the model"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the model, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "model UUID, omit to generate a UUID"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "model description, omit to generate a description"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createModel",
+                       "description": "Create an Apex model."
+               },
+               {
+                       "name": "listModel",
+                       "keywordlist": [
+                               "model",
+                               "list"
+                       ],
+                       "argumentList": [],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listModel",
+                       "description": "List an Apex model, list all the concepts in the model"
+               },
+               {
+                       "name": "deleteModel",
+                       "keywordlist": [
+                               "model",
+                               "delete"
+                       ],
+                       "argumentList": [],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteModel",
+                       "description": "Delete an Apex model, clear all the concepts in the model"
+               },
+               {
+                       "name": "createKeyInformation",
+                       "keywordlist": [
+                               "keyinfo",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the concept for the key information"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the concept for the key information, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "key information UUID, set to null to generate a UUID"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "concept description, omit to generate a description"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createKeyInformation",
+                       "description": "Create key information"
+               },
+               {
+                       "name": "updateKeyInformation",
+                       "keywordlist": [
+                               "keyinfo",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the concept for the key information"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the concept for the key information, omit to update the latest version"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "key information UUID, omit to not update"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "concept description, omit to not update"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updateKeyInformation",
+                       "description": "Update key information"
+               },
+               {
+                       "name": "listKeyInformation",
+                       "keywordlist": [
+                               "keyinfo",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the concept for the key information, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the concept for the key information, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.ListKeyInformation",
+                       "description": "List key information"
+               },
+               {
+                       "name": "deleteKeyInformation",
+                       "keywordlist": [
+                               "keyinfo",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the concept for the key information"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the concept for the key information, omit to delete all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteKeyInformation",
+                       "description": "Delete key information"
+               },
+               {
+                       "name": "validateKeyInformation",
+                       "keywordlist": [
+                               "keyinfo",
+                               "validate"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the concept for the key information"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the concept for the key information, omit to validate all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.validateKeyInformation",
+                       "description": "Validate key information"
+               },
+               {
+                       "name": "createSchema",
+                       "keywordlist": [
+                               "schema",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the schema"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the schema, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "flavour",
+                                       "nullable": true,
+                                       "description": "the flavour of the technology for this schema, defaults to \"Java\""
+                               },
+                               {
+                                       "argumentName": "schema",
+                                       "nullable": false,
+                                       "description": "the schema text that describes the item represented by the schema"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "schema UUID, omit to generate a UUID"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "schema description, omit to generate a description"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createContextSchema",
+                       "description": "Create a schema."
+               },
+               {
+                       "name": "updateSchema",
+                       "keywordlist": [
+                               "schema",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the schema"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the schema, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "flavour",
+                                       "nullable": true,
+                                       "description": "the flavour of the technology for this schema, defaults to \"Java\""
+                               },
+                               {
+                                       "argumentName": "schema",
+                                       "nullable": false,
+                                       "description": "the schema text that describes the item represented by the schema"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "schema UUID, omit to generate a UUID"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "schema description, omit to generate a description"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updateContextSchema",
+                       "description": "Update a schema."
+               },
+               {
+                       "name": "listSchemas",
+                       "keywordlist": [
+                               "schema",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the schema, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the schema, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listContextSchemas",
+                       "description": "List schemas."
+               },
+               {
+                       "name": "deleteSchema",
+                       "keywordlist": [
+                               "schema",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the schema"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the schema, omit to delete all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteContextSchema",
+                       "description": "Delete a schema."
+               },
+               {
+                       "name": "validateSchemas",
+                       "keywordlist": [
+                               "schema",
+                               "validate"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the schema, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the schema, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.validateContextSchemas",
+                       "description": "Validate context schemas."
+               },
+               {
+                       "name": "createEvent",
+                       "keywordlist": [
+                               "event",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the event"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the event, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "nameSpace",
+                                       "nullable": true,
+                                       "description": "of the event, omit to use the default value"
+                               },
+                               {
+                                       "argumentName": "source",
+                                       "nullable": true,
+                                       "description": "of the event, omit to use the default value"
+                               },
+                               {
+                                       "argumentName": "target",
+                                       "nullable": true,
+                                       "description": "of the event, omit to use the default value"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "event UUID, omit to generate a UUID"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "event description, omit to generate a description"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createEvent",
+                       "description": "Create an event."
+               },
+               {
+                       "name": "updateEvent",
+                       "keywordlist": [
+                               "event",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the event"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the event, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "nameSpace",
+                                       "nullable": true,
+                                       "description": "of the event, omit to not update"
+                               },
+                               {
+                                       "argumentName": "source",
+                                       "nullable": true,
+                                       "description": "of the event, omit to not update"
+                               },
+                               {
+                                       "argumentName": "target",
+                                       "nullable": true,
+                                       "description": "of the event, omit to not update"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "event UUID, omit to not update"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "event description, omit to not update"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updateEvent",
+                       "description": "Update an event."
+               },
+               {
+                       "name": "listEvent",
+                       "keywordlist": [
+                               "event",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the event, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the event, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listEvent",
+                       "description": "List events."
+               },
+               {
+                       "name": "deleteEvent",
+                       "keywordlist": [
+                               "event",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the event"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the event, omit to delete all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteEvent",
+                       "description": "Delete an event."
+               },
+               {
+                       "name": "validateEvent",
+                       "keywordlist": [
+                               "event",
+                               "validate"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the event, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the event, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.validateEvent",
+                       "description": "Validate events."
+               },
+               {
+                       "name": "createEventPar",
+                       "keywordlist": [
+                               "event",
+                               "parameter",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the event"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the event, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "parName",
+                                       "nullable": false,
+                                       "description": "of the parameter"
+                               },
+                               {
+                                       "argumentName": "schemaName",
+                                       "nullable": false,
+                                       "description": "name of the parameter schema"
+                               },
+                               {
+                                       "argumentName": "schemaVersion",
+                                       "nullable": true,
+                                       "description": "version of the parameter schema, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "optional",
+                                       "nullable": true,
+                                       "description": "indicates if the parameter is optional, if omitted, the parameter is mandatory"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createEventPar",
+                       "description": "Create an event parameter."
+               },
+               {
+                       "name": "listEventPar",
+                       "keywordlist": [
+                               "event",
+                               "parameter",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the event"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the event, omit to list latest version"
+                               },
+                               {
+                                       "argumentName": "parName",
+                                       "nullable": true,
+                                       "description": "name of the parameter, omit to list all parameters of the event"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listEventPar",
+                       "description": "List event parameters."
+               },
+               {
+                       "name": "deleteEventPar",
+                       "keywordlist": [
+                               "event",
+                               "parameter",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the event"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the event, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "parName",
+                                       "nullable": true,
+                                       "description": "of the parameter, omit to delete all parameters"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteEventPar",
+                       "description": "Delete an event parameter."
+               },
+               {
+                       "name": "createAlbum",
+                       "keywordlist": [
+                               "album",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the context album"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the context album, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "scope",
+                                       "nullable": false,
+                                       "description": "scope of application of the context album"
+                               },
+                               {
+                                       "argumentName": "writable",
+                                       "nullable": false,
+                                       "description": "true if the album is writable, false otherwise, album defaults to writable if omitted"
+                               },
+                               {
+                                       "argumentName": "schemaName",
+                                       "nullable": false,
+                                       "description": "name of the album schema"
+                               },
+                               {
+                                       "argumentName": "schemaVersion",
+                                       "nullable": true,
+                                       "description": "version of the album schema, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "context album UUID, omit to generate a UUID"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "album description, omit to generate a description"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createContextAlbum",
+                       "description": "Create a context album."
+               },
+               {
+                       "name": "updateAlbum",
+                       "keywordlist": [
+                               "album",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the context album"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the context album, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "scope",
+                                       "nullable": false,
+                                       "description": "scope of application of the context album"
+                               },
+                               {
+                                       "argumentName": "writable",
+                                       "nullable": false,
+                                       "description": "true if the album is writable, false otherwise, album defaults to writable if omitted"
+                               },
+                               {
+                                       "argumentName": "schemaName",
+                                       "nullable": false,
+                                       "description": "name of the album schema"
+                               },
+                               {
+                                       "argumentName": "schemaVersion",
+                                       "nullable": true,
+                                       "description": "version of the album schema, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "context album UUID, omit to not update"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "album description, omit to not update"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updateContextAlbum",
+                       "description": "Update a context album."
+               },
+               {
+                       "name": "listAlbum",
+                       "keywordlist": [
+                               "album",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the context album, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the context album, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listContextAlbum",
+                       "description": "List context albums."
+               },
+               {
+                       "name": "deleteAlbum",
+                       "keywordlist": [
+                               "album",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the context album"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the context album, omit to delete versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteContextAlbum",
+                       "description": "Delete a context album."
+               },
+               {
+                       "name": "validateAlbum",
+                       "keywordlist": [
+                               "album",
+                               "validate"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the context album, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the context album, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.validateContextAlbum",
+                       "description": "Validate context albums."
+               },
+               {
+                       "name": "createTask",
+                       "keywordlist": [
+                               "task",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "task UUID, omit to generate a UUID"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "task description, omit to generate a description"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createTask",
+                       "description": "Create a task."
+               },
+               {
+                       "name": "updateTask",
+                       "keywordlist": [
+                               "task",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "task UUID, omit to not update"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "task description, omit to not update"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updateTask",
+                       "description": "Update a task."
+               },
+               {
+                       "name": "listTask",
+                       "keywordlist": [
+                               "task",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the task, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the task, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listTask",
+                       "description": "List tasks."
+               },
+               {
+                       "name": "deleteTask",
+                       "keywordlist": [
+                               "task",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteTask",
+                       "description": "Delete a task."
+               },
+               {
+                       "name": "validateTask",
+                       "keywordlist": [
+                               "task",
+                               "validate"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the task, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the task, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.validateTask",
+                       "description": "Validate tasks."
+               },
+               {
+                       "name": "createTaskLogic",
+                       "keywordlist": [
+                               "task",
+                               "logic",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "logicFlavour",
+                                       "nullable": true,
+                                       "description": "the task logic flavour for the task, omit to use the default task logic flavour"
+                               },
+                               {
+                                       "argumentName": "logic",
+                                       "nullable": false,
+                                       "description": "the source code for the logic of the task"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createTaskLogic",
+                       "description": "Create logic for a task."
+               },
+               {
+                       "name": "updateTaskLogic",
+                       "keywordlist": [
+                               "task",
+                               "logic",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "logicFlavour",
+                                       "nullable": true,
+                                       "description": "the task logic flavour for the task, omit to not update"
+                               },
+                               {
+                                       "argumentName": "logic",
+                                       "nullable": true,
+                                       "description": "the source code for the logic of the task, omit to not update"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updateTaskLogic",
+                       "description": "Update logic for a task."
+               },
+               {
+                       "name": "listTaskLogic",
+                       "keywordlist": [
+                               "task",
+                               "logic",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to list the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listTaskLogic",
+                       "description": "List task logic."
+               },
+               {
+                       "name": "deleteTaskLogic",
+                       "keywordlist": [
+                               "task",
+                               "logic",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteTaskLogic",
+                       "description": "Delete logic for a task."
+               },
+               {
+                       "name": "createTaskInputField",
+                       "keywordlist": [
+                               "task",
+                               "inputfield",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "fieldName",
+                                       "nullable": false,
+                                       "description": "of the input field"
+                               },
+                               {
+                                       "argumentName": "schemaName",
+                                       "nullable": false,
+                                       "description": "name of the input field schema"
+                               },
+                               {
+                                       "argumentName": "schemaVersion",
+                                       "nullable": true,
+                                       "description": "version of the input field schema, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "optional",
+                                       "nullable": true,
+                                       "description": "indicates if the field is optional, if omitted, the field is mandatory"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createTaskInputField",
+                       "description": "Create a task input field."
+               },
+               {
+                       "name": "listTaskInputField",
+                       "keywordlist": [
+                               "task",
+                               "inputfield",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "fieldName",
+                                       "nullable": true,
+                                       "description": "field name of the input field, omit to list all input fields of the task"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listTaskInputField",
+                       "description": "List task input fields."
+               },
+               {
+                       "name": "deleteTaskInputField",
+                       "keywordlist": [
+                               "task",
+                               "inputfield",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "fieldName",
+                                       "nullable": true,
+                                       "description": "of the input field, omit to delete all input fields"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteTaskInputField",
+                       "description": "Delete a task input field."
+               },
+               {
+                       "name": "createTaskOutputField",
+                       "keywordlist": [
+                               "task",
+                               "outputfield",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "fieldName",
+                                       "nullable": false,
+                                       "description": "of the output field"
+                               },
+                               {
+                                       "argumentName": "schemaName",
+                                       "nullable": false,
+                                       "description": "name of the output field schema"
+                               },
+                               {
+                                       "argumentName": "schemaVersion",
+                                       "nullable": true,
+                                       "description": "version of the output field schema, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "optional",
+                                       "nullable": true,
+                                       "description": "indicates if the field is optional, if omitted, the field is mandatory"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createTaskOutputField",
+                       "description": "Create a task output field."
+               },
+               {
+                       "name": "listTaskOutputField",
+                       "keywordlist": [
+                               "task",
+                               "outputfield",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "fieldName",
+                                       "nullable": true,
+                                       "description": "field name of the output field, omit to list all output fields of the task"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listTaskOutputField",
+                       "description": "List task output fields."
+               },
+               {
+                       "name": "deleteTaskOutputField",
+                       "keywordlist": [
+                               "task",
+                               "outputfield",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "fieldName",
+                                       "nullable": true,
+                                       "description": "of the output field, omit to delete all output fields"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteTaskOutputField",
+                       "description": "Delete a task output field."
+               },
+               {
+                       "name": "createTaskParameter",
+                       "keywordlist": [
+                               "task",
+                               "parameter",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "parName",
+                                       "nullable": false,
+                                       "description": "of the parameter"
+                               },
+                               {
+                                       "argumentName": "defaultValue",
+                                       "nullable": false,
+                                       "description": "of the parameter"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createTaskParameter",
+                       "description": "Create a task parameter."
+               },
+               {
+                       "name": "listTaskParameter",
+                       "keywordlist": [
+                               "task",
+                               "parameter",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "parName",
+                                       "nullable": true,
+                                       "description": "name of the parameter, omit to list all parameters of the task"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listTaskParameter",
+                       "description": "List task parameters."
+               },
+               {
+                       "name": "deleteTaskParameter",
+                       "keywordlist": [
+                               "task",
+                               "parameter",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "parName",
+                                       "nullable": true,
+                                       "description": "of the parameter, omit to delete all task parameters"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteTaskParameter",
+                       "description": "Delete a task parameter."
+               },
+               {
+                       "name": "createTaskContextRef",
+                       "keywordlist": [
+                               "task",
+                               "contextref",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "albumName",
+                                       "nullable": false,
+                                       "description": "name of the context album for the context reference"
+                               },
+                               {
+                                       "argumentName": "albumVersion",
+                                       "nullable": true,
+                                       "description": "version of the context album for the context reference, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createTaskContextRef",
+                       "description": "Create a task context reference."
+               },
+               {
+                       "name": "listTaskContextRef",
+                       "keywordlist": [
+                               "task",
+                               "contextref",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "albumName",
+                                       "nullable": true,
+                                       "description": "name of the context album for the context reference, omit to list all task context references"
+                               },
+                               {
+                                       "argumentName": "albumVersion",
+                                       "nullable": true,
+                                       "description": "version of the context album for the context reference, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listTaskContextRef",
+                       "description": "List task context references."
+               },
+               {
+                       "name": "deleteTaskContextRef",
+                       "keywordlist": [
+                               "task",
+                               "contextref",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "albumName",
+                                       "nullable": true,
+                                       "description": "name of the context album for the context reference, omit to delete all task context references"
+                               },
+                               {
+                                       "argumentName": "albumVersion",
+                                       "nullable": true,
+                                       "description": "version of the context album for the context reference, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deleteTaskContextRef",
+                       "description": "Delete a task context reference."
+               },
+               {
+                       "name": "createPolicy",
+                       "keywordlist": [
+                               "policy",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "template",
+                                       "nullable": true,
+                                       "description": "template used to create the policy, omit to use the default template"
+                               },
+                               {
+                                       "argumentName": "firstState",
+                                       "nullable": false,
+                                       "description": "the first state of the policy"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "policy UUID, omit to generate a UUID"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "policy description, omit to generate a description"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createPolicy",
+                       "description": "Create a policy."
+               },
+               {
+                       "name": "updatePolicy",
+                       "keywordlist": [
+                               "policy",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "template",
+                                       "nullable": true,
+                                       "description": "template used to create the policy, omit to not update"
+                               },
+                               {
+                                       "argumentName": "firstState",
+                                       "nullable": false,
+                                       "description": "the first state of the policy"
+                               },
+                               {
+                                       "argumentName": "uuid",
+                                       "nullable": true,
+                                       "description": "policy UUID, omit to not update"
+                               },
+                               {
+                                       "argumentName": "description",
+                                       "nullable": true,
+                                       "description": "policy description, omit to not update"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updatePolicy",
+                       "description": "Update a policy."
+               },
+               {
+                       "name": "listPolicy",
+                       "keywordlist": [
+                               "policy",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the policy, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the policy, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listPolicy",
+                       "description": "List policies."
+               },
+               {
+                       "name": "deletePolicy",
+                       "keywordlist": [
+                               "policy",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deletePolicy",
+                       "description": "Delete a policy."
+               },
+               {
+                       "name": "validatePolicy",
+                       "keywordlist": [
+                               "policy",
+                               "validate"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": true,
+                                       "description": "name of the policy, omit to list all"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "starting version of the policy, omit to list all versions"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.validatePolicy",
+                       "description": "Validate policies."
+               },
+               {
+                       "name": "createPolicyState",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "triggerName",
+                                       "nullable": false,
+                                       "description": "name of the trigger event for this state"
+                               },
+                               {
+                                       "argumentName": "triggerVersion",
+                                       "nullable": true,
+                                       "description": "version of the trigger event for this state, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "defaultTaskName",
+                                       "nullable": false,
+                                       "description": "the default task name"
+                               },
+                               {
+                                       "argumentName": "defaultTaskVersion",
+                                       "nullable": true,
+                                       "description": "the default task version, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createPolicyState",
+                       "description": "Create a policy state."
+               },
+               {
+                       "name": "updatePolicyState",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "triggerName",
+                                       "nullable": true,
+                                       "description": "name of the trigger event for this state, omit to not update"
+                               },
+                               {
+                                       "argumentName": "triggerVersion",
+                                       "nullable": false,
+                                       "description": "version of the trigger event for this state, set to use latest version of trigger event"
+                               },
+                               {
+                                       "argumentName": "defaultTaskName",
+                                       "nullable": true,
+                                       "description": "the default task name, omit to not update"
+                               },
+                               {
+                                       "argumentName": "defaultTaskVersion",
+                                       "nullable": false,
+                                       "description": "the default task version, set to use latest version of default task"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updatePolicyState",
+                       "description": "Update a policy state."
+               },
+               {
+                       "name": "listPolicyState",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": true,
+                                       "description": "of the state, omit to list all states of the policy"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listPolicyState",
+                       "description": "List policy states."
+               },
+               {
+                       "name": "deletePolicyState",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": true,
+                                       "description": "of the state, omit to delete all states"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deletePolicyState",
+                       "description": "Delete a policy state."
+               },
+               {
+                       "name": "createPolicyStateTaskSelectionLogic",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "selecttasklogic",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "logicFlavour",
+                                       "nullable": true,
+                                       "description": "the task selection logic flavour for the state, omit to use the default task logic flavour"
+                               },
+                               {
+                                       "argumentName": "logic",
+                                       "nullable": false,
+                                       "description": "the source code for the logic of the state"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createPolicyStateTaskSelectionLogic",
+                       "description": "Create task selection logic for a state."
+               },
+               {
+                       "name": "updatePolicyStateTaskSelectionLogic",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "selecttasklogic",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "logicFlavour",
+                                       "nullable": true,
+                                       "description": "the task selection logic flavour for the state, omit to not update"
+                               },
+                               {
+                                       "argumentName": "logic",
+                                       "nullable": true,
+                                       "description": "the source code for the logic of the state, omit to not update"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updatePolicyStateTaskSelectionLogic",
+                       "description": "Update task selection logic for a state."
+               },
+               {
+                       "name": "listPolicyStateTaskSelectionLogic",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "selecttasklogic",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listPolicyStateTaskSelectionLogic",
+                       "description": "List task selection logic for a state."
+               },
+               {
+                       "name": "deletePolicyStateTaskSelectionLogic",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "selecttasklogic",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deletePolicyStateTaskSelectionLogic",
+                       "description": "Delete task selection logic for a state."
+               },
+               {
+                       "name": "createPolicyStateOutput",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "output",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "outputName",
+                                       "nullable": false,
+                                       "description": "of the state output"
+                               },
+                               {
+                                       "argumentName": "eventName",
+                                       "nullable": false,
+                                       "description": "name of the output event for this state output"
+                               },
+                               {
+                                       "argumentName": "eventVersion",
+                                       "nullable": true,
+                                       "description": "version of the output event for this state output, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "nextState",
+                                       "nullable": true,
+                                       "description": "for this state to transition to, omit if this is the last state that the policy transitions to on this branch"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createPolicyStateOutput",
+                       "description": "Create a policy state output."
+               },
+               {
+                       "name": "listPolicyStateOutput",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "output",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "outputName",
+                                       "nullable": true,
+                                       "description": "of the state output, omit to list all outputs of the state"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listPolicyStateOutput",
+                       "description": "List policy state outputs."
+               },
+               {
+                       "name": "deletePolicyStateOutput",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "output",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "outputName",
+                                       "nullable": true,
+                                       "description": "of the state output, omit to delete all state outputs"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deletePolicyStateOutput",
+                       "description": "Delete a policy state output."
+               },
+               {
+                       "name": "createPolicyStateFinalizerLogic",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "finalizerlogic",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "finalizerLogicName",
+                                       "nullable": false,
+                                       "description": "name of the state finalizer logic"
+                               },
+                               {
+                                       "argumentName": "logicFlavour",
+                                       "nullable": true,
+                                       "description": "the policy finalizer logic flavour for the state, omit to use the default task logic flavour"
+                               },
+                               {
+                                       "argumentName": "logic",
+                                       "nullable": false,
+                                       "description": "the source code for the logic of the state"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createPolicyStateFinalizerLogic",
+                       "description": "Create policy finalizer logic for a state."
+               },
+               {
+                       "name": "updatePolicyStateFinalizerLogic",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "finalizerlogic",
+                               "update"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "finalizerLogicName",
+                                       "nullable": false,
+                                       "description": "name of the state finalizer logic"
+                               },
+                               {
+                                       "argumentName": "logicFlavour",
+                                       "nullable": true,
+                                       "description": "the policy finalizer logic flavour for the state, omit to not update"
+                               },
+                               {
+                                       "argumentName": "logic",
+                                       "nullable": true,
+                                       "description": "the source code for the logic of the state, omit to not update"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.updatePolicyStateFinalizerLogic",
+                       "description": "Update policy finalizer logic for a state."
+               },
+               {
+                       "name": "listPolicyStateFinalizerLogic",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "finalizerlogic",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "finalizerLogicName",
+                                       "nullable": false,
+                                       "description": "name of the state finalizer logic"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listPolicyStateFinalizerLogic",
+                       "description": "List policy finalizer logic for a state."
+               },
+               {
+                       "name": "deletePolicyStateFinalizerLogic",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "finalizerlogic",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "finalizerLogicName",
+                                       "nullable": false,
+                                       "description": "name of the state finalizer logic"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deletePolicyStateFinalizerLogic",
+                       "description": "Delete policy finalizer logic for a state."
+               },
+               {
+                       "name": "createPolicyStateTaskRef",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "taskref",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "taskLocalName",
+                                       "nullable": true,
+                                       "description": "local name of the task in the state, omit to use the task name"
+                               },
+                               {
+                                       "argumentName": "taskName",
+                                       "nullable": false,
+                                       "description": "name of the task"
+                               },
+                               {
+                                       "argumentName": "taskVersion",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "outputType",
+                                       "nullable": false,
+                                       "description": "Type of output for the task, must be DIRECT for direct output to a state output or LOGIC for output to state finalizer logic"
+                               },
+                               {
+                                       "argumentName": "outputName",
+                                       "nullable": false,
+                                       "description": "the name of the state output or state state finalizer logic to handle the task output"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createPolicyStateTaskRef",
+                       "description": "Create a policy state task reference."
+               },
+               {
+                       "name": "listPolicyStateTaskRef",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "taskref",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "taskName",
+                                       "nullable": true,
+                                       "description": "name of the task, omit to list all task references"
+                               },
+                               {
+                                       "argumentName": "taskVersion",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listPolicyStateTaskRef",
+                       "description": "List policy state task references."
+               },
+               {
+                       "name": "deletePolicyStateTaskRef",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "taskref",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "taskName",
+                                       "nullable": true,
+                                       "description": "name of the task, omit to delete all task references"
+                               },
+                               {
+                                       "argumentName": "taskVersion",
+                                       "nullable": true,
+                                       "description": "version of the task, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deletePolicyStateTaskRef",
+                       "description": "Delete a policy state task reference."
+               },
+               {
+                       "name": "createPolicyStateContextRef",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "contextref",
+                               "create"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "albumName",
+                                       "nullable": false,
+                                       "description": "name of the context album for the context reference"
+                               },
+                               {
+                                       "argumentName": "albumVersion",
+                                       "nullable": true,
+                                       "description": "version of the context album for the context reference, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.createPolicyStateContextRef",
+                       "description": "Create a policy state context reference."
+               },
+               {
+                       "name": "listPolicyStateContextRef",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "contextref",
+                               "list"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the latest version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "albumName",
+                                       "nullable": true,
+                                       "description": "name of the context album for the context reference, omit to list all task context references"
+                               },
+                               {
+                                       "argumentName": "albumVersion",
+                                       "nullable": true,
+                                       "description": "version of the context album for the context reference, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.listPolicyStateContextRef",
+                       "description": "List policy state context references."
+               },
+               {
+                       "name": "deletePolicyStateContextRef",
+                       "keywordlist": [
+                               "policy",
+                               "state",
+                               "contextref",
+                               "delete"
+                       ],
+                       "argumentList": [
+                               {
+                                       "argumentName": "name",
+                                       "nullable": false,
+                                       "description": "name of the policy"
+                               },
+                               {
+                                       "argumentName": "version",
+                                       "nullable": true,
+                                       "description": "version of the policy, omit to use the default version"
+                               },
+                               {
+                                       "argumentName": "stateName",
+                                       "nullable": false,
+                                       "description": "of the state"
+                               },
+                               {
+                                       "argumentName": "albumName",
+                                       "nullable": true,
+                                       "description": "name of the context album for the context reference, omit to delete all task context references"
+                               },
+                               {
+                                       "argumentName": "albumVersion",
+                                       "nullable": true,
+                                       "description": "version of the context album for the context reference, omit to use the latest version"
+                               }
+                       ],
+                       "apiMethod": "org.onap.policy.apex.model.modelapi.ApexEditorAPI.deletePolicyStateContextRef",
+                       "description": "Delete a policy state context reference."
+               }
+       ]
+}
diff --git a/auth/cli-editor/src/main/resources/examples/scripts/ShellPolicyModel.apex b/auth/cli-editor/src/main/resources/examples/scripts/ShellPolicyModel.apex
new file mode 100644 (file)
index 0000000..1b4507f
--- /dev/null
@@ -0,0 +1,23 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=ShellPolicyModel
+
+schema create name=Test_type flavour=Java schema=java.lang.String
\ No newline at end of file
diff --git a/auth/cli-editor/src/main/resources/examples/scripts/ShellPolicyModelAddSchema.apex b/auth/cli-editor/src/main/resources/examples/scripts/ShellPolicyModelAddSchema.apex
new file mode 100644 (file)
index 0000000..ed1b4e4
--- /dev/null
@@ -0,0 +1,21 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+schema create name=Another_Test_type flavour=Java schema=java.lang.String
\ No newline at end of file
diff --git a/auth/cli-editor/src/main/resources/examples/scripts/TestPolicyAvroEventContext.apex b/auth/cli-editor/src/main/resources/examples/scripts/TestPolicyAvroEventContext.apex
new file mode 100644 (file)
index 0000000..f333a3e
--- /dev/null
@@ -0,0 +1,569 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=Test_PolicyModel
+
+schema create name=AvroBoolean_type flavour=Avro schema=LS
+{
+  "type" : "boolean"
+}
+LE
+
+schema create name=AvroByte_type flavour=Avro schema=LS
+{
+  "type" : "int"
+}
+LE
+
+schema create name=AvroShort_type flavour=Avro schema=LS
+{
+  "type" : "int"
+}
+LE
+
+schema create name=AvroInteger_type flavour=Avro schema=LS
+{
+  "type" : "int"
+}
+LE
+
+schema create name=AvroLong_type flavour=Avro schema=LS
+{
+  "type" : "long"
+}
+LE
+
+schema create name=AvroFloat_type flavour=Avro schema=LS
+{
+  "type" : "float"
+}
+LE
+
+schema create name=AvroDouble_type flavour=Avro schema=LS
+{
+  "type" : "double"
+}
+LE
+
+schema create name=AvroString_type flavour=Avro schema=LS
+{
+  "type" : "string"}
+LE
+
+schema create name=AvroMap_type flavour=Avro schema=LS
+{
+       "type": "map", "values": "string"
+}
+LE
+
+schema create name=AvroArray_type flavour=Avro schema=LS
+{
+       "type": "array", "items": "string"
+}
+LE
+
+schema create name=CustomBoolean_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem000",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "flag", "type": "boolean"}
+  ]
+}
+LE
+
+schema create name=CustomByte_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem001",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "byteValue", "type": "int"}
+  ]
+}
+LE
+
+schema create name=CustomInteger_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem002",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "intValue", "type": "int"}
+  ]
+}
+LE
+
+schema create name=CustomLong_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem003",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "longValue", "type": "long"}
+  ]
+}
+LE
+
+schema create name=CustomFloat_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem004",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "floatValue", "type": "float"}
+  ]
+}
+LE
+
+schema create name=CustomDouble_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem005",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "doubleValue", "type": "double"}
+  ]
+}
+LE
+
+schema create name=CustomString_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem006",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "stringValue", "type": "string"}
+  ]
+}
+LE
+
+schema create name=CustomALong_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem007",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "longValue", "type": "long"}
+  ]
+}
+LE
+
+schema create name=CustomDate0_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem008",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+       {"name": "time"       , "type": "long"},
+       {"name": "year"       , "type": "int"},
+       {"name": "month"      , "type": "int"},
+       {"name": "day"        , "type": "int"},
+       {"name": "hour"       , "type": "int"},
+       {"name": "minute"     , "type": "int"},
+       {"name": "second"     , "type": "int"},
+       {"name": "milliSecond", "type": "int"}
+  ]
+}
+LE
+
+schema create name=CustomDate1_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem009",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "dateValue"     , "type": {
+               "type"      : "record",
+               "name"      : "TestContextItem008",
+               "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+               "fields"    : [
+                       {"name": "time"       , "type": "long"},
+                       {"name": "year"       , "type": "int"},
+                       {"name": "month"      , "type": "int"},
+                       {"name": "day"        , "type": "int"},
+                       {"name": "hour"       , "type": "int"},
+                       {"name": "minute"     , "type": "int"},
+                       {"name": "second"     , "type": "int"},
+                       {"name": "milliSecond", "type": "int"}
+                ]
+               }
+       },
+    {"name": "dst"           , "type": "boolean"},
+    {"name": "timeZoneString", "type": "string"}
+  ]
+}
+LE
+
+schema create name=CustomDate2_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem00A",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "dateValue"     , "type": {
+               "type"      : "record",
+               "name"      : "TestContextItem008",
+               "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+               "fields"    : [
+               {"name": "time"       , "type": "long"},
+                       {"name": "year"       , "type": "int"},
+                       {"name": "month"      , "type": "int"},
+                       {"name": "day"        , "type": "int"},
+                       {"name": "hour"       , "type": "int"},
+                       {"name": "minute"     , "type": "int"},
+                       {"name": "second"     , "type": "int"},
+                       {"name": "milliSecond", "type": "int"}
+                ]
+               }
+       },
+    {"name": "dst"           , "type": "boolean"},
+    {"name": "timeZoneString", "type": "string"},
+    {"name": "utcOffset"     , "type": "int"},
+    {"name": "localeLanguage", "type": "string"},
+    {"name": "localeCountry" , "type": "string"}
+  ]
+}
+LE
+
+schema create name=CustomSet_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem00B",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "setValue", "type": {
+               "type": "array", "items": "string"
+               }
+       }
+  ]
+}
+LE
+
+schema create name=CustomMap_type flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "TestContextItem00C",
+  "namespace" : "com.ericsson.apex.context.test.avro.concepts",
+  "fields"    : [
+    {"name": "mapValue", "type": {
+               "type": "map", "values": "string"
+               }
+       }
+  ]
+}
+LE
+
+event create name=Test_InputEvent nameSpace=com.ericsson.apex.test source=External target=Apex
+
+event parameter create name=Test_InputEvent parName=AvroBoolean   schemaName=AvroBoolean_type optional=false
+event parameter create name=Test_InputEvent parName=AvroByte      schemaName=AvroByte_type    optional=false
+event parameter create name=Test_InputEvent parName=AvroShort     schemaName=AvroShort_type
+event parameter create name=Test_InputEvent parName=AvroInteger   schemaName=AvroInteger_type optional=false
+event parameter create name=Test_InputEvent parName=AvroLong      schemaName=AvroLong_type
+event parameter create name=Test_InputEvent parName=AvroFloat     schemaName=AvroFloat_type
+event parameter create name=Test_InputEvent parName=AvroDouble    schemaName=AvroDouble_type  optional=false
+event parameter create name=Test_InputEvent parName=AvroString    schemaName=AvroString_type
+event parameter create name=Test_InputEvent parName=AvroMap       schemaName=AvroMap_type
+event parameter create name=Test_InputEvent parName=AvroArray     schemaName=AvroArray_type
+event parameter create name=Test_InputEvent parName=CustomBoolean schemaName=CustomBoolean_type
+event parameter create name=Test_InputEvent parName=CustomByte    schemaName=CustomByte_type
+event parameter create name=Test_InputEvent parName=CustomInteger schemaName=CustomInteger_type
+event parameter create name=Test_InputEvent parName=CustomLong    schemaName=CustomLong_type
+event parameter create name=Test_InputEvent parName=CustomFloat   schemaName=CustomFloat_type
+event parameter create name=Test_InputEvent parName=CustomDouble  schemaName=CustomDouble_type
+event parameter create name=Test_InputEvent parName=CustomString  schemaName=CustomString_type
+event parameter create name=Test_InputEvent parName=CustomALong   schemaName=CustomALong_type
+event parameter create name=Test_InputEvent parName=CustomDate0   schemaName=CustomDate0_type
+event parameter create name=Test_InputEvent parName=CustomDate1   schemaName=CustomDate1_type
+event parameter create name=Test_InputEvent parName=CustomDate2   schemaName=CustomDate2_type
+event parameter create name=Test_InputEvent parName=CustomSet     schemaName=CustomSet_type
+event parameter create name=Test_InputEvent parName=CustomMap     schemaName=CustomMap_type
+
+event create name=Test_OutputEvent nameSpace=com.ericsson.apex.test source=External target=Apex
+
+event parameter create name=Test_OutputEvent parName=AvroBoolean   schemaName=AvroBoolean_type
+event parameter create name=Test_OutputEvent parName=AvroByte      schemaName=AvroByte_type
+event parameter create name=Test_OutputEvent parName=AvroShort     schemaName=AvroShort_type
+event parameter create name=Test_OutputEvent parName=AvroInteger   schemaName=AvroInteger_type
+event parameter create name=Test_OutputEvent parName=AvroLong      schemaName=AvroLong_type
+event parameter create name=Test_OutputEvent parName=AvroFloat     schemaName=AvroFloat_type
+event parameter create name=Test_OutputEvent parName=AvroDouble    schemaName=AvroDouble_type
+event parameter create name=Test_OutputEvent parName=AvroString    schemaName=AvroString_type
+event parameter create name=Test_OutputEvent parName=AvroMap       schemaName=AvroMap_type
+event parameter create name=Test_OutputEvent parName=AvroArray     schemaName=AvroArray_type
+event parameter create name=Test_OutputEvent parName=CustomBoolean schemaName=CustomBoolean_type
+event parameter create name=Test_OutputEvent parName=CustomByte    schemaName=CustomByte_type
+event parameter create name=Test_OutputEvent parName=CustomInteger schemaName=CustomInteger_type
+event parameter create name=Test_OutputEvent parName=CustomLong    schemaName=CustomLong_type
+event parameter create name=Test_OutputEvent parName=CustomFloat   schemaName=CustomFloat_type
+event parameter create name=Test_OutputEvent parName=CustomDouble  schemaName=CustomDouble_type
+event parameter create name=Test_OutputEvent parName=CustomString  schemaName=CustomString_type
+event parameter create name=Test_OutputEvent parName=CustomALong   schemaName=CustomALong_type
+event parameter create name=Test_OutputEvent parName=CustomDate0   schemaName=CustomDate0_type
+event parameter create name=Test_OutputEvent parName=CustomDate1   schemaName=CustomDate1_type
+event parameter create name=Test_OutputEvent parName=CustomDate2   schemaName=CustomDate2_type
+event parameter create name=Test_OutputEvent parName=CustomSet     schemaName=CustomSet_type
+event parameter create name=Test_OutputEvent parName=CustomMap     schemaName=CustomMap_type
+
+album create name=AvroBooleanAlbum     scope=policy writable=true schemaName=AvroBoolean_type
+album create name=AvroByteAlbum        scope=policy writable=true schemaName=AvroByte_type
+album create name=AvroShortAlbum       scope=policy writable=true schemaName=AvroShort_type
+album create name=AvroIntegerAlbum     scope=policy writable=true schemaName=AvroInteger_type
+album create name=AvroLongAlbum        scope=policy writable=true schemaName=AvroLong_type
+album create name=AvroFloatAlbum       scope=policy writable=true schemaName=AvroFloat_type
+album create name=AvroDoubleAlbum      scope=policy writable=true schemaName=AvroDouble_type
+album create name=AvroStringAlbum      scope=policy writable=true schemaName=AvroString_type
+album create name=AvroMapAlbum         scope=policy writable=true schemaName=AvroMap_type
+album create name=AvroArrayAlbum       scope=policy writable=true schemaName=AvroArray_type
+album create name=CustomBooleanAlbum   scope=policy writable=true schemaName=CustomBoolean_type
+album create name=CustomByteAlbum      scope=policy writable=true schemaName=CustomByte_type
+album create name=CustomIntegerAlbum   scope=policy writable=true schemaName=CustomInteger_type
+album create name=CustomLongAlbum      scope=policy writable=true schemaName=CustomLong_type
+album create name=CustomFloatAlbum     scope=policy writable=true schemaName=CustomFloat_type
+album create name=CustomDoubleAlbum    scope=policy writable=true schemaName=CustomDouble_type
+album create name=CustomStringAlbum    scope=policy writable=true schemaName=CustomString_type
+album create name=CustomALongAlbum     scope=policy writable=true schemaName=CustomALong_type
+album create name=CustomDate0Album     scope=policy writable=true schemaName=CustomDate0_type
+album create name=CustomDate1Album     scope=policy writable=true schemaName=CustomDate1_type
+album create name=CustomDate2Album     scope=policy writable=true schemaName=CustomDate2_type
+album create name=CustomSetAlbum       scope=policy writable=true schemaName=CustomSet_type
+album create name=CustomMapAlbum       scope=policy writable=true schemaName=CustomMap_type
+
+task create name=Test_Task
+
+task inputfield create name=Test_Task fieldName=AvroBoolean   schemaName=AvroBoolean_type
+task inputfield create name=Test_Task fieldName=AvroByte      schemaName=AvroByte_type
+task inputfield create name=Test_Task fieldName=AvroShort     schemaName=AvroShort_type
+task inputfield create name=Test_Task fieldName=AvroInteger   schemaName=AvroInteger_type
+task inputfield create name=Test_Task fieldName=AvroLong      schemaName=AvroLong_type
+task inputfield create name=Test_Task fieldName=AvroFloat     schemaName=AvroFloat_type
+task inputfield create name=Test_Task fieldName=AvroDouble    schemaName=AvroDouble_type
+task inputfield create name=Test_Task fieldName=AvroString    schemaName=AvroString_type
+task inputfield create name=Test_Task fieldName=AvroMap       schemaName=AvroMap_type
+task inputfield create name=Test_Task fieldName=AvroArray     schemaName=AvroArray_type
+task inputfield create name=Test_Task fieldName=CustomBoolean schemaName=CustomBoolean_type
+task inputfield create name=Test_Task fieldName=CustomByte    schemaName=CustomByte_type
+task inputfield create name=Test_Task fieldName=CustomInteger schemaName=CustomInteger_type
+task inputfield create name=Test_Task fieldName=CustomLong    schemaName=CustomLong_type
+task inputfield create name=Test_Task fieldName=CustomFloat   schemaName=CustomFloat_type
+task inputfield create name=Test_Task fieldName=CustomDouble  schemaName=CustomDouble_type
+task inputfield create name=Test_Task fieldName=CustomString  schemaName=CustomString_type
+task inputfield create name=Test_Task fieldName=CustomALong   schemaName=CustomALong_type
+task inputfield create name=Test_Task fieldName=CustomDate0   schemaName=CustomDate0_type
+task inputfield create name=Test_Task fieldName=CustomDate1   schemaName=CustomDate1_type
+task inputfield create name=Test_Task fieldName=CustomDate2   schemaName=CustomDate2_type
+task inputfield create name=Test_Task fieldName=CustomSet     schemaName=CustomSet_type
+task inputfield create name=Test_Task fieldName=CustomMap     schemaName=CustomMap_type
+
+task outputfield create name=Test_Task fieldName=AvroBoolean   schemaName=AvroBoolean_type
+task outputfield create name=Test_Task fieldName=AvroByte      schemaName=AvroByte_type
+task outputfield create name=Test_Task fieldName=AvroShort     schemaName=AvroShort_type
+task outputfield create name=Test_Task fieldName=AvroInteger   schemaName=AvroInteger_type
+task outputfield create name=Test_Task fieldName=AvroLong      schemaName=AvroLong_type
+task outputfield create name=Test_Task fieldName=AvroFloat     schemaName=AvroFloat_type
+task outputfield create name=Test_Task fieldName=AvroDouble    schemaName=AvroDouble_type
+task outputfield create name=Test_Task fieldName=AvroString    schemaName=AvroString_type
+task outputfield create name=Test_Task fieldName=AvroMap       schemaName=AvroMap_type
+task outputfield create name=Test_Task fieldName=AvroArray     schemaName=AvroArray_type
+task outputfield create name=Test_Task fieldName=CustomBoolean schemaName=CustomBoolean_type
+task outputfield create name=Test_Task fieldName=CustomByte    schemaName=CustomByte_type
+task outputfield create name=Test_Task fieldName=CustomInteger schemaName=CustomInteger_type
+task outputfield create name=Test_Task fieldName=CustomLong    schemaName=CustomLong_type
+task outputfield create name=Test_Task fieldName=CustomFloat   schemaName=CustomFloat_type
+task outputfield create name=Test_Task fieldName=CustomDouble  schemaName=CustomDouble_type
+task outputfield create name=Test_Task fieldName=CustomString  schemaName=CustomString_type
+task outputfield create name=Test_Task fieldName=CustomALong   schemaName=CustomALong_type
+task outputfield create name=Test_Task fieldName=CustomDate0   schemaName=CustomDate0_type
+task outputfield create name=Test_Task fieldName=CustomDate1   schemaName=CustomDate1_type
+task outputfield create name=Test_Task fieldName=CustomDate2   schemaName=CustomDate2_type
+task outputfield create name=Test_Task fieldName=CustomSet     schemaName=CustomSet_type
+task outputfield create name=Test_Task fieldName=CustomMap     schemaName=CustomMap_type
+
+task contextref create name=Test_Task albumName=AvroBooleanAlbum
+task contextref create name=Test_Task albumName=AvroByteAlbum
+task contextref create name=Test_Task albumName=AvroShortAlbum
+task contextref create name=Test_Task albumName=AvroIntegerAlbum
+task contextref create name=Test_Task albumName=AvroLongAlbum
+task contextref create name=Test_Task albumName=AvroFloatAlbum
+task contextref create name=Test_Task albumName=AvroDoubleAlbum
+task contextref create name=Test_Task albumName=AvroStringAlbum
+task contextref create name=Test_Task albumName=AvroMapAlbum
+task contextref create name=Test_Task albumName=AvroArrayAlbum
+task contextref create name=Test_Task albumName=CustomBooleanAlbum
+task contextref create name=Test_Task albumName=CustomByteAlbum
+task contextref create name=Test_Task albumName=CustomIntegerAlbum
+task contextref create name=Test_Task albumName=CustomLongAlbum
+task contextref create name=Test_Task albumName=CustomFloatAlbum
+task contextref create name=Test_Task albumName=CustomDoubleAlbum
+task contextref create name=Test_Task albumName=CustomStringAlbum
+task contextref create name=Test_Task albumName=CustomALongAlbum
+task contextref create name=Test_Task albumName=CustomDate0Album
+task contextref create name=Test_Task albumName=CustomDate1Album
+task contextref create name=Test_Task albumName=CustomDate2Album
+task contextref create name=Test_Task albumName=CustomSetAlbum
+task contextref create name=Test_Task albumName=CustomMapAlbum
+
+task logic create name=Test_Task logicFlavour=JAVASCRIPT logic=LS
+executor.logger.debug(executor.subject.id);
+
+executor.logger.debug(executor.inFields);
+
+executor.getContextAlbum("AvroBooleanAlbum"  ).put("AvroBoolean"  , executor.inFields.get("AvroBoolean"));
+executor.getContextAlbum("AvroByteAlbum"     ).put("AvroByte"     , executor.inFields.get("AvroByte"   ));
+executor.getContextAlbum("AvroShortAlbum"    ).put("AvroShort"    , executor.inFields.get("AvroShort"  ));
+executor.getContextAlbum("AvroIntegerAlbum"  ).put("AvroInteger"  , executor.inFields.get("AvroInteger"));
+executor.getContextAlbum("AvroLongAlbum"     ).put("AvroLong"     , executor.inFields.get("AvroLong"   ));
+executor.getContextAlbum("AvroFloatAlbum"    ).put("AvroFloat"    , executor.inFields.get("AvroFloat"  ));
+executor.getContextAlbum("AvroDoubleAlbum"   ).put("AvroDouble"   , executor.inFields.get("AvroDouble" ));
+executor.getContextAlbum("AvroStringAlbum"   ).put("AvroString"   , executor.inFields.get("AvroString" ));
+executor.getContextAlbum("AvroMapAlbum"      ).put("AvroMap"      , executor.inFields.get("AvroMap"      ));
+executor.getContextAlbum("AvroArrayAlbum"    ).put("AvroArray"    , executor.inFields.get("AvroArray"    ));
+executor.getContextAlbum("CustomBooleanAlbum").put("CustomBoolean", executor.inFields.get("CustomBoolean"));
+executor.getContextAlbum("CustomByteAlbum"   ).put("CustomByte"   , executor.inFields.get("CustomByte"   ));
+executor.getContextAlbum("CustomIntegerAlbum").put("CustomInteger", executor.inFields.get("CustomInteger"));
+executor.getContextAlbum("CustomLongAlbum"   ).put("CustomLong"   , executor.inFields.get("CustomLong"   ));
+executor.getContextAlbum("CustomFloatAlbum"  ).put("CustomFloat"  , executor.inFields.get("CustomFloat"  ));
+executor.getContextAlbum("CustomDoubleAlbum" ).put("CustomDouble" , executor.inFields.get("CustomDouble" ));
+executor.getContextAlbum("CustomStringAlbum" ).put("CustomString" , executor.inFields.get("CustomString" ));
+executor.getContextAlbum("CustomALongAlbum"  ).put("CustomALong"  , executor.inFields.get("CustomALong"  ));
+executor.getContextAlbum("CustomDate0Album"  ).put("CustomDate0"  , executor.inFields.get("CustomDate0"  ));
+executor.getContextAlbum("CustomDate1Album"  ).put("CustomDate1"  , executor.inFields.get("CustomDate1"  ));
+executor.getContextAlbum("CustomDate2Album"  ).put("CustomDate2"  , executor.inFields.get("CustomDate2"  ));
+executor.getContextAlbum("CustomSetAlbum"    ).put("CustomSet"    , executor.inFields.get("CustomSet"    ));
+executor.getContextAlbum("CustomMapAlbum"    ).put("CustomMap"    , executor.inFields.get("CustomMap"    ));
+
+var avroBoolean   = executor.getContextAlbum("AvroBooleanAlbum"  ).get("AvroBoolean"  );
+var avroByte      = executor.getContextAlbum("AvroByteAlbum"     ).get("AvroByte"     );
+var avroShort     = executor.getContextAlbum("AvroShortAlbum"    ).get("AvroShort"    );
+var avroInteger   = executor.getContextAlbum("AvroIntegerAlbum"  ).get("AvroInteger"  );
+var avroLong      = executor.getContextAlbum("AvroLongAlbum"     ).get("AvroLong"     );
+var avroFloat     = executor.getContextAlbum("AvroFloatAlbum"    ).get("AvroFloat"    );
+var avroDouble    = executor.getContextAlbum("AvroDoubleAlbum"   ).get("AvroDouble"   );
+var avroString    = executor.getContextAlbum("AvroStringAlbum"   ).get("AvroString"   );
+var customBoolean = executor.getContextAlbum("CustomBooleanAlbum").get("CustomBoolean");
+var customByte    = executor.getContextAlbum("CustomByteAlbum"   ).get("CustomByte"   );
+var customInteger = executor.getContextAlbum("CustomIntegerAlbum").get("CustomInteger");
+var customLong    = executor.getContextAlbum("CustomLongAlbum"   ).get("CustomLong"   );
+var customFloat   = executor.getContextAlbum("CustomFloatAlbum"  ).get("CustomFloat"  );
+var customDouble  = executor.getContextAlbum("CustomDoubleAlbum" ).get("CustomDouble" );
+var customString  = executor.getContextAlbum("CustomStringAlbum" ).get("CustomString" );
+var customALong   = executor.getContextAlbum("CustomALongAlbum"  ).get("CustomALong"  );
+var customDate0   = executor.getContextAlbum("CustomDate0Album"  ).get("CustomDate0"  );
+var customDate1   = executor.getContextAlbum("CustomDate1Album"  ).get("CustomDate1"  );
+var customDate2   = executor.getContextAlbum("CustomDate2Album"  ).get("CustomDate2"  );
+var customSet     = executor.getContextAlbum("CustomSetAlbum"    ).get("CustomSet"    );
+var customMap     = executor.getContextAlbum("CustomMapAlbum"    ).get("CustomMap"    );
+
+javaIntegerType = Java.type("java.lang.Integer");
+javaLongType    = Java.type("java.lang.Long");
+javaFloatType   = Java.type("java.lang.Float");
+
+avroBoolean    = !avroBoolean;
+avroByte      = new javaIntegerType(avroByte    + 1);
+avroShort     = new javaIntegerType(avroShort   + 1);
+avroInteger   = new javaIntegerType(avroInteger + 1);
+avroLong      = new javaLongType   (avroLong    + 1);
+avroFloat     = new javaFloatType  (avroFloat   + 0.99);
+avroDouble    += 0.99;
+avroString     = avroString + " added to end of string";
+customBoolean.put("flag",       !customBoolean.get("flag"));
+customByte   .put("byteValue"  , customByte   .get("byteValue"  ) + 1);
+customInteger.put("intValue"   , customInteger.get("intValue"   ) + 1);
+customLong   .put("longValue"  , new javaLongType (customLong .get("longValue" ) + 1));
+customFloat  .put("floatValue" , new javaFloatType(customFloat.get("floatValue") + 1.0));
+customDouble .put("doubleValue", customDouble .get("doubleValue") + 1.0);
+customString .put("stringValue", customString .get("stringValue") + " added to end of string");
+customALong  .put("longValue"  , new javaLongType (customALong.get("longValue" ) + 1));
+
+customDate0.put("year",  1922);
+customDate0.put("month", 12);
+customDate0.put("day",   6);
+
+customDate1.put("dateValue", customDate0);
+customDate2.put("dateValue", customDate0);
+
+customSet.get("setValue").add("with");
+customSet.get("setValue").add("a");
+customSet.get("setValue").add("beard");
+
+customMap.get("mapValue").put("love", "hate");
+customMap.get("mapValue").put("summer", "winter");
+customMap.get("mapValue").put("good", "bad");
+
+executor.getContextAlbum("AvroBooleanAlbum"  ).put("AvroBoolean"  , avroBoolean);
+executor.getContextAlbum("AvroByteAlbum"     ).put("AvroByte"     , avroByte);
+executor.getContextAlbum("AvroShortAlbum"    ).put("AvroShort"    , avroShort);
+executor.getContextAlbum("AvroIntegerAlbum"  ).put("AvroInteger"  , avroInteger);
+executor.getContextAlbum("AvroLongAlbum"     ).put("AvroLong"     , avroLong);
+executor.getContextAlbum("AvroFloatAlbum"    ).put("AvroFloat"    , avroFloat);
+executor.getContextAlbum("AvroDoubleAlbum"   ).put("AvroDouble"   , avroDouble);
+executor.getContextAlbum("AvroStringAlbum"   ).put("AvroString"   , avroString);
+executor.getContextAlbum("CustomBooleanAlbum").put("CustomBoolean", customBoolean);
+executor.getContextAlbum("CustomByteAlbum"   ).put("CustomByte"   , customByte);
+executor.getContextAlbum("CustomIntegerAlbum").put("CustomInteger", customInteger);
+executor.getContextAlbum("CustomLongAlbum"   ).put("CustomLong"   , customLong);
+executor.getContextAlbum("CustomFloatAlbum"  ).put("CustomFloat"  , customFloat);
+executor.getContextAlbum("CustomDoubleAlbum" ).put("CustomDouble" , customDouble);
+executor.getContextAlbum("CustomStringAlbum" ).put("CustomString" , customString);
+executor.getContextAlbum("CustomALongAlbum"  ).put("CustomALong"  , customALong);
+executor.getContextAlbum("CustomDate0Album"  ).put("CustomDate0"  , customDate0);
+executor.getContextAlbum("CustomDate1Album"  ).put("CustomDate1"  , customDate1);
+executor.getContextAlbum("CustomDate2Album"  ).put("CustomDate2"  , customDate2);
+executor.getContextAlbum("CustomSetAlbum"    ).put("CustomSet"    , customSet);
+executor.getContextAlbum("CustomMapAlbum"    ).put("CustomMap"    , customMap);
+
+executor.outFields.put("AvroBoolean"  , executor.getContextAlbum("AvroBooleanAlbum"  ).get("AvroBoolean"  ));
+executor.outFields.put("AvroByte"     , executor.getContextAlbum("AvroByteAlbum"     ).get("AvroByte"     ));
+executor.outFields.put("AvroShort"    , executor.getContextAlbum("AvroShortAlbum"    ).get("AvroShort"    ));
+executor.outFields.put("AvroInteger"  , executor.getContextAlbum("AvroIntegerAlbum"  ).get("AvroInteger"  ));
+executor.outFields.put("AvroLong"     , executor.getContextAlbum("AvroLongAlbum"     ).get("AvroLong"     ));
+executor.outFields.put("AvroFloat"    , executor.getContextAlbum("AvroFloatAlbum"    ).get("AvroFloat"    ));
+executor.outFields.put("AvroDouble"   , executor.getContextAlbum("AvroDoubleAlbum"   ).get("AvroDouble"   ));
+executor.outFields.put("AvroString"   , executor.getContextAlbum("AvroStringAlbum"   ).get("AvroString"   ));
+executor.outFields.put("AvroMap"      , executor.getContextAlbum("AvroMapAlbum"      ).get("AvroMap"      ));
+executor.outFields.put("AvroArray"    , executor.getContextAlbum("AvroArrayAlbum"    ).get("AvroArray"    ));
+executor.outFields.put("CustomBoolean", executor.getContextAlbum("CustomBooleanAlbum").get("CustomBoolean"));
+executor.outFields.put("CustomByte"   , executor.getContextAlbum("CustomByteAlbum"   ).get("CustomByte"   ));
+executor.outFields.put("CustomInteger", executor.getContextAlbum("CustomIntegerAlbum").get("CustomInteger"));
+executor.outFields.put("CustomLong"   , executor.getContextAlbum("CustomLongAlbum"   ).get("CustomLong"   ));
+executor.outFields.put("CustomFloat"  , executor.getContextAlbum("CustomFloatAlbum"  ).get("CustomFloat"  ));
+executor.outFields.put("CustomDouble" , executor.getContextAlbum("CustomDoubleAlbum" ).get("CustomDouble" ));
+executor.outFields.put("CustomString" , executor.getContextAlbum("CustomStringAlbum" ).get("CustomString" ));
+executor.outFields.put("CustomALong"  , executor.getContextAlbum("CustomALongAlbum"  ).get("CustomALong"  ));
+executor.outFields.put("CustomDate0"  , executor.getContextAlbum("CustomDate0Album"  ).get("CustomDate0"  ));
+executor.outFields.put("CustomDate1"  , executor.getContextAlbum("CustomDate1Album"  ).get("CustomDate1"  ));
+executor.outFields.put("CustomDate2"  , executor.getContextAlbum("CustomDate2Album"  ).get("CustomDate2"  ));
+executor.outFields.put("CustomSet"    , executor.getContextAlbum("CustomSetAlbum"    ).get("CustomSet"    ));
+executor.outFields.put("CustomMap"    , executor.getContextAlbum("CustomMapAlbum"    ).get("CustomMap"    ));
+
+executor.logger.debug(executor.outFields);
+
+var returnValueType = Java.type("java.lang.Boolean");
+var returnValue = new returnValueType(true);
+
+LE
+
+policy create name=Test_Policy template=FREEFORM firstState=OnlyState
+
+policy state create name=Test_Policy stateName=OnlyState triggerName=Test_InputEvent defaultTaskName=Test_Task
+policy state output create name=Test_Policy stateName=OnlyState outputName=OnlyState2Out eventName=Test_OutputEvent
+policy state taskref create name=Test_Policy stateName=OnlyState taskName=Test_Task outputType=DIRECT outputName=OnlyState2Out
diff --git a/auth/cli-editor/src/main/resources/examples/scripts/TestPolicyJavaEventContext.apex b/auth/cli-editor/src/main/resources/examples/scripts/TestPolicyJavaEventContext.apex
new file mode 100644 (file)
index 0000000..8d17116
--- /dev/null
@@ -0,0 +1,324 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=Test_PolicyModel
+
+schema create name=JavaBoolean_type   flavour=Java schema=java.lang.Boolean
+schema create name=JavaByte_type      flavour=Java schema=java.lang.Byte
+schema create name=JavaShort_type     flavour=Java schema=java.lang.Short
+schema create name=JavaInteger_type   flavour=Java schema=java.lang.Integer
+schema create name=JavaLong_type      flavour=Java schema=java.lang.Long
+schema create name=JavaFloat_type     flavour=Java schema=java.lang.Float
+schema create name=JavaDouble_type    flavour=Java schema=java.lang.Double
+schema create name=JavaString_type    flavour=Java schema=java.lang.String
+schema create name=CustomBoolean_type flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem000
+schema create name=CustomByte_type    flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem001
+schema create name=CustomInteger_type flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem002
+schema create name=CustomLong_type    flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem003
+schema create name=CustomFloat_type   flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem004
+schema create name=CustomDouble_type  flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem005
+schema create name=CustomString_type  flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem006
+schema create name=CustomJLong_type   flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem007
+schema create name=CustomDate0_type   flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem008
+schema create name=CustomDate1_type   flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem009
+schema create name=CustomDate2_type   flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem00A
+schema create name=CustomSet_type     flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem00B
+schema create name=CustomMap_type     flavour=Java schema=org.onap.policy.apex.context.test.concepts.TestContextItem00C
+
+event create name=Test_InputEvent nameSpace=org.onap.policy.apex.test source=External target=Apex
+
+event parameter create name=Test_InputEvent parName=JavaBoolean   schemaName=JavaBoolean_type
+event parameter create name=Test_InputEvent parName=JavaByte      schemaName=JavaByte_type
+event parameter create name=Test_InputEvent parName=JavaShort     schemaName=JavaShort_type
+event parameter create name=Test_InputEvent parName=JavaInteger   schemaName=JavaInteger_type
+event parameter create name=Test_InputEvent parName=JavaLong      schemaName=JavaLong_type
+event parameter create name=Test_InputEvent parName=JavaFloat     schemaName=JavaFloat_type
+event parameter create name=Test_InputEvent parName=JavaDouble    schemaName=JavaDouble_type
+event parameter create name=Test_InputEvent parName=JavaString    schemaName=JavaString_type
+event parameter create name=Test_InputEvent parName=CustomBoolean schemaName=CustomBoolean_type
+event parameter create name=Test_InputEvent parName=CustomByte    schemaName=CustomByte_type
+event parameter create name=Test_InputEvent parName=CustomInteger schemaName=CustomInteger_type
+event parameter create name=Test_InputEvent parName=CustomLong    schemaName=CustomLong_type
+event parameter create name=Test_InputEvent parName=CustomFloat   schemaName=CustomFloat_type
+event parameter create name=Test_InputEvent parName=CustomDouble  schemaName=CustomDouble_type
+event parameter create name=Test_InputEvent parName=CustomString  schemaName=CustomString_type
+event parameter create name=Test_InputEvent parName=CustomJLong   schemaName=CustomJLong_type
+event parameter create name=Test_InputEvent parName=CustomDate0   schemaName=CustomDate0_type
+event parameter create name=Test_InputEvent parName=CustomDate1   schemaName=CustomDate1_type
+event parameter create name=Test_InputEvent parName=CustomDate2   schemaName=CustomDate2_type
+event parameter create name=Test_InputEvent parName=CustomSet     schemaName=CustomSet_type
+event parameter create name=Test_InputEvent parName=CustomMap     schemaName=CustomMap_type
+
+event create name=Test_OutputEvent nameSpace=org.onap.policy.apex.test source=External target=Apex
+
+event parameter create name=Test_OutputEvent parName=JavaBoolean   schemaName=JavaBoolean_type
+event parameter create name=Test_OutputEvent parName=JavaByte      schemaName=JavaByte_type
+event parameter create name=Test_OutputEvent parName=JavaShort     schemaName=JavaShort_type
+event parameter create name=Test_OutputEvent parName=JavaInteger   schemaName=JavaInteger_type
+event parameter create name=Test_OutputEvent parName=JavaLong      schemaName=JavaLong_type
+event parameter create name=Test_OutputEvent parName=JavaFloat     schemaName=JavaFloat_type
+event parameter create name=Test_OutputEvent parName=JavaDouble    schemaName=JavaDouble_type
+event parameter create name=Test_OutputEvent parName=JavaString    schemaName=JavaString_type
+event parameter create name=Test_OutputEvent parName=CustomBoolean schemaName=CustomBoolean_type
+event parameter create name=Test_OutputEvent parName=CustomByte    schemaName=CustomByte_type
+event parameter create name=Test_OutputEvent parName=CustomInteger schemaName=CustomInteger_type
+event parameter create name=Test_OutputEvent parName=CustomLong    schemaName=CustomLong_type
+event parameter create name=Test_OutputEvent parName=CustomFloat   schemaName=CustomFloat_type
+event parameter create name=Test_OutputEvent parName=CustomDouble  schemaName=CustomDouble_type
+event parameter create name=Test_OutputEvent parName=CustomString  schemaName=CustomString_type
+event parameter create name=Test_OutputEvent parName=CustomJLong   schemaName=CustomJLong_type
+event parameter create name=Test_OutputEvent parName=CustomDate0   schemaName=CustomDate0_type
+event parameter create name=Test_OutputEvent parName=CustomDate1   schemaName=CustomDate1_type
+event parameter create name=Test_OutputEvent parName=CustomDate2   schemaName=CustomDate2_type
+event parameter create name=Test_OutputEvent parName=CustomSet     schemaName=CustomSet_type
+event parameter create name=Test_OutputEvent parName=CustomMap     schemaName=CustomMap_type
+
+album create name=JavaBooleanAlbum   scope=policy writable=true schemaName=JavaBoolean_type
+album create name=JavaByteAlbum      scope=policy writable=true schemaName=JavaByte_type
+album create name=JavaShortAlbum     scope=policy writable=true schemaName=JavaShort_type
+album create name=JavaIntegerAlbum   scope=policy writable=true schemaName=JavaInteger_type
+album create name=JavaLongAlbum      scope=policy writable=true schemaName=JavaLong_type
+album create name=JavaFloatAlbum     scope=policy writable=true schemaName=JavaFloat_type
+album create name=JavaDoubleAlbum    scope=policy writable=true schemaName=JavaDouble_type
+album create name=JavaStringAlbum    scope=policy writable=true schemaName=JavaString_type
+album create name=CustomBooleanAlbum scope=policy writable=true schemaName=CustomBoolean_type
+album create name=CustomByteAlbum    scope=policy writable=true schemaName=CustomByte_type
+album create name=CustomIntegerAlbum scope=policy writable=true schemaName=CustomInteger_type
+album create name=CustomLongAlbum    scope=policy writable=true schemaName=CustomLong_type
+album create name=CustomFloatAlbum   scope=policy writable=true schemaName=CustomFloat_type
+album create name=CustomDoubleAlbum  scope=policy writable=true schemaName=CustomDouble_type
+album create name=CustomStringAlbum  scope=policy writable=true schemaName=CustomString_type
+album create name=CustomJLongAlbum   scope=policy writable=true schemaName=CustomJLong_type
+album create name=CustomDate0Album   scope=policy writable=true schemaName=CustomDate0_type
+album create name=CustomDate1Album   scope=policy writable=true schemaName=CustomDate1_type
+album create name=CustomDate2Album   scope=policy writable=true schemaName=CustomDate2_type
+album create name=CustomSetAlbum     scope=policy writable=true schemaName=CustomSet_type
+album create name=CustomMapAlbum     scope=policy writable=true schemaName=CustomMap_type
+
+task create name=Test_Task
+
+task inputfield create name=Test_Task fieldName=JavaBoolean   schemaName=JavaBoolean_type
+task inputfield create name=Test_Task fieldName=JavaByte      schemaName=JavaByte_type
+task inputfield create name=Test_Task fieldName=JavaShort     schemaName=JavaShort_type
+task inputfield create name=Test_Task fieldName=JavaInteger   schemaName=JavaInteger_type
+task inputfield create name=Test_Task fieldName=JavaLong      schemaName=JavaLong_type
+task inputfield create name=Test_Task fieldName=JavaFloat     schemaName=JavaFloat_type
+task inputfield create name=Test_Task fieldName=JavaDouble    schemaName=JavaDouble_type
+task inputfield create name=Test_Task fieldName=JavaString    schemaName=JavaString_type
+task inputfield create name=Test_Task fieldName=CustomBoolean schemaName=CustomBoolean_type
+task inputfield create name=Test_Task fieldName=CustomByte    schemaName=CustomByte_type
+task inputfield create name=Test_Task fieldName=CustomInteger schemaName=CustomInteger_type
+task inputfield create name=Test_Task fieldName=CustomLong    schemaName=CustomLong_type
+task inputfield create name=Test_Task fieldName=CustomFloat   schemaName=CustomFloat_type
+task inputfield create name=Test_Task fieldName=CustomDouble  schemaName=CustomDouble_type
+task inputfield create name=Test_Task fieldName=CustomString  schemaName=CustomString_type
+task inputfield create name=Test_Task fieldName=CustomJLong   schemaName=CustomJLong_type
+task inputfield create name=Test_Task fieldName=CustomDate0   schemaName=CustomDate0_type
+task inputfield create name=Test_Task fieldName=CustomDate1   schemaName=CustomDate1_type
+task inputfield create name=Test_Task fieldName=CustomDate2   schemaName=CustomDate2_type
+task inputfield create name=Test_Task fieldName=CustomSet     schemaName=CustomSet_type
+task inputfield create name=Test_Task fieldName=CustomMap     schemaName=CustomMap_type
+
+task outputfield create name=Test_Task fieldName=JavaBoolean   schemaName=JavaBoolean_type
+task outputfield create name=Test_Task fieldName=JavaByte      schemaName=JavaByte_type
+task outputfield create name=Test_Task fieldName=JavaShort     schemaName=JavaShort_type
+task outputfield create name=Test_Task fieldName=JavaInteger   schemaName=JavaInteger_type
+task outputfield create name=Test_Task fieldName=JavaLong      schemaName=JavaLong_type
+task outputfield create name=Test_Task fieldName=JavaFloat     schemaName=JavaFloat_type
+task outputfield create name=Test_Task fieldName=JavaDouble    schemaName=JavaDouble_type
+task outputfield create name=Test_Task fieldName=JavaString    schemaName=JavaString_type
+task outputfield create name=Test_Task fieldName=CustomBoolean schemaName=CustomBoolean_type
+task outputfield create name=Test_Task fieldName=CustomByte    schemaName=CustomByte_type
+task outputfield create name=Test_Task fieldName=CustomInteger schemaName=CustomInteger_type
+task outputfield create name=Test_Task fieldName=CustomLong    schemaName=CustomLong_type
+task outputfield create name=Test_Task fieldName=CustomFloat   schemaName=CustomFloat_type
+task outputfield create name=Test_Task fieldName=CustomDouble  schemaName=CustomDouble_type
+task outputfield create name=Test_Task fieldName=CustomString  schemaName=CustomString_type
+task outputfield create name=Test_Task fieldName=CustomJLong   schemaName=CustomJLong_type
+task outputfield create name=Test_Task fieldName=CustomDate0   schemaName=CustomDate0_type
+task outputfield create name=Test_Task fieldName=CustomDate1   schemaName=CustomDate1_type
+task outputfield create name=Test_Task fieldName=CustomDate2   schemaName=CustomDate2_type
+task outputfield create name=Test_Task fieldName=CustomSet     schemaName=CustomSet_type
+task outputfield create name=Test_Task fieldName=CustomMap     schemaName=CustomMap_type
+
+task contextref create name=Test_Task albumName=JavaBooleanAlbum
+task contextref create name=Test_Task albumName=JavaByteAlbum
+task contextref create name=Test_Task albumName=JavaShortAlbum
+task contextref create name=Test_Task albumName=JavaIntegerAlbum
+task contextref create name=Test_Task albumName=JavaLongAlbum
+task contextref create name=Test_Task albumName=JavaFloatAlbum
+task contextref create name=Test_Task albumName=JavaDoubleAlbum
+task contextref create name=Test_Task albumName=JavaStringAlbum
+task contextref create name=Test_Task albumName=CustomBooleanAlbum
+task contextref create name=Test_Task albumName=CustomByteAlbum
+task contextref create name=Test_Task albumName=CustomIntegerAlbum
+task contextref create name=Test_Task albumName=CustomLongAlbum
+task contextref create name=Test_Task albumName=CustomFloatAlbum
+task contextref create name=Test_Task albumName=CustomDoubleAlbum
+task contextref create name=Test_Task albumName=CustomStringAlbum
+task contextref create name=Test_Task albumName=CustomJLongAlbum
+task contextref create name=Test_Task albumName=CustomDate0Album
+task contextref create name=Test_Task albumName=CustomDate1Album
+task contextref create name=Test_Task albumName=CustomDate2Album
+task contextref create name=Test_Task albumName=CustomSetAlbum
+task contextref create name=Test_Task albumName=CustomMapAlbum
+
+task logic create name=Test_Task logicFlavour=JAVASCRIPT logic=LS
+executor.logger.debug(executor.subject.id);
+
+executor.logger.debug(executor.inFields);
+
+executor.getContextAlbum("JavaBooleanAlbum"  ).put("JavaBoolean"  , executor.inFields.get("JavaBoolean"  ));
+executor.getContextAlbum("JavaByteAlbum"     ).put("JavaByte"     , executor.inFields.get("JavaByte"     ));
+executor.getContextAlbum("JavaShortAlbum"    ).put("JavaShort"    , executor.inFields.get("JavaShort"    ));
+executor.getContextAlbum("JavaIntegerAlbum"  ).put("JavaInteger"  , executor.inFields.get("JavaInteger"  ));
+executor.getContextAlbum("JavaLongAlbum"     ).put("JavaLong"     , executor.inFields.get("JavaLong"     ));
+executor.getContextAlbum("JavaFloatAlbum"    ).put("JavaFloat"    , executor.inFields.get("JavaFloat"    ));
+executor.getContextAlbum("JavaDoubleAlbum"   ).put("JavaDouble"   , executor.inFields.get("JavaDouble"   ));
+executor.getContextAlbum("JavaStringAlbum"   ).put("JavaString"   , executor.inFields.get("JavaString"   ));
+executor.getContextAlbum("CustomBooleanAlbum").put("CustomBoolean", executor.inFields.get("CustomBoolean"));
+executor.getContextAlbum("CustomByteAlbum"   ).put("CustomByte"   , executor.inFields.get("CustomByte"   ));
+executor.getContextAlbum("CustomIntegerAlbum").put("CustomInteger", executor.inFields.get("CustomInteger"));
+executor.getContextAlbum("CustomLongAlbum"   ).put("CustomLong"   , executor.inFields.get("CustomLong"   ));
+executor.getContextAlbum("CustomFloatAlbum"  ).put("CustomFloat"  , executor.inFields.get("CustomFloat"  ));
+executor.getContextAlbum("CustomDoubleAlbum" ).put("CustomDouble" , executor.inFields.get("CustomDouble" ));
+executor.getContextAlbum("CustomStringAlbum" ).put("CustomString" , executor.inFields.get("CustomString" ));
+executor.getContextAlbum("CustomJLongAlbum"  ).put("CustomJLong"  , executor.inFields.get("CustomJLong"  ));
+executor.getContextAlbum("CustomDate0Album"  ).put("CustomDate0"  , executor.inFields.get("CustomDate0"  ));
+executor.getContextAlbum("CustomDate1Album"  ).put("CustomDate1"  , executor.inFields.get("CustomDate1"  ));
+executor.getContextAlbum("CustomDate2Album"  ).put("CustomDate2"  , executor.inFields.get("CustomDate2"  ));
+executor.getContextAlbum("CustomSetAlbum"    ).put("CustomSet"    , executor.inFields.get("CustomSet"    ));
+executor.getContextAlbum("CustomMapAlbum"    ).put("CustomMap"    , executor.inFields.get("CustomMap"    ));
+
+var javaBoolean   = executor.getContextAlbum("JavaBooleanAlbum"  ).get("JavaBoolean"  );
+var javaByte      = executor.getContextAlbum("JavaByteAlbum"     ).get("JavaByte"     );
+var javaShort     = executor.getContextAlbum("JavaShortAlbum"    ).get("JavaShort"    );
+var javaInteger   = executor.getContextAlbum("JavaIntegerAlbum"  ).get("JavaInteger"  );
+var javaLong      = executor.getContextAlbum("JavaLongAlbum"     ).get("JavaLong"     );
+var javaFloat     = executor.getContextAlbum("JavaFloatAlbum"    ).get("JavaFloat"    );
+var javaDouble    = executor.getContextAlbum("JavaDoubleAlbum"   ).get("JavaDouble"   );
+var javaString    = executor.getContextAlbum("JavaStringAlbum"   ).get("JavaString"   );
+var customBoolean = executor.getContextAlbum("CustomBooleanAlbum").get("CustomBoolean");
+var customByte    = executor.getContextAlbum("CustomByteAlbum"   ).get("CustomByte"   );
+var customInteger = executor.getContextAlbum("CustomIntegerAlbum").get("CustomInteger");
+var customLong    = executor.getContextAlbum("CustomLongAlbum"   ).get("CustomLong"   );
+var customFloat   = executor.getContextAlbum("CustomFloatAlbum"  ).get("CustomFloat"  );
+var customDouble  = executor.getContextAlbum("CustomDoubleAlbum" ).get("CustomDouble" );
+var customString  = executor.getContextAlbum("CustomStringAlbum" ).get("CustomString" );
+var customJLong   = executor.getContextAlbum("CustomJLongAlbum"  ).get("CustomJLong"  );
+var customDate0   = executor.getContextAlbum("CustomDate0Album"  ).get("CustomDate0"  );
+var customDate1   = executor.getContextAlbum("CustomDate1Album"  ).get("CustomDate1"  );
+var customDate2   = executor.getContextAlbum("CustomDate2Album"  ).get("CustomDate2"  );
+var customSet     = executor.getContextAlbum("CustomSetAlbum"    ).get("CustomSet"    );
+var customMap     = executor.getContextAlbum("CustomMapAlbum"    ).get("CustomMap"    );
+
+javaBoolean    = !javaBoolean;
+javaByte      += 1;
+javaShortType  = Java.type("java.lang.Short");
+javaShort      = new javaShortType(javaShort + 1);
+javaInteger   += 1;
+javaLong      += 1;
+javaFloat     += 0.99;
+javaDouble    += 0.99;
+javaString     = javaString + " added to end of string";
+customBoolean.setFlag(!customBoolean);
+customByte   .setByteValue  (customByte   .getByteValue()   + 1);
+customInteger.setIntValue   (customInteger.getIntValue()    + 1);
+customLong   .setLongValue  (customLong   .getLongValue()   + 1);
+customFloat  .setFloatValue (customFloat  .getFloatValue()  + 1);
+customDouble .setDoubleValue(customDouble .getDoubleValue() + 1);
+customString .setStringValue(customString .getStringValue() + " added to end of string");
+customJLong  .setLongValue  (customJLong  .getLongValue()   + 1);
+
+customDate0Type = Java.type("org.onap.policy.apex.context.test.concepts.TestContextItem008");
+customDate0 = new customDate0Type(1499868391);
+
+customDate1Type = Java.type("org.onap.policy.apex.context.test.concepts.TestContextItem009");
+customDate1 = new customDate1Type();
+customDate1.setDateValue(customDate0);
+
+customDate2Type = Java.type("org.onap.policy.apex.context.test.concepts.TestContextItem00A");
+customDate2 = new customDate2Type();
+customDate2.setDateValue(customDate0);
+
+customSet.getSetValue().add("with");
+customSet.getSetValue().add("a");
+customSet.getSetValue().add("beard");
+
+customMap.getMapValue().put("love", "hate");
+customMap.getMapValue().put("summer", "winter");
+customMap.getMapValue().put("good", "bad");
+
+executor.getContextAlbum("JavaBooleanAlbum"  ).put("JavaBoolean"  , javaBoolean);
+executor.getContextAlbum("JavaByteAlbum"     ).put("JavaByte"     , javaByte);
+executor.getContextAlbum("JavaShortAlbum"    ).put("JavaShort"    , javaShort);
+executor.getContextAlbum("JavaIntegerAlbum"  ).put("JavaInteger"  , javaInteger);
+executor.getContextAlbum("JavaLongAlbum"     ).put("JavaLong"     , javaLong);
+executor.getContextAlbum("JavaFloatAlbum"    ).put("JavaFloat"    , javaFloat);
+executor.getContextAlbum("JavaDoubleAlbum"   ).put("JavaDouble"   , javaDouble);
+executor.getContextAlbum("JavaStringAlbum"   ).put("JavaString"   , javaString);
+executor.getContextAlbum("CustomBooleanAlbum").put("CustomBoolean", customBoolean);
+executor.getContextAlbum("CustomByteAlbum"   ).put("CustomByte"   , customByte);
+executor.getContextAlbum("CustomIntegerAlbum").put("CustomInteger", customInteger);
+executor.getContextAlbum("CustomLongAlbum"   ).put("CustomLong"   , customLong);
+executor.getContextAlbum("CustomFloatAlbum"  ).put("CustomFloat"  , customFloat);
+executor.getContextAlbum("CustomDoubleAlbum" ).put("CustomDouble" , customDouble);
+executor.getContextAlbum("CustomStringAlbum" ).put("CustomString" , customString);
+executor.getContextAlbum("CustomJLongAlbum"  ).put("CustomJLong"  , customJLong);
+executor.getContextAlbum("CustomDate0Album"  ).put("CustomDate0"  , customDate0);
+executor.getContextAlbum("CustomDate1Album"  ).put("CustomDate1"  , customDate1);
+executor.getContextAlbum("CustomDate2Album"  ).put("CustomDate2"  , customDate2);
+executor.getContextAlbum("CustomSetAlbum"    ).put("CustomSet"    , customSet);
+executor.getContextAlbum("CustomMapAlbum"    ).put("CustomMap"    , customMap);
+
+executor.outFields.put("JavaBoolean"  , executor.getContextAlbum("JavaBooleanAlbum"  ).get("JavaBoolean"  ));
+executor.outFields.put("JavaByte"     , executor.getContextAlbum("JavaByteAlbum"     ).get("JavaByte"     ));
+executor.outFields.put("JavaShort"    , executor.getContextAlbum("JavaShortAlbum"    ).get("JavaShort"    ));
+executor.outFields.put("JavaInteger"  , executor.getContextAlbum("JavaIntegerAlbum"  ).get("JavaInteger"  ));
+executor.outFields.put("JavaLong"     , executor.getContextAlbum("JavaLongAlbum"     ).get("JavaLong"     ));
+executor.outFields.put("JavaFloat"    , executor.getContextAlbum("JavaFloatAlbum"    ).get("JavaFloat"    ));
+executor.outFields.put("JavaDouble"   , executor.getContextAlbum("JavaDoubleAlbum"   ).get("JavaDouble"   ));
+executor.outFields.put("JavaString"   , executor.getContextAlbum("JavaStringAlbum"   ).get("JavaString"   ));
+executor.outFields.put("CustomBoolean", executor.getContextAlbum("CustomBooleanAlbum").get("CustomBoolean"));
+executor.outFields.put("CustomByte"   , executor.getContextAlbum("CustomByteAlbum"   ).get("CustomByte"   ));
+executor.outFields.put("CustomInteger", executor.getContextAlbum("CustomIntegerAlbum").get("CustomInteger"));
+executor.outFields.put("CustomLong"   , executor.getContextAlbum("CustomLongAlbum"   ).get("CustomLong"   ));
+executor.outFields.put("CustomFloat"  , executor.getContextAlbum("CustomFloatAlbum"  ).get("CustomFloat"  ));
+executor.outFields.put("CustomDouble" , executor.getContextAlbum("CustomDoubleAlbum" ).get("CustomDouble" ));
+executor.outFields.put("CustomString" , executor.getContextAlbum("CustomStringAlbum" ).get("CustomString" ));
+executor.outFields.put("CustomJLong"  , executor.getContextAlbum("CustomJLongAlbum"  ).get("CustomJLong"  ));
+executor.outFields.put("CustomDate0"  , executor.getContextAlbum("CustomDate0Album"  ).get("CustomDate0"  ));
+executor.outFields.put("CustomDate1"  , executor.getContextAlbum("CustomDate1Album"  ).get("CustomDate1"  ));
+executor.outFields.put("CustomDate2"  , executor.getContextAlbum("CustomDate2Album"  ).get("CustomDate2"  ));
+executor.outFields.put("CustomSet"    , executor.getContextAlbum("CustomSetAlbum"    ).get("CustomSet"    ));
+executor.outFields.put("CustomMap"    , executor.getContextAlbum("CustomMapAlbum"    ).get("CustomMap"    )); 
+
+executor.logger.debug(executor.outFields);
+
+var returnValueType = Java.type("java.lang.Boolean");
+var returnValue = new returnValueType(true);
+
+LE
+
+policy create name=Test_Policy template=FREEFORM firstState=OnlyState
+
+policy state create name=Test_Policy stateName=OnlyState triggerName=Test_InputEvent defaultTaskName=Test_Task
+policy state output create name=Test_Policy stateName=OnlyState outputName=OnlyState2Out eventName=Test_OutputEvent
+policy state taskref create name=Test_Policy stateName=OnlyState taskName=Test_Task outputType=DIRECT outputName=OnlyState2Out
diff --git a/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorEventsContext.java b/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorEventsContext.java
new file mode 100644 (file)
index 0000000..43238d6
--- /dev/null
@@ -0,0 +1,103 @@
+/*-
+ * ============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.auth.clieditor;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.utilities.TextFileUtils;
+
+/**
+ * The Class TestCLIEditorEventsContext.
+ */
+public class TestCLIEditorEventsContext {
+    // CHECKSTYLE:OFF: MagicNumber
+
+    /**
+     * Test java context model.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if an Apex error happens
+     */
+    @Test
+    public void testJavaContextModel() throws IOException, ApexModelException {
+        final File tempLogFile = File.createTempFile("TestPolicyJavaEventsAndContext", ".log");
+        final File tempModelFile = File.createTempFile("TestPolicyJavaEventsAndContext", ".json");
+
+        final String[] cliArgs =
+                new String[] {"-c", "src/main/resources/examples/scripts/TestPolicyJavaEventContext.apex", "-l",
+                        tempLogFile.getAbsolutePath(), "-o", tempModelFile.getAbsolutePath()};
+
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(cliArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Get the model and log into strings
+        final String logString = TextFileUtils.getTextFileAsString(tempLogFile.getCanonicalPath());
+        final String modelString = TextFileUtils.getTextFileAsString(tempModelFile.getCanonicalPath());
+
+        // As a sanity check, count the number of non white space characters in log and model files
+        final int logCharCount = logString.replaceAll("\\s+", "").length();
+        final int modelCharCount = modelString.replaceAll("\\s+", "").length();
+
+        assertEquals(25911, logCharCount);
+        assertEquals(46138, modelCharCount);
+
+        tempLogFile.delete();
+        tempModelFile.delete();
+    }
+
+    /**
+     * Test avro context model.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if an Apex error happens
+     */
+    @Test
+    public void testAvroContextModel() throws IOException, ApexModelException {
+        final File tempLogFile = File.createTempFile("TestPolicyAvroEventsAndContext", ".log");
+        final File tempModelFile = File.createTempFile("TestPolicyAvroEventsAndContext", ".json");
+
+        final String[] cliArgs =
+                new String[] {"-c", "src/main/resources/examples/scripts/TestPolicyAvroEventContext.apex", "-l",
+                        tempLogFile.getAbsolutePath(), "-o", tempModelFile.getAbsolutePath()};
+
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(cliArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Get the model and log into strings
+        final String logString = TextFileUtils.getTextFileAsString(tempLogFile.getCanonicalPath());
+        final String modelString = TextFileUtils.getTextFileAsString(tempModelFile.getCanonicalPath());
+
+        // As a sanity check, count the number of non white space characters in log and model files
+        final int logCharCount = logString.replaceAll("\\s+", "").length();
+        final int modelCharCount = modelString.replaceAll("\\s+", "").length();
+
+        assertEquals(30315, logCharCount);
+        assertEquals(52930, modelCharCount);
+
+        tempLogFile.delete();
+        tempModelFile.delete();
+    }
+}
diff --git a/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorOptions.java b/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorOptions.java
new file mode 100644 (file)
index 0000000..87618e1
--- /dev/null
@@ -0,0 +1,277 @@
+/*-
+ * ============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.auth.clieditor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.utilities.TextFileUtils;
+
+/**
+ * The Class TestCLIEditorOptions.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestCLIEditorOptions {
+    // CHECKSTYLE:OFF: MagicNumber
+
+    /**
+     * Test script options log model.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testScriptOptionsLogModel() throws IOException, ApexModelException {
+        final File tempLogFile = File.createTempFile("ShellPolicyModel", ".log");
+        final File tempModelFile = File.createTempFile("ShellPolicyModel", ".json");
+
+        final String[] cliArgs = new String[] {"-c", "src/main/resources/examples/scripts/ShellPolicyModel.apex", "-l",
+                tempLogFile.getAbsolutePath(), "-o", tempModelFile.getAbsolutePath()};
+
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(cliArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Get the model and log into strings
+        final String logString = TextFileUtils.getTextFileAsString(tempLogFile.getCanonicalPath());
+        final String modelString = TextFileUtils.getTextFileAsString(tempModelFile.getCanonicalPath());
+
+        // As a sanity check, count the number of non white space characters in log and model files
+        final int logCharCount = logString.replaceAll("\\s+", "").length();
+        final int modelCharCount = modelString.replaceAll("\\s+", "").length();
+
+        assertEquals(1204, logCharCount);
+        assertEquals(2924, modelCharCount);
+
+        tempLogFile.delete();
+        tempModelFile.delete();
+    }
+
+    /**
+     * Test script options no log no model spec.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testScriptOptionsNoLogNoModelSpec() throws IOException, ApexModelException {
+        final File tempLogFile = File.createTempFile("ShellPolicyModel", ".log");
+        final File tempModelFile = File.createTempFile("ShellPolicyModel", ".json");
+
+        final String[] cliArgs = new String[] {"-c", "src/main/resources/examples/scripts/ShellPolicyModel.apex", "-l",
+                tempLogFile.getAbsolutePath(), "-o", tempModelFile.getAbsolutePath(), "-nl", "-nm"};
+
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(cliArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Get the model and log into strings
+        final String logString = TextFileUtils.getTextFileAsString(tempLogFile.getCanonicalPath());
+        final String modelString = TextFileUtils.getTextFileAsString(tempModelFile.getCanonicalPath());
+
+        // As a sanity check, count the number of non white space characters in log and model files
+        final int logCharCount = logString.replaceAll("\\s+", "").length();
+        final int modelCharCount = modelString.replaceAll("\\s+", "").length();
+
+        assertEquals(0, logCharCount);
+        assertEquals(0, modelCharCount);
+
+        tempLogFile.delete();
+        tempModelFile.delete();
+    }
+
+    /**
+     * Test script options log no model spec.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testScriptOptionsLogNoModelSpec() throws IOException, ApexModelException {
+        final File tempLogFile = File.createTempFile("ShellPolicyModel", ".log");
+        final File tempModelFile = File.createTempFile("ShellPolicyModel", ".json");
+
+        final String[] cliArgs = new String[] {"-c", "src/main/resources/examples/scripts/ShellPolicyModel.apex", "-l",
+                tempLogFile.getAbsolutePath(), "-o", tempModelFile.getAbsolutePath(), "-nm"};
+
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(cliArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Get the model and log into strings
+        final String logString = TextFileUtils.getTextFileAsString(tempLogFile.getCanonicalPath());
+        final String modelString = TextFileUtils.getTextFileAsString(tempModelFile.getCanonicalPath());
+
+        System.err.println(modelString);
+        // As a sanity check, count the number of non white space characters in log and model files
+        final int logCharCount = logString.replaceAll("\\s+", "").length();
+        final int modelCharCount = modelString.replaceAll("\\s+", "").length();
+
+        assertEquals(1204, logCharCount);
+        assertEquals(0, modelCharCount);
+
+        tempLogFile.delete();
+        tempModelFile.delete();
+    }
+
+    /**
+     * Test script options no log model spec.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testScriptOptionsNoLogModelSpec() throws IOException, ApexModelException {
+        final File tempLogFile = File.createTempFile("ShellPolicyModel", ".log");
+        final File tempModelFile = File.createTempFile("ShellPolicyModel", ".json");
+
+        final String[] cliArgs = new String[] {"-c", "src/main/resources/examples/scripts/ShellPolicyModel.apex", "-l",
+                tempLogFile.getAbsolutePath(), "-o", tempModelFile.getAbsolutePath(), "-nl"};
+
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(cliArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Get the model and log into strings
+        final String logString = TextFileUtils.getTextFileAsString(tempLogFile.getCanonicalPath());
+        final String modelString = TextFileUtils.getTextFileAsString(tempModelFile.getCanonicalPath());
+
+        // As a sanity check, count the number of non white space characters in log and model files
+        final int logCharCount = logString.replaceAll("\\s+", "").length();
+        final int modelCharCount = modelString.replaceAll("\\s+", "").length();
+
+        assertEquals(0, logCharCount);
+        assertEquals(2924, modelCharCount);
+
+        tempLogFile.delete();
+        tempModelFile.delete();
+    }
+
+    /**
+     * Test script options no log no model no spec.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testScriptOptionsNoLogNoModelNoSpec() throws IOException, ApexModelException {
+        final String[] cliArgs =
+                new String[] {"-c", "src/main/resources/examples/scripts/ShellPolicyModel.apex", "-nl", "-nm"};
+
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        System.setOut(new PrintStream(baos));
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(cliArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Cursor for log
+        assertFalse(baos.toString().contains(">"));
+
+        // Curly bracket from JSON model
+        assertFalse(baos.toString().contains("{"));
+    }
+
+    /**
+     * Test script options log model no spec.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testScriptOptionsLogModelNoSpec() throws IOException, ApexModelException {
+        final String[] cliArgs = new String[] {"-c", "src/main/resources/examples/scripts/ShellPolicyModel.apex"};
+
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        final PrintStream stdout = System.out;
+        System.setOut(new PrintStream(baos));
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(cliArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Cursor for log
+        assertTrue(baos.toString().contains(">"));
+
+        // Curly bracket from JSON model
+        assertTrue(baos.toString().contains("{"));
+
+        System.setOut(stdout);
+    }
+
+    /**
+     * Test script options input output model.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testScriptOptionsInputOutputModel() throws IOException, ApexModelException {
+        final File tempLogFileIn = File.createTempFile("ShellPolicyModelIn", ".log");
+        final File tempLogFileOut = File.createTempFile("ShellPolicyModelOut", ".log");
+        final File tempModelFileIn = File.createTempFile("ShellPolicyModelIn", ".json");
+        final File tempModelFileOut = File.createTempFile("ShellPolicyModelOut", ".json");
+
+        // Generate input model
+        final String[] cliArgsIn = new String[] {"-c", "src/main/resources/examples/scripts/ShellPolicyModel.apex",
+                "-l", tempLogFileIn.getAbsolutePath(), "-o", tempModelFileIn.getAbsolutePath()};
+
+        final ApexCLIEditorMain cliEditorIn = new ApexCLIEditorMain(cliArgsIn);
+        assertEquals(0, cliEditorIn.getErrorCount());
+
+        // Get the model and log into strings
+        final String tempLogFileInString = TextFileUtils.getTextFileAsString(tempLogFileIn.getCanonicalPath());
+        final String tempModelFileInString = TextFileUtils.getTextFileAsString(tempModelFileIn.getCanonicalPath());
+
+        // As a sanity check, count the number of non white space characters in log and model files
+        final int tempLogFileInCharCount = tempLogFileInString.replaceAll("\\s+", "").length();
+        final int tempModelFileInCharCount = tempModelFileInString.replaceAll("\\s+", "").length();
+
+        assertEquals(1204, tempLogFileInCharCount);
+        assertEquals(2924, tempModelFileInCharCount);
+
+        final String[] cliArgsOut = new String[] {"-i", tempModelFileIn.getAbsolutePath(), "-c",
+                "src/main/resources/examples/scripts/ShellPolicyModelAddSchema.apex", "-l",
+                tempLogFileOut.getAbsolutePath(), "-o", tempModelFileOut.getAbsolutePath()};
+
+        final ApexCLIEditorMain cliEditorOut = new ApexCLIEditorMain(cliArgsOut);
+        assertEquals(0, cliEditorOut.getErrorCount());
+
+        // Get the model and log into strings
+        final String tempLogFileOutString = TextFileUtils.getTextFileAsString(tempLogFileOut.getCanonicalPath());
+        final String tempModelFileOutString = TextFileUtils.getTextFileAsString(tempModelFileOut.getCanonicalPath());
+
+        // As a sanity check, count the number of non white space characters in log and model files
+        final int tempLogFileOutCharCount = tempLogFileOutString.replaceAll("\\s+", "").length();
+        final int tempModelFileOutCharCount = tempModelFileOutString.replaceAll("\\s+", "").length();
+
+        assertEquals(1154, tempLogFileOutCharCount);
+        assertEquals(3356, tempModelFileOutCharCount);
+
+        tempLogFileIn.delete();
+        tempModelFileIn.delete();
+        tempLogFileOut.delete();
+        tempModelFileOut.delete();
+    }
+}
diff --git a/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorScripting.java b/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestCLIEditorScripting.java
new file mode 100644 (file)
index 0000000..b57a72d
--- /dev/null
@@ -0,0 +1,132 @@
+/*-
+ * ============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.auth.clieditor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.utilities.ResourceUtils;
+
+/**
+ * The Class TestCLIEditorScripting.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestCLIEditorScripting {
+
+    private File tempModelFile;
+    private File tempLogFile;
+
+    private String[] sampleLBPolicyArgs;
+
+    private String[] sampleLBPolicyMapArgs;
+
+    /**
+     * Initialise args.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
+    @Before
+    public void initialiseArgs() throws IOException {
+        tempModelFile = File.createTempFile("SampleLBPolicyMap", ".json");
+        tempLogFile = File.createTempFile("SampleLBPolicyMap", ".log");
+
+        sampleLBPolicyArgs = new String[] {"-c", "src/test/resources/scripts/SampleLBPolicy.apex", "-o",
+                tempModelFile.getAbsolutePath(), "-l", tempLogFile.getAbsolutePath()};
+
+        sampleLBPolicyMapArgs = new String[] {"-c", "src/test/resources/scripts/SampleLBPolicy_WithMap.apex", "-o",
+                tempModelFile.getAbsolutePath(), "-l", tempLogFile.getAbsolutePath()};
+    }
+
+    /**
+     * Removes the generated files.
+     */
+    @After
+    public void removeGeneratedFiles() {
+        tempModelFile.delete();
+        tempLogFile.delete();
+    }
+
+    /**
+     * Test sample Fuzzy LB policy script.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testSampleLBPolicyScript() throws IOException, ApexModelException {
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(sampleLBPolicyArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        // Read the file from disk
+        final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<>(AxPolicyModel.class);
+
+        final URL writtenModelURL = ResourceUtils.getLocalFile(tempModelFile.getCanonicalPath());
+        final AxPolicyModel writtenModel = modelReader.read(writtenModelURL.openStream());
+
+        final URL compareModelURL =
+                ResourceUtils.getLocalFile("src/test/resources/compare/FuzzyPolicyModel_Compare.json");
+        final AxPolicyModel compareModel = modelReader.read(compareModelURL.openStream());
+
+        // Ignore key info UUIDs
+        writtenModel.getKeyInformation().getKeyInfoMap().clear();
+        compareModel.getKeyInformation().getKeyInfoMap().clear();
+
+        assertTrue(writtenModel.equals(compareModel));
+    }
+
+    /**
+     * Test sample Fuzzy LB map policy script.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testSampleLBMapPolicyScript() throws IOException, ApexModelException {
+        tempModelFile.delete();
+
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(sampleLBPolicyMapArgs);
+        assertEquals(0, cliEditor.getErrorCount());
+
+        assertTrue(tempModelFile.isFile());
+
+        // Read the file from disk
+        final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<>(AxPolicyModel.class);
+
+        final URL writtenModelURL = ResourceUtils.getLocalFile(tempModelFile.getCanonicalPath());
+        final AxPolicyModel writtenModel = modelReader.read(writtenModelURL.openStream());
+
+        final AxValidationResult validationResult = new AxValidationResult();
+        writtenModel.validate(validationResult);
+        assertEquals(AxValidationResult.ValidationResult.OBSERVATION, validationResult.getValidationResult());
+    }
+}
diff --git a/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestContextAlbums.java b/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestContextAlbums.java
new file mode 100644 (file)
index 0000000..59b2f24
--- /dev/null
@@ -0,0 +1,93 @@
+/*-
+ * ============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.auth.clieditor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.utilities.ResourceUtils;
+
+public class TestContextAlbums {
+    private String[] logicBlockArgs;
+
+    private File tempModelFile;
+
+    @Before
+    public void createTempFiles() throws IOException {
+        tempModelFile = File.createTempFile("TestPolicyModel", ".json");
+
+        logicBlockArgs = new String[] {
+                "-c",
+                "src/test/resources/scripts/ContextAlbums.apex",
+                "-o",
+                tempModelFile.getAbsolutePath(),
+                "-nl"
+        };
+    }
+
+    /**
+     * Removes the generated models.
+     */
+    @After
+    public void removeGeneratedModels() {
+        tempModelFile.delete();
+    }
+
+    /**
+     * Test logic block.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testLogicBlock() throws IOException, ApexModelException {
+        final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(logicBlockArgs);
+        assertEquals(1, cliEditor.getErrorCount());
+
+        // Read the file from disk
+        final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<>(AxPolicyModel.class);
+        modelReader.setValidateFlag(false);
+
+        final URL writtenModelURL = ResourceUtils.getLocalFile(tempModelFile.getCanonicalPath());
+        final AxPolicyModel writtenModel = modelReader.read(writtenModelURL.openStream());
+        assertNotNull(writtenModel);
+
+        final URL compareModelURL = ResourceUtils.getLocalFile("src/test/resources/compare/ContextAlbumsModel_Compare.json");
+        final AxPolicyModel compareModel = modelReader.read(compareModelURL.openStream());
+
+        // Ignore key info UUIDs
+        writtenModel.getKeyInformation().getKeyInfoMap().clear();
+        compareModel.getKeyInformation().getKeyInfoMap().clear();
+
+        assertTrue(writtenModel.equals(compareModel));
+    }
+}
diff --git a/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestFileMacro.java b/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestFileMacro.java
new file mode 100644 (file)
index 0000000..e102bd2
--- /dev/null
@@ -0,0 +1,115 @@
+/*-
+ * ============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.auth.clieditor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Paths;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.utilities.ResourceUtils;
+import org.onap.policy.apex.model.utilities.TextFileUtils;
+
+/**
+ * Test FileMacro in the CLI.
+ */
+public class TestFileMacro {
+       private String[] fileMacroArgs;
+
+       private File tempModelFile;
+       private File tempLogFile;
+
+       @Before
+       public void createTempFiles() throws IOException {
+               tempModelFile = File.createTempFile("TestPolicyModel", ".json");
+               tempLogFile   = File.createTempFile("TestPolicyModel", ".log");
+
+               fileMacroArgs = new String[] {
+                               "-c",
+                               "src/test/resources/scripts/FileMacro.apex",
+                               "-l",
+                               tempLogFile.getCanonicalPath(),
+                               "-o",
+                               tempModelFile.getCanonicalPath(),
+                               "-if",
+                               "true"
+               };
+       }
+
+       @After
+       public void removeGeneratedModels() {
+               tempModelFile.delete();
+       }
+
+       /**
+        * Test logic block macro in CLI scripts.
+        *
+        * @throws IOException Signals that an I/O exception has occurred.
+        * @throws ApexModelException if there is an Apex error
+        */
+       @Test
+       public void testLogicBlock() throws IOException, ApexModelException {
+               final ApexCLIEditorMain cliEditor = new ApexCLIEditorMain(fileMacroArgs);
+               // We expect eight errors
+               assertEquals(8, cliEditor.getErrorCount());
+
+               // Read the file from disk
+               final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<>(AxPolicyModel.class);
+               modelReader.setValidateFlag(false);
+
+               final URL writtenModelURL = ResourceUtils.getLocalFile(tempModelFile.getCanonicalPath());
+               final AxPolicyModel writtenModel = modelReader.read(writtenModelURL.openStream());
+
+               final URL compareModelURL = ResourceUtils.getLocalFile("src/test/resources/compare/FileMacroModel_Compare.json");
+               final AxPolicyModel compareModel = modelReader.read(compareModelURL.openStream());
+
+               // Ignore key info UUIDs
+               writtenModel.getKeyInformation().getKeyInfoMap().clear();
+               compareModel.getKeyInformation().getKeyInfoMap().clear();
+
+               assertTrue(writtenModel.equals(compareModel));
+
+               // The output event is in this file
+               final File outputLogFile = new File(tempLogFile.getCanonicalPath());
+
+               final String outputLogString = TextFileUtils
+                               .getTextFileAsString(outputLogFile.getCanonicalPath())
+                               .replace(Paths.get("").toAbsolutePath().toString() + File.separator, "")
+                               .replaceAll("\\s+", "");
+
+               // We compare the log to what we expect to get
+               final String outputLogCompareString = TextFileUtils
+                               .getTextFileAsString("src/test/resources/compare/FileMacro_Compare.log")
+                               .replaceAll("\\s+", "");
+
+               // Check what we got is what we expected to get
+               assertEquals(outputLogCompareString, outputLogString);
+       }
+}
diff --git a/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestLogicBlock.java b/auth/cli-editor/src/test/java/org/onap/policy/apex/auth/clieditor/TestLogicBlock.java
new file mode 100644 (file)
index 0000000..2fe63fc
--- /dev/null
@@ -0,0 +1,117 @@
+/*-
+ * ============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.auth.clieditor;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
+import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader;
+import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
+import org.onap.policy.apex.model.utilities.ResourceUtils;
+
+public class TestLogicBlock {
+    private String[] logicBlockArgs;
+    private String[] avroSchemaArgs;
+
+    private File tempLogicModelFile;
+    private File tempAvroModelFile;
+
+    @Before
+    public void createTempFiles() throws IOException {
+        tempLogicModelFile = File.createTempFile("TestLogicPolicyModel", ".json");
+        tempAvroModelFile = File.createTempFile("TestAvroPolicyModel", ".json");
+
+        logicBlockArgs = new String[] {"-c", "src/test/resources/scripts/LogicBlock.apex", "-o",
+                tempLogicModelFile.getCanonicalPath(), "-if", "true", "-nl"};
+
+        avroSchemaArgs = new String[] {"-c", "src/test/resources/scripts/AvroSchema.apex", "-o",
+                tempAvroModelFile.getCanonicalPath(), "-nl"};
+    }
+
+    @After
+    public void removeTempFiles() {
+        tempLogicModelFile.delete();
+        tempAvroModelFile.delete();
+    }
+
+    /**
+     * Test logic block.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testLogicBlock() throws IOException, ApexModelException {
+        new ApexCLIEditorMain(logicBlockArgs);
+
+        // Read the file from disk
+        final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<>(AxPolicyModel.class);
+        modelReader.setValidateFlag(false);
+
+        final URL writtenModelURL = ResourceUtils.getLocalFile(tempLogicModelFile.getCanonicalPath());
+        final AxPolicyModel writtenModel = modelReader.read(writtenModelURL.openStream());
+
+        final URL compareModelURL =
+                ResourceUtils.getLocalFile("src/test/resources/compare/LogicBlockModel_Compare.json");
+        final AxPolicyModel compareModel = modelReader.read(compareModelURL.openStream());
+
+        // Ignore key info UUIDs
+        writtenModel.getKeyInformation().getKeyInfoMap().clear();
+        compareModel.getKeyInformation().getKeyInfoMap().clear();
+
+        assertTrue(writtenModel.equals(compareModel));
+    }
+
+    /**
+     * Test avro schema.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ApexModelException if there is an Apex error
+     */
+    @Test
+    public void testAvroSchema() throws IOException, ApexModelException {
+        new ApexCLIEditorMain(avroSchemaArgs);
+
+        // Read the file from disk
+        final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<>(AxPolicyModel.class);
+        modelReader.setValidateFlag(false);
+
+        final URL writtenModelURL = ResourceUtils.getLocalFile(tempAvroModelFile.getCanonicalPath());
+        final AxPolicyModel writtenModel = modelReader.read(writtenModelURL.openStream());
+
+        final URL compareModelURL =
+                ResourceUtils.getLocalFile("src/test/resources/compare/AvroSchemaModel_Compare.json");
+        final AxPolicyModel compareModel = modelReader.read(compareModelURL.openStream());
+
+        // Ignore key info UUIDs
+        writtenModel.getKeyInformation().getKeyInfoMap().clear();
+        compareModel.getKeyInformation().getKeyInfoMap().clear();
+
+        assertTrue(writtenModel.equals(compareModel));
+    }
+}
diff --git a/auth/cli-editor/src/test/resources/compare/AvroSchemaModel_Compare.json b/auth/cli-editor/src/test/resources/compare/AvroSchemaModel_Compare.json
new file mode 100644 (file)
index 0000000..bea9ff9
--- /dev/null
@@ -0,0 +1,239 @@
+{
+   "apexPolicyModel" : {
+      "key" : {
+         "name" : "AvroSchemaPolicy",
+         "version" : "0.0.1"
+      },
+      "keyInformation" : {
+         "key" : {
+            "name" : "AvroSchemaPolicy_KeyInfo",
+            "version" : "0.0.1"
+         },
+         "keyInfoMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "AvroSchemaPolicy",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "AvroSchemaPolicy",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "9964f7a9-06fb-4a35-96d3-316bf625414b",
+                  "description" : "Generated description for concept referred to by key \"AvroSchemaPolicy:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "AvroSchemaPolicy_Albums",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "AvroSchemaPolicy_Albums",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d67c4a9f-f307-472c-b4a7-21f0d3db1563",
+                  "description" : "Generated description for concept referred to by key \"AvroSchemaPolicy_Albums:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "AvroSchemaPolicy_Events",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "AvroSchemaPolicy_Events",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "b7bf6461-f656-48d8-9f4f-fd252f842021",
+                  "description" : "Generated description for concept referred to by key \"AvroSchemaPolicy_Events:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "AvroSchemaPolicy_KeyInfo",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "AvroSchemaPolicy_KeyInfo",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "3f8c3400-40cd-4450-b0bc-01bcdeacfbe2",
+                  "description" : "Generated description for concept referred to by key \"AvroSchemaPolicy_KeyInfo:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "AvroSchemaPolicy_Policies",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "AvroSchemaPolicy_Policies",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f321d8e8-d8d6-43fc-adf3-c22d25668068",
+                  "description" : "Generated description for concept referred to by key \"AvroSchemaPolicy_Policies:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "AvroSchemaPolicy_Schemas",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "AvroSchemaPolicy_Schemas",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "804587e0-ae28-476b-83c1-db1fbd948465",
+                  "description" : "Generated description for concept referred to by key \"AvroSchemaPolicy_Schemas:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "AvroSchemaPolicy_Tasks",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "AvroSchemaPolicy_Tasks",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d7bc0088-20a0-46dc-b7fd-d1bd06a1115e",
+                  "description" : "Generated description for concept referred to by key \"AvroSchemaPolicy_Tasks:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "SchemaLogicTest",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SchemaLogicTest",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a5dd9412-1b95-4a13-91e6-823d7b8806e8",
+                  "description" : "Generated description for concept referred to by key \"SchemaLogicTest:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "Test_InputEvent",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Test_InputEvent",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c2f49864-bd50-42c2-9d20-8af67c59a073",
+                  "description" : "Generated description for concept referred to by key \"Test_InputEvent:0.0.1\""
+               }
+            } ]
+         }
+      },
+      "policies" : {
+         "key" : {
+            "name" : "AvroSchemaPolicy_Policies",
+            "version" : "0.0.1"
+         },
+         "policyMap" : {
+            "entry" : [ ]
+         }
+      },
+      "tasks" : {
+         "key" : {
+            "name" : "AvroSchemaPolicy_Tasks",
+            "version" : "0.0.1"
+         },
+         "taskMap" : {
+            "entry" : [ ]
+         }
+      },
+      "events" : {
+         "key" : {
+            "name" : "AvroSchemaPolicy_Events",
+            "version" : "0.0.1"
+         },
+         "eventMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "Test_InputEvent",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Test_InputEvent",
+                     "version" : "0.0.1"
+                  },
+                  "nameSpace" : "org.onap.policy.apex.test",
+                  "source" : "External",
+                  "target" : "Apex",
+                  "parameter" : {
+                     "entry" : [ {
+                        "key" : "AAA",
+                        "value" : {
+                           "key" : "AAA",
+                           "fieldSchemaKey" : {
+                              "name" : "SchemaLogicTest",
+                              "version" : "0.0.1"
+                           },
+                           "optional" : false
+                        }
+                     }, {
+                        "key" : "BBB",
+                        "value" : {
+                           "key" : "BBB",
+                           "fieldSchemaKey" : {
+                              "name" : "SchemaLogicTest",
+                              "version" : "0.0.1"
+                           },
+                           "optional" : true
+                        }
+                     }, {
+                        "key" : "CCC",
+                        "value" : {
+                           "key" : "CCC",
+                           "fieldSchemaKey" : {
+                              "name" : "SchemaLogicTest",
+                              "version" : "0.0.1"
+                           },
+                           "optional" : false
+                        }
+                     } ]
+                  }
+               }
+            } ]
+         }
+      },
+      "albums" : {
+         "key" : {
+            "name" : "AvroSchemaPolicy_Albums",
+            "version" : "0.0.1"
+         },
+         "albums" : {
+            "entry" : [ ]
+         }
+      },
+      "schemas" : {
+         "key" : {
+            "name" : "AvroSchemaPolicy_Schemas",
+            "version" : "0.0.1"
+         },
+         "schemas" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "SchemaLogicTest",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SchemaLogicTest",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Avro",
+                  "schemaDefinition" : "{\n  \"type\"      : \"record\",\n  \"name\"      : \"VPNActEvent\",\n  \"namespace\" : \"org.onap.policy.apex.domains.vpn.events\",\n  \"fields\"    : [\n    {\"name\": \"nameSpace\", \"type\": \"string\"},\n    {\"name\": \"name\",      \"type\": \"string\"},\n    {\"name\": \"version\",   \"type\": \"string\"},\n    {\"name\": \"source\",    \"type\": \"string\"},\n    {\"name\": \"target\",    \"type\": \"string\"},\n    {\"name\": \"LinkMap\", \"type\": {\n        \"type\" : \"record\",\n        \"name\" : \"LinkMap\",\n        \"namespace\" : \"org.onap.policy.apex.domains.vpn\",\n        \"fields\" : [ ]\n      }\n    },\n    {\"name\": \"CustomerMap\", \"type\": {\n        \"type\" : \"record\",\n        \"name\" : \"CustomerMap\",\n        \"namespace\" : \"org.onap.policy.apex.domains.vpn\",\n        \"fields\" : [ ]\n      }\n    }\n  ]\n}"
+               }
+            } ]
+         }
+      }
+   }
+}
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/compare/ContextAlbumsModel_Compare.json b/auth/cli-editor/src/test/resources/compare/ContextAlbumsModel_Compare.json
new file mode 100644 (file)
index 0000000..3af04cd
--- /dev/null
@@ -0,0 +1,1625 @@
+{
+   "apexPolicyModel" : {
+      "key" : {
+         "name" : "LoadBalancingFuzzyPolicy_PolicyModel",
+         "version" : "0.0.1"
+      },
+      "keyInformation" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_KeyInfo",
+            "version" : "0.0.1"
+         },
+         "keyInfoMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "Adj_CM_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Adj_CM_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "079f22b3-ae0f-4021-b3b2-4c30d30a62b2",
+                  "description" : "Generated description for concept referred to by key \"Adj_CM_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "Adj_KPI_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Adj_KPI_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "b30510dc-980b-4425-8629-d564602245bb",
+                  "description" : "Generated description for concept referred to by key \"Adj_KPI_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "Adjacency_4G_Name_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Adjacency_4G_Name_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0e1c57df-6e40-4610-9e47-c481615c2b4b",
+                  "description" : "Generated description for concept referred to by key \"Adjacency_4G_Name_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "CellA_CM_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellA_CM_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "cc342ac1-6e79-420f-afe1-7968fc0dc2b6",
+                  "description" : "Generated description for concept referred to by key \"CellA_CM_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "CellA_KPI_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellA_KPI_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "879f7be0-07ff-4511-9016-2b80021cf10f",
+                  "description" : "Generated description for concept referred to by key \"CellA_KPI_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "CellA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a06af82c-d298-4531-b1eb-68795573c82a",
+                  "description" : "Generated description for concept referred to by key \"CellA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "CellB_CM_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellB_CM_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "b357ec78-e469-43aa-9bc9-29097108c10b",
+                  "description" : "Generated description for concept referred to by key \"CellB_CM_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "CellB_KPI_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellB_KPI_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "b89da6a0-1e86-4393-a5e0-7f1a24b34f62",
+                  "description" : "Generated description for concept referred to by key \"CellB_KPI_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "CellB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "fc1922ed-b8a3-4544-9cd9-4f0400b92af8",
+                  "description" : "Generated description for concept referred to by key \"CellB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "ENABLE_CONGESTION_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ENABLE_CONGESTION_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f437e1ad-27d9-4b55-b961-46ca6750288b",
+                  "description" : "Generated description for concept referred to by key \"ENABLE_CONGESTION_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "ExternalBag0",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ExternalBag0",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "938c0553-51ec-4846-bae1-972ed3c4d552",
+                  "description" : "Generated description for concept referred to by key \"ExternalBag0:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "ExternalBag1",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ExternalBag1",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a631e868-7da5-4378-9cbd-a3d06dee3c81",
+                  "description" : "Generated description for concept referred to by key \"ExternalBag1:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "ExternalBag2",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ExternalBag2",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "ee693749-0d79-49ac-9027-19056b44d5ce",
+                  "description" : "Generated description for concept referred to by key \"ExternalBag2:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "ExternalBag3",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ExternalBag3",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "ef711a31-c366-4184-8178-f3fa95f8d2cb",
+                  "description" : "Generated description for concept referred to by key \"ExternalBag3:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "FREQ_REL_TYPE_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "FREQ_REL_TYPE_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "300185af-a93a-4e90-ae7d-44d9241d2760",
+                  "description" : "Generated description for concept referred to by key \"FREQ_REL_TYPE_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "FooBar_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "FooBar_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "bc32c94f-d2d0-4dfb-b5bb-6dac8aa19618",
+                  "description" : "Generated description for concept referred to by key \"FooBar_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "3649128f-db51-47fd-9d6c-e78e8ca0f26b",
+                  "description" : "Generated description for concept referred to by key \"HO_EXEC_FAIL_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a089892e-5914-4375-879d-05cdad521c94",
+                  "description" : "Generated description for concept referred to by key \"HO_EXEC_FAIL_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "567f0726-593f-4093-bab4-cf9a0eb4541f",
+                  "description" : "Generated description for concept referred to by key \"LOW_CQI_SAMPLES_RATE_HO_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "75f08508-b4f3-40bd-a171-224da6e6f132",
+                  "description" : "Generated description for concept referred to by key \"LOW_CQI_SAMPLES_RATE_HO_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0a1fef5c-14f3-4357-a128-339e2515bd0a",
+                  "description" : "Generated description for concept referred to by key \"LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "06227743-177e-49fe-9ed7-587e878b57f9",
+                  "description" : "Generated description for concept referred to by key \"LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "5cc28437-d07a-4cd1-a223-38360763ac77",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Albums",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Albums",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "cad40903-a798-42a1-94f6-84d290c646de",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Albums:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Events",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Events",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0f44b5c9-22a4-4873-aaa1-f1b80de5aa4b",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Events:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_KeyInfo",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_KeyInfo",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "5db641cb-d898-4f67-9f64-7dde5ecb12ae",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_KeyInfo:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Policies",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Policies",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f12f6531-bf2f-4c70-b4fe-346d945e52f1",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Policies:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Schemas",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Schemas",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f0e76392-4541-4fdf-910b-bbf4ee19ff2c",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Schemas:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Tasks",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Tasks",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c65233c8-634a-4729-8d74-69061cd62c51",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Tasks:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "OCN_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "OCN_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a6444cc9-b507-4567-981b-c80cf7a4f438",
+                  "description" : "Generated description for concept referred to by key \"OCN_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "OCN_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "OCN_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d7a7d62a-d374-4ec4-a6e5-9a272470b161",
+                  "description" : "Generated description for concept referred to by key \"OCN_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "9ba290d5-c39d-45f0-b18e-0747829eec29",
+                  "description" : "Generated description for concept referred to by key \"PDCCH_CCE_HIGH_LOAD_DELTA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "97f57551-7173-4ac7-9d1a-1582d2fc74a2",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "ab468764-2672-4b6c-b25e-3f65ee92871e",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "eb6d0c05-df8c-4b4c-83b3-5807cf7a0a8d",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_HIGH_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "8476c5a3-612a-4dc0-aad1-ed136322eea7",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_HIGH_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "22564698-5c73-442c-8c44-c7bf9a124bbb",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_LOW_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "09c76386-9d9c-42ce-b969-c85d8e60fd6b",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_LOW_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "ca221793-e153-49d2-8c14-6fec2c294159",
+                  "description" : "Generated description for concept referred to by key \"REL_NUM_HO_WITH_EVENTS_AB_IN_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "93d6d2c2-b98e-4c9a-9841-22858ced9ca9",
+                  "description" : "Generated description for concept referred to by key \"REL_NUM_HO_WITH_EVENTS_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "9fb35bc3-cf7d-4516-b643-4d90315f4aac",
+                  "description" : "Generated description for concept referred to by key \"REL_NUM_HO_WITH_EVENTS_BA_IN_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "18975ab6-836c-4901-9ae2-e189e0277343",
+                  "description" : "Generated description for concept referred to by key \"REL_NUM_HO_WITH_EVENTS_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "1c28ffda-7661-4af7-a60d-e01a8d8bad4d",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "40bc34bb-9ef0-4763-9f73-1cb915bc316d",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "1603fb66-0c15-4ccb-9c1a-3d4c88fe0501",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_HIGH_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "dbc0cd42-4d58-4a1c-a41f-4b0e3c039fc0",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_HIGH_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f22a8dbc-e6d7-4a9f-8702-a4cbe41f6e54",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_LOW_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "6445553b-73e6-43b5-b29d-b1bdf6df73cc",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_LOW_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "6f374a84-bafa-413f-a3ae-32e446646fe9",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "521fb432-25b7-499f-80ff-1a0b7bad69a2",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "32488185-fc0f-45e4-84e3-adcbfb9adf83",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_HIGH_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "cbdfec23-6f95-4b92-8939-3a32603db654",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_HIGH_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "b9089519-42a0-4564-9388-e841ec53033b",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_LOW_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "6e8bc992-2a75-4121-8246-38995e9caf0c",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_LOW_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "RRC_CONGESTION_DELTA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "RRC_CONGESTION_DELTA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "31107997-a363-4a69-a322-82e3e0fd5dd2",
+                  "description" : "Generated description for concept referred to by key \"RRC_CONGESTION_DELTA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "SB_OCN_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SB_OCN_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "30401bd4-108c-4a99-9446-6c6a4b226de7",
+                  "description" : "Generated description for concept referred to by key \"SB_OCN_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "SB_OCN_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SB_OCN_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "88647bbf-111b-4a17-8383-e437c7d45af4",
+                  "description" : "Generated description for concept referred to by key \"SB_OCN_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "SET_TYPE_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SET_TYPE_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0f772d7a-1386-438b-95c0-dbbc05b78183",
+                  "description" : "Generated description for concept referred to by key \"SET_TYPE_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_EARLY_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0eb28504-3bcf-44a3-8ceb-2bbea3bfc93c",
+                  "description" : "Generated description for concept referred to by key \"TOO_EARLY_HO_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_EARLY_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_EARLY_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d940ffd6-c000-4c28-b37b-658e432dbe11",
+                  "description" : "Generated description for concept referred to by key \"TOO_EARLY_HO_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_LATE_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_LATE_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d01604b4-aeb4-49af-bde3-ad8ed9366e62",
+                  "description" : "Generated description for concept referred to by key \"TOO_LATE_HO_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_LATE_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_LATE_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0ce0d4a3-65ce-4b05-8aca-ddae63a2639b",
+                  "description" : "Generated description for concept referred to by key \"TOO_LATE_HO_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TimeStamp_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TimeStamp_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "2fbaea79-62fb-44ce-9810-8bd2d2fd77f9",
+                  "description" : "Generated description for concept referred to by key \"TimeStamp_type:0.0.1\""
+               }
+            } ]
+         }
+      },
+      "policies" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Policies",
+            "version" : "0.0.1"
+         },
+         "policyMap" : {
+            "entry" : [ ]
+         }
+      },
+      "tasks" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Tasks",
+            "version" : "0.0.1"
+         },
+         "taskMap" : {
+            "entry" : [ ]
+         }
+      },
+      "events" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Events",
+            "version" : "0.0.1"
+         },
+         "eventMap" : {
+            "entry" : [ ]
+         }
+      },
+      "albums" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Albums",
+            "version" : "0.0.1"
+         },
+         "albums" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "ExternalBag0",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ExternalBag0",
+                     "version" : "0.0.1"
+                  },
+                  "scope" : "EXTERNAL",
+                  "isWritable" : false,
+                  "itemSchema" : {
+                     "name" : "OCN_AB_type",
+                     "version" : "0.0.1"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "ExternalBag1",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ExternalBag1",
+                     "version" : "0.0.1"
+                  },
+                  "scope" : "EXTERNAL",
+                  "isWritable" : false,
+                  "itemSchema" : {
+                     "name" : "CellA_CM_type",
+                     "version" : "0.0.1"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "ExternalBag2",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ExternalBag2",
+                     "version" : "0.0.1"
+                  },
+                  "scope" : "EXTERNAL",
+                  "isWritable" : false,
+                  "itemSchema" : {
+                     "name" : "TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "ExternalBag3",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ExternalBag3",
+                     "version" : "0.0.1"
+                  },
+                  "scope" : "EXTERNAL",
+                  "isWritable" : false,
+                  "itemSchema" : {
+                     "name" : "FooBar_type",
+                     "version" : "0.0.1"
+                  }
+               }
+            } ]
+         }
+      },
+      "schemas" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Schemas",
+            "version" : "0.0.1"
+         },
+         "schemas" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "Adj_CM_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Adj_CM_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.util.HashMap<String,String>"
+               }
+            }, {
+               "key" : {
+                  "name" : "Adj_KPI_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Adj_KPI_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.util.HashMap<String,String>"
+               }
+            }, {
+               "key" : {
+                  "name" : "Adjacency_4G_Name_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Adjacency_4G_Name_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "CellA_CM_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellA_CM_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.util.HashMap<String,String>"
+               }
+            }, {
+               "key" : {
+                  "name" : "CellA_KPI_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellA_KPI_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.util.HashMap<String,String>"
+               }
+            }, {
+               "key" : {
+                  "name" : "CellA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "CellB_CM_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellB_CM_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.util.HashMap<String,String>"
+               }
+            }, {
+               "key" : {
+                  "name" : "CellB_KPI_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellB_KPI_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.util.HashMap<String,String>"
+               }
+            }, {
+               "key" : {
+                  "name" : "CellB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "ENABLE_CONGESTION_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ENABLE_CONGESTION_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "FREQ_REL_TYPE_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "FREQ_REL_TYPE_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "FooBar_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "FooBar_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "org.onap.policy.apex.sample.sampletypes.sampletypes.Foo"
+               }
+            }, {
+               "key" : {
+                  "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "OCN_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "OCN_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Double"
+               }
+            }, {
+               "key" : {
+                  "name" : "OCN_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "OCN_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Double"
+               }
+            }, {
+               "key" : {
+                  "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "RRC_CONGESTION_DELTA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "RRC_CONGESTION_DELTA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "SB_OCN_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SB_OCN_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "SB_OCN_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SB_OCN_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "SET_TYPE_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SET_TYPE_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_EARLY_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_EARLY_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_EARLY_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_LATE_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_LATE_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_LATE_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_LATE_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "TimeStamp_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TimeStamp_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Long"
+               }
+            } ]
+         }
+      }
+   }
+}
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/compare/FileMacroModel_Compare.json b/auth/cli-editor/src/test/resources/compare/FileMacroModel_Compare.json
new file mode 100644 (file)
index 0000000..5a8796b
--- /dev/null
@@ -0,0 +1,361 @@
+{
+   "apexPolicyModel" : {
+      "key" : {
+         "name" : "MacroFileTest_PolicyModel",
+         "version" : "0.0.1"
+      },
+      "keyInformation" : {
+         "key" : {
+            "name" : "MacroFileTest_PolicyModel_KeyInfo",
+            "version" : "0.0.1"
+         },
+         "keyInfoMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "MacroFileTest_PolicyModel",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFileTest_PolicyModel",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "ac575ca5-e2f5-3958-8873-f6068cd04440",
+                  "description" : "Generated description for concept referred to by key \"MacroFileTest_PolicyModel:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFileTest_PolicyModel_Albums",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFileTest_PolicyModel_Albums",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a8864eb8-4f01-3b39-aaf8-2170311132e1",
+                  "description" : "Generated description for concept referred to by key \"MacroFileTest_PolicyModel_Albums:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFileTest_PolicyModel_Events",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFileTest_PolicyModel_Events",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "bd50051c-0761-38b0-940f-27d9d505c263",
+                  "description" : "Generated description for concept referred to by key \"MacroFileTest_PolicyModel_Events:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFileTest_PolicyModel_KeyInfo",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFileTest_PolicyModel_KeyInfo",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "81634b5c-d5d8-3c15-a80b-d9a12bd87760",
+                  "description" : "Generated description for concept referred to by key \"MacroFileTest_PolicyModel_KeyInfo:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFileTest_PolicyModel_Policies",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFileTest_PolicyModel_Policies",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "810268e3-6a5a-33c9-b24e-4206646cdace",
+                  "description" : "Generated description for concept referred to by key \"MacroFileTest_PolicyModel_Policies:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFileTest_PolicyModel_Schemas",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFileTest_PolicyModel_Schemas",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f8f180ee-551d-30b7-850b-d707318cf25e",
+                  "description" : "Generated description for concept referred to by key \"MacroFileTest_PolicyModel_Schemas:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFileTest_PolicyModel_Tasks",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFileTest_PolicyModel_Tasks",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "ef8c00a8-3736-3e6d-be31-c07116ba67e4",
+                  "description" : "Generated description for concept referred to by key \"MacroFileTest_PolicyModel_Tasks:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type1",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type1",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a2841e1e-e6da-3124-ab58-be301457f49c",
+                  "description" : "Generated description for concept referred to by key \"MacroFile_type1:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type2",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type2",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d4b061be-9c01-3983-951b-8e28bb838a7c",
+                  "description" : "Generated description for concept referred to by key \"MacroFile_type2:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type3",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type3",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "5da3c65c-bc46-3d84-a080-875b67e9a546",
+                  "description" : "Generated description for concept referred to by key \"MacroFile_type3:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type4",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type4",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "19d7bb93-22af-34e3-a8ff-e715fdda265e",
+                  "description" : "Generated description for concept referred to by key \"MacroFile_type4:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type5",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type5",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "15039345-454e-3c11-9524-5e5d149394dc",
+                  "description" : "Generated description for concept referred to by key \"MacroFile_type5:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "dummyTask1",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "dummyTask1",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "41045520-f99e-3f78-8ac8-ebba16b94a98",
+                  "description" : "Generated description for concept referred to by key \"dummyTask1:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "dummyTask2",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "dummyTask2",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "e366e97f-b769-394a-b388-4ad65e105ccb",
+                  "description" : "Generated description for concept referred to by key \"dummyTask2:0.0.1\""
+               }
+            } ]
+         }
+      },
+      "policies" : {
+         "key" : {
+            "name" : "MacroFileTest_PolicyModel_Policies",
+            "version" : "0.0.1"
+         },
+         "policyMap" : {
+            "entry" : [ ]
+         }
+      },
+      "tasks" : {
+         "key" : {
+            "name" : "MacroFileTest_PolicyModel_Tasks",
+            "version" : "0.0.1"
+         },
+         "taskMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "dummyTask1",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "dummyTask1",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "TaskLogic",
+                     "logicFlavour" : "JAVASCRIPT",
+                     "logic" : "var returnValueType = Java.type(\"java.lang.Boolean\");\nvar returnValue = new returnValueType(true);"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "dummyTask2",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "dummyTask2",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "TaskLogic",
+                     "logicFlavour" : "JAVASCRIPT",
+                     "logic" : "x=x+1\nvar returnValueType = Java.type(\"java.lang.Boolean\");\nvar returnValue = new returnValueType(true);\n\nx=x+1\nvar returnValueType = Java.type(\"java.lang.Boolean\");\nvar returnValue = new returnValueType(true);\n\nx=x+1"
+                  }
+               }
+            } ]
+         }
+      },
+      "events" : {
+         "key" : {
+            "name" : "MacroFileTest_PolicyModel_Events",
+            "version" : "0.0.1"
+         },
+         "eventMap" : {
+            "entry" : [ ]
+         }
+      },
+      "albums" : {
+         "key" : {
+            "name" : "MacroFileTest_PolicyModel_Albums",
+            "version" : "0.0.1"
+         },
+         "albums" : {
+            "entry" : [ ]
+         }
+      },
+      "schemas" : {
+         "key" : {
+            "name" : "MacroFileTest_PolicyModel_Schemas",
+            "version" : "0.0.1"
+         },
+         "schemas" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "MacroFile_type1",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type1",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type2",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type2",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type3",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type3",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type4",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type4",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "MacroFile_type5",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "MacroFile_type5",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            } ]
+         }
+      }
+   }
+}
diff --git a/auth/cli-editor/src/test/resources/compare/FileMacro_Compare.log b/auth/cli-editor/src/test/resources/compare/FileMacro_Compare.log
new file mode 100644 (file)
index 0000000..fd1b417
--- /dev/null
@@ -0,0 +1,77 @@
+/root>#-------------------------------------------------------------------------------
+/root># ============LICENSE_START=======================================================
+/root>#  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+/root># ================================================================================
+/root># Licensed under the Apache License, Version 2.0 (the "License");
+/root># you may not use this file except in compliance with the License.
+/root># You may obtain a copy of the License at
+/root># 
+/root>#      http://www.apache.org/licenses/LICENSE-2.0
+/root># 
+/root># Unless required by applicable law or agreed to in writing, software
+/root># distributed under the License is distributed on an "AS IS" BASIS,
+/root># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/root># See the License for the specific language governing permissions and
+/root># limitations under the License.
+/root># 
+/root># SPDX-License-Identifier: Apache-2.0
+/root># ============LICENSE_END=========================================================
+/root>#-------------------------------------------------------------------------------
+/root>
+/root> model create name=MacroFileTest_PolicyModel
+result: SUCCESS
+
+/root> schema create name=MacroFile_type1 flavour=Java schema=java.lang.String
+result: SUCCESS
+
+/root> macro file name "src/test/resources/macros/MacroFile0.apexmacro" must exist and be quoted with double quotes ""
+/root> macro file name "src/test/resources/macros/MacroFile0.apexmacro" must exist and be quoted with double quotes ""
+/root> macro file name """ must exist and be quoted with double quotes ""
+/root> macro file name ""src/test/resources/macros/MacroFile1.apexmacro" must exist and be quoted with double quotes ""
+/root> schema create name=MacroFile_type2 flavour=Java schema=java.lang.String
+result: SUCCESS
+
+/root> schema create name=MacroFile_type3 flavour=Java schema=java.lang.String                      
+result: SUCCESS
+
+/root> schema create name=MacroFile_type4 flavour=Java schema=java.lang.String                      # This is a comment
+result: SUCCESS
+
+/root> macro file name "" must exist and be quoted with double quotes ""
+/root> macro file name "" must exist and be quoted with double quotes ""
+/root> #MACROFILE
+/root> MACROFILE:
+first command word is not alphanumeric or is not a command: MACROFILE:
+/root> file "src/test/resources/macros/MacroFileNonExistant.ApexMacro" specified in Macro File Tag not found
+/root> schema create schema create name=MacroFile_type5 flavour=Java schema=java.lang.String
+result: SUCCESS
+
+/root> 
+/root> task create name=dummyTask1
+result: SUCCESS
+
+/root> task logic create name=dummyTask1 logicFlavour=JAVASCRIPT logic=LS
+var returnValueType = Java.type("java.lang.Boolean");
+var returnValue = new returnValueType(true);
+
+LE
+result: SUCCESS
+
+/root> 
+/root> task create name=dummyTask2
+result: SUCCESS
+
+/root> task logic create name=dummyTask2 logicFlavour=JAVASCRIPT logic=LS
+x=x+1
+var returnValueType = Java.type("java.lang.Boolean");
+var returnValue = new returnValueType(true);
+
+x=x+1
+var returnValueType = Java.type("java.lang.Boolean");
+var returnValue = new returnValueType(true);
+
+x=x+1
+LE
+result: SUCCESS
+
+/root> 
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/compare/FuzzyPolicyModel_Compare.json b/auth/cli-editor/src/test/resources/compare/FuzzyPolicyModel_Compare.json
new file mode 100644 (file)
index 0000000..84874d4
--- /dev/null
@@ -0,0 +1,3897 @@
+{
+   "apexPolicyModel" : {
+      "key" : {
+         "name" : "LoadBalancingFuzzyPolicy_PolicyModel",
+         "version" : "0.0.1"
+      },
+      "keyInformation" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_KeyInfo",
+            "version" : "0.0.1"
+         },
+         "keyInfoMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "Adjacency_4G_Name_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Adjacency_4G_Name_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "fa58e9cd-488e-4eec-9ccb-e156f6a43a35",
+                  "description" : "Generated description for concept referred to by key \"Adjacency_4G_Name_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "CellA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c41e1e24-ab71-4dbd-a2b7-7d349bade884",
+                  "description" : "Generated description for concept referred to by key \"CellA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "CellB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f2d43289-fcf7-4c9c-a186-ecd2d49fafa9",
+                  "description" : "Generated description for concept referred to by key \"CellB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "ENABLE_CONGESTION_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ENABLE_CONGESTION_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a2217f20-97fd-457e-8f28-30bf0c02068f",
+                  "description" : "Generated description for concept referred to by key \"ENABLE_CONGESTION_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "FREQ_REL_TYPE_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "FREQ_REL_TYPE_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "628be116-99bb-4c8f-a833-94a452f6a582",
+                  "description" : "Generated description for concept referred to by key \"FREQ_REL_TYPE_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "37c742ed-f039-48eb-a20d-2931940f4bf1",
+                  "description" : "Generated description for concept referred to by key \"HO_EXEC_FAIL_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "29c1077f-c382-4520-80b8-9d0ddad7547a",
+                  "description" : "Generated description for concept referred to by key \"HO_EXEC_FAIL_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0de782d4-f6d7-42f1-b3e4-fbc3d917a68b",
+                  "description" : "Generated description for concept referred to by key \"LOW_CQI_SAMPLES_RATE_HO_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d81522cd-b143-4a0c-aedb-271725fc2506",
+                  "description" : "Generated description for concept referred to by key \"LOW_CQI_SAMPLES_RATE_HO_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "828e3584-d194-48d1-8a49-45afb8b0cd5d",
+                  "description" : "Generated description for concept referred to by key \"LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "88d9aaec-c2de-47d1-9264-4318e76ebdee",
+                  "description" : "Generated description for concept referred to by key \"LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_InputEvent",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_InputEvent",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f99b46f4-42fa-4873-a3f0-663ef950e917",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_InputEvent:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_OutputEvent",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_OutputEvent",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "90d481b5-d0df-4167-a14b-6c1fd9ee4a4c",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_OutputEvent:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_Policy",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_Policy",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "26c27f19-c56f-4ddc-8561-bfa1a89dc9db",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_Policy:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "aeb5ab2b-0b60-41ac-889d-787e3b59fd19",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Albums",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Albums",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "b72eb47e-6b70-419c-ba8d-1ed55a91aa2f",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Albums:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Events",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Events",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "952468c2-386e-4984-9f46-8c84208ad9bc",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Events:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_KeyInfo",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_KeyInfo",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0e7c3475-8fbc-446d-afbe-d54ae56fc0ee",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_KeyInfo:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Policies",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Policies",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c2130341-3a43-41ae-a942-5aeba3f86724",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Policies:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Schemas",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Schemas",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "09dd200b-9280-4f27-a85a-fab9fa276586",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Schemas:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Tasks",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Tasks",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "4eb61362-ef5b-454e-b540-e1301df8108b",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_PolicyModel_Tasks:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_Task",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_Task",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "76e762b7-8fdf-4d02-b4f3-60bf340997fd",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_Task:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_Task_Post",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_Task_Post",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "3252ff86-02ee-4561-a818-4c7a12546045",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_Task_Post:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_Task_Pre",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_Task_Pre",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c4fde272-52f0-4ac0-a37b-a25aa043e122",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_Task_Pre:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_fromFuzzy",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_fromFuzzy",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "54b771b4-11af-43eb-94a2-d97e8b585515",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_fromFuzzy:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_toFuzzy",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_toFuzzy",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "960205cd-3cf1-4e90-a456-a0ac59bb06d5",
+                  "description" : "Generated description for concept referred to by key \"LoadBalancingFuzzyPolicy_toFuzzy:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "OCN_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "OCN_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0cb3cebd-9f7e-40b6-be2b-83da8a3bb249",
+                  "description" : "Generated description for concept referred to by key \"OCN_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "OCN_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "OCN_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "db41babb-500e-4369-acea-26b312de47c3",
+                  "description" : "Generated description for concept referred to by key \"OCN_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c1374266-f148-4c6e-9aa0-eb4ad4e812a0",
+                  "description" : "Generated description for concept referred to by key \"PDCCH_CCE_HIGH_LOAD_DELTA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "285b0913-0d66-4546-8893-95bf0d267911",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "1e5556fe-bdff-4520-b8ae-606c4275b4b3",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "857cd994-c1ce-43b2-94f0-215e824cab75",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_HIGH_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "6a9fa224-1568-4da7-be8a-5fc897373f57",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_HIGH_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "cec3b03a-7c12-4b37-b60f-79c95a3adb97",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_LOW_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "2e0caf46-5081-4a67-bb64-6a4ff2721b6b",
+                  "description" : "Generated description for concept referred to by key \"REL_HO_EXEC_FAIL_RATE_LOW_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "4b96864a-8922-4698-8dba-ba6d1ecc042c",
+                  "description" : "Generated description for concept referred to by key \"REL_NUM_HO_WITH_EVENTS_AB_IN_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "670708b1-5bf4-4f0c-b6f1-47affe918580",
+                  "description" : "Generated description for concept referred to by key \"REL_NUM_HO_WITH_EVENTS_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "eacfe8b0-dd88-44b0-8f7d-89bd0fc8cd8a",
+                  "description" : "Generated description for concept referred to by key \"REL_NUM_HO_WITH_EVENTS_BA_IN_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "44129948-e185-4a0d-ac60-2851d84384c4",
+                  "description" : "Generated description for concept referred to by key \"REL_NUM_HO_WITH_EVENTS_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c76dfe42-a395-4977-b3c7-b9777f2873b3",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "ec904666-3e58-4d70-badc-aef1212a9b99",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "16f74164-13fe-4964-9ca3-76bf2448d31e",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_HIGH_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "9ee26f19-efc8-4df2-afef-6f0fb5b7fd41",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_HIGH_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "18553ab2-fe2b-4068-97eb-084f22e159b9",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_LOW_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d91c982c-1e31-499f-9c9f-a98407e24ef3",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_EARLY_HO_RATE_LOW_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f27118e0-202f-4405-b5fa-98d429ff8f27",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "11a5c54a-2ce6-4fbc-bc6e-ce4dd7af0a6a",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "43e67457-2c69-48ff-90f6-bc5373e45b8d",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_HIGH_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "66664526-6223-41de-af3d-991f415a84ae",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_HIGH_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "b5d23339-ea3a-414a-a981-b6581dfe7503",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_LOW_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a2043cac-1a9b-4e8a-beb9-858eb6fe025f",
+                  "description" : "Generated description for concept referred to by key \"REL_TOO_LATE_HO_RATE_LOW_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "RRC_CONGESTION_DELTA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "RRC_CONGESTION_DELTA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "354b79b0-aebd-4bee-a69b-41f833e71b4d",
+                  "description" : "Generated description for concept referred to by key \"RRC_CONGESTION_DELTA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "SB_OCN_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SB_OCN_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "e9d87f24-c9ec-4e80-8b22-b598b4db11bb",
+                  "description" : "Generated description for concept referred to by key \"SB_OCN_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "SB_OCN_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SB_OCN_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c53ff327-62dd-4615-ab9f-bafa5977e0ce",
+                  "description" : "Generated description for concept referred to by key \"SB_OCN_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "SET_TYPE_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SET_TYPE_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "452d1d58-6290-42c7-b78e-088cc4f2280b",
+                  "description" : "Generated description for concept referred to by key \"SET_TYPE_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_EARLY_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f4ef6fe9-93a6-4558-b16b-006d2280c0e1",
+                  "description" : "Generated description for concept referred to by key \"TOO_EARLY_HO_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_EARLY_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_EARLY_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0d2b78ee-8e18-4145-9ddb-23b122a7144f",
+                  "description" : "Generated description for concept referred to by key \"TOO_EARLY_HO_RATE_BA_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_LATE_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_LATE_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d672e9e4-7136-4aa8-aa90-1b724e244f3e",
+                  "description" : "Generated description for concept referred to by key \"TOO_LATE_HO_RATE_AB_type:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_LATE_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_LATE_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "58ccdd5c-69c1-4c1d-9075-1953b5f5b39c",
+                  "description" : "Generated description for concept referred to by key \"TOO_LATE_HO_RATE_BA_type:0.0.1\""
+               }
+            } ]
+         }
+      },
+      "policies" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Policies",
+            "version" : "0.0.1"
+         },
+         "policyMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_Policy",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "policyKey" : {
+                     "name" : "LoadBalancingFuzzyPolicy_Policy",
+                     "version" : "0.0.1"
+                  },
+                  "template" : "FREEFORM",
+                  "state" : {
+                     "entry" : [ {
+                        "key" : "FuzzyExecute",
+                        "value" : {
+                           "stateKey" : {
+                              "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                              "parentKeyVersion" : "0.0.1",
+                              "parentLocalName" : "NULL",
+                              "localName" : "FuzzyExecute"
+                           },
+                           "trigger" : {
+                              "name" : "LoadBalancingFuzzyPolicy_toFuzzy",
+                              "version" : "0.0.1"
+                           },
+                           "stateOutputs" : {
+                              "entry" : [ {
+                                 "key" : "Fuzzy2Post",
+                                 "value" : {
+                                    "key" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "FuzzyExecute",
+                                       "localName" : "Fuzzy2Post"
+                                    },
+                                    "outgoingEvent" : {
+                                       "name" : "LoadBalancingFuzzyPolicy_fromFuzzy",
+                                       "version" : "0.0.1"
+                                    },
+                                    "nextState" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "NULL",
+                                       "localName" : "PostExecute"
+                                    }
+                                 }
+                              } ]
+                           },
+                           "contextAlbumReference" : [ ],
+                           "taskSelectionLogic" : {
+                              "key" : "NULL",
+                              "logicFlavour" : "UNDEFINED",
+                              "logic" : ""
+                           },
+                           "stateFinalizerLogicMap" : {
+                              "entry" : [ ]
+                           },
+                           "defaultTask" : {
+                              "name" : "LoadBalancingFuzzyPolicy_Task",
+                              "version" : "0.0.1"
+                           },
+                           "taskReferences" : {
+                              "entry" : [ {
+                                 "key" : {
+                                    "name" : "LoadBalancingFuzzyPolicy_Task",
+                                    "version" : "0.0.1"
+                                 },
+                                 "value" : {
+                                    "key" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "FuzzyExecute",
+                                       "localName" : "LoadBalancingFuzzyPolicy_Policy"
+                                    },
+                                    "outputType" : "DIRECT",
+                                    "output" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "FuzzyExecute",
+                                       "localName" : "Fuzzy2Post"
+                                    }
+                                 }
+                              } ]
+                           }
+                        }
+                     }, {
+                        "key" : "PostExecute",
+                        "value" : {
+                           "stateKey" : {
+                              "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                              "parentKeyVersion" : "0.0.1",
+                              "parentLocalName" : "NULL",
+                              "localName" : "PostExecute"
+                           },
+                           "trigger" : {
+                              "name" : "LoadBalancingFuzzyPolicy_fromFuzzy",
+                              "version" : "0.0.1"
+                           },
+                           "stateOutputs" : {
+                              "entry" : [ {
+                                 "key" : "Post2Out",
+                                 "value" : {
+                                    "key" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "PostExecute",
+                                       "localName" : "Post2Out"
+                                    },
+                                    "outgoingEvent" : {
+                                       "name" : "LoadBalancingFuzzyPolicy_OutputEvent",
+                                       "version" : "0.0.1"
+                                    },
+                                    "nextState" : {
+                                       "parentKeyName" : "NULL",
+                                       "parentKeyVersion" : "0.0.0",
+                                       "parentLocalName" : "NULL",
+                                       "localName" : "NULL"
+                                    }
+                                 }
+                              } ]
+                           },
+                           "contextAlbumReference" : [ ],
+                           "taskSelectionLogic" : {
+                              "key" : "NULL",
+                              "logicFlavour" : "UNDEFINED",
+                              "logic" : ""
+                           },
+                           "stateFinalizerLogicMap" : {
+                              "entry" : [ ]
+                           },
+                           "defaultTask" : {
+                              "name" : "LoadBalancingFuzzyPolicy_Task_Post",
+                              "version" : "0.0.1"
+                           },
+                           "taskReferences" : {
+                              "entry" : [ {
+                                 "key" : {
+                                    "name" : "LoadBalancingFuzzyPolicy_Task_Post",
+                                    "version" : "0.0.1"
+                                 },
+                                 "value" : {
+                                    "key" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "PostExecute",
+                                       "localName" : "LoadBalancingFuzzyPolicy_Policy"
+                                    },
+                                    "outputType" : "DIRECT",
+                                    "output" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "PostExecute",
+                                       "localName" : "Post2Out"
+                                    }
+                                 }
+                              } ]
+                           }
+                        }
+                     }, {
+                        "key" : "PreExecute",
+                        "value" : {
+                           "stateKey" : {
+                              "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                              "parentKeyVersion" : "0.0.1",
+                              "parentLocalName" : "NULL",
+                              "localName" : "PreExecute"
+                           },
+                           "trigger" : {
+                              "name" : "LoadBalancingFuzzyPolicy_InputEvent",
+                              "version" : "0.0.1"
+                           },
+                           "stateOutputs" : {
+                              "entry" : [ {
+                                 "key" : "Pre2Fuzzy",
+                                 "value" : {
+                                    "key" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "PreExecute",
+                                       "localName" : "Pre2Fuzzy"
+                                    },
+                                    "outgoingEvent" : {
+                                       "name" : "LoadBalancingFuzzyPolicy_toFuzzy",
+                                       "version" : "0.0.1"
+                                    },
+                                    "nextState" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "NULL",
+                                       "localName" : "FuzzyExecute"
+                                    }
+                                 }
+                              } ]
+                           },
+                           "contextAlbumReference" : [ ],
+                           "taskSelectionLogic" : {
+                              "key" : "NULL",
+                              "logicFlavour" : "UNDEFINED",
+                              "logic" : ""
+                           },
+                           "stateFinalizerLogicMap" : {
+                              "entry" : [ ]
+                           },
+                           "defaultTask" : {
+                              "name" : "LoadBalancingFuzzyPolicy_Task_Pre",
+                              "version" : "0.0.1"
+                           },
+                           "taskReferences" : {
+                              "entry" : [ {
+                                 "key" : {
+                                    "name" : "LoadBalancingFuzzyPolicy_Task_Pre",
+                                    "version" : "0.0.1"
+                                 },
+                                 "value" : {
+                                    "key" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "PreExecute",
+                                       "localName" : "LoadBalancingFuzzyPolicy_Policy"
+                                    },
+                                    "outputType" : "DIRECT",
+                                    "output" : {
+                                       "parentKeyName" : "LoadBalancingFuzzyPolicy_Policy",
+                                       "parentKeyVersion" : "0.0.1",
+                                       "parentLocalName" : "PreExecute",
+                                       "localName" : "Pre2Fuzzy"
+                                    }
+                                 }
+                              } ]
+                           }
+                        }
+                     } ]
+                  },
+                  "firstState" : "PreExecute"
+               }
+            } ]
+         }
+      },
+      "tasks" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Tasks",
+            "version" : "0.0.1"
+         },
+         "taskMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_Task",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_Task",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "ENABLE_CONGESTION",
+                        "value" : {
+                           "key" : "ENABLE_CONGESTION",
+                           "fieldSchemaKey" : {
+                              "name" : "ENABLE_CONGESTION_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "FREQ_REL_TYPE",
+                        "value" : {
+                           "key" : "FREQ_REL_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "FREQ_REL_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                        "value" : {
+                           "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "RRC_CONGESTION_DELTA",
+                        "value" : {
+                           "key" : "RRC_CONGESTION_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "RRC_CONGESTION_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SET_TYPE",
+                        "value" : {
+                           "key" : "SET_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "SET_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_AB",
+                        "value" : {
+                           "key" : "OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_BA",
+                        "value" : {
+                           "key" : "OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_AB",
+                        "value" : {
+                           "key" : "SB_OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_BA",
+                        "value" : {
+                           "key" : "SB_OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "TaskLogic",
+                     "logicFlavour" : "FUZZY",
+                     "logic" : "policymodels/fuzzy/SampleLBFuzzyLogic.xml"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_Task_Post",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_Task_Post",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_AB",
+                        "value" : {
+                           "key" : "OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_BA",
+                        "value" : {
+                           "key" : "OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_AB",
+                        "value" : {
+                           "key" : "SB_OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_BA",
+                        "value" : {
+                           "key" : "SB_OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_AB",
+                        "value" : {
+                           "key" : "OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_BA",
+                        "value" : {
+                           "key" : "OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_AB",
+                        "value" : {
+                           "key" : "SB_OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_BA",
+                        "value" : {
+                           "key" : "SB_OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "TaskLogic",
+                     "logicFlavour" : "MVEL",
+                     "logic" : "logger.debug(subject.id);logger.debug(inFields);outFields.putAll(inFields);logger.debug(outFields);return true;"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_Task_Pre",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_Task_Pre",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "ENABLE_CONGESTION",
+                        "value" : {
+                           "key" : "ENABLE_CONGESTION",
+                           "fieldSchemaKey" : {
+                              "name" : "ENABLE_CONGESTION_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "FREQ_REL_TYPE",
+                        "value" : {
+                           "key" : "FREQ_REL_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "FREQ_REL_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                        "value" : {
+                           "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "RRC_CONGESTION_DELTA",
+                        "value" : {
+                           "key" : "RRC_CONGESTION_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "RRC_CONGESTION_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SET_TYPE",
+                        "value" : {
+                           "key" : "SET_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "SET_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "ENABLE_CONGESTION",
+                        "value" : {
+                           "key" : "ENABLE_CONGESTION",
+                           "fieldSchemaKey" : {
+                              "name" : "ENABLE_CONGESTION_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "FREQ_REL_TYPE",
+                        "value" : {
+                           "key" : "FREQ_REL_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "FREQ_REL_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                        "value" : {
+                           "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "RRC_CONGESTION_DELTA",
+                        "value" : {
+                           "key" : "RRC_CONGESTION_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "RRC_CONGESTION_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SET_TYPE",
+                        "value" : {
+                           "key" : "SET_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "SET_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "TaskLogic",
+                     "logicFlavour" : "MVEL",
+                     "logic" : "logger.debug(subject.id);logger.debug(inFields);outFields.putAll(inFields);logger.debug(outFields);return true;"
+                  }
+               }
+            } ]
+         }
+      },
+      "events" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Events",
+            "version" : "0.0.1"
+         },
+         "eventMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_InputEvent",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_InputEvent",
+                     "version" : "0.0.1"
+                  },
+                  "nameSpace" : "org.onap.policy.apexaiasonom",
+                  "source" : "external",
+                  "target" : "apex",
+                  "parameter" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "ENABLE_CONGESTION",
+                        "value" : {
+                           "key" : "ENABLE_CONGESTION",
+                           "fieldSchemaKey" : {
+                              "name" : "ENABLE_CONGESTION_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "FREQ_REL_TYPE",
+                        "value" : {
+                           "key" : "FREQ_REL_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "FREQ_REL_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                        "value" : {
+                           "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "RRC_CONGESTION_DELTA",
+                        "value" : {
+                           "key" : "RRC_CONGESTION_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "RRC_CONGESTION_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SET_TYPE",
+                        "value" : {
+                           "key" : "SET_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "SET_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_OutputEvent",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_OutputEvent",
+                     "version" : "0.0.1"
+                  },
+                  "nameSpace" : "org.onap.policy.apexaiasonom",
+                  "source" : "apex",
+                  "target" : "external",
+                  "parameter" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_AB",
+                        "value" : {
+                           "key" : "OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_BA",
+                        "value" : {
+                           "key" : "OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_AB",
+                        "value" : {
+                           "key" : "SB_OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_BA",
+                        "value" : {
+                           "key" : "SB_OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_fromFuzzy",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_fromFuzzy",
+                     "version" : "0.0.1"
+                  },
+                  "nameSpace" : "org.onap.policy.apexaiasonom",
+                  "source" : "fuzzy",
+                  "target" : "apex",
+                  "parameter" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_AB",
+                        "value" : {
+                           "key" : "OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "OCN_BA",
+                        "value" : {
+                           "key" : "OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_AB",
+                        "value" : {
+                           "key" : "SB_OCN_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SB_OCN_BA",
+                        "value" : {
+                           "key" : "SB_OCN_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "SB_OCN_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LoadBalancingFuzzyPolicy_toFuzzy",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LoadBalancingFuzzyPolicy_toFuzzy",
+                     "version" : "0.0.1"
+                  },
+                  "nameSpace" : "org.onap.policy.apexaiasonom",
+                  "source" : "apex",
+                  "target" : "fuzzy",
+                  "parameter" : {
+                     "entry" : [ {
+                        "key" : "Adjacency_4G_Name",
+                        "value" : {
+                           "key" : "Adjacency_4G_Name",
+                           "fieldSchemaKey" : {
+                              "name" : "Adjacency_4G_Name_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellA",
+                        "value" : {
+                           "key" : "CellA",
+                           "fieldSchemaKey" : {
+                              "name" : "CellA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "CellB",
+                        "value" : {
+                           "key" : "CellB",
+                           "fieldSchemaKey" : {
+                              "name" : "CellB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "ENABLE_CONGESTION",
+                        "value" : {
+                           "key" : "ENABLE_CONGESTION",
+                           "fieldSchemaKey" : {
+                              "name" : "ENABLE_CONGESTION_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "FREQ_REL_TYPE",
+                        "value" : {
+                           "key" : "FREQ_REL_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "FREQ_REL_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_AB",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "HO_EXEC_FAIL_RATE_BA",
+                        "value" : {
+                           "key" : "HO_EXEC_FAIL_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_CQI_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                        "value" : {
+                           "key" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                        "value" : {
+                           "key" : "PDCCH_CCE_HIGH_LOAD_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_HO_EXEC_FAIL_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_AB_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                        "value" : {
+                           "key" : "REL_NUM_HO_WITH_EVENTS_BA_IN",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_EARLY_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_HIGH_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                        "value" : {
+                           "key" : "REL_TOO_LATE_HO_RATE_LOW_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "RRC_CONGESTION_DELTA",
+                        "value" : {
+                           "key" : "RRC_CONGESTION_DELTA",
+                           "fieldSchemaKey" : {
+                              "name" : "RRC_CONGESTION_DELTA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "SET_TYPE",
+                        "value" : {
+                           "key" : "SET_TYPE",
+                           "fieldSchemaKey" : {
+                              "name" : "SET_TYPE_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_EARLY_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_EARLY_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_EARLY_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_AB",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_AB",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_AB_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     }, {
+                        "key" : "TOO_LATE_HO_RATE_BA",
+                        "value" : {
+                           "key" : "TOO_LATE_HO_RATE_BA",
+                           "fieldSchemaKey" : {
+                              "name" : "TOO_LATE_HO_RATE_BA_type",
+                              "version" : "0.0.1"
+                           }
+                        }
+                     } ]
+                  }
+               }
+            } ]
+         }
+      },
+      "albums" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Albums",
+            "version" : "0.0.1"
+         },
+         "albums" : {
+            "entry" : [ ]
+         }
+      },
+      "schemas" : {
+         "key" : {
+            "name" : "LoadBalancingFuzzyPolicy_PolicyModel_Schemas",
+            "version" : "0.0.1"
+         },
+         "schemas" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "Adjacency_4G_Name_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "Adjacency_4G_Name_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "CellA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "CellB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "CellB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "ENABLE_CONGESTION_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "ENABLE_CONGESTION_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "FREQ_REL_TYPE_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "FREQ_REL_TYPE_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "HO_EXEC_FAIL_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "HO_EXEC_FAIL_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_CQI_SAMPLES_RATE_HO_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_CQI_SAMPLES_RATE_HO_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "OCN_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "OCN_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Double"
+               }
+            }, {
+               "key" : {
+                  "name" : "OCN_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "OCN_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Double"
+               }
+            }, {
+               "key" : {
+                  "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "PDCCH_CCE_HIGH_LOAD_DELTA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_HO_EXEC_FAIL_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_AB_IN_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_BA_IN_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_NUM_HO_WITH_EVENTS_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_EARLY_HO_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Boolean"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_HIGH_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_HIGH_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_LOW_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "REL_TOO_LATE_HO_RATE_LOW_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "RRC_CONGESTION_DELTA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "RRC_CONGESTION_DELTA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "SB_OCN_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SB_OCN_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "SB_OCN_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SB_OCN_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "SET_TYPE_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SET_TYPE_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.String"
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_EARLY_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_EARLY_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_EARLY_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_EARLY_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_LATE_HO_RATE_AB_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_LATE_HO_RATE_AB_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            }, {
+               "key" : {
+                  "name" : "TOO_LATE_HO_RATE_BA_type",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "TOO_LATE_HO_RATE_BA_type",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Java",
+                  "schemaDefinition" : "java.lang.Float"
+               }
+            } ]
+         }
+      }
+   }
+}
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/compare/LogicBlockModel_Compare.json b/auth/cli-editor/src/test/resources/compare/LogicBlockModel_Compare.json
new file mode 100644 (file)
index 0000000..45a7ac3
--- /dev/null
@@ -0,0 +1,374 @@
+{
+   "apexPolicyModel" : {
+      "key" : {
+         "name" : "LogicTestPolicy",
+         "version" : "0.0.1"
+      },
+      "keyInformation" : {
+         "key" : {
+            "name" : "LogicTestPolicy_KeyInfo",
+            "version" : "0.0.1"
+         },
+         "keyInfoMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "LogicTestPolicy",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestPolicy",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "80b09a0f-1106-364a-9516-ba59fff987af",
+                  "description" : "Generated description for concept referred to by key \"LogicTestPolicy:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestPolicy_Albums",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestPolicy_Albums",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0f52b1b6-da8c-3cb4-9c02-3c484a8c1db9",
+                  "description" : "Generated description for concept referred to by key \"LogicTestPolicy_Albums:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestPolicy_Events",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestPolicy_Events",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "4b9e1be6-375d-3731-9021-876df01fd619",
+                  "description" : "Generated description for concept referred to by key \"LogicTestPolicy_Events:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestPolicy_KeyInfo",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestPolicy_KeyInfo",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "34378780-583d-3588-8206-e57f47645cc7",
+                  "description" : "Generated description for concept referred to by key \"LogicTestPolicy_KeyInfo:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestPolicy_Policies",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestPolicy_Policies",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "d241ce4b-8fcb-3400-b6b5-7e56bcb79ce2",
+                  "description" : "Generated description for concept referred to by key \"LogicTestPolicy_Policies:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestPolicy_Schemas",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestPolicy_Schemas",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "a86c8519-c581-3ef2-9896-7574e5bdf4e3",
+                  "description" : "Generated description for concept referred to by key \"LogicTestPolicy_Schemas:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestPolicy_Tasks",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestPolicy_Tasks",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "c0006fa6-7b32-3fde-9217-ee26905d62c0",
+                  "description" : "Generated description for concept referred to by key \"LogicTestPolicy_Tasks:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTask0",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTask0",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "17709a99-bbda-3805-a953-581cb9372cff",
+                  "description" : "Generated description for concept referred to by key \"LogicTestTask0:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTask1",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTask1",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "0af914cd-3151-3c1c-a59e-106d12623947",
+                  "description" : "Generated description for concept referred to by key \"LogicTestTask1:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTask2",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTask2",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "fbc5002e-ab8e-3953-88d4-af62c0e1d850",
+                  "description" : "Generated description for concept referred to by key \"LogicTestTask2:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTaskA",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTaskA",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "960e874e-cf37-3c2f-982f-c6afcfd3e832",
+                  "description" : "Generated description for concept referred to by key \"LogicTestTaskA:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTaskB",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTaskB",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "f4772b19-cb7e-3a8d-98ca-6963d2bf688f",
+                  "description" : "Generated description for concept referred to by key \"LogicTestTaskB:0.0.1\""
+               }
+            }, {
+               "key" : {
+                  "name" : "SchemaLogicTest",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SchemaLogicTest",
+                     "version" : "0.0.1"
+                  },
+                  "UUID" : "4f9bb262-ccbf-3b2d-9655-c16ba2d37e95",
+                  "description" : "Generated description for concept referred to by key \"SchemaLogicTest:0.0.1\""
+               }
+            } ]
+         }
+      },
+      "policies" : {
+         "key" : {
+            "name" : "LogicTestPolicy_Policies",
+            "version" : "0.0.1"
+         },
+         "policyMap" : {
+            "entry" : [ ]
+         }
+      },
+      "tasks" : {
+         "key" : {
+            "name" : "LogicTestPolicy_Tasks",
+            "version" : "0.0.1"
+         },
+         "taskMap" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "LogicTestTask0",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTask0",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "TaskLogic",
+                     "logicFlavour" : "MVEL",
+                     "logic" : "{\n\timport java.util.Date;\n\tlogger.debug(\"Running ConsistencyCheck\");\n\n\toutFields.putAll(inFields);\n\toutFields[\"Attribute1PolicyValue\"] = \"POLICY_DEFINED\";\n\tlogger.debug(\"Finished Running ConsistencyCheck\");\n\n\treturn true;\n}"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTask1",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTask1",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "TaskLogic",
+                     "logicFlavour" : "MVEL",
+                     "logic" : "import java.util.Date;"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTask2",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTask2",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "TaskLogic",
+                     "logicFlavour" : "MVEL",
+                     "logic" : "{\n\tsystem.out.println(\"{\");\n}"
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTaskA",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTaskA",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "NULL",
+                     "logicFlavour" : "UNDEFINED",
+                     "logic" : ""
+                  }
+               }
+            }, {
+               "key" : {
+                  "name" : "LogicTestTaskB",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "LogicTestTaskB",
+                     "version" : "0.0.1"
+                  },
+                  "inputFields" : {
+                     "entry" : [ ]
+                  },
+                  "outputFields" : {
+                     "entry" : [ ]
+                  },
+                  "taskParameters" : {
+                     "entry" : [ ]
+                  },
+                  "contextAlbumReference" : [ ],
+                  "taskLogic" : {
+                     "key" : "NULL",
+                     "logicFlavour" : "UNDEFINED",
+                     "logic" : ""
+                  }
+               }
+            } ]
+         }
+      },
+      "events" : {
+         "key" : {
+            "name" : "LogicTestPolicy_Events",
+            "version" : "0.0.1"
+         },
+         "eventMap" : {
+            "entry" : [ ]
+         }
+      },
+      "albums" : {
+         "key" : {
+            "name" : "LogicTestPolicy_Albums",
+            "version" : "0.0.1"
+         },
+         "albums" : {
+            "entry" : [ ]
+         }
+      },
+      "schemas" : {
+         "key" : {
+            "name" : "LogicTestPolicy_Schemas",
+            "version" : "0.0.1"
+         },
+         "schemas" : {
+            "entry" : [ {
+               "key" : {
+                  "name" : "SchemaLogicTest",
+                  "version" : "0.0.1"
+               },
+               "value" : {
+                  "key" : {
+                     "name" : "SchemaLogicTest",
+                     "version" : "0.0.1"
+                  },
+                  "schemaFlavour" : "Exotic",
+                  "schemaDefinition" : "{\nasdmasdm'asda'sdasd\n}"
+               }
+            } ]
+         }
+      }
+   }
+}
diff --git a/auth/cli-editor/src/test/resources/logback-test.xml b/auth/cli-editor/src/test/resources/logback-test.xml
new file mode 100644 (file)
index 0000000..1a20269
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<configuration>
+
+    <contextName>Apex</contextName>
+    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
+    <property name="LOG_DIR" value="${java.io.tmpdir}/apex_logging/" />
+
+    <!-- USE FOR STD OUT ONLY -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern>
+        </encoder>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="STDOUT" />
+    </root>
+
+    <logger name="org.infinispan" level="INFO" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="org.apache.zookeeper.ClientCnxn" level="OFF" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="org.onap.policy.apex.core" level="INFO" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+        <file>${LOG_DIR}/apex.log</file>
+        <encoder>
+            <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+                %logger{26} - %msg %n %ex{full}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="CTXT_FILE" class="ch.qos.logback.core.FileAppender">
+        <file>${LOG_DIR}/apex_ctxt.log</file>
+        <encoder>
+            <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+                %logger{26} - %msg %n %ex{full}</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="org.onap.policy.apex.core.context.impl.monitoring" level="TRACE" additivity="false">
+        <appender-ref ref="CTXT_FILE" />
+    </logger>
+
+    <logger name="org.onap.policy.apex.core.context" level="INFO" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="org.onap.policy.apex.auth" level="INFO" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+</configuration>
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile0.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile0.apexmacro
new file mode 100644 (file)
index 0000000..b47ce11
--- /dev/null
@@ -0,0 +1 @@
+model create name=MacroFileTest_PolicyModel
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile1.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile1.apexmacro
new file mode 100644 (file)
index 0000000..6e68088
--- /dev/null
@@ -0,0 +1 @@
+schema create name=MacroFile_type1 flavour=Java schema=java.lang.String
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile2.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile2.apexmacro
new file mode 100644 (file)
index 0000000..7c9900e
--- /dev/null
@@ -0,0 +1 @@
+schema create name=MacroFile_type2 flavour=Java schema=java.lang.String
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile3.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile3.apexmacro
new file mode 100644 (file)
index 0000000..e1f48e6
--- /dev/null
@@ -0,0 +1 @@
+schema create name=MacroFile_type3 flavour=Java schema=java.lang.String
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile4.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile4.apexmacro
new file mode 100644 (file)
index 0000000..134b561
--- /dev/null
@@ -0,0 +1 @@
+schema create name=MacroFile_type4 flavour=Java schema=java.lang.String
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile5.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile5.apexmacro
new file mode 100644 (file)
index 0000000..a9c2f0c
--- /dev/null
@@ -0,0 +1 @@
+schema create name=MacroFile_type5
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile6.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile6.apexmacro
new file mode 100644 (file)
index 0000000..f73796f
--- /dev/null
@@ -0,0 +1 @@
+flavour=Java schema=java.lang.String
\ No newline at end of file
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile7.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile7.apexmacro
new file mode 100644 (file)
index 0000000..58c14e4
--- /dev/null
@@ -0,0 +1,2 @@
+var returnValueType = Java.type("java.lang.Boolean");
+var returnValue = new returnValueType(true);
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile8.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile8.apexmacro
new file mode 100644 (file)
index 0000000..58c14e4
--- /dev/null
@@ -0,0 +1,2 @@
+var returnValueType = Java.type("java.lang.Boolean");
+var returnValue = new returnValueType(true);
diff --git a/auth/cli-editor/src/test/resources/macros/MacroFile9.apexmacro b/auth/cli-editor/src/test/resources/macros/MacroFile9.apexmacro
new file mode 100644 (file)
index 0000000..58c14e4
--- /dev/null
@@ -0,0 +1,2 @@
+var returnValueType = Java.type("java.lang.Boolean");
+var returnValue = new returnValueType(true);
diff --git a/auth/cli-editor/src/test/resources/scripts/AvroSchema.apex b/auth/cli-editor/src/test/resources/scripts/AvroSchema.apex
new file mode 100644 (file)
index 0000000..867c395
--- /dev/null
@@ -0,0 +1,57 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=AvroSchemaPolicy
+
+
+schema create name=SchemaLogicTest flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "VPNActEvent",
+  "namespace" : "org.onap.policy.apex.domains.vpn.events",
+  "fields"    : [
+    {"name": "nameSpace", "type": "string"},
+    {"name": "name",      "type": "string"},
+    {"name": "version",   "type": "string"},
+    {"name": "source",    "type": "string"},
+    {"name": "target",    "type": "string"},
+    {"name": "LinkMap", "type": {
+        "type" : "record",
+        "name" : "LinkMap",
+        "namespace" : "org.onap.policy.apex.domains.vpn",
+        "fields" : [ ]
+      }
+    },
+    {"name": "CustomerMap", "type": {
+        "type" : "record",
+        "name" : "CustomerMap",
+        "namespace" : "org.onap.policy.apex.domains.vpn",
+        "fields" : [ ]
+      }
+    }
+  ]
+}
+LE
+
+event create name=Test_InputEvent nameSpace=org.onap.policy.apex.test source=External target=Apex
+
+event parameter create name=Test_InputEvent parName=AAA   schemaName=SchemaLogicTest optional=false
+event parameter create name=Test_InputEvent parName=BBB   schemaName=SchemaLogicTest optional=true
+event parameter create name=Test_InputEvent parName=CCC   schemaName=SchemaLogicTest
diff --git a/auth/cli-editor/src/test/resources/scripts/ContextAlbums.apex b/auth/cli-editor/src/test/resources/scripts/ContextAlbums.apex
new file mode 100644 (file)
index 0000000..ace3cdb
--- /dev/null
@@ -0,0 +1,81 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=LoadBalancingFuzzyPolicy_PolicyModel
+
+schema create name=Adj_CM_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=Adj_KPI_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=Adjacency_4G_Name_type flavour=Java schema=java.lang.String
+schema create name=CellA_CM_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=CellA_KPI_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=CellA_type flavour=Java schema=java.lang.String
+schema create name=CellB_CM_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=CellB_KPI_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=CellB_type flavour=Java schema=java.lang.String
+schema create name=ENABLE_CONGESTION_type flavour=Java schema=java.lang.Boolean
+schema create name=FREQ_REL_TYPE_type flavour=Java schema=java.lang.String
+schema create name=FooBar_type flavour=Java schema=org.onap.policy.apex.sample.sampletypes.sampletypes.Foo
+schema create name=HO_EXEC_FAIL_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=HO_EXEC_FAIL_RATE_BA_type flavour=Java schema=java.lang.Float
+schema create name=LOW_CQI_SAMPLES_RATE_HO_AB_type flavour=Java schema=java.lang.Float
+schema create name=LOW_CQI_SAMPLES_RATE_HO_BA_type flavour=Java schema=java.lang.Float
+schema create name=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type flavour=Java schema=java.lang.Float
+schema create name=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type flavour=Java schema=java.lang.Float
+schema create name=OCN_AB_type flavour=Java schema=java.lang.Double
+schema create name=OCN_BA_type flavour=Java schema=java.lang.Double
+schema create name=PDCCH_CCE_HIGH_LOAD_DELTA_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_HO_EXEC_FAIL_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_AB_IN_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_NUM_HO_WITH_EVENTS_BA_IN_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_LATE_HO_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_LATE_HO_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=RRC_CONGESTION_DELTA_type flavour=Java schema=java.lang.Float
+schema create name=SB_OCN_AB_type flavour=Java schema=java.lang.String
+schema create name=SB_OCN_BA_type flavour=Java schema=java.lang.String
+schema create name=SET_TYPE_type flavour=Java schema=java.lang.String
+schema create name=TOO_EARLY_HO_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=TOO_EARLY_HO_RATE_BA_type flavour=Java schema=java.lang.Float
+schema create name=TOO_LATE_HO_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=TOO_LATE_HO_RATE_BA_type flavour=Java schema=java.lang.Float
+schema create name=TimeStamp_type flavour=Java schema=java.lang.Long
+
+album create name=ExternalBag0 scope=EXTERNAL writable=false schemaName=OCN_AB_type
+album create name=ExternalBag1 scope=EXTERNAL writable=false schemaName=CellA_CM_type
+album create name=ExternalBag2 scope=EXTERNAL writable=false schemaName=TOO_EARLY_HO_RATE_AB_type
+album create name=ExternalBag3 scope=EXTERNAL writable=false schemaName=FooBar_type
+
+album create name=Application scope=APPLICATION writable=true schemaname=OCN_AB_type
diff --git a/auth/cli-editor/src/test/resources/scripts/FileMacro.apex b/auth/cli-editor/src/test/resources/scripts/FileMacro.apex
new file mode 100644 (file)
index 0000000..87f36c7
--- /dev/null
@@ -0,0 +1,49 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+#MACROFILE:"src/test/resources/macros/MacroFile0.apexmacro"
+#MACROFILE: "src/test/resources/macros/MacroFile1.apexmacro"
+#MACROFILE:src/test/resources/macros/MacroFile0.apexmacro
+#MACROFILE: src/test/resources/macros/MacroFile0.apexmacro  
+#MACROFILE:" src/test/resources/macros/MacroFile1.apexmacro"
+#MACROFILE: "src/test/resources/macros/MacroFile1.apexmacro "
+#MACROFILE:                     "src/test/resources/macros/MacroFile2.apexmacro"
+#MACROFILE:                     "src/test/resources/macros/MacroFile3.apexmacro"                      
+#MACROFILE:                     "src/test/resources/macros/MacroFile4.apexmacro"                      # This is a comment
+#MACROFILE:
+#MACROFILE:                             
+#MACROFILE
+MACROFILE:
+#MACROFILE: "src/test/resources/macros/MacroFileNonExistant.ApexMacro"
+schema create #MACROFILE:"src/test/resources/macros/MacroFile5.apexmacro" #MACROFILE: "src/test/resources/macros/MacroFile6.apexmacro"
+
+task create name=dummyTask1
+task logic create name=dummyTask1 logicFlavour=JAVASCRIPT logic=LS
+#MACROFILE:"src/test/resources/macros/MacroFile7.apexmacro"
+LE
+
+task create name=dummyTask2
+task logic create name=dummyTask2 logicFlavour=JAVASCRIPT logic=LS
+x=x+1
+#MACROFILE:"src/test/resources/macros/MacroFile8.apexmacro"
+x=x+1
+#MACROFILE:"src/test/resources/macros/MacroFile9.apexmacro"
+x=x+1
+LE
diff --git a/auth/cli-editor/src/test/resources/scripts/LogicBlock.apex b/auth/cli-editor/src/test/resources/scripts/LogicBlock.apex
new file mode 100644 (file)
index 0000000..e1fbc96
--- /dev/null
@@ -0,0 +1,110 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=LogicTestPolicy
+
+schema create name=SchemaLogicTest flavour=Exotic schema=LS
+{
+asdmasdm'asda'sdasd
+}
+LE
+
+schema create name=SchemaLogicTest flavour=Avro schema=LS
+{
+  "type"      : "record",
+  "name"      : "VPNActEvent",
+  "namespace" : "org.onap.policy.apex.domains.vpn.events",
+  "fields"    : [
+    {"name": "nameSpace", "type": "string"},
+    {"name": "name",      "type": "string"},
+    {"name": "version",   "type": "string"},
+    {"name": "source",    "type": "string"},
+    {"name": "target",    "type": "string"},
+    {"name": "LinkMap", "type": {
+        "type" : "record",
+        "name" : "LinkMap",
+        "namespace" : "org.onap.policy.apex.domains.vpn",
+        "fields" : [ ]
+      }
+    },
+    {"name": "CustomerMap", "type": {
+        "type" : "record",
+        "name" : "CustomerMap",
+        "namespace" : "org.onap.policy.apex.domains.vpn",
+        "fields" : [ ]
+      }
+    }
+  ]
+}
+LE
+# This creates logic as a block
+task logic create name=LogicTestTask0 logicFlavour=MVEL logic=LS                       
+{
+       import java.util.Date;
+       logger.debug("Running ConsistencyCheck");
+
+       outFields.putAll(inFields);
+       outFields["Attribute1PolicyValue"] = "POLICY_DEFINED";
+       logger.debug("Finished Running ConsistencyCheck");
+
+       return true;
+}
+LE
+
+task create name=LogicTestTask0
+# This creates logic as a block
+task logic create name=LogicTestTask0 logicFlavour=MVEL logic=LS                       
+{
+       import java.util.Date;
+       logger.debug("Running ConsistencyCheck");
+
+       outFields.putAll(inFields);
+       outFields["Attribute1PolicyValue"] = "POLICY_DEFINED";
+       logger.debug("Finished Running ConsistencyCheck");
+
+       return true;
+}
+LE
+  
+task create name=LogicTestTask1
+# This creates logic on a single line
+task logic create name=LogicTestTask1 logicFlavour=MVEL logic="import java.util.Date;"
+
+task create name=LogicTestTask2
+# This creates logic as a block
+task logic create name=LogicTestTask2 logicFlavour=MVEL logic=LS
+{
+       system.out.println("{");
+}LE
+
+task create name=LogicTestTaskA
+
+# This fails as it should
+task logic create name=LogicTestTaskA logicFlavour=MVEL logic=
+
+task create name=LogicTestTaskB
+
+# This fails as it should, no end tag
+task logic create name=LogicTestTaskB logicFlavour=MVEL logic=LS
+{
diff --git a/auth/cli-editor/src/test/resources/scripts/SampleLBPolicy.apex b/auth/cli-editor/src/test/resources/scripts/SampleLBPolicy.apex
new file mode 100644 (file)
index 0000000..ddb03e5
--- /dev/null
@@ -0,0 +1,345 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=LoadBalancingFuzzyPolicy_PolicyModel
+
+schema create name=Adjacency_4G_Name_type flavour=Java schema=java.lang.String
+schema create name=CellA_type flavour=Java schema=java.lang.String
+schema create name=CellB_type flavour=Java schema=java.lang.String
+schema create name=ENABLE_CONGESTION_type flavour=Java schema=java.lang.Boolean
+schema create name=FREQ_REL_TYPE_type flavour=Java schema=java.lang.String
+schema create name=HO_EXEC_FAIL_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=HO_EXEC_FAIL_RATE_BA_type flavour=Java schema=java.lang.Float
+schema create name=LOW_CQI_SAMPLES_RATE_HO_AB_type flavour=Java schema=java.lang.Float
+schema create name=LOW_CQI_SAMPLES_RATE_HO_BA_type flavour=Java schema=java.lang.Float
+schema create name=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type flavour=Java schema=java.lang.Float
+schema create name=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type flavour=Java schema=java.lang.Float
+schema create name=OCN_AB_type flavour=Java schema=java.lang.Double
+schema create name=OCN_BA_type flavour=Java schema=java.lang.Double
+schema create name=PDCCH_CCE_HIGH_LOAD_DELTA_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_HO_EXEC_FAIL_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_AB_IN_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_NUM_HO_WITH_EVENTS_BA_IN_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_LATE_HO_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_LATE_HO_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=RRC_CONGESTION_DELTA_type flavour=Java schema=java.lang.Float
+schema create name=SB_OCN_AB_type flavour=Java schema=java.lang.String
+schema create name=SB_OCN_BA_type flavour=Java schema=java.lang.String
+schema create name=SET_TYPE_type flavour=Java schema=java.lang.String
+schema create name=TOO_EARLY_HO_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=TOO_EARLY_HO_RATE_BA_type flavour=Java schema=java.lang.Float
+schema create name=TOO_LATE_HO_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=TOO_LATE_HO_RATE_BA_type flavour=Java schema=java.lang.Float
+
+event create name=LoadBalancingFuzzyPolicy_InputEvent nameSpace=org.onap.policy.apexaiasonom source=external target=apex
+
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=SET_TYPE schemaName=SET_TYPE_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=CellA schemaName=CellA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=CellB schemaName=CellB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+event create name=LoadBalancingFuzzyPolicy_OutputEvent nameSpace=org.onap.policy.apexaiasonom source=apex target=external
+
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=OCN_AB schemaName=OCN_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=OCN_BA schemaName=OCN_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=SB_OCN_AB schemaName=SB_OCN_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=SB_OCN_BA schemaName=SB_OCN_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=CellA schemaName=CellA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=CellB schemaName=CellB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+event create name=LoadBalancingFuzzyPolicy_fromFuzzy nameSpace=org.onap.policy.apexaiasonom source=fuzzy target=apex
+
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=OCN_AB schemaName=OCN_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=OCN_BA schemaName=OCN_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=SB_OCN_AB schemaName=SB_OCN_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=SB_OCN_BA schemaName=SB_OCN_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=CellA schemaName=CellA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=CellB schemaName=CellB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+event create name=LoadBalancingFuzzyPolicy_toFuzzy nameSpace=org.onap.policy.apexaiasonom source=apex target=fuzzy
+
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=SET_TYPE schemaName=SET_TYPE_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=CellA schemaName=CellA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=CellB schemaName=CellB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+task create name=LoadBalancingFuzzyPolicy_Task
+
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=SET_TYPE schemaName=SET_TYPE_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellA schemaName=CellA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellB schemaName=CellB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=OCN_AB schemaName=OCN_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=OCN_BA schemaName=OCN_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=SB_OCN_AB schemaName=SB_OCN_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=SB_OCN_BA schemaName=SB_OCN_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellA schemaName=CellA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellB schemaName=CellB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+task logic create name=LoadBalancingFuzzyPolicy_Task logicFlavour=FUZZY logic="policymodels/fuzzy/SampleLBFuzzyLogic.xml"
+
+task create name=LoadBalancingFuzzyPolicy_Task_Pre
+
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=SET_TYPE schemaName=SET_TYPE_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellA schemaName=CellA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellB schemaName=CellB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=SET_TYPE schemaName=SET_TYPE_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellA schemaName=CellA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellB schemaName=CellB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+task logic create name=LoadBalancingFuzzyPolicy_Task_Pre logicFlavour=MVEL logic="logger.debug(subject.id);logger.debug(inFields);outFields.putAll(inFields);logger.debug(outFields);return true;"
+
+task create name=LoadBalancingFuzzyPolicy_Task_Post
+
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=OCN_AB schemaName=OCN_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=OCN_BA schemaName=OCN_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=SB_OCN_AB schemaName=SB_OCN_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=SB_OCN_BA schemaName=SB_OCN_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellA schemaName=CellA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellB schemaName=CellB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=OCN_AB schemaName=OCN_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=OCN_BA schemaName=OCN_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=SB_OCN_AB schemaName=SB_OCN_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=SB_OCN_BA schemaName=SB_OCN_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellA schemaName=CellA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellB schemaName=CellB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+
+task logic create name=LoadBalancingFuzzyPolicy_Task_Post logicFlavour=MVEL logic="logger.debug(subject.id);logger.debug(inFields);outFields.putAll(inFields);logger.debug(outFields);return true;"
+
+policy create name=LoadBalancingFuzzyPolicy_Policy template=FREEFORM firstState=PreExecute
+
+policy state create name=LoadBalancingFuzzyPolicy_Policy stateName=PostExecute triggerName=LoadBalancingFuzzyPolicy_fromFuzzy defaultTaskName=LoadBalancingFuzzyPolicy_Task_Post
+policy state output create name=LoadBalancingFuzzyPolicy_Policy stateName=PostExecute outputName=Post2Out eventName=LoadBalancingFuzzyPolicy_OutputEvent
+policy state taskref create name=LoadBalancingFuzzyPolicy_Policy stateName=PostExecute taskName=LoadBalancingFuzzyPolicy_Task_Post outputType=DIRECT outputName=Post2Out
+
+policy state create name=LoadBalancingFuzzyPolicy_Policy stateName=FuzzyExecute triggerName=LoadBalancingFuzzyPolicy_toFuzzy defaultTaskName=LoadBalancingFuzzyPolicy_Task
+policy state output create name=LoadBalancingFuzzyPolicy_Policy stateName=FuzzyExecute outputName=Fuzzy2Post eventName=LoadBalancingFuzzyPolicy_fromFuzzy nextState=PostExecute
+policy state taskref create name=LoadBalancingFuzzyPolicy_Policy stateName=FuzzyExecute taskName=LoadBalancingFuzzyPolicy_Task outputType=DIRECT outputName=Fuzzy2Post
+
+policy state create name=LoadBalancingFuzzyPolicy_Policy stateName=PreExecute triggerName=LoadBalancingFuzzyPolicy_InputEvent defaultTaskName=LoadBalancingFuzzyPolicy_Task_Pre
+policy state output create name=LoadBalancingFuzzyPolicy_Policy stateName=PreExecute outputName=Pre2Fuzzy eventName=LoadBalancingFuzzyPolicy_toFuzzy nextState=FuzzyExecute
+policy state taskref create name=LoadBalancingFuzzyPolicy_Policy stateName=PreExecute taskName=LoadBalancingFuzzyPolicy_Task_Pre outputType=DIRECT outputName=Pre2Fuzzy
diff --git a/auth/cli-editor/src/test/resources/scripts/SampleLBPolicy_WithMap.apex b/auth/cli-editor/src/test/resources/scripts/SampleLBPolicy_WithMap.apex
new file mode 100644 (file)
index 0000000..9ae79b9
--- /dev/null
@@ -0,0 +1,430 @@
+#-------------------------------------------------------------------------------
+# ============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=========================================================
+#-------------------------------------------------------------------------------
+
+model create name=LoadBalancingFuzzyPolicy_PolicyModel
+
+schema create name=Adj_CM_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=Adj_KPI_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=Adjacency_4G_Name_type flavour=Java schema=java.lang.String
+schema create name=CellA_CM_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=CellA_KPI_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=CellA_type flavour=Java schema=java.lang.String
+schema create name=CellB_CM_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=CellB_KPI_type flavour=Java schema=java.util.HashMap<String,String>
+schema create name=CellB_type flavour=Java schema=java.lang.String
+schema create name=ENABLE_CONGESTION_type flavour=Java schema=java.lang.Boolean
+schema create name=FREQ_REL_TYPE_type flavour=Java schema=java.lang.String
+schema create name=FooBar_type flavour=Java schema=org.onap.policy.apex.sample.sampletypes.Foo
+schema create name=HO_EXEC_FAIL_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=HO_EXEC_FAIL_RATE_BA_type flavour=Java schema=java.lang.Float
+schema create name=LOW_CQI_SAMPLES_RATE_HO_AB_type flavour=Java schema=java.lang.Float
+schema create name=LOW_CQI_SAMPLES_RATE_HO_BA_type flavour=Java schema=java.lang.Float
+schema create name=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type flavour=Java schema=java.lang.Float
+schema create name=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type flavour=Java schema=java.lang.Float
+schema create name=OCN_AB_type flavour=Java schema=java.lang.Double
+schema create name=OCN_BA_type flavour=Java schema=java.lang.Double
+schema create name=PDCCH_CCE_HIGH_LOAD_DELTA_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_HO_EXEC_FAIL_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_HO_EXEC_FAIL_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_AB_IN_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_NUM_HO_WITH_EVENTS_BA_IN_type flavour=Java schema=java.lang.Float
+schema create name=REL_NUM_HO_WITH_EVENTS_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_EARLY_HO_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_EARLY_HO_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_AB_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_LATE_HO_RATE_BA_type flavour=Java schema=java.lang.Boolean
+schema create name=REL_TOO_LATE_HO_RATE_HIGH_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_HIGH_BA_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_LOW_AB_type flavour=Java schema=java.lang.Float
+schema create name=REL_TOO_LATE_HO_RATE_LOW_BA_type flavour=Java schema=java.lang.Float
+schema create name=RRC_CONGESTION_DELTA_type flavour=Java schema=java.lang.Float
+schema create name=SB_OCN_AB_type flavour=Java schema=java.lang.String
+schema create name=SB_OCN_BA_type flavour=Java schema=java.lang.String
+schema create name=SET_TYPE_type flavour=Java schema=java.lang.String
+schema create name=TOO_EARLY_HO_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=TOO_EARLY_HO_RATE_BA_type flavour=Java schema=java.lang.Float
+schema create name=TOO_LATE_HO_RATE_AB_type flavour=Java schema=java.lang.Float
+schema create name=TOO_LATE_HO_RATE_BA_type flavour=Java schema=java.lang.Float
+schema create name=TimeStamp_type flavour=Java schema=java.lang.Long
+
+event create name=LoadBalancingFuzzyPolicy_InputEvent nameSpace=org.onap.policy.apexaiasonom.types source=External target=Apex
+
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=SET_TYPE schemaName=SET_TYPE_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=CellA schemaName=CellA_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=CellB schemaName=CellB_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=CellA_CM schemaName=CellA_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=CellB_CM schemaName=CellB_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=CellA_KPI schemaName=CellA_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=CellB_KPI schemaName=CellB_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=Adj_CM schemaName=Adj_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=Adj_KPI schemaName=Adj_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=TimeStamp schemaName=TimeStamp_type
+event parameter create name=LoadBalancingFuzzyPolicy_InputEvent parName=FooBar schemaName=FooBar_type
+
+event create name=LoadBalancingFuzzyPolicy_OutputEvent nameSpace=org.onap.policy.apexaiasonom.types source=Apex target=External
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=OCN_AB schemaName=OCN_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=OCN_BA schemaName=OCN_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=SB_OCN_AB schemaName=SB_OCN_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=SB_OCN_BA schemaName=SB_OCN_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=CellA schemaName=CellA_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=CellB schemaName=CellB_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=CellA_CM schemaName=CellA_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=CellB_CM schemaName=CellB_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=CellA_KPI schemaName=CellA_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=CellB_KPI schemaName=CellB_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=Adj_CM schemaName=Adj_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=Adj_KPI schemaName=Adj_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=TimeStamp schemaName=TimeStamp_type
+event parameter create name=LoadBalancingFuzzyPolicy_OutputEvent parName=FooBar schemaName=FooBar_type
+
+event create name=LoadBalancingFuzzyPolicy_fromFuzzy nameSpace=org.onap.policy.apexaiasonom.types source=Fuzzy target=Apex
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=OCN_AB schemaName=OCN_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=OCN_BA schemaName=OCN_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=SB_OCN_AB schemaName=SB_OCN_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=SB_OCN_BA schemaName=SB_OCN_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=CellA schemaName=CellA_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=CellB schemaName=CellB_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=CellA_CM schemaName=CellA_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=CellB_CM schemaName=CellB_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=CellA_KPI schemaName=CellA_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=CellB_KPI schemaName=CellB_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=Adj_CM schemaName=Adj_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=Adj_KPI schemaName=Adj_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=TimeStamp schemaName=TimeStamp_type
+event parameter create name=LoadBalancingFuzzyPolicy_fromFuzzy parName=FooBar schemaName=FooBar_type
+
+event create name=LoadBalancingFuzzyPolicy_toFuzzy nameSpace=org.onap.policy.apexaiasonom.types source=Apex target=Fuzzy
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=SET_TYPE schemaName=SET_TYPE_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=CellA schemaName=CellA_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=CellB schemaName=CellB_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=CellA_CM schemaName=CellA_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=CellB_CM schemaName=CellB_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=CellA_KPI schemaName=CellA_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=CellB_KPI schemaName=CellB_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=Adj_CM schemaName=Adj_CM_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=Adj_KPI schemaName=Adj_KPI_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=TimeStamp schemaName=TimeStamp_type
+event parameter create name=LoadBalancingFuzzyPolicy_toFuzzy parName=FooBar schemaName=FooBar_type
+
+task create name=LoadBalancingFuzzyPolicy_Task_Pre
+
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=SET_TYPE schemaName=SET_TYPE_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellA schemaName=CellA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellB schemaName=CellB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellA_CM schemaName=CellA_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellB_CM schemaName=CellB_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellA_KPI schemaName=CellA_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellB_KPI schemaName=CellB_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=Adj_CM schemaName=Adj_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=Adj_KPI schemaName=Adj_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TimeStamp schemaName=TimeStamp_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=FooBar schemaName=FooBar_type
+
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=SET_TYPE schemaName=SET_TYPE_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellA schemaName=CellA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellB schemaName=CellB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellA_CM schemaName=CellA_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellB_CM schemaName=CellB_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellA_KPI schemaName=CellA_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=CellB_KPI schemaName=CellB_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=Adj_CM schemaName=Adj_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=Adj_KPI schemaName=Adj_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=TimeStamp schemaName=TimeStamp_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Pre fieldName=FooBar schemaName=FooBar_type
+
+task logic create name=LoadBalancingFuzzyPolicy_Task_Pre logicFlavour=MVEL logic="logger.debug(subject.id);logger.debug(inFields);outputFields.putAll(inputFields);logger.debug(outputFields);return true;"
+
+task create name=LoadBalancingFuzzyPolicy_Task
+
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=ENABLE_CONGESTION schemaName=ENABLE_CONGESTION_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=FREQ_REL_TYPE schemaName=FREQ_REL_TYPE_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=HO_EXEC_FAIL_RATE_AB schemaName=HO_EXEC_FAIL_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=HO_EXEC_FAIL_RATE_BA schemaName=HO_EXEC_FAIL_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=LOW_CQI_SAMPLES_RATE_HO_AB schemaName=LOW_CQI_SAMPLES_RATE_HO_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=LOW_CQI_SAMPLES_RATE_HO_BA schemaName=LOW_CQI_SAMPLES_RATE_HO_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA schemaName=LOW_PUSCH_SINR_SAMPLES_RATE_HO_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=PDCCH_CCE_HIGH_LOAD_DELTA schemaName=PDCCH_CCE_HIGH_LOAD_DELTA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_AB schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_HIGH_BA schemaName=REL_HO_EXEC_FAIL_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_LOW_AB schemaName=REL_HO_EXEC_FAIL_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_LOW_BA schemaName=REL_HO_EXEC_FAIL_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_NUM_HO_WITH_EVENTS_AB_IN schemaName=REL_NUM_HO_WITH_EVENTS_AB_IN_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_NUM_HO_WITH_EVENTS_BA_IN schemaName=REL_NUM_HO_WITH_EVENTS_BA_IN_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_HIGH_AB schemaName=REL_TOO_EARLY_HO_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_HIGH_BA schemaName=REL_TOO_EARLY_HO_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_LOW_AB schemaName=REL_TOO_EARLY_HO_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_LOW_BA schemaName=REL_TOO_EARLY_HO_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_HIGH_AB schemaName=REL_TOO_LATE_HO_RATE_HIGH_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_HIGH_BA schemaName=REL_TOO_LATE_HO_RATE_HIGH_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_LOW_AB schemaName=REL_TOO_LATE_HO_RATE_LOW_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_LOW_BA schemaName=REL_TOO_LATE_HO_RATE_LOW_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=RRC_CONGESTION_DELTA schemaName=RRC_CONGESTION_DELTA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=SET_TYPE schemaName=SET_TYPE_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TOO_EARLY_HO_RATE_AB schemaName=TOO_EARLY_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TOO_EARLY_HO_RATE_BA schemaName=TOO_EARLY_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TOO_LATE_HO_RATE_AB schemaName=TOO_LATE_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TOO_LATE_HO_RATE_BA schemaName=TOO_LATE_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellA schemaName=CellA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellB schemaName=CellB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellA_CM schemaName=CellA_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellB_CM schemaName=CellB_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellA_KPI schemaName=CellA_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellB_KPI schemaName=CellB_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=Adj_CM schemaName=Adj_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=Adj_KPI schemaName=Adj_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TimeStamp schemaName=TimeStamp_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=FooBar schemaName=FooBar_type
+
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=OCN_AB schemaName=OCN_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=OCN_BA schemaName=OCN_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=SB_OCN_AB schemaName=SB_OCN_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=SB_OCN_BA schemaName=SB_OCN_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellA schemaName=CellA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellB schemaName=CellB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellA_CM schemaName=CellA_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellB_CM schemaName=CellB_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellA_KPI schemaName=CellA_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=CellB_KPI schemaName=CellB_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=Adj_CM schemaName=Adj_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=Adj_KPI schemaName=Adj_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=TimeStamp schemaName=TimeStamp_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task fieldName=FooBar schemaName=FooBar_type
+
+task logic create name=LoadBalancingFuzzyPolicy_Task logicFlavour=FUZZY logic="policymodels/fuzzy/SampleLBFuzzyLogic.xml"
+
+task create name=LoadBalancingFuzzyPolicy_Task_Post
+
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=OCN_AB schemaName=OCN_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=OCN_BA schemaName=OCN_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=SB_OCN_AB schemaName=SB_OCN_AB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=SB_OCN_BA schemaName=SB_OCN_BA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellA schemaName=CellA_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellB schemaName=CellB_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellA_CM schemaName=CellA_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellB_CM schemaName=CellB_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellA_KPI schemaName=CellA_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellB_KPI schemaName=CellB_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=Adj_CM schemaName=Adj_CM_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=Adj_KPI schemaName=Adj_KPI_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=TimeStamp schemaName=TimeStamp_type
+task inputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=FooBar schemaName=FooBar_type
+
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=OCN_AB schemaName=OCN_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=OCN_BA schemaName=OCN_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_HO_EXEC_FAIL_RATE_AB schemaName=REL_HO_EXEC_FAIL_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_HO_EXEC_FAIL_RATE_BA schemaName=REL_HO_EXEC_FAIL_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_NUM_HO_WITH_EVENTS_AB schemaName=REL_NUM_HO_WITH_EVENTS_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_NUM_HO_WITH_EVENTS_BA schemaName=REL_NUM_HO_WITH_EVENTS_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_EARLY_HO_RATE_AB schemaName=REL_TOO_EARLY_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_EARLY_HO_RATE_BA schemaName=REL_TOO_EARLY_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_LATE_HO_RATE_AB schemaName=REL_TOO_LATE_HO_RATE_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=REL_TOO_LATE_HO_RATE_BA schemaName=REL_TOO_LATE_HO_RATE_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=SB_OCN_AB schemaName=SB_OCN_AB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=SB_OCN_BA schemaName=SB_OCN_BA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellA schemaName=CellA_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellB schemaName=CellB_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=Adjacency_4G_Name schemaName=Adjacency_4G_Name_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellA_CM schemaName=CellA_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellB_CM schemaName=CellB_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellA_KPI schemaName=CellA_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=CellB_KPI schemaName=CellB_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=Adj_CM schemaName=Adj_CM_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=Adj_KPI schemaName=Adj_KPI_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=TimeStamp schemaName=TimeStamp_type
+task outputfield create name=LoadBalancingFuzzyPolicy_Task_Post fieldName=FooBar schemaName=FooBar_type
+
+task logic create name=LoadBalancingFuzzyPolicy_Task_Post logicFlavour=MVEL logic="logger.debug(subject.id);logger.debug(inFields);outFields.putAll(inFields);logger.debug(outFields);return true;"
+
+policy create name=LoadBalancingFuzzyPolicy_Policy template=FREEFORM firstState=PreExecute
+
+policy state create name=LoadBalancingFuzzyPolicy_Policy stateName=PostExecute triggerName=LoadBalancingFuzzyPolicy_fromFuzzy defaultTaskName=LoadBalancingFuzzyPolicy_Task_Post
+policy state output create name=LoadBalancingFuzzyPolicy_Policy stateName=PostExecute outputName=Post2Out eventName=LoadBalancingFuzzyPolicy_OutputEvent
+policy state taskref create name=LoadBalancingFuzzyPolicy_Policy stateName=PostExecute taskName=LoadBalancingFuzzyPolicy_Task_Post outputType=DIRECT outputName=Post2Out
+
+policy state create name=LoadBalancingFuzzyPolicy_Policy stateName=FuzzyExecute triggerName=LoadBalancingFuzzyPolicy_toFuzzy defaultTaskName=LoadBalancingFuzzyPolicy_Task
+policy state output create name=LoadBalancingFuzzyPolicy_Policy stateName=FuzzyExecute outputName=Fuzzy2Post eventName=LoadBalancingFuzzyPolicy_fromFuzzy nextState=PostExecute
+policy state taskref create name=LoadBalancingFuzzyPolicy_Policy stateName=FuzzyExecute taskName=LoadBalancingFuzzyPolicy_Task outputType=DIRECT outputName=Fuzzy2Post
+
+policy state create name=LoadBalancingFuzzyPolicy_Policy stateName=PreExecute triggerName=LoadBalancingFuzzyPolicy_InputEvent defaultTaskName=LoadBalancingFuzzyPolicy_Task_Pre
+policy state output create name=LoadBalancingFuzzyPolicy_Policy stateName=PreExecute outputName=Pre2Fuzzy eventName=LoadBalancingFuzzyPolicy_toFuzzy nextState=FuzzyExecute
+policy state taskref create name=LoadBalancingFuzzyPolicy_Policy stateName=PreExecute taskName=LoadBalancingFuzzyPolicy_Task_Pre outputType=DIRECT outputName=Pre2Fuzzy
diff --git a/auth/pom.xml b/auth/pom.xml
new file mode 100644 (file)
index 0000000..6fe1f07
--- /dev/null
@@ -0,0 +1,48 @@
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 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=========================================================
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.policy.apex-pdp</groupId>
+        <artifactId>apex-pdp</artifactId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.onap.policy.apex-pdp.auth</groupId>
+    <artifactId>auth</artifactId>
+    <packaging>pom</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>Policy, state, and task authoring for Apex.</description>
+
+    <profiles>
+        <profile>
+            <id>apexDefault</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <modules>
+                <module>cli-editor</module>
+                <module>cli-codegen</module>
+            </modules>
+        </profile>
+    </profiles>
+</project>
\ No newline at end of file
index fbf1a21..90b9937 100644 (file)
             <artifactId>antlr4-runtime</artifactId>
             <version>4.6</version>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.7</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/json/JSONHandler.java b/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/json/JSONHandler.java
new file mode 100644 (file)
index 0000000..eb42a4e
--- /dev/null
@@ -0,0 +1,53 @@
+/*-
+ * ============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.utilities.json;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+/**
+ * This class reads objects of the given class from an input stream.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @param <TYPE> the generic type
+ */
+public class JSONHandler<TYPE> {
+
+    /**
+     * This method reads objects of a given class from an input stream.
+     *
+     * @param inputClass The class to read
+     * @param inputStream the input stream to read from
+     * @return the object read
+     */
+    public TYPE read(final Class<TYPE> inputClass, final InputStream inputStream) {
+        // Register the adapters for our carrier technologies and event protocols with GSON
+        final GsonBuilder gsonBuilder = new GsonBuilder();
+
+        final Gson gson = gsonBuilder.serializeNulls().create();
+        final Reader jsonResourceReader = new InputStreamReader(inputStream);
+        return gson.fromJson(jsonResourceReader, inputClass);
+    }
+}
diff --git a/model/utilities/src/test/java/org/onap/policy/apex/model/utilities/json/JSONHandlerTest.java b/model/utilities/src/test/java/org/onap/policy/apex/model/utilities/json/JSONHandlerTest.java
new file mode 100644 (file)
index 0000000..b8e2ceb
--- /dev/null
@@ -0,0 +1,60 @@
+/*-
+ * ============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.utilities.json;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+import org.junit.Test;
+
+import com.google.gson.GsonBuilder;
+
+public class JSONHandlerTest {
+
+    private static final String VALUE = "value";
+
+    @Test
+    public void testAssertions() throws IOException {
+        final OverTheMoonObject jsonObject = new OverTheMoonObject(VALUE);
+        final String jsonString = new GsonBuilder().create().toJson(jsonObject);
+
+        final byte[] bytes = jsonString.getBytes(StandardCharsets.UTF_8);
+        try (final InputStream inputStream = new ByteArrayInputStream(bytes);) {
+
+            final JSONHandler<OverTheMoonObject> objUnderTest = new JSONHandler<>();
+
+            final OverTheMoonObject actualObject = objUnderTest.read(OverTheMoonObject.class, inputStream);
+            assertEquals(VALUE, actualObject.name);
+        }
+
+    }
+
+    private class OverTheMoonObject {
+        private final String name;
+
+        public OverTheMoonObject(final String name) {
+            this.name = name;
+        }
+    }
+}
diff --git a/pom.xml b/pom.xml
index 4de1ab5..5fb264f 100644 (file)
--- a/pom.xml
+++ b/pom.xml
     <modules>
         <module>model</module>
         <module>context</module>
+        <module>auth</module>
     </modules>
 </project>
\ No newline at end of file