summaryrefslogtreecommitdiffstats
path: root/controlloop/m2/util
diff options
context:
space:
mode:
authorPamela Dragosh <pdragosh@research.att.com>2020-01-13 13:33:49 +0000
committerGerrit Code Review <gerrit@onap.org>2020-01-13 13:33:49 +0000
commit57fa6609eaac31098f468fde24a9300a38fca7ef (patch)
treed2e01258b10721b658628c42931844f66a088d56 /controlloop/m2/util
parent3a992ae9cbff19d8e8838390d95ab33615560636 (diff)
parent3e05cb41202145e113853392e9837abf3f6ec12c (diff)
Merge "Add m2 model, including the LCM application"
Diffstat (limited to 'controlloop/m2/util')
-rw-r--r--controlloop/m2/util/pom.xml47
-rw-r--r--controlloop/m2/util/src/main/java/org/onap/policy/util/DroolsSessionCommonSerializable.java136
-rw-r--r--controlloop/m2/util/src/test/java/org/onap/policy/util/DroolsSessionCommonSerializableTest.java36
3 files changed, 219 insertions, 0 deletions
diff --git a/controlloop/m2/util/pom.xml b/controlloop/m2/util/pom.xml
new file mode 100644
index 000000000..b453cc59f
--- /dev/null
+++ b/controlloop/m2/util/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!--
+ ============LICENSE_START=======================================================
+ ONAP Policy Engine - Drools PDP
+ ================================================================================
+ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<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.drools-applications.controlloop.m2</groupId>
+ <artifactId>m2</artifactId>
+ <version>1.6.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>util</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.policy.drools-pdp</groupId>
+ <artifactId>policy-core</artifactId>
+ <version>${version.policy.drools-pdp}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/controlloop/m2/util/src/main/java/org/onap/policy/util/DroolsSessionCommonSerializable.java b/controlloop/m2/util/src/main/java/org/onap/policy/util/DroolsSessionCommonSerializable.java
new file mode 100644
index 000000000..d8501fea8
--- /dev/null
+++ b/controlloop/m2/util/src/main/java/org/onap/policy/util/DroolsSessionCommonSerializable.java
@@ -0,0 +1,136 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * util
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.util;
+
+import java.io.InvalidObjectException;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.util.HashMap;
+
+import org.onap.policy.drools.core.PolicySession;
+
+/**
+ * This class provides a way to serialize/deserialize objects by locating
+ * an already existing object on the remote end, and using that instead. It
+ * is useful for objects that may be shared by multiple transactions.
+ */
+public class DroolsSessionCommonSerializable implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ // identifies an object within a Drools session
+ private String name;
+
+ // the object is serialized, but is only used if the corresponding object
+ // on the remote end can't be located for some reason
+ private Object object;
+
+ /**
+ * Constructor - initialize instance, and also store a reference to
+ * the object in a 'PolicySession' adjunct.
+ *
+ * @param name identifies the object within the Drools session
+ * @param object the shared object
+ */
+ public DroolsSessionCommonSerializable(String name, Object object) {
+ this.name = name;
+ this.object = object;
+
+ // store a reference to the object within the adjunct
+ // (only works if we can locate the Drools session)
+ Adjunct adjunct = getAdjunct();
+ if (adjunct != null) {
+ adjunct.put(name, object);
+ }
+ }
+
+ /**
+ * Return this object as a String.
+ *
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return "DroolsSessionCommonSerializable[" + name + "]";
+ }
+
+ /**
+ * This method runs as part of deserialization. If we are able to locate
+ * the 'PolicySession' and adjunct, and fetch the replacement object from
+ * the adjunct, that is used. Otherwise, the deserialized object is used
+ * (which is likely a duplicate).
+ *
+ * @return the local named object (if available), or the deserialized
+ * object
+ */
+ private Object readResolve() throws ObjectStreamException {
+ Adjunct adjunct = getAdjunct();
+ Object replacementObject;
+
+ if (adjunct != null && (replacementObject = adjunct.get(name)) != null) {
+ // we found the adjunct, as well as the replacement object -- use
+ // the replacement object
+ return replacementObject;
+ }
+
+ // either we couldn't find the adjunct, or couldn't locate the object
+ // within the adjunct
+ return object;
+ }
+
+ /**
+ * This method will:
+ * 1) Locate the 'PolicySession' (only works from within the Drools thread),
+ * 2) Find or create the adjunct.
+ *
+ * @return the adjunct, or 'null' if we aren't running within a
+ * Drools session
+ */
+ private Adjunct getAdjunct() {
+ // PolicySession - this only works from within the Drools thread
+ PolicySession session = PolicySession.getCurrentSession();
+ Adjunct adjunct = null;
+ if (session != null) {
+ // we found the 'PolicySession' -- now, look for the adjunct
+ Object adj = session.getAdjunct(Adjunct.class);
+ if (adj == null || !(adj instanceof Adjunct)) {
+ // adjunct does not exist, or has the wrong type -- create it
+ adjunct = new Adjunct();
+ session.setAdjunct(Adjunct.class, adjunct);
+ } else {
+ // found the adjunct -- return it
+ adjunct = (Adjunct)adj;
+ //adjunct = Adjunct.class.cast(adj);
+ }
+ }
+ return adjunct;
+ }
+
+ /* ============================================================ */
+
+ /**
+ * While 'HashMap&lt;String, Object&gt;' could be used directly instead of defining
+ * a subclass, you can't do run-time type checking of a parameterized type.
+ * As a result, the 'getAdjunct' method (above) would get compile-time
+ * warnings.
+ */
+ private static class Adjunct extends HashMap<String, Object> {
+ }
+}
diff --git a/controlloop/m2/util/src/test/java/org/onap/policy/util/DroolsSessionCommonSerializableTest.java b/controlloop/m2/util/src/test/java/org/onap/policy/util/DroolsSessionCommonSerializableTest.java
new file mode 100644
index 000000000..520158b8c
--- /dev/null
+++ b/controlloop/m2/util/src/test/java/org/onap/policy/util/DroolsSessionCommonSerializableTest.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * util
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.util;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+
+public class DroolsSessionCommonSerializableTest {
+
+ @Test
+ public void test() {
+ Object object = new Object();
+ DroolsSessionCommonSerializable droolsSessionCommonSerializable =
+ new DroolsSessionCommonSerializable("drools", object);
+ assertNotNull(droolsSessionCommonSerializable.toString());
+ }
+}