summaryrefslogtreecommitdiffstats
path: root/policy-management/src
diff options
context:
space:
mode:
authorJorge Hernandez <jorge.hernandez-herrero@att.com>2018-11-29 15:52:49 +0000
committerGerrit Code Review <gerrit@onap.org>2018-11-29 15:52:49 +0000
commitdfdb7deac7d857e67d68fe8f6ceb122ae682c3f8 (patch)
tree836f26b4cec54c3de18ad9af968917f228c7395a /policy-management/src
parentdbb701d2aae428e27c0590a42e2d371bb9bca59d (diff)
parent3bf8d17a9b7603bb498875f8620ad7f8cbe3bcec (diff)
Merge "Fix sonar issue in event protocol coder"
Diffstat (limited to 'policy-management/src')
-rw-r--r--policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java607
1 files changed, 310 insertions, 297 deletions
diff --git a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java
index 1afd81a3..0f6a5e3d 100644
--- a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java
+++ b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java
@@ -7,9 +7,9 @@
* 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.
@@ -28,8 +28,6 @@ import java.util.Map;
import org.onap.policy.drools.controller.DroolsController;
import org.onap.policy.drools.protocol.coders.EventProtocolCoder.CoderFilters;
-import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomGsonCoder;
-import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomJacksonCoder;
import org.onap.policy.drools.utils.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,12 +59,11 @@ public interface EventProtocolCoder {
*/
protected int modelClassLoaderHash;
-
/**
* constructor.
- *
+ *
* @param codedClass coder class
- * @param filter filters to apply
+ * @param filter filters to apply
*/
public CoderFilters(String codedClass, JsonProtocolFilter filter, int modelClassLoaderHash) {
this.factClass = codedClass;
@@ -76,7 +73,7 @@ public interface EventProtocolCoder {
/**
* Get coded class.
- *
+ *
* @return the codedClass
*/
public String getCodedClass() {
@@ -85,7 +82,7 @@ public interface EventProtocolCoder {
/**
* Set coded class.
- *
+ *
* @param codedClass the decodedClass to set
*/
public void setCodedClass(String codedClass) {
@@ -94,7 +91,7 @@ public interface EventProtocolCoder {
/**
* Get filter.
- *
+ *
* @return the filter
*/
public JsonProtocolFilter getFilter() {
@@ -103,7 +100,7 @@ public interface EventProtocolCoder {
/**
* Set filter.
- *
+ *
* @param filter the filter to set
*/
public void setFilter(JsonProtocolFilter filter) {
@@ -120,12 +117,14 @@ public interface EventProtocolCoder {
@Override
public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("CoderFilters [factClass=").append(factClass).append(", filter=").append(filter)
- .append(", modelClassLoaderHash=").append(modelClassLoaderHash).append("]");
- return builder.toString();
+ return "CoderFilters [factClass="
+ + factClass
+ + ", filter="
+ + filter
+ + ", modelClassLoaderHash="
+ + modelClassLoaderHash
+ + "]";
}
-
}
/**
@@ -138,130 +137,118 @@ public interface EventProtocolCoder {
/**
* removes all decoders associated with the controller id.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic of the controller
- *
+ * @param topic of the controller
* @throws IllegalArgumentException if invalid arguments have been provided
*/
void removeEncoders(String groupId, String artifactId, String topic);
/**
* removes decoders associated with the controller id and topic.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic the topic
- *
+ * @param topic the topic
* @throws IllegalArgumentException if invalid arguments have been provided
*/
public void removeDecoders(String groupId, String artifactId, String topic);
/**
* Given a controller id and a topic, it gives back its filters.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic the topic
- *
+ * @param topic the topic
* @return list of decoders
- *
* @throw IllegalArgumentException if an invalid parameter is passed
*/
public List<CoderFilters> getDecoderFilters(String groupId, String artifactId, String topic);
/**
* gets all decoders associated with the group and artifact ids.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- *
* @throws IllegalArgumentException if invalid arguments have been provided
*/
public List<CoderFilters> getDecoderFilters(String groupId, String artifactId);
/**
* Given a controller id, a topic, and a classname, it gives back the classes that implements the decoding.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic the topic
- * @param classname classname
- *
+ * @param topic the topic
+ * @param classname classname
* @return list of decoders
- *
* @throw IllegalArgumentException if an invalid parameter is passed
- */
- public CoderFilters getDecoderFilters(String groupId, String artifactId, String topic, String classname);
+ */
+ public CoderFilters getDecoderFilters(
+ String groupId, String artifactId, String topic, String classname);
/**
* Given a controller id and a topic, it gives back the decoding configuration.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic the topic
- *
+ * @param topic the topic
* @return decoding toolset
- *
* @throw IllegalArgumentException if an invalid parameter is passed
*/
public ProtocolCoderToolset getDecoders(String groupId, String artifactId, String topic);
/**
* Given a controller id and a topic, it gives back all the decoding configurations.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- *
* @return decoding toolset
- *
* @throw IllegalArgumentException if an invalid parameter is passed
*/
public List<ProtocolCoderToolset> getDecoders(String groupId, String artifactId);
/**
* Given a controller id and a topic, it gives back the classes that implements the encoding.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic the topic
- *
+ * @param topic the topic
* @return list of decoders
- *
* @throw IllegalArgumentException if an invalid parameter is passed
*/
public List<CoderFilters> getEncoderFilters(String groupId, String artifactId, String topic);
/**
* gets all encoders associated with the group and artifact ids.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- *
+ * @return List of filters
* @throws IllegalArgumentException if invalid arguments have been provided
*/
public List<CoderFilters> getEncoderFilters(String groupId, String artifactId);
/**
* get encoder based on coordinates and classname.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic protocol
- * @param classname name of the class
- * @return
- *
+ * @param topic protocol
+ * @param classname name of the class
+ * @return CoderFilters decoders
* @throws IllegalArgumentException invalid arguments passed in
*/
- public CoderFilters getEncoderFilters(String groupId, String artifactId, String topic, String classname);
+ public CoderFilters getEncoderFilters(
+ String groupId, String artifactId, String topic, String classname);
/**
* is there a decoder supported for the controller id and topic.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic protocol
+ * @param topic protocol
* @return true if supported
*/
public boolean isDecodingSupported(String groupId, String artifactId, String topic);
@@ -276,18 +263,18 @@ public interface EventProtocolCoder {
/**
* is there an encoder supported for the controller id and topic.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic protocol
+ * @param topic protocol
* @return true if supported
*/
public boolean isEncodingSupported(String groupId, String artifactId, String topic);
/**
* get encoder based on topic and encoded class.
- *
- * @param topic topic
+ *
+ * @param topic topic
* @param encodedClass encoded class
* @return list of filters
* @throws IllegalArgumentException invalid arguments passed in
@@ -296,8 +283,8 @@ public interface EventProtocolCoder {
/**
* gets the identifier of the creator of the encoder.
- *
- * @param topic topic
+ *
+ * @param topic topic
* @param encodedClass encoded class
* @return a drools controller
* @throws IllegalArgumentException invalid arguments passed in
@@ -306,8 +293,8 @@ public interface EventProtocolCoder {
/**
* gets the identifier of the creator of the encoder.
- *
- * @param topic topic
+ *
+ * @param topic topic
* @param encodedClass encoded class
* @return list of drools controllers
* @throws IllegalArgumentException invalid arguments passed in
@@ -316,59 +303,60 @@ public interface EventProtocolCoder {
/**
* decode topic's stringified event (json) to corresponding Event Object.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic protocol
- * @param json event string
+ * @param topic protocol
+ * @param json event string
* @return object
- * @throws IllegalArgumentException invalid arguments passed in
+ * @throws IllegalArgumentException invalid arguments passed in
* @throws UnsupportedOperationException if the operation is not supported
- * @throws IllegalStateException if the system is in an illegal state
+ * @throws IllegalStateException if the system is in an illegal state
*/
public Object decode(String groupId, String artifactId, String topic, String json);
/**
* encodes topic's stringified event (json) to corresponding Event Object.
- *
- * @param groupId of the controller
+ *
+ * @param groupId of the controller
* @param artifactId of the controller
- * @param topic protocol
- * @param event Object
- *
+ * @param topic protocol
+ * @param event Object
+ * @return encoded string
* @throws IllegalArgumentException invalid arguments passed in
*/
public String encode(String groupId, String artifactId, String topic, Object event);
/**
* encodes topic's stringified event (json) to corresponding Event Object.
- *
+ *
* @param topic topic
* @param event event object
- *
- * @throws IllegalArgumentException invalid arguments passed in
+ * @return encoded string
+ * @throws IllegalArgumentException invalid arguments passed in
* @throws UnsupportedOperationException operation cannot be performed
*/
public String encode(String topic, Object event);
/**
* encodes topic's stringified event (json) to corresponding Event Object.
- *
- * @param topic topic
- * @param event event object
- * @param droolsController
- *
- * @throws IllegalArgumentException invalid arguments passed in
+ *
+ * @param topic topic
+ * @param event event object
+ * @param droolsController drools controller object
+ * @return encoded string
+ * @throws IllegalArgumentException invalid arguments passed in
* @throws UnsupportedOperationException operation cannot be performed
*/
public String encode(String topic, Object event, DroolsController droolsController);
}
/**
- * Protocol Coder that does its best attempt to decode/encode, selecting the best
- * class and best fitted json parsing tools.
+ * Protocol Coder that does its best attempt to decode/encode, selecting the best class and best fitted json parsing
+ * tools.
*/
class MultiplexorEventProtocolCoder implements EventProtocolCoder {
+
/**
* Logger.
*/
@@ -384,13 +372,14 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder {
*/
protected EventProtocolEncoder encoders = new EventProtocolEncoder();
-
/**
* {@inheritDoc}.
*/
@Override
public void addDecoder(EventProtocolParams eventProtocolParams) {
- logger.info("{}: add-decoder {}:{}:{}:{}:{}:{}:{}:{}", this,
+ logger.info(
+ "{}: add-decoder {}:{}:{}:{}:{}:{}:{}:{}",
+ this,
eventProtocolParams.getGroupId(),
eventProtocolParams.getArtifactId(),
eventProtocolParams.getTopic(),
@@ -399,32 +388,28 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder {
eventProtocolParams.getCustomGsonCoder(),
eventProtocolParams.getCustomJacksonCoder(),
eventProtocolParams.getModelClassLoaderHash());
- this.decoders.add(eventProtocolParams.getGroupId(), eventProtocolParams.getArtifactId(),
- eventProtocolParams.getTopic(),
- eventProtocolParams.getEventClass(),
- eventProtocolParams.getProtocolFilter(),
- eventProtocolParams.getCustomGsonCoder(),
- eventProtocolParams.getCustomJacksonCoder(),
- eventProtocolParams.getModelClassLoaderHash());
+ this.decoders.add(eventProtocolParams);
}
/**
* {@inheritDoc}.
+ *
* @param eventProtocolParams parameter object for event encoder
*/
@Override
public void addEncoder(EventProtocolParams eventProtocolParams) {
- logger.info("{}: add-decoder {}:{}:{}:{}:{}:{}:{}:{}", this,
- eventProtocolParams.getGroupId(), eventProtocolParams.getArtifactId(), eventProtocolParams.getTopic(),
+ logger.info(
+ "{}: add-decoder {}:{}:{}:{}:{}:{}:{}:{}",
+ this,
+ eventProtocolParams.getGroupId(),
+ eventProtocolParams.getArtifactId(),
+ eventProtocolParams.getTopic(),
eventProtocolParams.getEventClass(),
- eventProtocolParams.getProtocolFilter(), eventProtocolParams.getCustomGsonCoder(),
- eventProtocolParams.getCustomJacksonCoder(),
- eventProtocolParams.getModelClassLoaderHash());
- this.encoders.add(eventProtocolParams.getGroupId(), eventProtocolParams.getArtifactId(),
- eventProtocolParams.getTopic(), eventProtocolParams.getEventClass(),
eventProtocolParams.getProtocolFilter(),
- eventProtocolParams.getCustomGsonCoder(), eventProtocolParams.getCustomJacksonCoder(),
+ eventProtocolParams.getCustomGsonCoder(),
+ eventProtocolParams.getCustomJacksonCoder(),
eventProtocolParams.getModelClassLoaderHash());
+ this.encoders.add(eventProtocolParams);
}
/**
@@ -509,7 +494,8 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder {
* {@inheritDoc}.
*/
@Override
- public CoderFilters getDecoderFilters(String groupId, String artifactId, String topic, String classname) {
+ public CoderFilters getDecoderFilters(
+ String groupId, String artifactId, String topic, String classname) {
return this.decoders.getFilters(groupId, artifactId, topic, classname);
}
@@ -519,7 +505,6 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder {
@Override
public List<CoderFilters> getDecoderFilters(String groupId, String artifactId) {
return this.decoders.getFilters(groupId, artifactId);
-
}
/**
@@ -527,10 +512,11 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder {
*/
@Override
public ProtocolCoderToolset getDecoders(String groupId, String artifactId, String topic) {
- Pair<ProtocolCoderToolset,ProtocolCoderToolset> decoderToolsets =
+ Pair<ProtocolCoderToolset, ProtocolCoderToolset> decoderToolsets =
this.decoders.getCoders(groupId, artifactId, topic);
if (decoderToolsets == null) {
- throw new IllegalArgumentException("Decoders not found for " + groupId + ":" + artifactId + ":" + topic);
+ throw new IllegalArgumentException(
+ "Decoders not found for " + groupId + ":" + artifactId + ":" + topic);
}
return decoderToolsets.first();
@@ -538,24 +524,23 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder {
/**
* get all deocders by maven coordinates and topic.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- *
* @return list of decoders
* @throws IllegalArgumentException if invalid input
*/
@Override
public List<ProtocolCoderToolset> getDecoders(String groupId, String artifactId) {
- List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> decoderToolsets =
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> decoderToolsets =
this.decoders.getCoders(groupId, artifactId);
if (decoderToolsets == null) {
throw new IllegalArgumentException("Decoders not found for " + groupId + ":" + artifactId);
}
List<ProtocolCoderToolset> parser1CoderToolset = new ArrayList<>();
- for (Pair<ProtocolCoderToolset,ProtocolCoderToolset> coderToolsetPair : decoderToolsets) {
+ for (Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderToolsetPair : decoderToolsets) {
parser1CoderToolset.add(coderToolsetPair.first());
}
@@ -574,7 +559,8 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder {
* {@inheritDoc}.
*/
@Override
- public CoderFilters getEncoderFilters(String groupId, String artifactId, String topic, String classname) {
+ public CoderFilters getEncoderFilters(
+ String groupId, String artifactId, String topic, String classname) {
return this.encoders.getFilters(groupId, artifactId, topic, classname);
}
@@ -615,18 +601,20 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder {
*/
@Override
public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("MultiplexorEventProtocolCoder [decoders=").append(decoders).append(", encoders=")
- .append(encoders).append("]");
- return builder.toString();
+ return "MultiplexorEventProtocolCoder [decoders="
+ + decoders
+ + ", encoders="
+ + encoders
+ + "]";
}
}
/**
- * This protocol Coder that does its best attempt to decode/encode, selecting the best
- * class and best fitted json parsing tools.
+ * This protocol Coder that does its best attempt to decode/encode, selecting the best class and best fitted json
+ * parsing tools.
*/
-abstract class GenericEventProtocolCoder {
+abstract class GenericEventProtocolCoder {
+
private static final String INVALID_ARTIFACT_ID_MSG = "Invalid artifact id";
private static final String INVALID_GROUP_ID_MSG = "Invalid group id";
@@ -637,23 +625,22 @@ abstract class GenericEventProtocolCoder {
private static final String MISSING_CLASS = "class must be provided";
- private static Logger logger = LoggerFactory.getLogger(GenericEventProtocolCoder.class);
+ private static Logger logger = LoggerFactory.getLogger(GenericEventProtocolCoder.class);
/**
- * Mapping topic:controller-id -> /<protocol-decoder-toolset-pair/>
- * where protocol-coder-toolset-pair contains both a jackson-protocol-coder-toolset
- * and a gson-protocol-coder-toolset. The first value of the pair will the
- * protocol coder toolset most likely to be successful with the encoding or decoding,
- * and consequently the second value will be the less likely.
+ * Mapping topic:controller-id -> /<protocol-decoder-toolset-pair/> where protocol-coder-toolset-pair contains both
+ * a jackson-protocol-coder-toolset and a gson-protocol-coder-toolset. The first value of the pair will the protocol
+ * coder toolset most likely to be successful with the encoding or decoding, and consequently the second value will
+ * be the less likely.
*/
- protected final HashMap<String, Pair<ProtocolCoderToolset,ProtocolCoderToolset>> coders =
+ protected final HashMap<String, Pair<ProtocolCoderToolset, ProtocolCoderToolset>> coders =
new HashMap<>();
/**
* Mapping topic + classname -> Protocol Set.
*/
- protected final HashMap<String, List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>>> reverseCoders =
- new HashMap<>();
+ protected final HashMap<String, List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>>>
+ reverseCoders = new HashMap<>();
protected boolean multipleToolsetRetries = false;
@@ -663,41 +650,30 @@ abstract class GenericEventProtocolCoder {
/**
* Index a new coder.
- *
- * @param groupId of the controller
- * @param artifactId of the controller
- * @param topic the topic
- * @param eventClass the event class
- * @param protocolFilter filters to selectively choose a particular decoder
- * when there are multiples
- *
+ *
+ * @param eventProtocolParams parameter object for event encoder
* @throw IllegalArgumentException if an invalid parameter is passed
*/
- public void add(String groupId, String artifactId,
- String topic,
- String eventClass,
- JsonProtocolFilter protocolFilter,
- CustomGsonCoder customGsonCoder,
- CustomJacksonCoder customJacksonCoder,
- int modelClassLoaderHash) {
- if (groupId == null || groupId.isEmpty()) {
+ public void add(EventProtocolParams eventProtocolParams) {
+ if (eventProtocolParams.getGroupId() == null || eventProtocolParams.getGroupId().isEmpty()) {
throw new IllegalArgumentException(INVALID_GROUP_ID_MSG);
}
- if (artifactId == null || artifactId.isEmpty()) {
+ if (eventProtocolParams.getArtifactId() == null || eventProtocolParams.getArtifactId().isEmpty()) {
throw new IllegalArgumentException(INVALID_ARTIFACT_ID_MSG);
}
- if (topic == null || topic.isEmpty()) {
+ if (eventProtocolParams.getTopic() == null || eventProtocolParams.getTopic().isEmpty()) {
throw new IllegalArgumentException(INVALID_TOPIC_MSG);
}
- if (eventClass == null) {
+ if (eventProtocolParams.getEventClass() == null) {
throw new IllegalArgumentException("Invalid Event Class");
}
- String key = this.codersKey(groupId, artifactId, topic);
- String reverseKey = this.reverseCodersKey(topic, eventClass);
+ String key = this.codersKey(eventProtocolParams.getGroupId(), eventProtocolParams.getArtifactId(),
+ eventProtocolParams.getTopic());
+ String reverseKey = this.reverseCodersKey(eventProtocolParams.getTopic(), eventProtocolParams.getEventClass());
synchronized (this) {
if (coders.containsKey(key)) {
@@ -705,14 +681,28 @@ abstract class GenericEventProtocolCoder {
logger.info("{}: adding coders for existing {}: {}", this, key, toolsets.first());
- toolsets.first().addCoder(eventClass, protocolFilter, modelClassLoaderHash);
- toolsets.second().addCoder(eventClass, protocolFilter, modelClassLoaderHash);
+ toolsets
+ .first()
+ .addCoder(
+ eventProtocolParams.getEventClass(),
+ eventProtocolParams.getProtocolFilter(),
+ eventProtocolParams.getModelClassLoaderHash());
+ toolsets
+ .second()
+ .addCoder(
+ eventProtocolParams.getEventClass(),
+ eventProtocolParams.getProtocolFilter(),
+ eventProtocolParams.getModelClassLoaderHash());
if (!reverseCoders.containsKey(reverseKey)) {
- logger.info("{}: adding new reverse coders (multiple classes case) for {}:{}: {}",
- this, reverseKey, key, toolsets.first());
-
- List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> reverseMappings =
+ logger.info(
+ "{}: adding new reverse coders (multiple classes case) for {}:{}: {}",
+ this,
+ reverseKey,
+ key,
+ toolsets.first());
+
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> reverseMappings =
new ArrayList<>();
reverseMappings.add(toolsets);
reverseCoders.put(reverseKey, reverseMappings);
@@ -720,31 +710,38 @@ abstract class GenericEventProtocolCoder {
return;
}
- GsonProtocolCoderToolset gsonCoderTools =
- new GsonProtocolCoderToolset(topic, key,
- groupId, artifactId,
- eventClass, protocolFilter,
- customGsonCoder,
- modelClassLoaderHash);
-
- JacksonProtocolCoderToolset jacksonCoderTools =
- new JacksonProtocolCoderToolset(topic, key,
- groupId, artifactId,
- eventClass, protocolFilter,
- customJacksonCoder,
- modelClassLoaderHash);
+ GsonProtocolCoderToolset gsonCoderTools =
+ new GsonProtocolCoderToolset(
+ eventProtocolParams.getTopic(),
+ key,
+ eventProtocolParams.getGroupId(),
+ eventProtocolParams.getArtifactId(),
+ eventProtocolParams.getEventClass(),
+ eventProtocolParams.getProtocolFilter(),
+ eventProtocolParams.getCustomGsonCoder(),
+ eventProtocolParams.getModelClassLoaderHash());
+
+ JacksonProtocolCoderToolset jacksonCoderTools =
+ new JacksonProtocolCoderToolset(
+ eventProtocolParams.getTopic(),
+ key,
+ eventProtocolParams.getGroupId(),
+ eventProtocolParams.getArtifactId(),
+ eventProtocolParams.getEventClass(),
+ eventProtocolParams.getProtocolFilter(),
+ eventProtocolParams.getCustomJacksonCoder(),
+ eventProtocolParams.getModelClassLoaderHash());
// Use Gson as the first priority encoding/decoding toolset, and Jackson
// as second. This is because it has been observed that they can diverge
// somewhat in the encoding/decoding data types, which can produce json
- // that may result incompatible with what some network elements are
+ // that may result incompatible with what some network elements are
// expecting. As decoding takes place, this element will reconfigure
// itself to set the jackson one as the favoured one first, if errors
// are detected in the gson encoding
- Pair<ProtocolCoderToolset,ProtocolCoderToolset> coderTools =
- new Pair<>(gsonCoderTools,
- jacksonCoderTools);
+ Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools =
+ new Pair<>(gsonCoderTools, jacksonCoderTools);
logger.info("{}: adding coders for new {}: {}", this, key, coderTools.first());
@@ -754,44 +751,45 @@ abstract class GenericEventProtocolCoder {
// There is another controller (different group id/artifact id/topic)
// that shares the class and the topic.
- List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> toolsets =
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets =
reverseCoders.get(reverseKey);
boolean present = false;
- for (Pair<ProtocolCoderToolset,ProtocolCoderToolset> parserSet: toolsets) {
+ for (Pair<ProtocolCoderToolset, ProtocolCoderToolset> parserSet : toolsets) {
// just doublecheck
present = parserSet.first().getControllerId().equals(key);
if (present) {
/* anomaly */
- logger.error("{}: unexpected toolset reverse mapping found for {}:{}: {}",
- this, reverseKey, key, parserSet.first());
+ logger.error(
+ "{}: unexpected toolset reverse mapping found for {}:{}: {}",
+ this,
+ reverseKey,
+ key,
+ parserSet.first());
}
}
if (present) {
return;
} else {
- logger.info("{}: adding coder set for {}: {} ", this,
- reverseKey, coderTools.getFirst());
+ logger.info("{}: adding coder set for {}: {} ", this, reverseKey, coderTools.getFirst());
toolsets.add(coderTools);
}
} else {
- List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> toolsets =
- new ArrayList<>();
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = new ArrayList<>();
toolsets.add(coderTools);
logger.info("{}: adding toolset for reverse key {}: {}", this, reverseKey, toolsets);
reverseCoders.put(reverseKey, toolsets);
}
-
}
}
/**
* produces key for indexing toolset entries.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- * @param topic topic
+ * @param topic topic
* @return index key
*/
protected String codersKey(String groupId, String artifactId, String topic) {
@@ -800,8 +798,8 @@ abstract class GenericEventProtocolCoder {
/**
* produces a key for the reverse index.
- *
- * @param topic topic
+ *
+ * @param topic topic
* @param eventClass coded class
* @return reverse index key
*/
@@ -811,10 +809,10 @@ abstract class GenericEventProtocolCoder {
/**
* remove coder.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- * @param topic topic
+ * @param topic topic
* @throws IllegalArgumentException if invalid input
*/
public void remove(String groupId, String artifactId, String topic) {
@@ -842,16 +840,16 @@ abstract class GenericEventProtocolCoder {
for (CoderFilters codeFilter : pair.first().getCoders()) {
String className = codeFilter.getCodedClass();
String reverseKey = this.reverseCodersKey(topic, className);
- if (this.reverseCoders.containsKey(reverseKey) ) {
- List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets =
+ if (this.reverseCoders.containsKey(reverseKey)) {
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets =
this.reverseCoders.get(reverseKey);
- Iterator<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsetsIter =
+ Iterator<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsetsIter =
toolsets.iterator();
while (toolsetsIter.hasNext()) {
Pair<ProtocolCoderToolset, ProtocolCoderToolset> toolset = toolsetsIter.next();
if (toolset.first().getControllerId().equals(key)) {
- logger.info("{}: removed coder from toolset for {} from reverse mapping",
- this, reverseKey);
+ logger.info(
+ "{}: removed coder from toolset for {} from reverse mapping", this, reverseKey);
toolsetsIter.remove();
}
}
@@ -868,10 +866,10 @@ abstract class GenericEventProtocolCoder {
/**
* does it support coding.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- * @param topic topic
+ * @param topic topic
* @return true if its is codable
*/
public boolean isCodingSupported(String groupId, String artifactId, String topic) {
@@ -896,24 +894,24 @@ abstract class GenericEventProtocolCoder {
/**
* decode a json string into an Object.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- * @param topic topic
- * @param json json string to convert to object
+ * @param topic topic
+ * @param json json string to convert to object
* @return the decoded object
- * @throws IllegalArgumentException if invalid argument is provided
+ * @throws IllegalArgumentException if invalid argument is provided
* @throws UnsupportedOperationException if the operation cannot be performed
*/
public Object decode(String groupId, String artifactId, String topic, String json) {
if (!isCodingSupported(groupId, artifactId, topic)) {
- throw new IllegalArgumentException("Unsupported:" + codersKey(groupId, artifactId, topic)
- + " for encoding");
+ throw new IllegalArgumentException(
+ "Unsupported:" + codersKey(groupId, artifactId, topic) + " for encoding");
}
String key = this.codersKey(groupId, artifactId, topic);
- Pair<ProtocolCoderToolset,ProtocolCoderToolset> coderTools = coders.get(key);
+ Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = coders.get(key);
try {
Object event = coderTools.first().decode(json);
if (event != null) {
@@ -941,20 +939,20 @@ abstract class GenericEventProtocolCoder {
} catch (Exception e) {
throw new UnsupportedOperationException(e);
}
- }
+ }
throw new UnsupportedOperationException("Cannot decode neither with gson or jackson");
}
/**
* encode an object into a json string.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- * @param topic topic
- * @param event object to convert to string
+ * @param topic topic
+ * @param event object to convert to string
* @return the json string
- * @throws IllegalArgumentException if invalid argument is provided
+ * @throws IllegalArgumentException if invalid argument is provided
* @throws UnsupportedOperationException if the operation cannot be performed
*/
public String encode(String groupId, String artifactId, String topic, Object event) {
@@ -974,11 +972,11 @@ abstract class GenericEventProtocolCoder {
/**
* encode an object into a json string.
- *
+ *
* @param topic topic
* @param event object to convert to string
* @return the json string
- * @throws IllegalArgumentException if invalid argument is provided
+ * @throws IllegalArgumentException if invalid argument is provided
* @throws UnsupportedOperationException if the operation cannot be performed
*/
public String encode(String topic, Object event) {
@@ -996,19 +994,22 @@ abstract class GenericEventProtocolCoder {
throw new IllegalArgumentException("no reverse coder has been found");
}
- List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = this.reverseCoders.get(reverseKey);
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets =
+ this.reverseCoders.get(reverseKey);
- String key = codersKey(toolsets.get(0).first().getGroupId(), toolsets.get(0).first().getArtifactId(), topic);
+ String key =
+ codersKey(
+ toolsets.get(0).first().getGroupId(), toolsets.get(0).first().getArtifactId(), topic);
return this.encodeInternal(key, event);
}
/**
* encode an object into a json string.
- *
- * @param topic topic
+ *
+ * @param topic topic
* @param encodedClass object to convert to string
* @return the json string
- * @throws IllegalArgumentException if invalid argument is provided
+ * @throws IllegalArgumentException if invalid argument is provided
* @throws UnsupportedOperationException if the operation cannot be performed
*/
public String encode(String topic, Object encodedClass, DroolsController droolsController) {
@@ -1027,18 +1028,18 @@ abstract class GenericEventProtocolCoder {
/**
* encode an object into a json string.
- *
- * @param key identifier
+ *
+ * @param key identifier
* @param event object to convert to string
* @return the json string
- * @throws IllegalArgumentException if invalid argument is provided
+ * @throws IllegalArgumentException if invalid argument is provided
* @throws UnsupportedOperationException if the operation cannot be performed
*/
protected String encodeInternal(String key, Object event) {
logger.debug("{}: encode for {}: {}", this, key, event);
- Pair<ProtocolCoderToolset,ProtocolCoderToolset> coderTools = coders.get(key);
+ Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = coders.get(key);
try {
String json = coderTools.first().encode(event);
if (json != null && !json.isEmpty()) {
@@ -1074,12 +1075,11 @@ abstract class GenericEventProtocolCoder {
/**
* Drools creators.
- *
- * @param topic topic
+ *
+ * @param topic topic
* @param encodedClass encoded class
* @return list of controllers
- *
- * @throws IllegalStateException illegal state
+ * @throws IllegalStateException illegal state
* @throws IllegalArgumentException argument
*/
protected List<DroolsController> droolsCreators(String topic, Object encodedClass) {
@@ -1092,18 +1092,21 @@ abstract class GenericEventProtocolCoder {
return droolsControllers;
}
- List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = this.reverseCoders.get(reverseKey);
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets =
+ this.reverseCoders.get(reverseKey);
// There must be multiple toolset pairs associated with <topic,classname> reverseKey
// case 2 different controllers use the same models and register the same encoder for
// the same topic. This is assumed not to occur often but for the purpose of encoding
- // but there should be no side-effects. Ownership is crosscheck against classname and
+ // but there should be no side-effects. Ownership is crosscheck against classname and
// classloader reference.
if (toolsets == null || toolsets.isEmpty()) {
- throw new IllegalStateException("No Encoders toolsets available for topic "
- + topic
- + " encoder " + encodedClass.getClass().getCanonicalName());
+ throw new IllegalStateException(
+ "No Encoders toolsets available for topic "
+ + topic
+ + " encoder "
+ + encodedClass.getClass().getCanonicalName());
}
for (Pair<ProtocolCoderToolset, ProtocolCoderToolset> encoderSet : toolsets) {
@@ -1113,9 +1116,9 @@ abstract class GenericEventProtocolCoder {
List<CoderFilters> coderFilters = encoderSet.first().getCoders();
for (CoderFilters coder : coderFilters) {
if (coder.getCodedClass().equals(encodedClass.getClass().getCanonicalName())) {
- DroolsController droolsController =
- DroolsController.factory.get(groupId, artifactId, "");
- if (droolsController.ownsCoder(encodedClass.getClass(), coder.getModelClassLoaderHash())) {
+ DroolsController droolsController = DroolsController.factory.get(groupId, artifactId, "");
+ if (droolsController.ownsCoder(
+ encodedClass.getClass(), coder.getModelClassLoaderHash())) {
droolsControllers.add(droolsController);
}
}
@@ -1123,21 +1126,22 @@ abstract class GenericEventProtocolCoder {
}
if (droolsControllers.isEmpty()) {
- throw new IllegalStateException("No Encoders toolsets available for "
- + topic
- + ":" + encodedClass.getClass().getCanonicalName());
+ throw new IllegalStateException(
+ "No Encoders toolsets available for "
+ + topic
+ + ":"
+ + encodedClass.getClass().getCanonicalName());
}
return droolsControllers;
}
-
/**
* get all filters by maven coordinates and topic.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- * @param topic topic
+ * @param topic topic
* @return list of coders
* @throws IllegalArgumentException if invalid input
*/
@@ -1148,14 +1152,14 @@ abstract class GenericEventProtocolCoder {
}
String key = this.codersKey(groupId, artifactId, topic);
- Pair<ProtocolCoderToolset,ProtocolCoderToolset> coderTools = coders.get(key);
+ Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = coders.get(key);
return coderTools.first().getCoders();
}
/**
* get all coders by maven coordinates and topic.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
* @return list of coders
* @throws IllegalArgumentException if invalid input
@@ -1173,7 +1177,8 @@ abstract class GenericEventProtocolCoder {
String key = this.codersKey(groupId, artifactId, "");
List<CoderFilters> codersFilters = new ArrayList<>();
- for (Map.Entry<String, Pair<ProtocolCoderToolset,ProtocolCoderToolset>> entry : coders.entrySet()) {
+ for (Map.Entry<String, Pair<ProtocolCoderToolset, ProtocolCoderToolset>> entry :
+ coders.entrySet()) {
if (entry.getKey().startsWith(key)) {
codersFilters.addAll(entry.getValue().first().getCoders());
}
@@ -1181,18 +1186,19 @@ abstract class GenericEventProtocolCoder {
return codersFilters;
}
-
+
/**
* get all filters by maven coordinates, topic, and classname.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- * @param topic topic
- * @param classname classname
+ * @param topic topic
+ * @param classname classname
* @return list of coders
* @throws IllegalArgumentException if invalid input
*/
- public CoderFilters getFilters(String groupId, String artifactId, String topic, String classname) {
+ public CoderFilters getFilters(
+ String groupId, String artifactId, String topic, String classname) {
if (!isCodingSupported(groupId, artifactId, topic)) {
throw new IllegalArgumentException("Unsupported:" + codersKey(groupId, artifactId, topic));
@@ -1203,20 +1209,21 @@ abstract class GenericEventProtocolCoder {
}
String key = this.codersKey(groupId, artifactId, topic);
- Pair<ProtocolCoderToolset,ProtocolCoderToolset> coderTools = coders.get(key);
+ Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = coders.get(key);
return coderTools.first().getCoder(classname);
}
/**
* get all coders by maven coordinates and topic.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
- * @param topic topic
+ * @param topic topic
* @return list of coders
* @throws IllegalArgumentException if invalid input
*/
- public Pair<ProtocolCoderToolset,ProtocolCoderToolset> getCoders(String groupId, String artifactId, String topic) {
+ public Pair<ProtocolCoderToolset, ProtocolCoderToolset> getCoders(
+ String groupId, String artifactId, String topic) {
if (!isCodingSupported(groupId, artifactId, topic)) {
throw new IllegalArgumentException("Unsupported:" + codersKey(groupId, artifactId, topic));
@@ -1228,13 +1235,14 @@ abstract class GenericEventProtocolCoder {
/**
* get all coders by maven coordinates and topic.
- *
- * @param groupId group id
+ *
+ * @param groupId group id
* @param artifactId artifact id
* @return list of coders
* @throws IllegalArgumentException if invalid input
*/
- public List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> getCoders(String groupId, String artifactId) {
+ public List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> getCoders(
+ String groupId, String artifactId) {
if (groupId == null || groupId.isEmpty()) {
throw new IllegalArgumentException(INVALID_GROUP_ID_MSG);
@@ -1246,8 +1254,9 @@ abstract class GenericEventProtocolCoder {
String key = this.codersKey(groupId, artifactId, "");
- List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> coderToolset = new ArrayList<>();
- for (Map.Entry<String, Pair<ProtocolCoderToolset,ProtocolCoderToolset>> entry : coders.entrySet()) {
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> coderToolset = new ArrayList<>();
+ for (Map.Entry<String, Pair<ProtocolCoderToolset, ProtocolCoderToolset>> entry :
+ coders.entrySet()) {
if (entry.getKey().startsWith(key)) {
coderToolset.add(entry.getValue());
}
@@ -1258,8 +1267,8 @@ abstract class GenericEventProtocolCoder {
/**
* get coded based on class and topic.
- *
- * @param topic topic
+ *
+ * @param topic topic
* @param codedClass class
* @return list of reverse filters
*/
@@ -1274,13 +1283,13 @@ abstract class GenericEventProtocolCoder {
}
String key = this.reverseCodersKey(topic, codedClass);
- List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> toolsets = this.reverseCoders.get(key);
+ List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = this.reverseCoders.get(key);
if (toolsets == null) {
throw new IllegalArgumentException("No Coder found for " + key);
}
List<CoderFilters> coderFilters = new ArrayList<>();
- for (Pair<ProtocolCoderToolset,ProtocolCoderToolset> toolset: toolsets) {
+ for (Pair<ProtocolCoderToolset, ProtocolCoderToolset> toolset : toolsets) {
coderFilters.addAll(toolset.first().getCoders());
}
@@ -1289,9 +1298,9 @@ abstract class GenericEventProtocolCoder {
/**
* returns group and artifact id of the creator of the encoder.
- *
+ *
* @param topic topic
- * @param fact fact
+ * @param fact fact
* @return the drools controller
*/
DroolsController getDroolsController(String topic, Object fact) {
@@ -1311,8 +1320,12 @@ abstract class GenericEventProtocolCoder {
}
if (droolsControllers.size() > 1) {
- logger.warn("{}: multiple drools-controller {} for {}:{} ", this,
- droolsControllers, topic, fact.getClass().getCanonicalName());
+ logger.warn(
+ "{}: multiple drools-controller {} for {}:{} ",
+ this,
+ droolsControllers,
+ topic,
+ fact.getClass().getCanonicalName());
// continue
}
return droolsControllers.get(0);
@@ -1320,9 +1333,9 @@ abstract class GenericEventProtocolCoder {
/**
* returns group and artifact id of the creator of the encoder.
- *
+ *
* @param topic topic
- * @param fact fact
+ * @param fact fact
* @return list of drools controllers
*/
List<DroolsController> getDroolsControllers(String topic, Object fact) {
@@ -1338,8 +1351,12 @@ abstract class GenericEventProtocolCoder {
List<DroolsController> droolsControllers = droolsCreators(topic, fact);
if (droolsControllers.size() > 1) {
// unexpected
- logger.warn("{}: multiple drools-controller {} for {}:{} ", this,
- droolsControllers, topic, fact.getClass().getCanonicalName());
+ logger.warn(
+ "{}: multiple drools-controller {} for {}:{} ",
+ this,
+ droolsControllers,
+ topic,
+ fact.getClass().getCanonicalName());
// continue
}
return droolsControllers;
@@ -1347,10 +1364,11 @@ abstract class GenericEventProtocolCoder {
@Override
public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("GenericEventProtocolCoder [coders=").append(coders.keySet()).append(", reverseCoders=")
- .append(reverseCoders.keySet()).append("]");
- return builder.toString();
+ return "GenericEventProtocolCoder [coders="
+ + coders.keySet()
+ + ", reverseCoders="
+ + reverseCoders.keySet()
+ + "]";
}
}
@@ -1362,11 +1380,8 @@ class EventProtocolDecoder extends GenericEventProtocolCoder {
@Override
public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("EventProtocolDecoder [toString()=").append(super.toString()).append("]");
- return builder.toString();
+ return "EventProtocolDecoder [toString()=" + super.toString() + "]";
}
-
}
class EventProtocolEncoder extends GenericEventProtocolCoder {
@@ -1377,8 +1392,6 @@ class EventProtocolEncoder extends GenericEventProtocolCoder {
@Override
public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("EventProtocolEncoder [toString()=").append(super.toString()).append("]");
- return builder.toString();
+ return "EventProtocolEncoder [toString()=" + super.toString() + "]";
}
}