summaryrefslogtreecommitdiffstats
path: root/model/event-model
diff options
context:
space:
mode:
Diffstat (limited to 'model/event-model')
-rw-r--r--model/event-model/pom.xml67
-rw-r--r--model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEvent.java560
-rw-r--r--model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEventModel.java330
-rw-r--r--model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEvents.java420
-rw-r--r--model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxField.java406
-rw-r--r--model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxInputField.java104
-rw-r--r--model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxOutputField.java104
-rw-r--r--model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/package-info.java34
-rw-r--r--model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestEventModel.java89
-rw-r--r--model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestEvents.java298
-rw-r--r--model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestField.java136
-rw-r--r--model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/handling/TestApexEventModel.java184
-rw-r--r--model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/handling/TestApexEventModelCreator.java309
-rw-r--r--model/event-model/src/test/resources/META-INF/persistence.xml56
-rw-r--r--model/event-model/src/test/resources/logback-test.xml74
15 files changed, 3171 insertions, 0 deletions
diff --git a/model/event-model/pom.xml b/model/event-model/pom.xml
new file mode 100644
index 000000000..8e60a8bf4
--- /dev/null
+++ b/model/event-model/pom.xml
@@ -0,0 +1,67 @@
+<!--
+ ============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.model</groupId>
+ <artifactId>model</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>event-model</artifactId>
+ <name>${project.artifactId}</name>
+ <description>Event Models used in Apex</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.policy.apex-pdp.model</groupId>
+ <artifactId>context-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>generate-xml-schema</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ <configuration>
+ <mainClass>org.onap.policy.apex.model.basicmodel.handling.ApexSchemaGenerator</mainClass>
+ <classpathScope>compile</classpathScope>
+ <arguments>
+ <argument>org.onap.policy.apex.model.eventmodel.concepts.AxEventModel</argument>
+ <argument>${project.build.directory}/model/xml/apex-event-model.xsd</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEvent.java b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEvent.java
new file mode 100644
index 000000000..4944f1b8a
--- /dev/null
+++ b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEvent.java
@@ -0,0 +1,560 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationMessage;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class defines an Apex event. An {@link AxEvent} is used to kick off execution of policies in Apex and is emitted
+ * by policies when they completer execution. In addition, Apex uses {@link AxEvent} instances internally to pass
+ * control from one Apex state to the next during execution.
+ * <p>
+ * The {@link AxArtifactKey} of an event uniquely identifies it in an Apex system and the name field in the key is the
+ * name of the event.
+ * <p>
+ * Each {@link AxEvent} has a name space, which is usually set to identify the domain of application of an event. For
+ * example a 4G cell power event might have the name space {@code org.onap.radio.4g} and the name {@code PowerEvent}.
+ * The source and target of the event are reserved to hold an identifier that defines the sender and receiver of an
+ * event respectively. The definition and structure of these fields is reserved for future use and their use by
+ * applications is currently not recommended.
+ * <p>
+ * The parameters that an event has are defined as a map of {@link AxField} instances.
+ * <p>
+ * Validation checks that the event key is valid. If name space is a blank string, a warning is issued. Blank source or
+ * target fields result in observations being issued. An event may not have any parameters. If it has parameters, the
+ * name and value of each parameter entry is checked to ensure they are not null. Then the local name of each parameter
+ * is checked to ensure it matches the event parameter key on the event. Finally, the parent key of each parameter is
+ * checked to ensure it matches the event key.
+ */
+@Entity
+@Table(name = "AxEvent")
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "apexEvent", namespace = "http://www.onap.org/policy/apex-pdp")
+@XmlType(name = "AxEvent", namespace = "http://www.onap.org/policy/apex-pdp",
+ propOrder = { "key", "nameSpace", "source", "target", "parameterMap" })
+
+public class AxEvent extends AxConcept {
+ private static final long serialVersionUID = -1460388382582984269L;
+
+ private static final String WHITESPACE_REGEXP = "\\s+$";
+
+ /** The key of the event, unique in the Apex system. */
+ @EmbeddedId
+ @XmlElement(name = "key", required = true)
+ // CHECKSTYLE:OFF: checkstyle:VisibilityMonitor
+ protected AxArtifactKey key;
+ // CHECKSTYLE:ON: checkstyle:VisibilityMonitor
+
+ @Column(name = "nameSpace")
+ @XmlElement(required = true)
+ private String nameSpace;
+
+ @Column(name = "source")
+ @XmlElement(required = true)
+ private String source;
+
+ @Column(name = "target")
+ @XmlElement(required = true)
+ private String target;
+
+ @OneToMany(cascade = CascadeType.ALL)
+ @XmlElement(name = "parameter", required = true)
+ private Map<String, AxField> parameterMap;
+
+ /**
+ * The default constructor creates an event with a null artifact key. The event name space, source, and target are
+ * all defined as empty strings and the parameter map is initialized as an empty map.
+ */
+ public AxEvent() {
+ this(new AxArtifactKey());
+ }
+
+ /**
+ * Copy constructor
+ *
+ * @param copyConcept the concept to copy from
+ */
+ public AxEvent(final AxEvent copyConcept) {
+ super(copyConcept);
+ }
+
+ /**
+ * The default constructor creates an event with the given artifact key. The event name space, source, and target
+ * are all defined as empty strings and the parameter map is initialized as an empty map.
+ *
+ * @param key the key of the event
+ */
+ public AxEvent(final AxArtifactKey key) {
+ this(key, "", "", "", new TreeMap<String, AxField>());
+ }
+
+ /**
+ * This constructor creates an event with the given artifact key and name space. The event source, and target are
+ * all defined as empty strings and the parameter map is initialized as an empty map.
+ *
+ * @param key the key of the event
+ * @param nameSpace the name space of the event
+ */
+ public AxEvent(final AxArtifactKey key, final String nameSpace) {
+ this(key, nameSpace, "", "", new TreeMap<String, AxField>());
+ }
+
+ /**
+ * This constructor creates an event with the given artifact key, name space, source and target. The parameter map
+ * is initialized as an empty map.
+ *
+ * @param key the key of the event
+ * @param nameSpace the name space of the event
+ * @param source the source of the event
+ * @param target the target of the event
+ */
+ public AxEvent(final AxArtifactKey key, final String nameSpace, final String source, final String target) {
+ this(key, nameSpace, source, target, new TreeMap<String, AxField>());
+ }
+
+ /**
+ * This constructor creates an event with all its fields defined.
+ *
+ * @param key the key of the event
+ * @param nameSpace the name space of the event
+ * @param source the source of the event
+ * @param target the target of the event
+ * @param parameterMap the map of parameters that the event has
+ */
+ public AxEvent(final AxArtifactKey key, final String nameSpace, final String source, final String target,
+ final SortedMap<String, AxField> parameterMap) {
+ super();
+ Assertions.argumentNotNull(key, "key may not be null");
+ Assertions.argumentNotNull(nameSpace, "nameSpace may not be null");
+ Assertions.argumentNotNull(source, "source may not be null");
+ Assertions.argumentNotNull(target, "target may not be null");
+ Assertions.argumentNotNull(parameterMap, "parameterMap may not be null");
+
+ this.key = key;
+ this.nameSpace = nameSpace;
+ this.source = source;
+ this.target = target;
+ this.parameterMap = parameterMap;
+ }
+
+ /**
+ * This method checks that an event has all the fields in the {@code otherFieldSet} set defined on it.
+ *
+ * @param otherFieldSet the set of fields to check for existence on this event
+ * @return true, if all the {@code otherFieldSet} fields are defined on this event
+ */
+ public boolean hasFields(final Set<AxField> otherFieldSet) {
+ return parameterMap.values().containsAll(otherFieldSet);
+ }
+
+ /**
+ * When an event is unmarshalled from disk or from the database, the parent key in the reference keys in its
+ * parameter map are not set. This method is called by JAXB after unmarshaling and is used to set the parent key of
+ * the {@link AxField} instances in the parameter map to be the key of the event that contains them.
+ *
+ * @param u the unmarshaler that is unmarshaling the model
+ * @param parent the parent object of this object in the unmarshaler
+ */
+ public void afterUnmarshal(final Unmarshaller u, final Object parent) {
+ for (final AxField parameter : parameterMap.values()) {
+ parameter.getKey().setParentArtifactKey(key);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKey()
+ */
+ @Override
+ public AxArtifactKey getKey() {
+ return key;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKeys()
+ */
+ @Override
+ public List<AxKey> getKeys() {
+ final List<AxKey> keyList = key.getKeys();
+
+ for (final AxField field : parameterMap.values()) {
+ keyList.addAll(field.getKeys());
+ }
+ return keyList;
+ }
+
+ /**
+ * Sets the key of the event.
+ *
+ * @param key the key of the event
+ */
+ public void setKey(final AxArtifactKey key) {
+ Assertions.argumentNotNull(key, "key may not be null");
+ this.key = key;
+
+ for (final AxField parameter : parameterMap.values()) {
+ parameter.getKey().setParentArtifactKey(key);
+ }
+ }
+
+ /**
+ * Gets the name space of the event.
+ *
+ * @return the name space of the event
+ */
+ public String getNameSpace() {
+ return nameSpace;
+ }
+
+ /**
+ * Sets the name space of the event.
+ *
+ * @param nameSpace the name space of the event
+ */
+ public void setNameSpace(final String nameSpace) {
+ Assertions.argumentNotNull(nameSpace, "nameSpace may not be null");
+ this.nameSpace = nameSpace.trim();
+ }
+
+ /**
+ * Gets the source of the event.
+ *
+ * @return the source of the event
+ */
+ public String getSource() {
+ return source;
+ }
+
+ /**
+ * Sets the source of the event.
+ *
+ * @param source the source of the event
+ */
+ public void setSource(final String source) {
+ Assertions.argumentNotNull(source, "source may not be null");
+ this.source = source.trim();
+ }
+
+ /**
+ * Gets the target of the event.
+ *
+ * @return the target of the event
+ */
+ public String getTarget() {
+ return target;
+ }
+
+ /**
+ * Sets the target of the event.
+ *
+ * @param target the target of the event
+ */
+ public void setTarget(final String target) {
+ Assertions.argumentNotNull(target, "target may not be null");
+ this.target = target.trim();
+ }
+
+ /**
+ * Gets the event parameter map.
+ *
+ * @return the event parameter map
+ */
+ public Map<String, AxField> getParameterMap() {
+ return parameterMap;
+ }
+
+ /**
+ * Gets the fields defined on the event as a set.
+ *
+ * @return the fields defined on the event as a set
+ */
+ public Set<AxField> getFields() {
+ return new TreeSet<>(parameterMap.values());
+ }
+
+ /**
+ * Sets the event parameter map, containing all the fields of the event.
+ *
+ * @param parameterMap the event parameter map
+ */
+ public void setParameterMap(final Map<String, AxField> parameterMap) {
+ Assertions.argumentNotNull(parameterMap, "parameterMap may not be null");
+ this.parameterMap = parameterMap;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#validate(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxValidationResult)
+ */
+ @Override
+ public AxValidationResult validate(final AxValidationResult resultIn) {
+ AxValidationResult result = resultIn;
+
+ if (key.equals(AxArtifactKey.getNullKey())) {
+ result.addValidationMessage(
+ new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key"));
+ }
+
+ result = key.validate(result);
+
+ if (nameSpace.replaceAll(WHITESPACE_REGEXP, "").length() == 0) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.WARNING,
+ "nameSpace on event is blank"));
+ }
+
+ if (source.replaceAll(WHITESPACE_REGEXP, "").length() == 0) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.OBSERVATION,
+ "source on event is blank"));
+ }
+
+ if (target.replaceAll(WHITESPACE_REGEXP, "").length() == 0) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.OBSERVATION,
+ "target on event is blank"));
+ }
+
+ for (final Entry<String, AxField> eventParameterEntry : parameterMap.entrySet()) {
+ if (eventParameterEntry.getKey() == null || eventParameterEntry.getKey().equals(AxKey.NULL_KEY_NAME)) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "key on parameter " + eventParameterEntry.getKey() + " may not be the null key"));
+ } else if (eventParameterEntry.getValue() == null) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "value on parameter " + eventParameterEntry.getKey() + " may not be null"));
+ } else {
+ result = vaidateEventParameters(eventParameterEntry, result);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Validate an event parameter entry
+ *
+ * @param eventParameterEntry the event parameter entry
+ * @param result the validation result to append to
+ * @return The validation result
+ */
+ private AxValidationResult vaidateEventParameters(final Entry<String, AxField> eventParameterEntry,
+ final AxValidationResult result) {
+ if (!eventParameterEntry.getKey().equals(eventParameterEntry.getValue().getKey().getLocalName())) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "key on parameter " + eventParameterEntry.getKey() + " does not equal parameter field local name "
+ + eventParameterEntry.getValue().getKey().getLocalName()));
+ }
+
+ if (!eventParameterEntry.getValue().getKey().getParentArtifactKey().equals(key)) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "parent key on parameter field " + eventParameterEntry.getValue().getKey()
+ + " does not equal event key"));
+ }
+
+ return eventParameterEntry.getValue().validate(result);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#clean()
+ */
+ @Override
+ public void clean() {
+ key.clean();
+ nameSpace = nameSpace.trim();
+ source = source.trim();
+ target = target.trim();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#toString()
+ */
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(this.getClass().getSimpleName());
+ builder.append(":(");
+ builder.append("key=");
+ builder.append(key);
+ builder.append(",nameSpace=");
+ builder.append(nameSpace);
+ builder.append(",source=");
+ builder.append(source);
+ builder.append(",target=");
+ builder.append(target);
+ builder.append(",parameter=");
+ builder.append(parameterMap);
+ builder.append(")");
+ return builder.toString();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#copyTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
+ @Override
+ public AxConcept copyTo(final AxConcept targetObject) {
+ Assertions.argumentNotNull(targetObject, "targetObject may not be null");
+
+ final Object copyObject = targetObject;
+ Assertions.instanceOf(copyObject, AxEvent.class);
+
+ final AxEvent copy = (AxEvent) copyObject;
+
+ final Map<String, AxField> newParameterMap = new TreeMap<>();
+ for (final Entry<String, AxField> eventParameterMapEntry : parameterMap.entrySet()) {
+ newParameterMap.put(eventParameterMapEntry.getKey(), new AxField(eventParameterMapEntry.getValue()));
+ }
+ copy.setParameterMap(newParameterMap);
+
+ copy.setKey(new AxArtifactKey(key));
+ copy.setNameSpace(nameSpace);
+ copy.setSource(source);
+ copy.setTarget(target);
+
+ return copy;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + key.hashCode();
+ result = prime * result + nameSpace.hashCode();
+ result = prime * result + source.hashCode();
+ result = prime * result + target.hashCode();
+ result = prime * result + parameterMap.hashCode();
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (this == obj) {
+ return true;
+ }
+
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ final AxEvent other = (AxEvent) obj;
+ if (!key.equals(other.key)) {
+ return false;
+ }
+ if (!nameSpace.equals(other.nameSpace)) {
+ return false;
+ }
+ if (!source.equals(other.source)) {
+ return false;
+ }
+ if (!target.equals(other.target)) {
+ return false;
+ }
+ return parameterMap.equals(other.parameterMap);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ @Override
+ public int compareTo(final AxConcept otherObj) {
+ if (otherObj == null) {
+ return -1;
+ }
+ if (this == otherObj) {
+ return 0;
+ }
+ if (getClass() != otherObj.getClass()) {
+ return this.hashCode() - otherObj.hashCode();
+ }
+
+ final AxEvent other = (AxEvent) otherObj;
+ if (!key.equals(other.key)) {
+ return key.compareTo(other.key);
+ }
+ if (!nameSpace.equals(other.nameSpace)) {
+ return nameSpace.compareTo(other.nameSpace);
+ }
+ if (!source.equals(other.source)) {
+ return target.compareTo(other.source);
+ }
+ if (!target.equals(other.target)) {
+ return target.compareTo(other.target);
+ }
+ if (!parameterMap.equals(other.parameterMap)) {
+ return (parameterMap.hashCode() - other.parameterMap.hashCode());
+ }
+
+ return 0;
+ }
+}
diff --git a/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEventModel.java b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEventModel.java
new file mode 100644
index 000000000..3447ff8f9
--- /dev/null
+++ b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEventModel.java
@@ -0,0 +1,330 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
+import org.onap.policy.apex.model.basicmodel.concepts.AxModel;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.service.ModelService;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * A container class for an Apex event model. This class is a container class that allows an Apex model to be
+ * constructed that contains events and context and the key information for those events and context. The model contains
+ * schema definitions and the definitions of events that use those schemas.
+ * <p>
+ * Validation runs {@link AxModel} validation on the model. In addition, the {@link AxContextSchemas} and
+ * {@link AxEvents} validation is run on the context schemas and events in the model.
+ */
+
+@Entity
+@Table(name = "AxEventModel")
+
+@XmlRootElement(name = "apexEventModel", namespace = "http://www.onap.org/policy/apex-pdp")
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AxEventModel", namespace = "http://www.onap.org/policy/apex-pdp", propOrder = { "schemas", "events" })
+
+public class AxEventModel extends AxModel {
+ private static final long serialVersionUID = 8800599637708309945L;
+
+ // @formatter:off
+ @OneToOne(cascade = CascadeType.ALL)
+ @JoinColumns({ @JoinColumn(name = "schemasName", referencedColumnName = "name"),
+ @JoinColumn(name = "schemasVersion", referencedColumnName = "version") })
+ @XmlElement(name = "schemas", required = true)
+ private AxContextSchemas schemas;
+
+ @OneToOne(cascade = CascadeType.ALL)
+ @JoinColumns({ @JoinColumn(name = "eventsName", referencedColumnName = "name"),
+ @JoinColumn(name = "eventsVersion", referencedColumnName = "version") })
+ @XmlElement(name = "events", required = true)
+ private AxEvents events;
+ // @formatter:on
+
+ /**
+ * The Default Constructor creates a {@link AxEventModel} object with a null artifact key and creates an empty event
+ * model.
+ */
+ public AxEventModel() {
+ this(new AxArtifactKey());
+ }
+
+ /**
+ * Copy constructor
+ *
+ * @param copyConcept the concept to copy from
+ */
+ public AxEventModel(final AxEventModel copyConcept) {
+ super(copyConcept);
+ }
+
+ /**
+ * The Key Constructor creates a {@link AxEventModel} object with the given artifact key and creates an empty event
+ * model.
+ *
+ * @param key the event model key
+ */
+ public AxEventModel(final AxArtifactKey key) {
+ this(key, new AxContextSchemas(new AxArtifactKey(key.getName() + "_Schemas", key.getVersion())),
+ new AxKeyInformation(new AxArtifactKey(key.getName() + "_KeyInfo", key.getVersion())),
+ new AxEvents(new AxArtifactKey(key.getName() + "_Events", key.getVersion())));
+ }
+
+ /**
+ * Constructor that initiates a {@link AxEventModel} with all its fields.
+ *
+ * @param key the event model key
+ * @param schemas the schemas for events in the event model
+ * @param keyInformation the key information for context schemas and events in the event model
+ * @param events the events in the event model
+ */
+ public AxEventModel(final AxArtifactKey key, final AxContextSchemas schemas, final AxKeyInformation keyInformation,
+ final AxEvents events) {
+ super(key, keyInformation);
+ Assertions.argumentNotNull(events, "events may not be null");
+
+ this.schemas = schemas;
+ this.events = events;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxModel#register()
+ */
+ @Override
+ public void register() {
+ super.register();
+ ModelService.registerModel(AxContextSchemas.class, getSchemas());
+ ModelService.registerModel(AxEvents.class, getEvents());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxModel#getKeys()
+ */
+ @Override
+ public List<AxKey> getKeys() {
+ final List<AxKey> keyList = super.getKeys();
+
+ keyList.addAll(schemas.getKeys());
+ keyList.addAll(events.getKeys());
+
+ return keyList;
+ }
+
+ /**
+ * Gets the context schemas.
+ *
+ * @return the context schemas
+ */
+ public AxContextSchemas getSchemas() {
+ return schemas;
+ }
+
+ /**
+ * Sets the context schemas.
+ *
+ * @param schemas the context schemas
+ */
+ public void setSchemas(final AxContextSchemas schemas) {
+ Assertions.argumentNotNull(schemas, "schemas may not be null");
+ this.schemas = schemas;
+ }
+
+ /**
+ * Gets the events from the model.
+ *
+ * @return the events
+ */
+ public AxEvents getEvents() {
+ return events;
+ }
+
+ /**
+ * Sets the events in the model.
+ *
+ * @param events the events
+ */
+ public void setEvents(final AxEvents events) {
+ Assertions.argumentNotNull(events, "events may not be null");
+ this.events = events;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxModel#validate(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxValidationResult)
+ */
+ @Override
+ public AxValidationResult validate(final AxValidationResult resultIn) {
+ AxValidationResult result = resultIn;
+
+ result = super.validate(result);
+ result = schemas.validate(result);
+ return events.validate(result);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxModel#clean()
+ */
+ @Override
+ public void clean() {
+ super.clean();
+ schemas.clean();
+ events.clean();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxModel#toString()
+ */
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(this.getClass().getSimpleName());
+ builder.append(":(");
+ builder.append(super.toString());
+ builder.append(",schemas=");
+ builder.append(schemas);
+ builder.append(",events=");
+ builder.append(events);
+ builder.append(")");
+ return builder.toString();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#copyTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
+ @Override
+ public AxConcept copyTo(final AxConcept targetObject) {
+ Assertions.argumentNotNull(targetObject, "target may not be null");
+
+ final Object copyObject = targetObject;
+ Assertions.instanceOf(copyObject, AxEventModel.class);
+
+ final AxEventModel copy = ((AxEventModel) copyObject);
+ super.copyTo(targetObject);
+ copy.setSchemas(new AxContextSchemas(schemas));
+ copy.setEvents(new AxEvents(events));
+
+ return copy;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxModel#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + super.hashCode();
+ result = prime * result + schemas.hashCode();
+ result = prime * result + events.hashCode();
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxModel#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == null) {
+ throw new IllegalArgumentException("comparison object may not be null");
+ }
+
+ if (this == obj) {
+ return true;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ final AxEventModel other = (AxEventModel) obj;
+ if (!super.equals(other)) {
+ return false;
+ }
+ if (!schemas.equals(other.schemas)) {
+ return false;
+ }
+ return events.equals(other.events);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxModel#compareTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
+ @Override
+ public int compareTo(final AxConcept otherObj) {
+ Assertions.argumentNotNull(otherObj, "comparison object may not be null");
+
+ if (this == otherObj) {
+ return 0;
+ }
+ if (getClass() != otherObj.getClass()) {
+ return this.hashCode() - otherObj.hashCode();
+ }
+
+ final AxEventModel other = (AxEventModel) otherObj;
+ if (!super.equals(other)) {
+ return super.compareTo(other);
+ }
+ if (!schemas.equals(other.schemas)) {
+ return schemas.compareTo(other.schemas);
+ }
+ return events.compareTo(other.events);
+ }
+}
diff --git a/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEvents.java b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEvents.java
new file mode 100644
index 000000000..df398c2c9
--- /dev/null
+++ b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxEvents.java
@@ -0,0 +1,420 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NavigableMap;
+import java.util.Set;
+import java.util.TreeMap;
+
+import javax.persistence.CascadeType;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.Table;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
+import org.onap.policy.apex.model.basicmodel.concepts.AxConceptGetter;
+import org.onap.policy.apex.model.basicmodel.concepts.AxConceptGetterImpl;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationMessage;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * This class is an event container and holds a map of the events for an entire Apex model. All Apex models that use
+ * events must have an {@link AxEvents} field. The {@link AxEvents} class implements the helper methods of the
+ * {@link AxConceptGetter} interface to allow {@link AxEvents} instances to be retrieved by calling methods directly on
+ * this class without referencing the contained map.
+ * <p>
+ * Validation checks that the container key is not null. An error is issued if no events are defined in the container.
+ * Each event entry is checked to ensure that its key and value are not null and that the key matches the key in the map
+ * value. Each event entry is then validated individually.
+ */
+@Entity
+@Table(name = "AxEvents")
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AxEvents", namespace = "http://www.onap.org/policy/apex-pdp", propOrder = { "key", "eventMap" })
+
+public class AxEvents extends AxConcept implements AxConceptGetter<AxEvent> {
+ private static final long serialVersionUID = 4290442590545820316L;
+
+ @EmbeddedId
+ @XmlElement(name = "key", required = true)
+ private AxArtifactKey key;
+
+ // @formatter:off
+ @ManyToMany(cascade = CascadeType.ALL)
+ @JoinTable(
+ joinColumns = { @JoinColumn(name = "eventMapName", referencedColumnName = "name"),
+ @JoinColumn(name = "eventMapVersion", referencedColumnName = "version") },
+ inverseJoinColumns = { @JoinColumn(name = "eventName", referencedColumnName = "name"),
+ @JoinColumn(name = "eventVersion", referencedColumnName = "version") })
+ @XmlElement(required = true)
+ private Map<AxArtifactKey, AxEvent> eventMap;
+ // @formatter:on
+
+ /**
+ * The Default Constructor creates a {@link AxEvents} object with a null artifact key and creates an empty event
+ * map.
+ */
+ public AxEvents() {
+ this(new AxArtifactKey());
+ }
+
+ /**
+ * Copy constructor
+ *
+ * @param copyConcept the concept to copy from
+ */
+ public AxEvents(final AxEvents copyConcept) {
+ super(copyConcept);
+ }
+
+ /**
+ * The Key Constructor creates a {@link AxEvents} object with the given artifact key and creates an empty event map.
+ *
+ * @param key the event container key
+ */
+ public AxEvents(final AxArtifactKey key) {
+ this(key, new TreeMap<AxArtifactKey, AxEvent>());
+ }
+
+ /**
+ * This Constructor creates an event container with all of its fields defined.
+ *
+ * @param key the event container key
+ * @param eventMap the events to be stored in the event container
+ */
+ public AxEvents(final AxArtifactKey key, final Map<AxArtifactKey, AxEvent> eventMap) {
+ super();
+ Assertions.argumentNotNull(key, "key may not be null");
+ Assertions.argumentNotNull(eventMap, "eventMap may not be null");
+
+ this.key = key;
+ this.eventMap = new TreeMap<>();
+ this.eventMap.putAll(eventMap);
+ }
+
+ /**
+ * When a model is unmarshalled from disk or from the database, the event map is returned as a raw hash map. This
+ * method is called by JAXB after unmarshaling and is used to convert the hash map to a {@link NavigableMap} so that
+ * it will work with the {@link AxConceptGetter} interface.
+ *
+ * @param u the unmarshaler that is unmarshaling the model
+ * @param parent the parent object of this object in the unmarshaler
+ */
+ public void afterUnmarshal(final Unmarshaller u, final Object parent) {
+ // The map must be navigable to allow name and version searching, unmarshaling returns a hash map
+ final NavigableMap<AxArtifactKey, AxEvent> navigableEventMap = new TreeMap<>();
+ navigableEventMap.putAll(eventMap);
+ eventMap = navigableEventMap;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKey()
+ */
+ @Override
+ public AxArtifactKey getKey() {
+ return key;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKeys()
+ */
+ @Override
+ public List<AxKey> getKeys() {
+ final List<AxKey> keyList = key.getKeys();
+
+ for (final AxEvent event : eventMap.values()) {
+ keyList.addAll(event.getKeys());
+ }
+
+ return keyList;
+ }
+
+ /**
+ * Sets the key of the event container.
+ *
+ * @param key the event container key
+ */
+ public void setKey(final AxArtifactKey key) {
+ Assertions.argumentNotNull(key, "key may not be null");
+ this.key = key;
+ }
+
+ /**
+ * Gets the event map containing the events in the event container.
+ *
+ * @return the event map with all the events in the event container
+ */
+ public Map<AxArtifactKey, AxEvent> getEventMap() {
+ return eventMap;
+ }
+
+ /**
+ * Sets the event map containing the events in the event container.
+ *
+ * @param eventMap the event map containing the events in the event container
+ */
+ public void setEventMap(final Map<AxArtifactKey, AxEvent> eventMap) {
+ Assertions.argumentNotNull(eventMap, "eventMap may not be null");
+ this.eventMap = new TreeMap<>();
+ this.eventMap.putAll(eventMap);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#validate(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxValidationResult)
+ */
+ @Override
+ public AxValidationResult validate(final AxValidationResult resultIn) {
+ AxValidationResult result = resultIn;
+
+ if (key.equals(AxArtifactKey.getNullKey())) {
+ result.addValidationMessage(
+ new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key"));
+ }
+
+ result = key.validate(result);
+
+ if (eventMap.size() == 0) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "eventMap may not be empty"));
+ } else {
+ for (final Entry<AxArtifactKey, AxEvent> eventEntry : eventMap.entrySet()) {
+ if (eventEntry.getKey().equals(AxArtifactKey.getNullKey())) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "key on event entry " + eventEntry.getKey() + " may not be the null key"));
+ } else if (eventEntry.getValue() == null) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "value on event entry " + eventEntry.getKey() + " may not be null"));
+ } else {
+ if (!eventEntry.getKey().equals(eventEntry.getValue().getKey())) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(),
+ ValidationResult.INVALID, "key on event entry key " + eventEntry.getKey()
+ + " does not equal event value key " + eventEntry.getValue().getKey()));
+ }
+
+ result = eventEntry.getValue().validate(result);
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#clean()
+ */
+ @Override
+ public void clean() {
+ key.clean();
+ for (final Entry<AxArtifactKey, AxEvent> eventEntry : eventMap.entrySet()) {
+ eventEntry.getKey().clean();
+ eventEntry.getValue().clean();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#toString()
+ */
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(this.getClass().getSimpleName());
+ builder.append(":(");
+ builder.append("key=");
+ builder.append(key);
+ builder.append(",eventMap=");
+ builder.append(eventMap);
+ builder.append(")");
+ return builder.toString();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#copyTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
+ @Override
+ public AxConcept copyTo(final AxConcept targetObject) {
+ Assertions.argumentNotNull(targetObject, "target may not be null");
+
+ final Object copyObject = targetObject;
+ Assertions.instanceOf(copyObject, AxEvents.class);
+
+ final AxEvents copy = (AxEvents) copyObject;
+ copy.setKey(new AxArtifactKey(key));
+ final Map<AxArtifactKey, AxEvent> newEventMap = new TreeMap<>();
+ for (final Entry<AxArtifactKey, AxEvent> eventMapEntry : eventMap.entrySet()) {
+ newEventMap.put(new AxArtifactKey(eventMapEntry.getKey()), new AxEvent(eventMapEntry.getValue()));
+ }
+ copy.setEventMap(newEventMap);
+
+ return copy;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + key.hashCode();
+ result = prime * result + eventMap.hashCode();
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (this == obj) {
+ return true;
+ }
+
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ final AxEvents other = (AxEvents) obj;
+ if (!key.equals(other.key)) {
+ return false;
+ }
+ return eventMap.equals(other.eventMap);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ @Override
+ public int compareTo(final AxConcept otherObj) {
+ if (otherObj == null) {
+ return -1;
+ }
+ if (this == otherObj) {
+ return 0;
+ }
+ if (getClass() != otherObj.getClass()) {
+ return this.hashCode() - otherObj.hashCode();
+ }
+
+ final AxEvents other = (AxEvents) otherObj;
+ if (!key.equals(other.key)) {
+ return key.compareTo(other.key);
+ }
+ if (!eventMap.equals(other.eventMap)) {
+ return (eventMap.hashCode() - other.eventMap.hashCode());
+ }
+
+ return 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConceptGetter#get(org.onap.policy.apex.model.basicmodel.
+ * concepts. AxArtifactKey)
+ */
+ @Override
+ public AxEvent get(final AxArtifactKey conceptKey) {
+ return new AxConceptGetterImpl<>((NavigableMap<AxArtifactKey, AxEvent>) eventMap).get(conceptKey);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConceptGetter#get(java.lang.String)
+ */
+ @Override
+ public AxEvent get(final String conceptKeyName) {
+ return new AxConceptGetterImpl<>((NavigableMap<AxArtifactKey, AxEvent>) eventMap).get(conceptKeyName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConceptGetter#get(java.lang.String, java.lang.String)
+ */
+ @Override
+ public AxEvent get(final String conceptKeyName, final String conceptKeyVersion) {
+ return new AxConceptGetterImpl<>((NavigableMap<AxArtifactKey, AxEvent>) eventMap).get(conceptKeyName,
+ conceptKeyVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConceptGetter#getAll(java.lang.String)
+ */
+ @Override
+ public Set<AxEvent> getAll(final String conceptKeyName) {
+ return new AxConceptGetterImpl<>((NavigableMap<AxArtifactKey, AxEvent>) eventMap).getAll(conceptKeyName);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConceptGetter#getAll(java.lang.String, java.lang.String)
+ */
+ @Override
+ public Set<AxEvent> getAll(final String conceptKeyName, final String conceptKeyVersion) {
+ return new AxConceptGetterImpl<>((NavigableMap<AxArtifactKey, AxEvent>) eventMap).getAll(conceptKeyName,
+ conceptKeyVersion);
+ }
+}
diff --git a/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxField.java b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxField.java
new file mode 100644
index 000000000..4aee0ebca
--- /dev/null
+++ b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxField.java
@@ -0,0 +1,406 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import java.util.List;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKeyUse;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationMessage;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
+import org.onap.policy.apex.model.basicmodel.xml.AxReferenceKeyAdapter;
+import org.onap.policy.apex.model.utilities.Assertions;
+
+/**
+ * In Apex, a field is an input or output parameter to or from a concept. For example, the parameters of an event are
+ * fields and the input and output of a task is defined as a collection of fields.
+ * <p>
+ * A field has an {@link AxReferenceKey} key that defines its name and parent, and a {@link AxArtifactKey} key to a
+ * context schema that defines the structure of the data atom that holds the value of the field. Fields can be specified
+ * as being optional but are mandatory by default.
+ * <p>
+ * Validation checks that the field key and the field schema reference key are not null.
+ */
+@Entity
+@Table(name = "AxField")
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "apexField", namespace = "http://www.onap.org/policy/apex-pdp")
+@XmlType(name = "AxField", namespace = "http://www.onap.org/policy/apex-pdp",
+ propOrder = { "key", "fieldSchemaKey", "optional" })
+
+public class AxField extends AxConcept {
+ private static final String KEY_MAY_NOT_BE_NULL = "key may not be null";
+ private static final String FIELD_SCHEMA_KEY_MAY_NOT_BE_NULL = "fieldSchemaKey may not be null";
+
+ private static final long serialVersionUID = -6443016863162692288L;
+
+ private static final int HASH_PRIME_0 = 1231;
+ private static final int HASH_PRIME_1 = 1237;
+
+ @EmbeddedId()
+ @XmlElement(name = "key", required = true)
+ @XmlJavaTypeAdapter(AxReferenceKeyAdapter.class)
+ private AxReferenceKey key;
+
+ // @formatter:off
+ @Embedded
+ @AttributeOverrides({ @AttributeOverride(name = "name", column = @Column(name = "fieldSchemaName")),
+ @AttributeOverride(name = "version", column = @Column(name = "fieldSchemaVersion")) })
+ @Column(name = "fieldSchemaKey")
+ @XmlElement(required = true)
+ private AxArtifactKey fieldSchemaKey;
+ // @formatter:on
+
+ @Column(name = "optional")
+ @XmlElement(required = false)
+ private boolean optional;
+
+ /**
+ * The default constructor creates a field with a null artifact and schema key.
+ */
+ public AxField() {
+ this(new AxReferenceKey());
+ optional = false;
+ }
+
+ /**
+ * The default constructor creates a field with the given artifact key and a null schema key.
+ *
+ * @param key the field key
+ */
+ public AxField(final AxReferenceKey key) {
+ this(key, new AxArtifactKey());
+ }
+
+ /**
+ * Copy constructor
+ *
+ * @param copyConcept the concept to copy from
+ */
+ public AxField(final AxField copyConcept) {
+ super(copyConcept);
+ }
+
+ /**
+ * Constructor to create the field with both its keys defined.
+ *
+ * @param key the field key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ */
+ public AxField(final AxReferenceKey key, final AxArtifactKey fieldSchemaKey) {
+ super();
+ Assertions.argumentNotNull(key, KEY_MAY_NOT_BE_NULL);
+ Assertions.argumentNotNull(fieldSchemaKey, FIELD_SCHEMA_KEY_MAY_NOT_BE_NULL);
+
+ this.key = key;
+ this.fieldSchemaKey = fieldSchemaKey;
+ }
+
+ /**
+ * Constructor to create the field with all its fields defined.
+ *
+ * @param key the field key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ * @param optional true if this field is optional
+ */
+ public AxField(final AxReferenceKey key, final AxArtifactKey fieldSchemaKey, final boolean optional) {
+ super();
+ Assertions.argumentNotNull(key, KEY_MAY_NOT_BE_NULL);
+ Assertions.argumentNotNull(fieldSchemaKey, FIELD_SCHEMA_KEY_MAY_NOT_BE_NULL);
+
+ this.key = key;
+ this.fieldSchemaKey = fieldSchemaKey;
+ this.optional = optional;
+ }
+
+ /**
+ * Constructor to create the field with the local name of its reference key defined and its schema key defined.
+ *
+ * @param localName the local name of the field reference key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ */
+ public AxField(final String localName, final AxArtifactKey fieldSchemaKey) {
+ super();
+ Assertions.argumentNotNull(localName, "localName may not be null");
+ Assertions.argumentNotNull(fieldSchemaKey, FIELD_SCHEMA_KEY_MAY_NOT_BE_NULL);
+
+ key = new AxReferenceKey();
+ key.setLocalName(localName);
+ this.fieldSchemaKey = fieldSchemaKey;
+ }
+
+ /**
+ * Constructor to create the field with the local name of its reference key defined, its schema key and optionality
+ * defined.
+ *
+ * @param localName the local name of the field reference key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ * @param optional true if this field is optional
+ */
+ public AxField(final String localName, final AxArtifactKey fieldSchemaKey, final boolean optional) {
+ super();
+ Assertions.argumentNotNull(localName, "localName may not be null");
+ Assertions.argumentNotNull(fieldSchemaKey, FIELD_SCHEMA_KEY_MAY_NOT_BE_NULL);
+
+ key = new AxReferenceKey();
+ key.setLocalName(localName);
+ this.fieldSchemaKey = fieldSchemaKey;
+ this.optional = optional;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKey()
+ */
+ @Override
+ public AxReferenceKey getKey() {
+ return key;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKeys()
+ */
+ @Override
+ public List<AxKey> getKeys() {
+ final List<AxKey> keyList = key.getKeys();
+ keyList.add(new AxKeyUse(fieldSchemaKey));
+ return keyList;
+ }
+
+ /**
+ * Sets the reference key of the field.
+ *
+ * @param key the field reference key
+ */
+ public void setKey(final AxReferenceKey key) {
+ Assertions.argumentNotNull(key, KEY_MAY_NOT_BE_NULL);
+ this.key = key;
+ }
+
+ /**
+ * Gets the key of the field schema.
+ *
+ * @return the field schema key
+ */
+ public AxArtifactKey getSchema() {
+ return fieldSchemaKey;
+ }
+
+ /**
+ * Sets the key of the field schema.
+ *
+ * @param schema the field schema key
+ */
+ public void setSchema(final AxArtifactKey schema) {
+ Assertions.argumentNotNull(schema, "schema may not be null");
+ this.fieldSchemaKey = schema;
+ }
+
+ /**
+ * Gets the optionality of the field.
+ *
+ * @return the field optional flag
+ */
+ public boolean getOptional() {
+ return optional;
+ }
+
+ /**
+ * Sets the optionality of the field.
+ *
+ * @param optional the optionality of the field
+ */
+ public void setOptional(final boolean optional) {
+ this.optional = optional;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#validate(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxValidationResult)
+ */
+ @Override
+ public AxValidationResult validate(final AxValidationResult resultIn) {
+ AxValidationResult result = resultIn;
+
+ if (key.equals(AxReferenceKey.getNullKey())) {
+ result.addValidationMessage(
+ new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key"));
+ }
+
+ result = key.validate(result);
+
+ if (fieldSchemaKey.equals(AxArtifactKey.getNullKey())) {
+ result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID,
+ "fieldSchemaKey is a null key: " + fieldSchemaKey));
+ }
+ return fieldSchemaKey.validate(result);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#clean()
+ */
+ @Override
+ public void clean() {
+ key.clean();
+ fieldSchemaKey.clean();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#toString()
+ */
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(this.getClass().getSimpleName());
+ builder.append(":(");
+ builder.append("key=");
+ builder.append(key);
+ builder.append(",fieldSchemaKey=");
+ builder.append(fieldSchemaKey);
+ builder.append(",optional=");
+ builder.append(optional);
+ builder.append(")");
+ return builder.toString();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#copyTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
+ @Override
+ public AxConcept copyTo(final AxConcept targetObject) {
+ Assertions.argumentNotNull(targetObject, "target may not be null");
+
+ final Object copyObject = targetObject;
+ Assertions.instanceOf(copyObject, AxField.class);
+
+ final AxField copy = ((AxField) copyObject);
+ copy.setKey(new AxReferenceKey(key));
+ copy.setSchema(new AxArtifactKey(fieldSchemaKey));
+ copy.setOptional(optional);
+ return copy;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + key.hashCode();
+ result = prime * result + fieldSchemaKey.hashCode();
+ result = prime * result + (optional ? HASH_PRIME_0 : HASH_PRIME_1);
+ return result;
+ }
+
+ /*
+ * (nonJavadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (this == obj) {
+ return true;
+ }
+
+ if (!(obj instanceof AxField)) {
+ return false;
+ }
+
+ final AxField other = (AxField) obj;
+ if (!key.getLocalName().equals(other.key.getLocalName())) {
+ return false;
+ }
+ if (optional != other.optional) {
+ return false;
+ }
+ return fieldSchemaKey.equals(other.fieldSchemaKey);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ @Override
+ public int compareTo(final AxConcept otherObj) {
+ if (otherObj == null) {
+ return 1;
+ }
+ if (this == otherObj) {
+ return 0;
+ }
+ if (!(otherObj instanceof AxField)) {
+ return this.hashCode() - otherObj.hashCode();
+ }
+
+ final AxField other = (AxField) otherObj;
+ if (!key.getLocalName().equals(other.key.getLocalName())) {
+ return key.getLocalName().compareTo(other.key.getLocalName());
+ }
+ if (optional != other.optional) {
+ return (optional ? 1 : -1);
+ }
+ return fieldSchemaKey.compareTo(other.fieldSchemaKey);
+ }
+}
diff --git a/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxInputField.java b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxInputField.java
new file mode 100644
index 000000000..e7a9a2af5
--- /dev/null
+++ b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxInputField.java
@@ -0,0 +1,104 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+
+/**
+ * This class specializes the {@link AxField} class for use as input fields on events.
+ */
+@Entity
+@Table(name = "AxInputField")
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "apexInputField", namespace = "http://www.onap.org/policy/apex-pdp")
+@XmlType(name = "AxInputField", namespace = "http://www.onap.org/policy/apex-pdp")
+
+public class AxInputField extends AxField {
+ private static final long serialVersionUID = 2090324845463750391L;
+
+ /**
+ * The default constructor creates a field with a null artifact and schema key.
+ */
+ public AxInputField() {
+ super();
+ }
+
+ /**
+ * The default constructor creates a field with the given artifact key and a null schema key.
+ *
+ * @param key the field key
+ */
+ public AxInputField(final AxReferenceKey key) {
+ super(key);
+ }
+
+ /**
+ * Constructor to create the field with both its keys defined.
+ *
+ * @param key the field key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ */
+ public AxInputField(final AxReferenceKey key, final AxArtifactKey fieldSchemaKey) {
+ super(key, fieldSchemaKey);
+ }
+
+ /**
+ * Constructor to create the field with both its keys defined and optional flag specified.
+ *
+ * @param key the field key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ * @param optional true if the task field is optional, false otherwise
+ */
+ public AxInputField(final AxReferenceKey key, final AxArtifactKey fieldSchemaKey, final boolean optional) {
+ super(key, fieldSchemaKey, optional);
+ }
+
+ /**
+ * Constructor to create the field with the local name of its reference key defined and its schema key defined.
+ *
+ * @param localName the local name of the field reference key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ */
+ public AxInputField(final String localName, final AxArtifactKey fieldSchemaKey) {
+ super(localName, fieldSchemaKey);
+ }
+
+ /**
+ * Copy constructor, create an input field as a copy of another input field.
+ *
+ * @param field the input field to copy from
+ */
+ public AxInputField(final AxInputField field) {
+ super(new AxReferenceKey(field.getKey()), new AxArtifactKey(field.getSchema()));
+ }
+}
diff --git a/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxOutputField.java b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxOutputField.java
new file mode 100644
index 000000000..1dd2ecb7a
--- /dev/null
+++ b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/AxOutputField.java
@@ -0,0 +1,104 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+
+/**
+ * This class specializes the {@link AxField} class for use as output fields on events.
+ */
+@Entity
+@Table(name = "AxOutputField")
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "apexOutputField", namespace = "http://www.onap.org/policy/apex-pdp")
+@XmlType(name = "AxOutputField", namespace = "http://www.onap.org/policy/apex-pdp")
+
+public class AxOutputField extends AxField {
+ private static final long serialVersionUID = 2090324845463750391L;
+
+ /**
+ * The default constructor creates a field with a null artifact and schema key.
+ */
+ public AxOutputField() {
+ super();
+ }
+
+ /**
+ * The default constructor creates a field with the given artifact key and a null schema key.
+ *
+ * @param key the field key
+ */
+ public AxOutputField(final AxReferenceKey key) {
+ super(key);
+ }
+
+ /**
+ * Constructor to create the field with both its keys defined.
+ *
+ * @param key the field key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ */
+ public AxOutputField(final AxReferenceKey key, final AxArtifactKey fieldSchemaKey) {
+ super(key, fieldSchemaKey);
+ }
+
+ /**
+ * Constructor to create the field with both its keys defined and optional flag specified.
+ *
+ * @param key the field key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ * @param optional true if the task field is optional, false otherwise
+ */
+ public AxOutputField(final AxReferenceKey key, final AxArtifactKey fieldSchemaKey, final boolean optional) {
+ super(key, fieldSchemaKey, optional);
+ }
+
+ /**
+ * Constructor to create the field with the local name of its reference key defined and its schema key defined.
+ *
+ * @param localName the local name of the field reference key
+ * @param fieldSchemaKey the key of the field schema to use for this field
+ */
+ public AxOutputField(final String localName, final AxArtifactKey fieldSchemaKey) {
+ super(localName, fieldSchemaKey);
+ }
+
+ /**
+ * Copy constructor, create an output field as a copy of another output field.
+ *
+ * @param field the output field to copy from
+ */
+ public AxOutputField(final AxOutputField field) {
+ super(new AxReferenceKey(field.getKey()), new AxArtifactKey(field.getSchema()));
+ }
+}
diff --git a/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/package-info.java b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/package-info.java
new file mode 100644
index 000000000..7b20b3939
--- /dev/null
+++ b/model/event-model/src/main/java/org/onap/policy/apex/model/eventmodel/concepts/package-info.java
@@ -0,0 +1,34 @@
+/*-
+ * ============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=========================================================
+ */
+
+/**
+ * Contains the concepts required to manage events in APEX. It defines the main Apex concepts of events and fields.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+
+@XmlSchema(namespace = "http://www.onap.org/policy/apex-pdp", elementFormDefault = XmlNsForm.QUALIFIED,
+ xmlns = { @XmlNs(namespaceURI = "http://www.onap.org/policy/apex-pdp", prefix = "") })
+
+package org.onap.policy.apex.model.eventmodel.concepts;
+
+import javax.xml.bind.annotation.XmlNs;
+import javax.xml.bind.annotation.XmlNsForm;
+import javax.xml.bind.annotation.XmlSchema;
diff --git a/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestEventModel.java b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestEventModel.java
new file mode 100644
index 000000000..dbff0666d
--- /dev/null
+++ b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestEventModel.java
@@ -0,0 +1,89 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEventModel;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestEventModel {
+
+ @Test
+ public void testEventModel() {
+ assertNotNull(new AxEventModel());
+ assertNotNull(new AxEventModel(new AxArtifactKey()));
+ assertNotNull(
+ new AxEventModel(new AxArtifactKey(), new AxContextSchemas(), new AxKeyInformation(), new AxEvents()));
+
+ final AxArtifactKey modelKey = new AxArtifactKey("ModelKey", "0.0.1");
+ final AxArtifactKey schemasKey = new AxArtifactKey("SchemasKey", "0.0.1");
+ final AxArtifactKey eventsKey = new AxArtifactKey("EventsKey", "0.0.1");
+ final AxArtifactKey keyInfoKey = new AxArtifactKey("SchemasKey", "0.0.1");
+ final AxEventModel model = new AxEventModel(modelKey, new AxContextSchemas(schemasKey),
+ new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey));
+ model.register();
+
+ model.clean();
+ assertNotNull(model);
+ assertEquals("AxEventModel:(AxEventModel:(key=AxArtifactKey:(nam", model.toString().substring(0, 50));
+
+ final AxEventModel clonedModel = new AxEventModel(model);
+
+ assertFalse(model.hashCode() == 0);
+
+ assertTrue(model.equals(model));
+ assertTrue(model.equals(clonedModel));
+ assertFalse(model.equals("Hello"));
+ assertFalse(model.equals(new AxEventModel(new AxArtifactKey())));
+ assertFalse(model.equals(new AxEventModel(modelKey, new AxContextSchemas(), new AxKeyInformation(keyInfoKey),
+ new AxEvents(eventsKey))));
+ assertFalse(model.equals(new AxEventModel(modelKey, new AxContextSchemas(schemasKey), new AxKeyInformation(),
+ new AxEvents(eventsKey))));
+ assertFalse(model.equals(new AxEventModel(modelKey, new AxContextSchemas(schemasKey),
+ new AxKeyInformation(keyInfoKey), new AxEvents())));
+ assertTrue(model.equals(new AxEventModel(modelKey, new AxContextSchemas(schemasKey),
+ new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey))));
+
+ assertEquals(0, model.compareTo(model));
+ assertEquals(0, model.compareTo(clonedModel));
+ assertNotEquals(0, model.compareTo(new AxArtifactKey()));
+ assertNotEquals(0, model.compareTo(new AxEventModel(modelKey, new AxContextSchemas(),
+ new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey))));
+ assertNotEquals(0, model.compareTo(new AxEventModel(modelKey, new AxContextSchemas(schemasKey),
+ new AxKeyInformation(), new AxEvents(eventsKey))));
+ assertNotEquals(0, model.compareTo(new AxEventModel(modelKey, new AxContextSchemas(schemasKey),
+ new AxKeyInformation(keyInfoKey), new AxEvents())));
+ assertEquals(0, model.compareTo(new AxEventModel(modelKey, new AxContextSchemas(schemasKey),
+ new AxKeyInformation(keyInfoKey), new AxEvents(eventsKey))));
+ }
+}
diff --git a/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestEvents.java b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestEvents.java
new file mode 100644
index 000000000..5456dfad8
--- /dev/null
+++ b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestEvents.java
@@ -0,0 +1,298 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
+import org.onap.policy.apex.model.eventmodel.concepts.AxField;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestEvents {
+
+ @Test
+ public void testEvents() {
+ final TreeMap<String, AxField> parameterMap = new TreeMap<>();
+ final TreeMap<String, AxField> parameterMapEmpty = new TreeMap<>();
+
+ assertNotNull(new AxEvent());
+ assertNotNull(new AxEvent(new AxArtifactKey()));
+ assertNotNull(new AxEvent(new AxArtifactKey(), "namespace"));
+ assertNotNull(new AxEvent(new AxArtifactKey(), "namespace", "source", "target"));
+ assertNotNull(new AxEvent(new AxArtifactKey(), "namespace", "source", "target"));
+ assertNotNull(new AxEvent(new AxArtifactKey(), "namespace", "source", "target", parameterMap));
+
+ final AxEvent event = new AxEvent();
+
+ final AxArtifactKey eventKey = new AxArtifactKey("EventName", "0.0.1");
+ event.setKey(eventKey);
+ assertEquals("EventName:0.0.1", event.getKey().getID());
+ assertEquals("EventName:0.0.1", event.getKeys().get(0).getID());
+
+ event.setNameSpace("namespace");
+ assertEquals("namespace", event.getNameSpace());
+
+ event.setSource("source");
+ assertEquals("source", event.getSource());
+
+ event.setTarget("target");
+ assertEquals("target", event.getTarget());
+
+ event.setParameterMap(parameterMap);
+ assertEquals(0, event.getParameterMap().size());
+
+ final AxField eventField =
+ new AxField(new AxReferenceKey(eventKey, "Field0"), new AxArtifactKey("Field0Schema", "0.0.1"));
+ event.getParameterMap().put(eventField.getKey().getLocalName(), eventField);
+ assertEquals(1, event.getParameterMap().size());
+
+ final AxField eventFieldBadParent =
+ new AxField(new AxReferenceKey(new AxArtifactKey("OtherEvent", "0.0.01"), "Field0"),
+ new AxArtifactKey("Field0Schema", "0.0.1"));
+
+ final AxArtifactKey newEventKey = new AxArtifactKey("NewEventName", "0.0.1");
+ event.setKey(newEventKey);
+ assertEquals("NewEventName:0.0.1", event.getKey().getID());
+ assertEquals("NewEventName:0.0.1", event.getKeys().get(0).getID());
+ assertEquals("NewEventName:0.0.1",
+ event.getParameterMap().get("Field0").getKey().getParentArtifactKey().getID());
+ event.setKey(eventKey);
+ assertEquals("EventName:0.0.1", event.getKey().getID());
+ assertEquals("EventName:0.0.1", event.getKeys().get(0).getID());
+
+ assertTrue("Field0", event.getFields().contains(eventField));
+ assertTrue(event.hasFields(new TreeSet<AxField>(parameterMap.values())));
+
+ AxValidationResult result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(AxValidationResult.ValidationResult.VALID, result.getValidationResult());
+
+ event.setKey(AxArtifactKey.getNullKey());
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ event.setKey(eventKey);
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ event.setNameSpace("");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.WARNING, result.getValidationResult());
+
+ event.setNameSpace("namespace");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ event.setSource("");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.OBSERVATION, result.getValidationResult());
+
+ event.setSource("source");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ event.setTarget("");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.OBSERVATION, result.getValidationResult());
+
+ event.setTarget("target");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ event.getParameterMap().put(AxKey.NULL_KEY_NAME, null);
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ event.getParameterMap().remove(AxKey.NULL_KEY_NAME);
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ event.getParameterMap().put("NullField", null);
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ event.getParameterMap().remove("NullField");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ event.getParameterMap().put("NullField", eventField);
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ event.getParameterMap().remove("NullField");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ event.getParameterMap().put("BadParent", eventFieldBadParent);
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ event.getParameterMap().remove("BadParent");
+ result = new AxValidationResult();
+ result = event.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ event.clean();
+ event.afterUnmarshal(null, null);
+
+ final AxEvent clonedEvent = new AxEvent(event);
+ assertEquals("AxEvent:(key=AxArtifactKey:(name=EventName,version=0.0.1),nameSpace=namespace",
+ clonedEvent.toString().substring(0, 77));
+
+ assertFalse(event.hashCode() == 0);
+
+ assertTrue(event.equals(event));
+ assertTrue(event.equals(clonedEvent));
+ assertFalse(event.equals(null));
+ assertFalse(event.equals("Hello"));
+ assertFalse(
+ event.equals(new AxEvent(AxArtifactKey.getNullKey(), "namespace", "source", "target", parameterMap)));
+ assertFalse(event.equals(new AxEvent(eventKey, "namespace1", "source", "target", parameterMap)));
+ assertFalse(event.equals(new AxEvent(eventKey, "namespace", "source2", "target", parameterMap)));
+ assertFalse(event.equals(new AxEvent(eventKey, "namespace", "source", "target3", parameterMap)));
+ assertFalse(event.equals(new AxEvent(eventKey, "namespace", "source", "target", parameterMapEmpty)));
+ assertTrue(event.equals(new AxEvent(eventKey, "namespace", "source", "target", parameterMap)));
+
+ assertEquals(0, event.compareTo(event));
+ assertEquals(0, event.compareTo(clonedEvent));
+ assertNotEquals(0, event.compareTo(new AxArtifactKey()));
+ assertNotEquals(0, event.compareTo(null));
+ assertNotEquals(0, event
+ .compareTo(new AxEvent(AxArtifactKey.getNullKey(), "namespace", "source", "target", parameterMap)));
+ assertNotEquals(0, event.compareTo(new AxEvent(eventKey, "namespace1", "source", "target", parameterMap)));
+ assertNotEquals(0, event.compareTo(new AxEvent(eventKey, "namespace", "source2", "target", parameterMap)));
+ assertNotEquals(0, event.compareTo(new AxEvent(eventKey, "namespace", "source", "target3", parameterMap)));
+ assertNotEquals(0, event.compareTo(new AxEvent(eventKey, "namespace", "source", "target", parameterMapEmpty)));
+ assertEquals(0, event.compareTo(new AxEvent(eventKey, "namespace", "source", "target", parameterMap)));
+
+ assertNotNull(event.getKeys());
+
+ final AxEvents events = new AxEvents();
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ // Invalid, no events in event map
+ events.setKey(new AxArtifactKey("EventsKey", "0.0.1"));
+ assertEquals("EventsKey:0.0.1", events.getKey().getID());
+
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ events.getEventMap().put(eventKey, event);
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ events.getEventMap().put(AxArtifactKey.getNullKey(), null);
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ events.getEventMap().remove(AxArtifactKey.getNullKey());
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ events.getEventMap().put(new AxArtifactKey("NullValueKey", "0.0.1"), null);
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ events.getEventMap().remove(new AxArtifactKey("NullValueKey", "0.0.1"));
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ events.getEventMap().put(new AxArtifactKey("BadEventKey", "0.0.1"), event);
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ events.getEventMap().remove(new AxArtifactKey("BadEventKey", "0.0.1"));
+ result = new AxValidationResult();
+ result = events.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ events.clean();
+ events.afterUnmarshal(null, null);
+
+ final AxEvents clonedEvents = new AxEvents(events);
+ assertEquals("AxEvents:(key=AxArtifactKey:(name=EventsKey,version=0.0.1),e",
+ clonedEvents.toString().substring(0, 60));
+
+ assertFalse(events.hashCode() == 0);
+
+ assertTrue(events.equals(events));
+ assertTrue(events.equals(clonedEvents));
+ assertFalse(events.equals(null));
+ assertFalse(events.equals("Hello"));
+ assertFalse(events.equals(new AxEvents(new AxArtifactKey())));
+
+ assertEquals(0, events.compareTo(events));
+ assertEquals(0, events.compareTo(clonedEvents));
+ assertNotEquals(0, events.compareTo(null));
+ assertNotEquals(0, events.compareTo(new AxArtifactKey()));
+ assertNotEquals(0, events.compareTo(new AxEvents(new AxArtifactKey())));
+
+ clonedEvents.get(eventKey).setSource("AnotherSource");
+ assertNotEquals(0, events.compareTo(clonedEvents));
+
+ assertEquals(events.getKey(), events.getKeys().get(0));
+
+ assertEquals("EventName", events.get("EventName").getKey().getName());
+ assertEquals("EventName", events.get("EventName", "0.0.1").getKey().getName());
+ assertEquals(1, events.getAll("EventName", "0.0.1").size());
+ assertEquals(0, events.getAll("NonExistantEventsName").size());
+ }
+}
diff --git a/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestField.java b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestField.java
new file mode 100644
index 000000000..11b8b745e
--- /dev/null
+++ b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/concepts/TestField.java
@@ -0,0 +1,136 @@
+/*-
+ * ============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.eventmodel.concepts;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult;
+import org.onap.policy.apex.model.eventmodel.concepts.AxField;
+import org.onap.policy.apex.model.eventmodel.concepts.AxInputField;
+import org.onap.policy.apex.model.eventmodel.concepts.AxOutputField;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestField {
+
+ @Test
+ public void testField() {
+ assertNotNull(new AxField());
+ assertNotNull(new AxField(new AxReferenceKey()));
+ assertNotNull(new AxField(new AxReferenceKey(), new AxArtifactKey()));
+ assertNotNull(new AxField(new AxReferenceKey(), new AxArtifactKey(), false));
+ assertNotNull(new AxField("LocalName", new AxArtifactKey(), false));
+ assertNotNull(new AxField("LocalName", new AxArtifactKey()));
+ assertNotNull(new AxField("LocalName", new AxArtifactKey(), false));
+
+ assertNotNull(new AxInputField());
+ assertNotNull(new AxInputField(new AxReferenceKey()));
+ assertNotNull(new AxInputField(new AxReferenceKey(), new AxArtifactKey()));
+ assertNotNull(new AxInputField(new AxReferenceKey(), new AxArtifactKey(), true));
+ assertNotNull(new AxInputField("LocalName", new AxArtifactKey()));
+ assertNotNull(new AxInputField(new AxInputField()));
+
+ assertNotNull(new AxOutputField());
+ assertNotNull(new AxOutputField(new AxReferenceKey()));
+ assertNotNull(new AxOutputField(new AxReferenceKey(), new AxArtifactKey()));
+ assertNotNull(new AxOutputField(new AxReferenceKey(), new AxArtifactKey(), false));
+ assertNotNull(new AxOutputField("LocalName", new AxArtifactKey()));
+ assertNotNull(new AxOutputField(new AxOutputField()));
+
+ final AxField field = new AxField();
+
+ final AxReferenceKey fieldKey = new AxReferenceKey("FieldName", "0.0.1", "PLN", "LN");
+ field.setKey(fieldKey);
+ assertEquals("FieldName:0.0.1:PLN:LN", field.getKey().getID());
+ assertEquals("FieldName:0.0.1:PLN:LN", field.getKeys().get(0).getID());
+
+ final AxArtifactKey schemaKey = new AxArtifactKey("SchemaName", "0.0.1");
+ field.setSchema(schemaKey);
+ assertEquals("SchemaName:0.0.1", field.getSchema().getID());
+
+ assertEquals(false, field.getOptional());
+ field.setOptional(true);
+ assertEquals(true, field.getOptional());
+
+ AxValidationResult result = new AxValidationResult();
+ result = field.validate(result);
+ assertEquals(AxValidationResult.ValidationResult.VALID, result.getValidationResult());
+
+ field.setKey(AxReferenceKey.getNullKey());
+ result = new AxValidationResult();
+ result = field.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ field.setKey(fieldKey);
+ result = new AxValidationResult();
+ result = field.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ field.setSchema(AxArtifactKey.getNullKey());
+ result = new AxValidationResult();
+ result = field.validate(result);
+ assertEquals(ValidationResult.INVALID, result.getValidationResult());
+
+ field.setSchema(schemaKey);
+ result = new AxValidationResult();
+ result = field.validate(result);
+ assertEquals(ValidationResult.VALID, result.getValidationResult());
+
+ field.clean();
+
+ final AxField clonedField = new AxField(field);
+ assertEquals(
+ "AxField:(key=AxReferenceKey:(parentKeyName=FieldName,parentKeyVersion=0.0.1,parentLocalName=PLN,localName=LN),fieldSchemaKey=AxArtifactKey:(name=SchemaName,version=0.0.1),optional=true)",
+ clonedField.toString());
+
+ assertFalse(field.hashCode() == 0);
+
+ assertTrue(field.equals(field));
+ assertTrue(field.equals(clonedField));
+ assertFalse(field.equals(null));
+ assertFalse(field.equals("Hello"));
+ assertFalse(field.equals(new AxField(AxReferenceKey.getNullKey(), AxArtifactKey.getNullKey(), false)));
+ assertFalse(field.equals(new AxField(fieldKey, AxArtifactKey.getNullKey(), false)));
+ assertFalse(field.equals(new AxField(fieldKey, schemaKey, false)));
+ assertTrue(field.equals(new AxField(fieldKey, schemaKey, true)));
+
+ assertEquals(0, field.compareTo(field));
+ assertEquals(0, field.compareTo(clonedField));
+ assertNotEquals(0, field.compareTo(new AxArtifactKey()));
+ assertNotEquals(0, field.compareTo(null));
+ assertNotEquals(0,
+ field.compareTo(new AxField(AxReferenceKey.getNullKey(), AxArtifactKey.getNullKey(), false)));
+ assertNotEquals(0, field.compareTo(new AxField(fieldKey, AxArtifactKey.getNullKey(), false)));
+ assertNotEquals(0, field.compareTo(new AxField(fieldKey, schemaKey, false)));
+ assertEquals(0, field.compareTo(new AxField(fieldKey, schemaKey, true)));
+
+ assertNotNull(field.getKeys());
+ }
+}
diff --git a/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/handling/TestApexEventModel.java b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/handling/TestApexEventModel.java
new file mode 100644
index 000000000..ee2638a54
--- /dev/null
+++ b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/handling/TestApexEventModel.java
@@ -0,0 +1,184 @@
+/*-
+ * ============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.eventmodel.handling;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+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.dao.DAOParameters;
+import org.onap.policy.apex.model.basicmodel.test.TestApexModel;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEventModel;
+
+public class TestApexEventModel {
+ private Connection connection;
+ TestApexModel<AxEventModel> testApexModel;
+
+ @Before
+ public void setup() throws Exception {
+ Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
+ connection = DriverManager.getConnection("jdbc:derby:memory:apex_test;create=true");
+
+ testApexModel = new TestApexModel<AxEventModel>(AxEventModel.class, new TestApexEventModelCreator());
+ }
+
+ @After
+ public void teardown() throws Exception {
+ connection.close();
+ new File("derby.log").delete();
+ }
+
+ @Test
+ public void testModelValid() throws Exception {
+ final AxValidationResult result = testApexModel.testApexModelValid();
+ assertTrue(result.toString().equals(VALID_MODEL_STRING));
+ }
+
+ @Test
+ public void testApexModelVaidateObservation() throws Exception {
+ final AxValidationResult result = testApexModel.testApexModelVaidateObservation();
+ assertTrue(result.toString().equals(OBSERVATION_MODEL_STRING));
+ }
+
+ @Test
+ public void testApexModelVaidateWarning() throws Exception {
+ final AxValidationResult result = testApexModel.testApexModelVaidateWarning();
+ assertTrue(result.toString().equals(WARNING_MODEL_STRING));
+ }
+
+ @Test
+ public void testModelVaidateInvalidModel() throws Exception {
+ final AxValidationResult result = testApexModel.testApexModelVaidateInvalidModel();
+ assertTrue(result.toString().equals(INVALID_MODEL_STRING));
+ }
+
+ @Test
+ public void testModelVaidateMalstructured() throws Exception {
+ final AxValidationResult result = testApexModel.testApexModelVaidateMalstructured();
+ assertTrue(result.toString().equals(INVALID_MODEL_MALSTRUCTURED_STRING));
+ }
+
+ @Test
+ public void testModelWriteReadXML() throws Exception {
+ testApexModel.testApexModelWriteReadXML();
+ }
+
+ @Test
+ public void testModelWriteReadJSON() throws Exception {
+ testApexModel.testApexModelWriteReadJSON();
+ }
+
+ @Test
+ public void testModelWriteReadJPA() throws Exception {
+ final DAOParameters daoParameters = new DAOParameters();
+ daoParameters.setPluginClass("org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao");
+ daoParameters.setPersistenceUnit("DAOTest");
+
+ testApexModel.testApexModelWriteReadJPA(daoParameters);
+ }
+
+ private static final String VALID_MODEL_STRING = "***validation of model successful***";
+
+ private static final String OBSERVATION_MODEL_STRING = "\n"
+ + "***observations noted during validation of model***\n"
+ + "AxArtifactKey:(name=event0,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event0,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "AxArtifactKey:(name=event2,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event2,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "********************************";
+
+ private static final String WARNING_MODEL_STRING = "\n" + "***warnings issued during validation of model***\n"
+ + "AxArtifactKey:(name=event0,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:WARNING:nameSpace on event is blank\n"
+ + "AxArtifactKey:(name=event0,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event0,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:WARNING:nameSpace on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "AxArtifactKey:(name=event2,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:WARNING:nameSpace on event is blank\n"
+ + "AxArtifactKey:(name=event2,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event2,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "********************************";
+
+ private static final String INVALID_MODEL_STRING = "\n" + "***validation of model failed***\n"
+ + "AxArtifactKey:(name=KeyInfoMapKey,version=0.0.1):org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation:INVALID:keyInfoMap may not be empty\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=smallEventModel,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=KeyInfoMapKey,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=Schemas,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=BigIntType,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=BooleanType,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=IntType,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=MapType,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=SetType,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=StringType,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=smallEventMap,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=event0,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=par0)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=par1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=par2)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=par3)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=par4)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=par5)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=par6)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=event1,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=theOnlyPar)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:duplicate key AxArtifactKey:(name=event1,version=0.0.1) found\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=event1,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:duplicate key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=theOnlyPar) found\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=theOnlyPar)\n"
+ + "AxArtifactKey:(name=event0,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event0,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:INVALID:parent key on parameter field AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=theOnlyPar) does not equal event key\n"
+ + "AxArtifactKey:(name=smallEventMap,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvents:INVALID:key on event entry key AxArtifactKey:(name=event2,version=0.0.1) does not equal event value key AxArtifactKey:(name=event1,version=0.0.1)\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:INVALID:parent key on parameter field AxReferenceKey:(parentKeyName=event0,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=theOnlyPar) does not equal event key\n"
+ + "********************************";
+
+ private static final String INVALID_MODEL_MALSTRUCTURED_STRING = "\n" + "***validation of model failed***\n"
+ + "AxArtifactKey:(name=KeyInfoMapKey,version=0.0.1):org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation:INVALID:keyInfoMap may not be empty\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=smallEventModel,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=KeyInfoMapKey,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=Schemas,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=SetType,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=smallEventMap,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=event1,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event1,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=theOnlyPar)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:duplicate key AxArtifactKey:(name=event1,version=0.0.1) found\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for key AxArtifactKey:(name=event1,version=0.0.1)\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:duplicate key AxReferenceKey:(parentKeyName=event1,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=theOnlyPar) found\n"
+ + "AxArtifactKey:(name=smallEventModel,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEventModel:INVALID:key information not found for parent key of key AxReferenceKey:(parentKeyName=event1,parentKeyVersion=0.0.1,parentLocalName=NULL,localName=theOnlyPar)\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "AxArtifactKey:(name=smallEventMap,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvents:INVALID:key on event entry key AxArtifactKey:(name=event2,version=0.0.1) does not equal event value key AxArtifactKey:(name=event1,version=0.0.1)\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:source on event is blank\n"
+ + "AxArtifactKey:(name=event1,version=0.0.1):org.onap.policy.apex.model.eventmodel.concepts.AxEvent:OBSERVATION:target on event is blank\n"
+ + "********************************";
+}
diff --git a/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/handling/TestApexEventModelCreator.java b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/handling/TestApexEventModelCreator.java
new file mode 100644
index 000000000..039d2305b
--- /dev/null
+++ b/model/event-model/src/test/java/org/onap/policy/apex/model/eventmodel/handling/TestApexEventModelCreator.java
@@ -0,0 +1,309 @@
+/*-
+ * ============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.eventmodel.handling;
+
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+import org.onap.policy.apex.model.basicmodel.test.TestApexModelCreator;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEventModel;
+import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
+import org.onap.policy.apex.model.eventmodel.concepts.AxField;
+
+public class TestApexEventModelCreator implements TestApexModelCreator<AxEventModel> {
+
+ @Override
+ public AxEventModel getModel() {
+ final AxContextSchema axSchema0 =
+ new AxContextSchema(new AxArtifactKey("BooleanType", "0.0.1"), "Java", "java.lang.Boolean");
+ final AxContextSchema axSchema1 =
+ new AxContextSchema(new AxArtifactKey("IntType", "0.0.1"), "Java", "java.lang.Integer");
+ final AxContextSchema axSchema2 =
+ new AxContextSchema(new AxArtifactKey("StringType", "0.0.1"), "Java", "java.lang.String");
+ final AxContextSchema axSchema3 = new AxContextSchema(new AxArtifactKey("KeyType", "0.0.1"), "Java",
+ "org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey");
+ final AxContextSchema axSchema4 = new AxContextSchema(new AxArtifactKey("MapType", "0.0.1"), "Java",
+ "org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation");
+ final AxContextSchema axSchema5 =
+ new AxContextSchema(new AxArtifactKey("BigIntType", "0.0.1"), "Java", "java.math.BigInteger");
+ final AxContextSchema axSchema6 = new AxContextSchema(new AxArtifactKey("ModelType", "0.0.1"), "Java",
+ "org.onap.policy.apex.model.basicmodel.concepts.AxModel");
+
+ final AxContextSchemas dataTypes = new AxContextSchemas(new AxArtifactKey("Schemas", "0.0.1"));
+ dataTypes.getSchemasMap().put(axSchema0.getKey(), axSchema0);
+ dataTypes.getSchemasMap().put(axSchema1.getKey(), axSchema1);
+ dataTypes.getSchemasMap().put(axSchema2.getKey(), axSchema2);
+ dataTypes.getSchemasMap().put(axSchema3.getKey(), axSchema3);
+ dataTypes.getSchemasMap().put(axSchema4.getKey(), axSchema4);
+ dataTypes.getSchemasMap().put(axSchema5.getKey(), axSchema5);
+ dataTypes.getSchemasMap().put(axSchema6.getKey(), axSchema6);
+
+ final AxEvents eventMap = new AxEvents(new AxArtifactKey("smallEventMap", "0.0.1"));
+
+ final AxEvent event0 = new AxEvent(new AxArtifactKey("event0", "0.0.1"),
+ "org.onap.policy.apex.model.eventmodel.events", "Source", "Target");
+ event0.getParameterMap().put("par0",
+ new AxField(new AxReferenceKey(event0.getKey(), "par0"), axSchema0.getKey()));
+ event0.getParameterMap().put("par1",
+ new AxField(new AxReferenceKey(event0.getKey(), "par1"), axSchema1.getKey()));
+ event0.getParameterMap().put("par2",
+ new AxField(new AxReferenceKey(event0.getKey(), "par2"), axSchema2.getKey()));
+ event0.getParameterMap().put("par3",
+ new AxField(new AxReferenceKey(event0.getKey(), "par3"), axSchema6.getKey()));
+ event0.getParameterMap().put("par4",
+ new AxField(new AxReferenceKey(event0.getKey(), "par4"), axSchema4.getKey()));
+ event0.getParameterMap().put("par5",
+ new AxField(new AxReferenceKey(event0.getKey(), "par5"), axSchema5.getKey()));
+ event0.getParameterMap().put("par6",
+ new AxField(new AxReferenceKey(event0.getKey(), "par6"), axSchema5.getKey()));
+ eventMap.getEventMap().put(event0.getKey(), event0);
+
+ final AxEvent event1 = new AxEvent(new AxArtifactKey("event1", "0.0.1"),
+ "org.onap.policy.apex.model.eventmodel.events", "Source", "Target");
+ event1.getParameterMap().put("theOnlyPar",
+ new AxField(new AxReferenceKey(event1.getKey(), "theOnlyPar"), axSchema3.getKey()));
+ eventMap.getEventMap().put(event1.getKey(), event1);
+
+ final AxEvent event2 = new AxEvent(new AxArtifactKey("event2", "0.0.1"),
+ "org.onap.policy.apex.model.eventmodel.events", "Source", "Target");
+ eventMap.getEventMap().put(event2.getKey(), event2);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInfoMapKey", "0.0.1"));
+
+ final AxEventModel eventModel =
+ new AxEventModel(new AxArtifactKey("EventModel", "0.0.1"), dataTypes, keyInformation, eventMap);
+ keyInformation.generateKeyInfo(eventModel);
+
+ eventModel.validate(new AxValidationResult());
+ return eventModel;
+ }
+
+ @Override
+ public AxEventModel getInvalidModel() {
+ final AxContextSchema axSchema0 =
+ new AxContextSchema(new AxArtifactKey("BooleanType", "0.0.1"), "Java", "java.lang.Zoolean");
+ final AxContextSchema axSchema1 =
+ new AxContextSchema(new AxArtifactKey("IntType", "0.0.1"), "Java", "java.lang.Integer");
+ final AxContextSchema axSchema2 =
+ new AxContextSchema(new AxArtifactKey("StringType", "0.0.1"), "Java", "java.lang.String");
+ final AxContextSchema axSchema3 =
+ new AxContextSchema(new AxArtifactKey("SetType", "0.0.1"), "Java", "java.util.Set");
+ final AxContextSchema axSchema4 =
+ new AxContextSchema(new AxArtifactKey("MapType", "0.0.1"), "Java", "java.util.Map");
+ final AxContextSchema axSchema5 =
+ new AxContextSchema(new AxArtifactKey("BigIntType", "0.0.1"), "Java", "java.math.BigInteger");
+
+ final AxContextSchemas dataTypes = new AxContextSchemas(new AxArtifactKey("Schemas", "0.0.1"));
+ dataTypes.getSchemasMap().put(axSchema0.getKey(), axSchema0);
+ dataTypes.getSchemasMap().put(axSchema1.getKey(), axSchema1);
+ dataTypes.getSchemasMap().put(axSchema2.getKey(), axSchema2);
+ dataTypes.getSchemasMap().put(axSchema3.getKey(), axSchema3);
+ dataTypes.getSchemasMap().put(axSchema4.getKey(), axSchema4);
+ dataTypes.getSchemasMap().put(axSchema5.getKey(), axSchema5);
+
+ final AxEvents eventMap = new AxEvents(new AxArtifactKey("smallEventMap", "0.0.1"));
+
+ final AxEvent event0 =
+ new AxEvent(new AxArtifactKey("event0", "0.0.1"), "org.onap.policy.apex.model.eventmodel.events");
+ event0.getParameterMap().put("par0",
+ new AxField(new AxReferenceKey(event0.getKey(), "par0"), axSchema0.getKey()));
+ event0.getParameterMap().put("par1",
+ new AxField(new AxReferenceKey(event0.getKey(), "par1"), axSchema1.getKey()));
+ event0.getParameterMap().put("par2",
+ new AxField(new AxReferenceKey(event0.getKey(), "par2"), axSchema2.getKey()));
+ event0.getParameterMap().put("par3",
+ new AxField(new AxReferenceKey(event0.getKey(), "par3"), axSchema3.getKey()));
+ event0.getParameterMap().put("par4",
+ new AxField(new AxReferenceKey(event0.getKey(), "par4"), axSchema4.getKey()));
+ event0.getParameterMap().put("par5",
+ new AxField(new AxReferenceKey(event0.getKey(), "par5"), axSchema5.getKey()));
+ event0.getParameterMap().put("par6",
+ new AxField(new AxReferenceKey(event0.getKey(), "par6"), axSchema5.getKey()));
+ eventMap.getEventMap().put(event0.getKey(), event0);
+
+ final AxEvent event1 =
+ new AxEvent(new AxArtifactKey("event1", "0.0.1"), "org.onap.policy.apex.model.eventmodel.events");
+ event1.getParameterMap().put("theOnlyPar",
+ new AxField(new AxReferenceKey(event0.getKey(), "theOnlyPar"), axSchema3.getKey()));
+ eventMap.getEventMap().put(event1.getKey(), event1);
+
+ final AxEvent event2 =
+ new AxEvent(new AxArtifactKey("event2", "0.0.1"), "org.onap.policy.apex.model.eventmodel.events");
+ eventMap.getEventMap().put(event2.getKey(), event1);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInfoMapKey", "0.0.1"));
+
+ final AxEventModel eventModel =
+ new AxEventModel(new AxArtifactKey("smallEventModel", "0.0.1"), dataTypes, keyInformation, eventMap);
+
+ return eventModel;
+ }
+
+ @Override
+ public AxEventModel getMalstructuredModel() {
+ final AxContextSchema axSchema3 =
+ new AxContextSchema(new AxArtifactKey("SetType", "0.0.1"), "Java", "java.util.Set");
+ final AxContextSchemas dataTypes = new AxContextSchemas(new AxArtifactKey("Schemas", "0.0.1"));
+ dataTypes.getSchemasMap().put(axSchema3.getKey(), axSchema3);
+
+ final AxEvents eventMap = new AxEvents(new AxArtifactKey("smallEventMap", "0.0.1"));
+
+ final AxEvent event1 =
+ new AxEvent(new AxArtifactKey("event1", "0.0.1"), "org.onap.policy.apex.model.eventmodel.events");
+ event1.getParameterMap().put("theOnlyPar",
+ new AxField(new AxReferenceKey(event1.getKey(), "theOnlyPar"), axSchema3.getKey()));
+ eventMap.getEventMap().put(event1.getKey(), event1);
+
+ final AxEvent event2 =
+ new AxEvent(new AxArtifactKey("event2", "0.0.1"), "org.onap.policy.apex.model.eventmodel.events");
+ eventMap.getEventMap().put(event2.getKey(), event1);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInfoMapKey", "0.0.1"));
+
+ final AxEventModel eventModel =
+ new AxEventModel(new AxArtifactKey("smallEventModel", "0.0.1"), dataTypes, keyInformation, eventMap);
+
+ eventModel.validate(new AxValidationResult());
+
+ return eventModel;
+ }
+
+ @Override
+ public AxEventModel getWarningModel() {
+ final AxContextSchema axSchema0 =
+ new AxContextSchema(new AxArtifactKey("BooleanType", "0.0.1"), "Java", "java.lang.Boolean");
+ final AxContextSchema axSchema1 =
+ new AxContextSchema(new AxArtifactKey("IntType", "0.0.1"), "Java", "java.lang.Integer");
+ final AxContextSchema axSchema2 =
+ new AxContextSchema(new AxArtifactKey("StringType", "0.0.1"), "Java", "java.lang.String");
+ final AxContextSchema axSchema3 =
+ new AxContextSchema(new AxArtifactKey("SetType", "0.0.1"), "Java", "java.util.Set");
+ final AxContextSchema axSchema4 =
+ new AxContextSchema(new AxArtifactKey("MapType", "0.0.1"), "Java", "java.util.Map");
+ final AxContextSchema axSchema5 =
+ new AxContextSchema(new AxArtifactKey("BigIntType", "0.0.1"), "Java", "java.math.BigInteger");
+ final AxContextSchemas dataTypes = new AxContextSchemas(new AxArtifactKey("Schemas", "0.0.1"));
+ dataTypes.getSchemasMap().put(axSchema0.getKey(), axSchema0);
+ dataTypes.getSchemasMap().put(axSchema1.getKey(), axSchema1);
+ dataTypes.getSchemasMap().put(axSchema2.getKey(), axSchema2);
+ dataTypes.getSchemasMap().put(axSchema3.getKey(), axSchema3);
+ dataTypes.getSchemasMap().put(axSchema4.getKey(), axSchema4);
+ dataTypes.getSchemasMap().put(axSchema5.getKey(), axSchema5);
+
+ final AxEvents eventMap = new AxEvents(new AxArtifactKey("smallEventMap", "0.0.1"));
+
+ final AxEvent event0 = new AxEvent(new AxArtifactKey("event0", "0.0.1"), "");
+ event0.getParameterMap().put("par0",
+ new AxField(new AxReferenceKey(event0.getKey(), "par0"), axSchema0.getKey()));
+ event0.getParameterMap().put("par1",
+ new AxField(new AxReferenceKey(event0.getKey(), "par1"), axSchema1.getKey()));
+ event0.getParameterMap().put("par2",
+ new AxField(new AxReferenceKey(event0.getKey(), "par2"), axSchema2.getKey()));
+ event0.getParameterMap().put("par3",
+ new AxField(new AxReferenceKey(event0.getKey(), "par3"), axSchema3.getKey()));
+ event0.getParameterMap().put("par4",
+ new AxField(new AxReferenceKey(event0.getKey(), "par4"), axSchema4.getKey()));
+ event0.getParameterMap().put("par5",
+ new AxField(new AxReferenceKey(event0.getKey(), "par5"), axSchema5.getKey()));
+ eventMap.getEventMap().put(event0.getKey(), event0);
+
+ final AxEvent event1 = new AxEvent(new AxArtifactKey("event1", "0.0.1"), "");
+ event1.getParameterMap().put("theOnlyPar",
+ new AxField(new AxReferenceKey(event1.getKey(), "theOnlyPar"), axSchema3.getKey()));
+ eventMap.getEventMap().put(event1.getKey(), event1);
+
+ final AxEvent event2 = new AxEvent(new AxArtifactKey("event2", "0.0.1"), "");
+ eventMap.getEventMap().put(event2.getKey(), event2);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInfoMapKey", "0.0.1"));
+
+ final AxEventModel eventModel =
+ new AxEventModel(new AxArtifactKey("smallEventModel", "0.0.1"), dataTypes, keyInformation, eventMap);
+ eventModel.getKeyInformation().generateKeyInfo(eventModel);
+ eventModel.validate(new AxValidationResult());
+
+ return eventModel;
+ }
+
+ @Override
+ public AxEventModel getObservationModel() {
+ final AxContextSchema axSchema0 =
+ new AxContextSchema(new AxArtifactKey("BooleanType", "0.0.1"), "Java", "java.lang.Boolean");
+ final AxContextSchema axSchema1 =
+ new AxContextSchema(new AxArtifactKey("IntType", "0.0.1"), "Java", "java.lang.Integer");
+ final AxContextSchema axSchema2 =
+ new AxContextSchema(new AxArtifactKey("StringType", "0.0.1"), "Java", "java.lang.String");
+ final AxContextSchema axSchema3 =
+ new AxContextSchema(new AxArtifactKey("SetType", "0.0.1"), "Java", "java.util.Set");
+ final AxContextSchema axSchema4 =
+ new AxContextSchema(new AxArtifactKey("MapType", "0.0.1"), "Java", "java.util.Map");
+ final AxContextSchema axSchema5 =
+ new AxContextSchema(new AxArtifactKey("BigIntType", "0.0.1"), "Java", "java.math.BigInteger");
+ final AxContextSchemas schemas = new AxContextSchemas(new AxArtifactKey("Schemas", "0.0.1"));
+ schemas.getSchemasMap().put(axSchema0.getKey(), axSchema0);
+ schemas.getSchemasMap().put(axSchema1.getKey(), axSchema1);
+ schemas.getSchemasMap().put(axSchema2.getKey(), axSchema2);
+ schemas.getSchemasMap().put(axSchema3.getKey(), axSchema3);
+ schemas.getSchemasMap().put(axSchema4.getKey(), axSchema4);
+ schemas.getSchemasMap().put(axSchema5.getKey(), axSchema5);
+
+ final AxEvents eventMap = new AxEvents(new AxArtifactKey("smallEventMap", "0.0.1"));
+
+ final AxEvent event0 =
+ new AxEvent(new AxArtifactKey("event0", "0.0.1"), "org.onap.policy.apex.model.eventmodel.events");
+ event0.getParameterMap().put("par0",
+ new AxField(new AxReferenceKey(event0.getKey(), "par0"), axSchema0.getKey()));
+ event0.getParameterMap().put("par1",
+ new AxField(new AxReferenceKey(event0.getKey(), "par1"), axSchema1.getKey()));
+ event0.getParameterMap().put("par2",
+ new AxField(new AxReferenceKey(event0.getKey(), "par2"), axSchema2.getKey()));
+ event0.getParameterMap().put("par3",
+ new AxField(new AxReferenceKey(event0.getKey(), "par3"), axSchema3.getKey()));
+ event0.getParameterMap().put("par4",
+ new AxField(new AxReferenceKey(event0.getKey(), "par4"), axSchema4.getKey()));
+ event0.getParameterMap().put("par5",
+ new AxField(new AxReferenceKey(event0.getKey(), "par5"), axSchema5.getKey()));
+ eventMap.getEventMap().put(event0.getKey(), event0);
+
+ final AxEvent event1 =
+ new AxEvent(new AxArtifactKey("event1", "0.0.1"), "org.onap.policy.apex.model.eventmodel.events");
+ event1.getParameterMap().put("theOnlyPar",
+ new AxField(new AxReferenceKey(event1.getKey(), "theOnlyPar"), axSchema3.getKey()));
+ eventMap.getEventMap().put(event1.getKey(), event1);
+
+ final AxEvent event2 =
+ new AxEvent(new AxArtifactKey("event2", "0.0.1"), "org.onap.policy.apex.model.eventmodel.events");
+ eventMap.getEventMap().put(event2.getKey(), event2);
+
+ final AxKeyInformation keyInformation = new AxKeyInformation(new AxArtifactKey("KeyInfoMapKey", "0.0.1"));
+
+ final AxEventModel eventModel =
+ new AxEventModel(new AxArtifactKey("smallEventModel", "0.0.1"), schemas, keyInformation, eventMap);
+ eventModel.getKeyInformation().generateKeyInfo(eventModel);
+ eventModel.validate(new AxValidationResult());
+
+ return eventModel;
+ }
+}
diff --git a/model/event-model/src/test/resources/META-INF/persistence.xml b/model/event-model/src/test/resources/META-INF/persistence.xml
new file mode 100644
index 000000000..db32612ab
--- /dev/null
+++ b/model/event-model/src/test/resources/META-INF/persistence.xml
@@ -0,0 +1,56 @@
+<?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=========================================================
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
+ <persistence-unit name="DAOTest" transaction-type="RESOURCE_LOCAL">
+ <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+
+ <class>org.onap.policy.apex.model.basicmodel.dao.converters.CDATAConditioner</class>
+ <class>org.onap.policy.apex.model.basicmodel.dao.converters.UUID2String</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxConcept</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxKeyInfo</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.AxModel</class>
+ <class>org.onap.policy.apex.model.basicmodel.concepts.TestEntity</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums</class>
+ <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextModel</class>
+ <class>org.onap.policy.apex.model.eventmodel.concepts.AxField</class>
+ <class>org.onap.policy.apex.model.eventmodel.concepts.AxInputField</class>
+ <class>org.onap.policy.apex.model.eventmodel.concepts.AxOutputField</class>
+ <class>org.onap.policy.apex.model.eventmodel.concepts.AxEvent</class>
+ <class>org.onap.policy.apex.model.eventmodel.concepts.AxEvents</class>
+ <class>org.onap.policy.apex.model.eventmodel.concepts.AxEventModel</class>
+
+ <properties>
+ <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:apex_test" />
+ <property name="javax.persistence.target-database" value="Derby" />
+ <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
+
+ <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
+ <property name="eclipselink.ddl-generation.output-mode" value="database" />
+ <property name="eclipselink.logging.level" value="INFO" />
+ </properties>
+ </persistence-unit>
+</persistence>
diff --git a/model/event-model/src/test/resources/logback-test.xml b/model/event-model/src/test/resources/logback-test.xml
new file mode 100644
index 000000000..dfafb04d9
--- /dev/null
+++ b/model/event-model/src/test/resources/logback-test.xml
@@ -0,0 +1,74 @@
+<?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="TRACE" 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>
+</configuration>