SCXML-278 Code cleanup and Java8 alignment - remove obsolete code, unused imports - remove duplicate code, move repeated code up to parent class - cleanup exception handling - align with Java8, remove unnessesary type casting, make use of lamba's where useful - fixup references to current/final SCXML spec urls - apply protected, private, static, and/or final scoping of fields and methods where possible
Project: http://git-wip-us.apache.org/repos/asf/commons-scxml/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-scxml/commit/05e94b82 Tree: http://git-wip-us.apache.org/repos/asf/commons-scxml/tree/05e94b82 Diff: http://git-wip-us.apache.org/repos/asf/commons-scxml/diff/05e94b82 Branch: refs/heads/master Commit: 05e94b8229535800e57c82a04dea764714cd4ef0 Parents: 9fb7a63 Author: Ate Douma <a...@apache.org> Authored: Sun Jan 7 16:26:10 2018 +0100 Committer: Ate Douma <a...@apache.org> Committed: Sun Jan 7 16:34:06 2018 +0100 ---------------------------------------------------------------------- src/changes/changes.xml | 6 +- .../apache/commons/scxml2/EvaluatorFactory.java | 2 +- .../scxml2/ExternalSCXMLIOProcessor.java | 2 +- .../commons/scxml2/NotificationRegistry.java | 8 +- .../org/apache/commons/scxml2/SCInstance.java | 2 +- .../commons/scxml2/SCXMLExecutionContext.java | 35 +++---- .../apache/commons/scxml2/SCXMLExecutor.java | 10 +- .../scxml2/SCXMLExpressionException.java | 1 - .../apache/commons/scxml2/SCXMLSemantics.java | 4 +- .../commons/scxml2/SCXMLSystemContext.java | 5 +- .../commons/scxml2/StateConfiguration.java | 4 +- .../scxml2/env/AbstractBaseEvaluator.java | 28 +++++- .../scxml2/env/AbstractStateMachine.java | 21 +---- .../org/apache/commons/scxml2/env/LogUtils.java | 12 +-- .../commons/scxml2/env/SimpleContext.java | 17 +--- .../commons/scxml2/env/SimpleDispatcher.java | 39 +++----- .../commons/scxml2/env/SimpleErrorHandler.java | 2 +- .../commons/scxml2/env/SimpleErrorReporter.java | 12 +-- .../commons/scxml2/env/SimpleSCXMLListener.java | 2 +- .../commons/scxml2/env/SimpleXMLReporter.java | 2 +- .../org/apache/commons/scxml2/env/Tracer.java | 8 +- .../apache/commons/scxml2/env/URLResolver.java | 2 +- .../scxml2/env/groovy/GroovyContextBinding.java | 2 +- .../scxml2/env/groovy/GroovyEvaluator.java | 25 ----- .../env/groovy/GroovyExtendableScriptCache.java | 30 ++---- .../scxml2/env/groovy/GroovySCXMLScript.java | 6 +- .../scxml2/env/javascript/JSBindings.java | 4 +- .../scxml2/env/javascript/JSEvaluator.java | 24 ----- .../scxml2/env/javascript/init_global.js | 2 +- .../commons/scxml2/env/jexl/JexlEvaluator.java | 28 +----- .../commons/scxml2/invoke/InvokerException.java | 7 -- .../scxml2/invoke/SimpleSCXMLInvoker.java | 12 +-- .../apache/commons/scxml2/io/ContentParser.java | 8 +- .../apache/commons/scxml2/io/ModelUpdater.java | 43 ++++----- .../apache/commons/scxml2/io/SCXMLReader.java | 27 +++--- .../apache/commons/scxml2/io/SCXMLWriter.java | 97 +++++++++----------- .../org/apache/commons/scxml2/model/Action.java | 11 +-- .../apache/commons/scxml2/model/Datamodel.java | 4 +- .../commons/scxml2/model/DocumentOrder.java | 14 +-- .../commons/scxml2/model/EnterableState.java | 9 +- .../apache/commons/scxml2/model/Executable.java | 5 +- .../org/apache/commons/scxml2/model/Final.java | 2 +- .../apache/commons/scxml2/model/Foreach.java | 3 +- .../org/apache/commons/scxml2/model/If.java | 4 +- .../commons/scxml2/model/NodeTextValue.java | 2 +- .../org/apache/commons/scxml2/model/Param.java | 1 - .../commons/scxml2/model/PayloadBuilder.java | 10 +- .../commons/scxml2/model/PayloadProvider.java | 84 ----------------- .../org/apache/commons/scxml2/model/SCXML.java | 32 +------ .../org/apache/commons/scxml2/model/Send.java | 2 +- .../commons/scxml2/model/SimpleTransition.java | 9 +- .../apache/commons/scxml2/model/Transition.java | 2 +- .../commons/scxml2/model/TransitionType.java | 4 +- .../commons/scxml2/model/TransitionalState.java | 19 ++-- .../org/apache/commons/scxml2/model/Var.java | 7 -- .../scxml2/semantics/SCXMLSemanticsImpl.java | 75 +++++++-------- .../apache/commons/scxml2/semantics/Step.java | 26 +++--- .../commons/scxml2/test/StandaloneUtils.java | 6 +- .../apache/commons/scxml2/EventDataTest.java | 10 +- .../apache/commons/scxml2/SCInstanceTest.java | 6 +- .../commons/scxml2/SCXMLExecutorTest.java | 10 +- .../apache/commons/scxml2/SCXMLTestHelper.java | 14 ++- .../org/apache/commons/scxml2/WizardsTest.java | 3 +- .../scxml2/env/AbstractStateMachineTest.java | 8 +- .../apache/commons/scxml2/env/StopWatch.java | 4 +- .../commons/scxml2/env/StopWatchDisplay.java | 7 +- .../scxml2/env/groovy/GroovyContextTest.java | 2 +- .../scxml2/env/javascript/JSEvaluatorTest.java | 39 ++++---- .../scxml2/env/javascript/JSExampleTest.java | 4 +- .../scxml2/env/jexl/JexlContextTest.java | 13 +-- .../scxml2/env/jexl/JexlEvaluatorTest.java | 6 +- .../scxml2/invoke/InvokeParamNameTest.java | 4 +- .../commons/scxml2/io/ContentParserTest.java | 2 +- .../commons/scxml2/io/SCXMLReaderTest.java | 33 +++---- .../scxml2/io/SCXMLRequiredAttributesTest.java | 2 +- .../commons/scxml2/io/SCXMLWriterTest.java | 4 +- .../commons/scxml2/issues/Issue112Test.java | 9 +- .../commons/scxml2/model/ActionsTest.java | 2 +- .../commons/scxml2/model/CustomActionTest.java | 8 +- .../org/apache/commons/scxml2/model/Hello.java | 2 - .../apache/commons/scxml2/model/SendTest.java | 4 +- .../semantics/SCXMLSemanticsImplTest.java | 8 +- .../org/apache/commons/scxml2/w3c/W3CTests.java | 38 ++++---- 83 files changed, 392 insertions(+), 720 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 6645a8b..cadc1ba 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -35,6 +35,10 @@ <release version="2.0" date="In Git master" description="Latest unreleased code"> + <action dev="ate" type="add" issue="SCXML-278"> + [07-01-2018] Code cleanup and Java8 alignment + </action> + <action dev="ate" type="add" issue="SCXML-271"> [12-11-2017] Support Groovy for running the SCXML IRP tests </action> @@ -60,7 +64,7 @@ </action> <action dev="ate" type="add" issue="SCXML-264"> - [12-10-2017] Support <invoke> with inline (<content> body) SCXML statemachine definition + [12-10-2017] Support <invoke> with inline (<content> body) SCXML statemachine definition </action> <action dev="ate" type="fix" issue="SCXML-263"> http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java b/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java index 784affa..0024d4c 100644 --- a/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java +++ b/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java @@ -54,7 +54,7 @@ import static org.apache.commons.scxml2.Evaluator.DEFAULT_DATA_MODEL; */ public class EvaluatorFactory { - private static EvaluatorFactory INSTANCE = new EvaluatorFactory(); + private static final EvaluatorFactory INSTANCE = new EvaluatorFactory(); private final Map<String, EvaluatorProvider> providers = new ConcurrentHashMap<>(); http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/ExternalSCXMLIOProcessor.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/ExternalSCXMLIOProcessor.java b/src/main/java/org/apache/commons/scxml2/ExternalSCXMLIOProcessor.java index be14a3d..a68fb55 100644 --- a/src/main/java/org/apache/commons/scxml2/ExternalSCXMLIOProcessor.java +++ b/src/main/java/org/apache/commons/scxml2/ExternalSCXMLIOProcessor.java @@ -25,7 +25,7 @@ package org.apache.commons.scxml2; */ public class ExternalSCXMLIOProcessor implements SCXMLIOProcessor { - private SCXMLIOProcessor processor; + private final SCXMLIOProcessor processor; public ExternalSCXMLIOProcessor(final SCXMLIOProcessor processor) { this.processor = processor; http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java b/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java index 6db5836..34291ea 100644 --- a/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java +++ b/src/main/java/org/apache/commons/scxml2/NotificationRegistry.java @@ -46,7 +46,7 @@ public final class NotificationRegistry { * Constructor. */ public NotificationRegistry() { - this.regs = new HashMap<Integer, Set<SCXMLListener>>(); + this.regs = new HashMap<>(); } /** @@ -57,11 +57,7 @@ public final class NotificationRegistry { */ synchronized void addListener(final Observable source, final SCXMLListener lst) { if (source != null && source.getObservableId() != null) { - Set<SCXMLListener> entries = regs.get(source.getObservableId()); - if (entries == null) { - entries = new LinkedHashSet<SCXMLListener>(); - regs.put(source.getObservableId(), entries); - } + Set<SCXMLListener> entries = regs.computeIfAbsent(source.getObservableId(), k -> new LinkedHashSet<>()); entries.add(lst); } } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/SCInstance.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/SCInstance.java b/src/main/java/org/apache/commons/scxml2/SCInstance.java index c293afa..baa35e3 100644 --- a/src/main/java/org/apache/commons/scxml2/SCInstance.java +++ b/src/main/java/org/apache/commons/scxml2/SCInstance.java @@ -419,7 +419,7 @@ public class SCInstance implements Serializable { * @throws IllegalStateException Exception thrown if trying to start the state machine when in a Final state */ public void start() throws IllegalStateException { - if (!this.running && running && currentStatus.isFinal()) { + if (!this.running && currentStatus.isFinal()) { throw new IllegalStateException("The state machine is in a Final state and cannot be set running again"); } this.running = true; http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java b/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java index ec4dcea..6f827f1 100644 --- a/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java +++ b/src/main/java/org/apache/commons/scxml2/SCXMLExecutionContext.java @@ -52,7 +52,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor { /** * SCXML Execution Logger for the application. */ - private Log appLog = LogFactory.getLog(SCXMLExecutionContext.class); + private static final Log appLog = LogFactory.getLog(SCXMLExecutionContext.class); /** * The action execution context instance, providing restricted access to this execution context @@ -77,7 +77,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor { /** * The external IOProcessor for Invokers to communicate back on */ - private SCXMLIOProcessor externalIOProcessor; + private final SCXMLIOProcessor externalIOProcessor; /** * The event dispatcher to interface with external documents etc. @@ -92,32 +92,32 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor { /** * The notification registry. */ - private NotificationRegistry notificationRegistry; + private final NotificationRegistry notificationRegistry; /** * The internal event queue */ - private final Queue<TriggerEvent> internalEventQueue = new LinkedList<TriggerEvent>(); + private final Queue<TriggerEvent> internalEventQueue = new LinkedList<>(); /** * The Invoker classes map, keyed by invoke target types (specified using "type" attribute). */ - private final Map<String, Class<? extends Invoker>> invokerClasses = new HashMap<String, Class<? extends Invoker>>(); + private final Map<String, Class<? extends Invoker>> invokerClasses = new HashMap<>(); /** * The map storing the unique invokeId for an Invoke with an active Invoker */ - private final Map<Invoke, String> invokeIds = new HashMap<Invoke, String>(); + private final Map<Invoke, String> invokeIds = new HashMap<>(); /** * The Map of active Invoker, keyed by their unique invokeId. */ - private final Map<String, Invoker> invokers = new HashMap<String, Invoker>(); + private final Map<String, Invoker> invokers = new HashMap<>(); /** * The Map of the current ioProcessors */ - private final Map<String, SCXMLIOProcessor> ioProcessors = new HashMap<String, SCXMLIOProcessor>(); + private final Map<String, SCXMLIOProcessor> ioProcessors = new HashMap<>(); /** * Flag indicating if the SCXML configuration should be checked before execution (default = true) @@ -211,10 +211,8 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor { } /** * (re)start the state machine. - * - * @throws ModelException if the state machine instance failed to initialize. */ - public void start() throws ModelException { + public void start() { if (scInstance.isRunning()) { throw new IllegalStateException("The state machine has already started."); } else if (scInstance.getGlobalContext() == null) { @@ -268,15 +266,6 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor { } /** - * The SCXML specification section "C.1.1 _ioprocessors Value" states that the SCXMLEventProcessor <em>must</em> - * maintain a 'location' field inside its entry in the _ioprocessors environment variable. - * @return the 'location' of the SCXMLEventProcessor - */ - public String getLocation() { - return null; - } - - /** * @return Returns the SCInstance */ public SCInstance getScInstance() { @@ -419,7 +408,7 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor { * @param uri * @return */ - private final String stripTrailingSlash(final String uri) { + private String stripTrailingSlash(final String uri) { return uri.endsWith("/") ? uri.substring(0, uri.length()-1) : uri; } @@ -458,10 +447,8 @@ public class SCXMLExecutionContext implements SCXMLIOProcessor { } try { return invokerClass.newInstance(); - } catch (InstantiationException ie) { + } catch (InstantiationException | IllegalAccessException ie) { throw new InvokerException(ie.getMessage(), ie.getCause()); - } catch (IllegalAccessException iae) { - throw new InvokerException(iae.getMessage(), iae.getCause()); } } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java b/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java index 3be0c7f..5e6ad90 100644 --- a/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java +++ b/src/main/java/org/apache/commons/scxml2/SCXMLExecutor.java @@ -51,7 +51,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor { /** * The Logger for the SCXMLExecutor. */ - private Log log = LogFactory.getLog(SCXMLExecutor.class); + private static final Log log = LogFactory.getLog(SCXMLExecutor.class); /** * Parent SCXMLIOProcessor @@ -61,17 +61,17 @@ public class SCXMLExecutor implements SCXMLIOProcessor { /** * Interpretation semantics. */ - private SCXMLSemantics semantics; + private final SCXMLSemantics semantics; /** * The state machine execution context */ - private SCXMLExecutionContext exctx; + private final SCXMLExecutionContext exctx; /** * The external event queue */ - private final Queue<TriggerEvent> externalEventQueue = new ConcurrentLinkedQueue<TriggerEvent>(); + private final Queue<TriggerEvent> externalEventQueue = new ConcurrentLinkedQueue<>(); /** * Convenience constructor. @@ -468,7 +468,7 @@ public class SCXMLExecutor implements SCXMLIOProcessor { while (exctx.isRunning()) { triggerEvents(); } - } catch (ModelException e) { + } catch (ModelException ignored) { } }); t.start(); http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/SCXMLExpressionException.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLExpressionException.java b/src/main/java/org/apache/commons/scxml2/SCXMLExpressionException.java index 8e3ace2..b05b54b 100644 --- a/src/main/java/org/apache/commons/scxml2/SCXMLExpressionException.java +++ b/src/main/java/org/apache/commons/scxml2/SCXMLExpressionException.java @@ -32,7 +32,6 @@ public class SCXMLExpressionException extends Exception { * @see java.lang.Exception#Exception() */ public SCXMLExpressionException() { - super(); } /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/SCXMLSemantics.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLSemantics.java b/src/main/java/org/apache/commons/scxml2/SCXMLSemantics.java index 9daca8c..15c254d 100644 --- a/src/main/java/org/apache/commons/scxml2/SCXMLSemantics.java +++ b/src/main/java/org/apache/commons/scxml2/SCXMLSemantics.java @@ -25,7 +25,7 @@ import org.apache.commons.scxml2.model.SCXML; /** * <p>The purpose of this interface is to separate the the - * <a href="http://www.w3.org/TR/2014/CR-scxml-20140313/#AlgorithmforSCXMLInterpretation"> + * <a href="https://www.w3.org/TR/2015/REC-scxml-20150901/#AlgorithmforSCXMLInterpretation"> * W3C SCXML Algorithm for SCXML Interpretation</a> * from the <code>SCXMLExecutor</code> and therefore make it pluggable.</p> * <p> @@ -180,5 +180,5 @@ public interface SCXMLSemantics { * @param errRep ErrorReporter to report detailed error info if needed * @return true if a given state configuration is legal, false otherwise */ - public boolean isLegalConfiguration(final Set<EnterableState> states, final ErrorReporter errRep); + boolean isLegalConfiguration(final Set<EnterableState> states, final ErrorReporter errRep); } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java b/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java index acbcc8e..e865d9f 100644 --- a/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java +++ b/src/main/java/org/apache/commons/scxml2/SCXMLSystemContext.java @@ -59,9 +59,8 @@ public class SCXMLSystemContext implements Context, Serializable { /** * The set of protected system variables names */ - private static final Set<String> PROTECTED_NAMES = new HashSet<String>(Arrays.asList( - new String[] {EVENT_KEY, SESSIONID_KEY, SCXML_NAME_KEY, IOPROCESSORS_KEY, X_KEY} - )); + private static final Set<String> PROTECTED_NAMES = new HashSet<>(Arrays.asList( + EVENT_KEY, SESSIONID_KEY, SCXML_NAME_KEY, IOPROCESSORS_KEY, X_KEY)); /** * The wrapped system context http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/StateConfiguration.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/StateConfiguration.java b/src/main/java/org/apache/commons/scxml2/StateConfiguration.java index 1a7ce23..f8f1322 100644 --- a/src/main/java/org/apache/commons/scxml2/StateConfiguration.java +++ b/src/main/java/org/apache/commons/scxml2/StateConfiguration.java @@ -35,13 +35,13 @@ public class StateConfiguration implements Serializable { /** * The states that are currently active. */ - private final Set<EnterableState> activeStates = new HashSet<EnterableState>(); + private final Set<EnterableState> activeStates = new HashSet<>(); private final Set<EnterableState> activeStatesSet = Collections.unmodifiableSet(activeStates); /** * The atomic states that are currently active. */ - private final Set<EnterableState> atomicStates = new HashSet<EnterableState>(); + private final Set<EnterableState> atomicStates = new HashSet<>(); private final Set<EnterableState> atomicStatesSet = Collections.unmodifiableSet(atomicStates); /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java index abd96a4..44239c7 100644 --- a/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java +++ b/src/main/java/org/apache/commons/scxml2/env/AbstractBaseEvaluator.java @@ -22,8 +22,11 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.UUID; +import org.apache.commons.scxml2.Context; import org.apache.commons.scxml2.Evaluator; +import org.apache.commons.scxml2.SCXMLExpressionException; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -32,6 +35,29 @@ import org.w3c.dom.NodeList; */ public abstract class AbstractBaseEvaluator implements Evaluator, Serializable { + /** + * Unique context variable name used for temporary reference to assign data (thus must be a valid variable name) + */ + private static final String ASSIGN_VARIABLE_NAME = "a"+ UUID.randomUUID().toString().replace('-','x'); + + /** + * @see Evaluator#evalAssign(Context, String, Object) + */ + public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException { + StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME); + try { + ctx.getVars().put(ASSIGN_VARIABLE_NAME, data); + eval(ctx, sb.toString()); + } catch (SCXMLExpressionException e) { + if (e.getCause() != null && e.getCause() != null && e.getCause().getMessage() != null) { + throw new SCXMLExpressionException("Error evaluating assign to location=\"" + location + "\": " + e.getCause().getMessage()); + } + throw e; + } finally { + ctx.getVars().remove(ASSIGN_VARIABLE_NAME); + } + } + @Override public Object cloneData(final Object data) { if (data != null) { @@ -68,7 +94,7 @@ public abstract class AbstractBaseEvaluator implements Evaluator, Serializable { return cloneUnknownDataType(data); } } - return data; + return null; } /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java b/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java index d72ec77..eae5822 100644 --- a/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java +++ b/src/main/java/org/apache/commons/scxml2/env/AbstractStateMachine.java @@ -124,12 +124,8 @@ public abstract class AbstractStateMachine { log = LogFactory.getLog(this.getClass()); try { stateMachine = SCXMLReader.read(scxmlDocument); - } catch (IOException ioe) { + } catch (IOException | XMLStreamException | ModelException ioe) { logError(ioe); - } catch (XMLStreamException xse) { - logError(xse); - } catch (ModelException me) { - logError(me); } initialize(stateMachine, rootCtx, evaluator); } @@ -246,21 +242,10 @@ public abstract class AbstractStateMachine { try { Method method = clas.getDeclaredMethod(methodName, SIGNATURE); method.invoke(this, PARAMETERS); - } catch (SecurityException se) { + } catch (SecurityException | NoSuchMethodException | IllegalAccessException | IllegalArgumentException | + InvocationTargetException se) { logError(se); return false; - } catch (NoSuchMethodException nsme) { - logError(nsme); - return false; - } catch (IllegalArgumentException iae) { - logError(iae); - return false; - } catch (IllegalAccessException iae) { - logError(iae); - return false; - } catch (InvocationTargetException ite) { - logError(ite); - return false; } return true; } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/LogUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/LogUtils.java b/src/main/java/org/apache/commons/scxml2/env/LogUtils.java index bf27a43..0faf929 100644 --- a/src/main/java/org/apache/commons/scxml2/env/LogUtils.java +++ b/src/main/java/org/apache/commons/scxml2/env/LogUtils.java @@ -36,13 +36,11 @@ public final class LogUtils { */ public static String transToString(final TransitionTarget from, final TransitionTarget to, final Transition transition, String event) { - StringBuffer buf = new StringBuffer("("); - buf.append("event = ").append(event); - buf.append(", cond = ").append(transition.getCond()); - buf.append(", from = ").append(getTTPath(from)); - buf.append(", to = ").append(getTTPath(to)); - buf.append(')'); - return buf.toString(); + return "(" + "event = " + event + + ", cond = " + transition.getCond() + + ", from = " + getTTPath(from) + + ", to = " + getTTPath(to) + + ')'; } /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java b/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java index 50b650a..7d155d1 100644 --- a/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java +++ b/src/main/java/org/apache/commons/scxml2/env/SimpleContext.java @@ -34,10 +34,9 @@ public class SimpleContext implements Context, Serializable { /** Serial version UID. */ private static final long serialVersionUID = 1L; /** Implementation independent log category. */ - private static final Log DEFAULT_LOG = LogFactory.getLog(Context.class); - private Log log = DEFAULT_LOG; + private static final Log log = LogFactory.getLog(Context.class); /** The parent Context to this Context. */ - private Context parent; + private final Context parent; /** The Map of variables and their values in this Context. */ private Map<String, Object> vars; @@ -71,7 +70,7 @@ public class SimpleContext implements Context, Serializable { this.systemContext = parent instanceof SCXMLSystemContext ? (SCXMLSystemContext) parent : parent != null ? parent.getSystemContext() : null; if (initialVars == null) { - setVars(new HashMap<String, Object>()); + setVars(new HashMap<>()); } else { setVars(this.vars = initialVars); } @@ -199,15 +198,6 @@ public class SimpleContext implements Context, Serializable { } /** - * Set the log used by this <code>Context</code> instance. - * - * @param log The new log. - */ - protected void setLog(final Log log) { - this.log = log; - } - - /** * Get the log used by this <code>Context</code> instance. * * @return Log The log being used. @@ -215,6 +205,5 @@ public class SimpleContext implements Context, Serializable { protected Log getLog() { return log; } - } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java b/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java index 60ae51f..eec3f17 100644 --- a/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java +++ b/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java @@ -58,17 +58,17 @@ public class SimpleDispatcher implements EventDispatcher, Serializable { /** * The ID of the <send> element. */ - private String id; + private final String id; /** * The event */ - private TriggerEvent event; + private final TriggerEvent event; /** * The target io processor */ - private SCXMLIOProcessor target; + private final SCXMLIOProcessor target; /** * Constructor for events with payload. @@ -99,13 +99,13 @@ public class SimpleDispatcher implements EventDispatcher, Serializable { } /** Implementation independent log category. */ - private Log log = LogFactory.getLog(EventDispatcher.class); + private static final Log log = LogFactory.getLog(EventDispatcher.class); /** * The <code>Map</code> of active <code>Timer</code>s, keyed by * <send> element <code>id</code>s. */ - private Map<String, Timer> timers = Collections.synchronizedMap(new HashMap<String, Timer>()); + private final Map<String, Timer> timers = Collections.synchronizedMap(new HashMap<String, Timer>()); /** * Get the log instance. @@ -117,15 +117,6 @@ public class SimpleDispatcher implements EventDispatcher, Serializable { } /** - * Sets the log instance - * - * @param log the new log instance - */ - protected void setLog(Log log) { - this.log = log; - } - - /** * Get the current timers. * * @return The currently scheduled timers @@ -167,16 +158,16 @@ public class SimpleDispatcher implements EventDispatcher, Serializable { public void send(final Map<String, SCXMLIOProcessor> ioProcessors, final String id, final String target, final String type, final String event, final Object data, final Object hints, final long delay) { if (log.isInfoEnabled()) { - StringBuilder buf = new StringBuilder(); - buf.append("send ( id: ").append(id); - buf.append(", target: ").append(target); - buf.append(", type: ").append(type); - buf.append(", event: ").append(event); - buf.append(", data: ").append(String.valueOf(data)); - buf.append(", hints: ").append(String.valueOf(hints)); - buf.append(", delay: ").append(delay); - buf.append(')'); - log.info(buf.toString()); + final String buf = + "send ( id: " + id + + ", target: " + target + + ", type: " + type + + ", event: " + event + + ", data: " + String.valueOf(data) + + ", hints: " + String.valueOf(hints) + + ", delay: " + delay + + ')'; + log.info(buf); } // We only handle the "scxml" type (which is the default too) and optionally the #_internal target http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/SimpleErrorHandler.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleErrorHandler.java b/src/main/java/org/apache/commons/scxml2/env/SimpleErrorHandler.java index 59fa254..90ff955 100644 --- a/src/main/java/org/apache/commons/scxml2/env/SimpleErrorHandler.java +++ b/src/main/java/org/apache/commons/scxml2/env/SimpleErrorHandler.java @@ -37,7 +37,7 @@ public class SimpleErrorHandler implements ErrorHandler, Serializable { private static final String MSG_POSTFIX = " Correct the SCXML document."; /** Log. */ - private Log log = LogFactory.getLog(getClass()); + private static final Log log = LogFactory.getLog(SimpleErrorHandler.class); /** * Constructor. http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java b/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java index aa39d47..f51a279 100644 --- a/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java +++ b/src/main/java/org/apache/commons/scxml2/env/SimpleErrorReporter.java @@ -40,7 +40,7 @@ public class SimpleErrorReporter implements ErrorReporter, Serializable { /** Serial version UID. */ private static final long serialVersionUID = 1L; /** Log. */ - private Log log = LogFactory.getLog(getClass()); + private static final Log log = LogFactory.getLog(SimpleErrorReporter.class); /** * Constructor. @@ -68,11 +68,11 @@ public class SimpleErrorReporter implements ErrorReporter, Serializable { } else if (errCtx instanceof State) { //determineInitialStates //determineTargetStates - msg.append("State " + LogUtils.getTTPath((State) errCtx)); + msg.append("State ").append(LogUtils.getTTPath((State) errCtx)); } } else if (errCode == ErrorConstants.UNKNOWN_ACTION) { //executeActionList - msg.append("Action: " + errCtx.getClass().getName()); + msg.append("Action: ").append(errCtx.getClass().getName()); } else if (errCode == ErrorConstants.ILLEGAL_CONFIG) { //isLegalConfig if (errCtx instanceof Map.Entry) { //unchecked cast below @@ -80,7 +80,7 @@ public class SimpleErrorReporter implements ErrorReporter, Serializable { (Map.Entry<EnterableState, Set<EnterableState>>) errCtx; EnterableState es = badConfigMap.getKey(); Set<EnterableState> vals = badConfigMap.getValue(); - msg.append(LogUtils.getTTPath(es) + " : ["); + msg.append(LogUtils.getTTPath(es)).append(" : ["); for (Iterator<EnterableState> i = vals.iterator(); i.hasNext();) { EnterableState ex = i.next(); msg.append(LogUtils.getTTPath(ex)); @@ -104,11 +104,11 @@ public class SimpleErrorReporter implements ErrorReporter, Serializable { } else if (errCode == ErrorConstants.EXPRESSION_ERROR) { if (errCtx instanceof Executable) { TransitionTarget parent = ((Executable) errCtx).getParent(); - msg.append("Expression error inside " + LogUtils.getTTPath(parent)); + msg.append("Expression error inside ").append(LogUtils.getTTPath(parent)); } else if (errCtx instanceof Data) { // Data expression error - msg.append("Expression error for data element with id "+((Data)errCtx).getId()); + msg.append("Expression error for data element with id ").append(((Data) errCtx).getId()); } else if (errCtx instanceof SCXML) { // Global Script http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java b/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java index 451bfab..4ad7730 100644 --- a/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java +++ b/src/main/java/org/apache/commons/scxml2/env/SimpleSCXMLListener.java @@ -34,7 +34,7 @@ public class SimpleSCXMLListener implements SCXMLListener, Serializable { /** Serial version UID. */ private static final long serialVersionUID = 1L; /** Log. */ - private Log log = LogFactory.getLog(getClass()); + private static final Log log = LogFactory.getLog(SimpleSCXMLListener.class); /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/SimpleXMLReporter.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/SimpleXMLReporter.java b/src/main/java/org/apache/commons/scxml2/env/SimpleXMLReporter.java index e12ad02..e293c00 100644 --- a/src/main/java/org/apache/commons/scxml2/env/SimpleXMLReporter.java +++ b/src/main/java/org/apache/commons/scxml2/env/SimpleXMLReporter.java @@ -37,7 +37,7 @@ public class SimpleXMLReporter implements XMLReporter, Serializable { private static final long serialVersionUID = 1L; /** Log. */ - private Log log = LogFactory.getLog(getClass()); + private static final Log log = LogFactory.getLog(SimpleXMLReporter.class); /** * Constructor. http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/Tracer.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/Tracer.java b/src/main/java/org/apache/commons/scxml2/env/Tracer.java index 631550b..d8955f1 100644 --- a/src/main/java/org/apache/commons/scxml2/env/Tracer.java +++ b/src/main/java/org/apache/commons/scxml2/env/Tracer.java @@ -41,13 +41,13 @@ public class Tracer implements ErrorHandler, ErrorReporter, /** Serial version UID. */ private static final long serialVersionUID = 1L; /** ErrorHandler delegate. */ - private ErrorHandler errHandler; + private final ErrorHandler errHandler; /** ErrorReporter delegate. */ - private ErrorReporter errReporter; + private final ErrorReporter errReporter; /** SCXMLListener delegate. */ - private SCXMLListener scxmlListener; + private final SCXMLListener scxmlListener; /** XMLReporter delegate. */ - private XMLReporter xmlReporter; + private final XMLReporter xmlReporter; /** * Constructor. http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/URLResolver.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/URLResolver.java b/src/main/java/org/apache/commons/scxml2/env/URLResolver.java index ba7dc47..6e2447b 100644 --- a/src/main/java/org/apache/commons/scxml2/env/URLResolver.java +++ b/src/main/java/org/apache/commons/scxml2/env/URLResolver.java @@ -35,7 +35,7 @@ public class URLResolver implements PathResolver, Serializable { private static final long serialVersionUID = 1L; /** Implementation independent log category. */ - private Log log = LogFactory.getLog(PathResolver.class); + private static final Log log = LogFactory.getLog(PathResolver.class); /** The base URL to resolve against. */ private URL baseURL = null; http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java index d3ea5db..e1bf007 100644 --- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java +++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContextBinding.java @@ -68,7 +68,7 @@ public class GroovyContextBinding extends Binding implements Serializable { @Override public Map<String, Object> getVariables() { - return new LinkedHashMap<String, Object>(context.getVars()); + return new LinkedHashMap<>(context.getVars()); } @Override http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java index 111ce0c..e26aaaf 100644 --- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java +++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyEvaluator.java @@ -21,7 +21,6 @@ import groovy.lang.Script; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -45,11 +44,6 @@ public class GroovyEvaluator extends AbstractBaseEvaluator { /** Serial version UID. */ private static final long serialVersionUID = 1L; - /** - * Unique context variable name used for temporary reference to assign data (thus must be a valid variable name) - */ - private static final String ASSIGN_VARIABLE_NAME = "a"+UUID.randomUUID().toString().replace('-','x'); - public static final String SUPPORTED_DATA_MODEL = "groovy"; public static class GroovyEvaluatorProvider implements EvaluatorProvider { @@ -241,25 +235,6 @@ public class GroovyEvaluator extends AbstractBaseEvaluator { } /** - * @see Evaluator#evalAssign(Context, String, Object) - */ - public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException { - final StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME); - try { - ctx.getVars().put(ASSIGN_VARIABLE_NAME, data); - eval(ctx, sb.toString()); - } catch (SCXMLExpressionException e) { - if (e.getCause() != null && e.getCause() != null && e.getCause().getMessage() != null) { - throw new SCXMLExpressionException("Error evaluating assign to location=\"" + location + "\": " + e.getCause().getMessage()); - } - throw e; - } - finally { - ctx.getVars().remove(ASSIGN_VARIABLE_NAME); - } - } - - /** * @see Evaluator#evalScript(Context, String) */ @Override http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java index e9424e0..2c8764d 100644 --- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java +++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyExtendableScriptCache.java @@ -96,18 +96,12 @@ public class GroovyExtendableScriptCache implements Serializable { public static final String DEFAULT_SCRIPT_CODE_BASE = "/groovy/scxml/script"; /** Default factory for the Groovy parent ClassLoader, returning this class its ClassLoader */ - public static final ParentClassLoaderFactory DEFAULT_PARENT_CLASS_LOADER_FACTORY = new ParentClassLoaderFactory() { - public ClassLoader getClassLoader() { - return GroovyExtendableScriptCache.class.getClassLoader(); - } - }; + public static final ParentClassLoaderFactory DEFAULT_PARENT_CLASS_LOADER_FACTORY = + (ParentClassLoaderFactory) GroovyExtendableScriptCache.class::getClassLoader; /** Default factory for the Groovy CompilerConfiguration, returning a new and unmodified CompilerConfiguration instance */ - public static final CompilerConfigurationFactory DEFAULT_COMPILER_CONFIGURATION_FACTORY = new CompilerConfigurationFactory() { - public CompilerConfiguration getCompilerConfiguration() { - return new CompilerConfiguration(); - } - }; + public static final CompilerConfigurationFactory DEFAULT_COMPILER_CONFIGURATION_FACTORY = + (CompilerConfigurationFactory) CompilerConfiguration::new; protected static class ScriptCacheElement implements Serializable { private static final long serialVersionUID = 1L; @@ -170,7 +164,7 @@ public class GroovyExtendableScriptCache implements Serializable { } } - private final LinkedHashMap<ScriptCacheElement, ScriptCacheElement> scriptCache = new LinkedHashMap<ScriptCacheElement, ScriptCacheElement>(); + private final LinkedHashMap<ScriptCacheElement, ScriptCacheElement> scriptCache = new LinkedHashMap<>(); private String scriptCodeBase = DEFAULT_SCRIPT_CODE_BASE; private String scriptBaseClass; @@ -239,11 +233,8 @@ public class GroovyExtendableScriptCache implements Serializable { compilerConfiguration.setScriptBaseClass(getScriptBaseClass()); } - groovyClassLoader = AccessController.doPrivileged(new PrivilegedAction<GroovyClassLoader>() { - public GroovyClassLoader run() { - return new GroovyClassLoader(getParentClassLoaderFactory().getClassLoader(), compilerConfiguration); - } - }); + groovyClassLoader = AccessController.doPrivileged((PrivilegedAction<GroovyClassLoader>) + () -> new GroovyClassLoader(getParentClassLoaderFactory().getClassLoader(), compilerConfiguration)); if (!scriptCache.isEmpty()) { // de-serialized: need to re-generate all previously compiled scripts (this can cause a hick-up...): for (ScriptCacheElement element : scriptCache.keySet()) { @@ -257,11 +248,8 @@ public class GroovyExtendableScriptCache implements Serializable { protected Class<Script> compileScript(final String scriptBaseClass, String scriptSource, final String scriptName) { final String script = preProcessScript(scriptSource); - GroovyCodeSource codeSource = AccessController.doPrivileged(new PrivilegedAction<GroovyCodeSource>() { - public GroovyCodeSource run() { - return new GroovyCodeSource(script, scriptName, getScriptCodeBase()); - } - }); + GroovyCodeSource codeSource = AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) + () -> new GroovyCodeSource(script, scriptName, getScriptCodeBase())); String currentScriptBaseClass = compilerConfiguration.getScriptBaseClass(); try { http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java index 5980211..cdd1dcb 100644 --- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java +++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovySCXMLScript.java @@ -32,8 +32,7 @@ import org.apache.commons.scxml2.Builtin; */ public abstract class GroovySCXMLScript extends Script { - GroovyContext context; - GroovyContextBinding binding; + private GroovyContext context; protected GroovySCXMLScript() { super(null); @@ -42,8 +41,7 @@ public abstract class GroovySCXMLScript extends Script { @Override public void setBinding(final Binding binding) { super.setBinding(binding); - this.binding = (GroovyContextBinding)binding; - this.context = this.binding.getContext(); + this.context = ((GroovyContextBinding) binding).getContext(); } /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java b/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java index dc9ab7c..0132142 100644 --- a/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java +++ b/src/main/java/org/apache/commons/scxml2/env/javascript/JSBindings.java @@ -147,8 +147,8 @@ public class JSBindings implements Bindings { * @param toMerge the map of variables to merge */ @Override - public void putAll(Map<? extends String, ? extends Object> toMerge) { - for (Map.Entry<? extends String, ? extends Object> entry : toMerge.entrySet()) { + public void putAll(Map<? extends String, ?> toMerge) { + for (Map.Entry<? extends String, ?> entry : toMerge.entrySet()) { put(entry.getKey(), entry.getValue()); } } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java index 91ec4a8..1ec2d58 100644 --- a/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java +++ b/src/main/java/org/apache/commons/scxml2/env/javascript/JSEvaluator.java @@ -19,7 +19,6 @@ package org.apache.commons.scxml2.env.javascript; import java.io.IOException; import java.util.List; -import java.util.UUID; import javax.script.Bindings; import javax.script.ScriptContext; @@ -55,11 +54,6 @@ import org.apache.commons.scxml2.model.SCXML; */ public class JSEvaluator extends AbstractBaseEvaluator { - /** - * Unique context variable name used for temporary reference to assign data (thus must be a valid variable name) - */ - private static final String ASSIGN_VARIABLE_NAME = "a"+UUID.randomUUID().toString().replace('-','x'); - public static final String SUPPORTED_DATA_MODEL = Evaluator.ECMASCRIPT_DATA_MODEL; public static class JSEvaluatorProvider implements EvaluatorProvider { @@ -265,24 +259,6 @@ public class JSEvaluator extends AbstractBaseEvaluator { } /** - * @see Evaluator#evalAssign(Context, String, Object) - */ - public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException { - StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME); - try { - ctx.getVars().put(ASSIGN_VARIABLE_NAME, data); - eval(ctx, sb.toString()); - } catch (SCXMLExpressionException e) { - if (e.getCause() != null && e.getCause() != null && e.getCause().getMessage() != null) { - throw new SCXMLExpressionException("Error evaluating assign to location=\"" + location + "\": " + e.getCause().getMessage()); - } - throw e; - } finally { - ctx.getVars().remove(ASSIGN_VARIABLE_NAME); - } - } - - /** * Executes the Javascript script using the <code>eval()</code> method * * @param ctx SCXML context. http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/javascript/init_global.js ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/javascript/init_global.js b/src/main/java/org/apache/commons/scxml2/env/javascript/init_global.js index fccb6cb..cbaa1f0 100644 --- a/src/main/java/org/apache/commons/scxml2/env/javascript/init_global.js +++ b/src/main/java/org/apache/commons/scxml2/env/javascript/init_global.js @@ -105,7 +105,7 @@ Object.defineProperties(this, { }, writable : false, configurable : false, - enumeratable : false, + enumeratable : false }, "_event": { http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java b/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java index 5ff6440..ea7f5a8 100644 --- a/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java +++ b/src/main/java/org/apache/commons/scxml2/env/jexl/JexlEvaluator.java @@ -18,7 +18,6 @@ package org.apache.commons.scxml2.env.jexl; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import org.apache.commons.jexl3.JexlBuilder; import org.apache.commons.jexl3.JexlExpression; @@ -45,11 +44,6 @@ public class JexlEvaluator extends AbstractBaseEvaluator { /** Serial version UID. */ private static final long serialVersionUID = 1L; - /** - * Unique context variable name used for temporary reference to assign data (thus must be a valid variable name) - */ - private static final String ASSIGN_VARIABLE_NAME = "a"+UUID.randomUUID().toString().replace('-','x'); - public static final String SUPPORTED_DATA_MODEL = "jexl"; public static class JexlEvaluatorProvider implements EvaluatorProvider { @@ -90,7 +84,7 @@ public class JexlEvaluator extends AbstractBaseEvaluator { private transient volatile JexlEngine jexlEngine; /** The current JexlEngine silent mode, stored locally to be reapplied after deserialization of the engine */ - private boolean jexlEngineSilent; + private final boolean jexlEngineSilent; /** The current JexlEngine strict mode, stored locally to be reapplied after deserialization of the engine */ private boolean jexlEngineStrict; @@ -100,7 +94,6 @@ public class JexlEvaluator extends AbstractBaseEvaluator { } public JexlEvaluator(final boolean strict) { - super(); jexlEngineStrict = strict; // create the internal JexlEngine initially jexlEngine = getJexlEngine(); @@ -181,25 +174,6 @@ public class JexlEvaluator extends AbstractBaseEvaluator { } /** - * @see Evaluator#evalAssign(Context, String, Object) - */ - public void evalAssign(final Context ctx, final String location, final Object data) throws SCXMLExpressionException { - StringBuilder sb = new StringBuilder(location).append("=").append(ASSIGN_VARIABLE_NAME); - try { - ctx.getVars().put(ASSIGN_VARIABLE_NAME, data); - eval(ctx, sb.toString()); - } catch (SCXMLExpressionException e) { - if (e.getCause() != null && e.getCause() != null && e.getCause().getMessage() != null) { - throw new SCXMLExpressionException("Error evaluating assign to location=\"" + location + "\": " + e.getCause().getMessage()); - } - throw e; - } - finally { - ctx.getVars().remove(ASSIGN_VARIABLE_NAME); - } - } - - /** * @see Evaluator#evalScript(Context, String) */ public Object evalScript(final Context ctx, final String script) http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/invoke/InvokerException.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/invoke/InvokerException.java b/src/main/java/org/apache/commons/scxml2/invoke/InvokerException.java index bb25161..937e67f 100644 --- a/src/main/java/org/apache/commons/scxml2/invoke/InvokerException.java +++ b/src/main/java/org/apache/commons/scxml2/invoke/InvokerException.java @@ -29,13 +29,6 @@ public class InvokerException extends Exception { private static final long serialVersionUID = 1L; /** - * @see java.lang.Exception#Exception() - */ - public InvokerException() { - super(); - } - - /** * @see java.lang.Exception#Exception(java.lang.String) * @param message The error message */ http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java b/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java index 9277e0a..5cdcb63 100644 --- a/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java +++ b/src/main/java/org/apache/commons/scxml2/invoke/SimpleSCXMLInvoker.java @@ -94,12 +94,8 @@ public class SimpleSCXMLInvoker implements Invoker, Serializable { SCXML scxml; try { scxml = SCXMLReader.read(new URL(url)); - } catch (ModelException me) { + } catch (ModelException | IOException | XMLStreamException me) { throw new InvokerException(me.getMessage(), me.getCause()); - } catch (IOException ioe) { - throw new InvokerException(ioe.getMessage(), ioe.getCause()); - } catch (XMLStreamException xse) { - throw new InvokerException(xse.getMessage(), xse.getCause()); } execute(scxml, params); } @@ -113,12 +109,8 @@ public class SimpleSCXMLInvoker implements Invoker, Serializable { SCXML scxml; try { scxml = SCXMLReader.read(new StringReader(content)); - } catch (ModelException me) { + } catch (ModelException | IOException | XMLStreamException me) { throw new InvokerException(me.getMessage(), me.getCause()); - } catch (IOException ioe) { - throw new InvokerException(ioe.getMessage(), ioe.getCause()); - } catch (XMLStreamException xse) { - throw new InvokerException(xse.getMessage(), xse.getCause()); } execute(scxml, params); } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/io/ContentParser.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/io/ContentParser.java b/src/main/java/org/apache/commons/scxml2/io/ContentParser.java index a4b07ad..800d082 100644 --- a/src/main/java/org/apache/commons/scxml2/io/ContentParser.java +++ b/src/main/java/org/apache/commons/scxml2/io/ContentParser.java @@ -53,7 +53,7 @@ public class ContentParser { /** * Jackson JSON ObjectMapper */ - private ObjectMapper jsonObjectMapper; + private final ObjectMapper jsonObjectMapper; /** * Default constructor initializing a Jackson ObjectMapper allowing embedded comments, including YAML style @@ -183,12 +183,10 @@ public class ContentParser { * @throws IOException */ public Node parseXml(final String xmlString) throws IOException { - Document doc = null; + Document doc; try { doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlString); - } catch (SAXException e) { - throw new IOException(e); - } catch (ParserConfigurationException e) { + } catch (SAXException | ParserConfigurationException e) { throw new IOException(e); } return doc != null ? doc.getDocumentElement() : null; http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java b/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java index 770cdaf..fc9a451 100644 --- a/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java +++ b/src/main/java/org/apache/commons/scxml2/io/ModelUpdater.java @@ -158,13 +158,7 @@ final class ModelUpdater { scxml.setInitialTransition(initialTransition); Map<String, TransitionTarget> targets = scxml.getTargets(); - for (EnterableState es : scxml.getChildren()) { - if (es instanceof State) { - updateState((State) es, targets); - } else if (es instanceof Parallel) { - updateParallel((Parallel) es, targets); - } - } + updateEnterableStates(scxml.getChildren(), targets); scxml.getInitialTransition().setObservableId(1); initObservables(scxml.getChildren(), 2); @@ -281,13 +275,7 @@ final class ModelUpdater { } } - for (EnterableState es : children) { - if (es instanceof State) { - updateState((State) es, targets); - } else if (es instanceof Parallel) { - updateParallel((Parallel) es, targets); - } - } + updateEnterableStates(children, targets); } /** @@ -299,13 +287,7 @@ final class ModelUpdater { */ private static void updateParallel(final Parallel parallel, final Map<String, TransitionTarget> targets) throws ModelException { - for (EnterableState es : parallel.getChildren()) { - if (es instanceof State) { - updateState((State) es, targets); - } else if (es instanceof Parallel) { - updateParallel((Parallel) es, targets); - } - } + updateEnterableStates(parallel.getChildren(), targets); for (Transition transition : parallel.getTransitionsList()) { updateTransition(transition, targets); } @@ -317,6 +299,25 @@ final class ModelUpdater { } /** + * Update the EnterableState objects (part of post-read processing). + * + * @param states The EnterableState objects + * @param targets The global Map of all transition targets + * @throws ModelException If the object model is flawed + */ + private static void updateEnterableStates(final List<EnterableState> states, + final Map<String, TransitionTarget> targets) + throws ModelException { + for (EnterableState es : states) { + if (es instanceof State) { + updateState((State) es, targets); + } else if (es instanceof Parallel) { + updateParallel((Parallel) es, targets); + } + } + } + + /** * Update this History object (part of post-read processing). * * @param history The History object http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java b/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java index 4b3c8dd..8402725 100644 --- a/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java +++ b/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java @@ -855,13 +855,12 @@ public final class SCXMLReader { * @param configuration The {@link Configuration} to use while parsing. * @param parent The parent {@link State} for this final (null for top level state). * - * @throws IOException An IO error during parsing. * @throws XMLStreamException An exception processing the underlying {@link XMLStreamReader}. * @throws ModelException The Commons SCXML object model is incomplete or inconsistent (includes * errors in the SCXML document that may not be identified by the schema). */ private static void readDoneData(final XMLStreamReader reader, final Configuration configuration, final Final parent) - throws XMLStreamException, ModelException, IOException { + throws XMLStreamException, ModelException { DoneData doneData = new DoneData(); parent.setDoneData(doneData); @@ -911,14 +910,11 @@ public final class SCXMLReader { * @param src The "src" attribute value. * @param ts The parent {@link TransitionalState} that specifies this "src" attribute. * - * @throws IOException An IO error during parsing. - * @throws ModelException The Commons SCXML object model is incomplete or inconsistent (includes - * errors in the SCXML document that may not be identified by the schema). * @throws XMLStreamException An exception processing the underlying {@link XMLStreamReader}. */ private static void readTransitionalStateSrc(final Configuration configuration, final String src, final TransitionalState ts) - throws IOException, ModelException, XMLStreamException { + throws ModelException { // Check for URI fragment String[] fragments = src.split("#", 2); @@ -1546,7 +1542,7 @@ public final class SCXMLReader { throws XMLStreamException, ModelException { if (executable instanceof Finalize) { - // http://www.w3.org/TR/2013/WD-scxml-20130801/#finalize + // https://www.w3.org/TR/2015/REC-scxml-20150901/#finalize // [...] the executable content inside <finalize> MUST NOT raise events or invoke external actions. // In particular, the <send> and <raise> elements MUST NOT occur. reportIgnoredElement(reader, configuration, SCXMLConstants.ELEM_FINALIZE, SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_RAISE); @@ -1751,7 +1747,7 @@ public final class SCXMLReader { throws XMLStreamException, ModelException { if (executable instanceof Finalize) { - // http://www.w3.org/TR/2013/WD-scxml-20130801/#finalize + // https://www.w3.org/TR/2015/REC-scxml-20150901/#finalize // [...] the executable content inside <finalize> MUST NOT raise events or invoke external actions. // In particular, the <send> and <raise> elements MUST NOT occur. reportIgnoredElement(reader, configuration, SCXMLConstants.ELEM_FINALIZE, SCXMLConstants.XMLNS_SCXML, SCXMLConstants.ELEM_SEND); @@ -1913,8 +1909,8 @@ public final class SCXMLReader { /** * Read the contents of the initial <script> element. - * @see <a href="http://www.w3.org/TR/2013/WD-scxml-20130801/#scxml"> - * http://www.w3.org/TR/2013/WD-scxml-20130801/#scxml<a> section 3.2.2 + * @see <a href="https://www.w3.org/TR/2015/REC-scxml-20150901/#scxml"> + * https://www.w3.org/TR/2015/REC-scxml-20150901/#scxml<a> section 3.2.2 * * @param reader The {@link XMLStreamReader} providing the SCXML document to parse. * @param configuration The {@link Configuration} to use while parsing. @@ -2016,10 +2012,12 @@ public final class SCXMLReader { actionWrapper.getNamespaces().putAll(namespaces); } + Map<String, String> attributes = new HashMap<>(); for (int i = 0; i < reader.getAttributeCount(); i++) { String name = reader.getAttributeLocalName(i); String qname = createQualifiedName(reader.getAttributePrefix(i), name); String value = reader.getAttributeValue(i); + attributes.put(qname, value); String setter = "set" + name.substring(0, 1).toUpperCase() + name.substring(1); Method method; try { @@ -2036,6 +2034,9 @@ public final class SCXMLReader { + className, iae); } } + if (!attributes.isEmpty()) { + actionWrapper.setAttributes(attributes); + } // Add any body content if necessary if (action instanceof ParsedValueContainer) { @@ -2721,7 +2722,7 @@ public final class SCXMLReader { */ boolean strict; - ContentParser contentParser; + final ContentParser contentParser; /* * Public constructors @@ -2881,7 +2882,7 @@ public final class SCXMLReader { this.factoryId = factoryId; this.factoryClassLoader = factoryClassLoader; this.allocator = allocator; - this.properties = (properties == null ? new HashMap<String, Object>() : properties); + this.properties = (properties == null ? new HashMap<>() : properties); this.resolver = resolver; this.reporter = reporter; this.encoding = encoding; @@ -2889,7 +2890,7 @@ public final class SCXMLReader { this.validate = validate; this.pathResolver = pathResolver; this.parent = parent; - this.customActions = (customActions == null ? new ArrayList<CustomAction>() : customActions); + this.customActions = (customActions == null ? new ArrayList<>() : customActions); this.customActionClassLoader = customActionClassLoader; this.useContextClassLoaderForCustomActions = useContextClassLoaderForCustomActions; this.silent = silent; http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java b/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java index d3f7b33..940bf4e 100644 --- a/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java +++ b/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java @@ -55,7 +55,6 @@ import org.apache.commons.scxml2.model.ElseIf; import org.apache.commons.scxml2.model.EnterableState; import org.apache.commons.scxml2.model.JsonValue; import org.apache.commons.scxml2.model.NodeListValue; -import org.apache.commons.scxml2.model.NodeTextValue; import org.apache.commons.scxml2.model.NodeValue; import org.apache.commons.scxml2.model.ParsedValue; import org.apache.commons.scxml2.model.Raise; @@ -456,15 +455,7 @@ public class SCXMLWriter { // Children writeDatamodel(writer, scxml.getDatamodel()); - for (EnterableState es : scxml.getChildren()) { - if (es instanceof Final) { - writeFinal(writer, (Final) es); - } else if (es instanceof State) { - writeState(writer, (State) es); - } else if (es instanceof Parallel) { - writeParallel(writer, (Parallel) es); - } - } + writeEnterableStates(writer, scxml.getChildren()); // End writer.writeEndElement(); @@ -539,15 +530,7 @@ public class SCXMLWriter { writeInvoke(writer, inv); } - for (EnterableState es : state.getChildren()) { - if (es instanceof Final) { - writeFinal(writer, (Final) es); - } else if (es instanceof State) { - writeState(writer, (State) es); - } else if (es instanceof Parallel) { - writeParallel(writer, (Parallel) es); - } - } + writeEnterableStates(writer, state.getChildren()); for (OnExit onexit : state.getOnExits()) { writeOnExit(writer, onexit); @@ -583,15 +566,7 @@ public class SCXMLWriter { writeInvoke(writer, inv); } - for (EnterableState es : parallel.getChildren()) { - if (es instanceof Final) { - writeFinal(writer, (Final) es); - } else if (es instanceof State) { - writeState(writer, (State) es); - } else if (es instanceof Parallel) { - writeParallel(writer, (Parallel) es); - } - } + writeEnterableStates(writer, parallel.getChildren()); for (OnExit onexit : parallel.getOnExits()) { writeOnExit(writer, onexit); @@ -620,13 +595,7 @@ public class SCXMLWriter { } if (end.getDoneData() != null) { writer.writeStartElement(SCXMLConstants.ELEM_DONEDATA); - for (Param p : end.getDoneData().getParams()) { - writer.writeStartElement(SCXMLConstants.ELEM_PARAM); - writeAV(writer, SCXMLConstants.ATTR_NAME, p.getName()); - writeAV(writer, SCXMLConstants.ATTR_LOCATION, p.getLocation()); - writeAV(writer, SCXMLConstants.ATTR_EXPR, escapeXML(p.getExpr())); - writer.writeEndElement(); - } + writeParams(writer, end.getDoneData().getParams()); writeContent(writer, end.getDoneData().getContent()); writer.writeEndElement(); } @@ -634,6 +603,27 @@ public class SCXMLWriter { } /** + * Write out the {@link EnterableState} objects into its serialization. + * + * @param writer The {@link XMLStreamWriter} in use for the serialization. + * @param states The {@link EnterableState}s to serialize. + * + * @throws XMLStreamException An exception processing the underlying {@link XMLStreamWriter}. + */ + private static void writeEnterableStates(final XMLStreamWriter writer, final List<EnterableState> states) + throws XMLStreamException { + for (EnterableState es : states) { + if (es instanceof Final) { + writeFinal(writer, (Final) es); + } else if (es instanceof State) { + writeState(writer, (State) es); + } else if (es instanceof Parallel) { + writeParallel(writer, (Parallel) es); + } + } + } + + /** * Write out this {@link Initial} object into its serialization as the corresponding <initial> element. * * @param writer The {@link XMLStreamWriter} in use for the serialization. @@ -765,13 +755,7 @@ public class SCXMLWriter { writeAV(writer, SCXMLConstants.ATTR_AUTOFORWARD, invoke.getAutoForward()); writeAV(writer, SCXMLConstants.ATTR_NAMELIST, invoke.getNamelist()); - for (Param p : invoke.getParams()) { - writer.writeStartElement(SCXMLConstants.ELEM_PARAM); - writeAV(writer, SCXMLConstants.ATTR_NAME, p.getName()); - writeAV(writer, SCXMLConstants.ATTR_LOCATION, p.getLocation()); - writeAV(writer, SCXMLConstants.ATTR_EXPR, escapeXML(p.getExpr())); - writer.writeEndElement(); - } + writeParams(writer, invoke.getParams()); writeFinalize(writer, invoke.getFinalize()); writeContent(writer, invoke.getContent()); @@ -911,16 +895,29 @@ public class SCXMLWriter { writeAV(writer, SCXMLConstants.ATTR_NAMELIST, send.getNamelist()); writeAV(writer, SCXMLConstants.ATTR_HINTS, send.getHints()); - for (Param p : send.getParams()) { + writeParams(writer, send.getParams()); + writeContent(writer, send.getContent()); + + writer.writeEndElement(); + } + + /** + * Write out the {@link Param} objects into its serialization. + * + * @param writer The {@link XMLStreamWriter} in use for the serialization. + * @param params The {@link Param}s to serialize. + * + * @throws XMLStreamException An exception processing the underlying {@link XMLStreamWriter}. + */ + private static void writeParams(final XMLStreamWriter writer, final List<Param> params) + throws XMLStreamException { + for (Param p : params) { writer.writeStartElement(SCXMLConstants.ELEM_PARAM); writeAV(writer, SCXMLConstants.ATTR_NAME, p.getName()); writeAV(writer, SCXMLConstants.ATTR_LOCATION, p.getLocation()); writeAV(writer, SCXMLConstants.ATTR_EXPR, escapeXML(p.getExpr())); writer.writeEndElement(); } - writeContent(writer, send.getContent()); - - writer.writeEndElement(); } /** @@ -1202,14 +1199,10 @@ public class SCXMLWriter { TransformerFactory tfFactory = TransformerFactory.newInstance(); transformer = tfFactory.newTransformer(); transformer.setOutputProperties(outputProps); - } catch (TransformerFactoryConfigurationError t) { + } catch (TransformerFactoryConfigurationError | TransformerConfigurationException t) { org.apache.commons.logging.Log log = LogFactory.getLog(SCXMLWriter.class); log.error(t.getMessage(), t); return null; - } catch (TransformerConfigurationException e) { - org.apache.commons.logging.Log log = LogFactory.getLog(SCXMLWriter.class); - log.error(e.getMessage(), e); - return null; } return transformer; } @@ -1359,7 +1352,7 @@ public class SCXMLWriter { this.factoryId = factoryId; this.factoryClassLoader = factoryClassLoader; - this.properties = (properties == null ? new HashMap<String, Object>() : properties); + this.properties = (properties == null ? new HashMap<>() : properties); this.encoding = encoding; this.usePrettyPrint = usePrettyPrint; this.closeUnderlyingWhenDone = closeUnderlyingWhenDone; http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/Action.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/Action.java b/src/main/java/org/apache/commons/scxml2/model/Action.java index ee2f401..ed32bde 100644 --- a/src/main/java/org/apache/commons/scxml2/model/Action.java +++ b/src/main/java/org/apache/commons/scxml2/model/Action.java @@ -17,7 +17,6 @@ package org.apache.commons.scxml2.model; import java.io.Serializable; -import java.util.Map; import org.apache.commons.scxml2.ActionExecutionContext; import org.apache.commons.scxml2.SCXMLExpressionException; @@ -79,15 +78,7 @@ public abstract class Action implements Serializable { throw new ModelException("Action " + this.getClass().getName() + " instance missing required parent TransitionTarget"); } - TransitionTarget tt = parent.getParent(); - if (tt instanceof EnterableState) { - return (EnterableState)tt; - } else if (tt instanceof History) { - return ((History)tt).getParent(); - } else { - throw new ModelException("Unknown TransitionTarget subclass:" - + (tt != null ? tt.getClass().getName() : "(null)")); - } + return parent.getParent(); } /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/Datamodel.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/Datamodel.java b/src/main/java/org/apache/commons/scxml2/model/Datamodel.java index d3b9a53..0394e9f 100644 --- a/src/main/java/org/apache/commons/scxml2/model/Datamodel.java +++ b/src/main/java/org/apache/commons/scxml2/model/Datamodel.java @@ -36,13 +36,13 @@ public class Datamodel implements Serializable { * The set of <data> elements, parsed as Elements, that are * children of this <datamodel> element. */ - private List<Data> data; + private final List<Data> data; /** * Constructor. */ public Datamodel() { - this.data = new ArrayList<Data>(); + this.data = new ArrayList<>(); } /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/DocumentOrder.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/DocumentOrder.java b/src/main/java/org/apache/commons/scxml2/model/DocumentOrder.java index e469e91..80f0c85 100644 --- a/src/main/java/org/apache/commons/scxml2/model/DocumentOrder.java +++ b/src/main/java/org/apache/commons/scxml2/model/DocumentOrder.java @@ -29,19 +29,9 @@ import java.util.Comparator; */ public interface DocumentOrder { - Comparator<DocumentOrder> documentOrderComparator = new Comparator<DocumentOrder>() { - @Override - public int compare(final DocumentOrder o1, final DocumentOrder o2) { - return o1.getOrder() - o2.getOrder(); - } - }; + Comparator<DocumentOrder> documentOrderComparator = Comparator.comparingInt(DocumentOrder::getOrder); - Comparator<DocumentOrder> reverseDocumentOrderComparator = new Comparator<DocumentOrder>() { - @Override - public int compare(final DocumentOrder o1, final DocumentOrder o2) { - return o2.getOrder() - o1.getOrder(); - } - }; + Comparator<DocumentOrder> reverseDocumentOrderComparator = (o1, o2) -> o2.getOrder() - o1.getOrder(); /** * @return the relative document order within the SCXML document of this element http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/EnterableState.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/EnterableState.java b/src/main/java/org/apache/commons/scxml2/model/EnterableState.java index cba7fb6..39f5917 100644 --- a/src/main/java/org/apache/commons/scxml2/model/EnterableState.java +++ b/src/main/java/org/apache/commons/scxml2/model/EnterableState.java @@ -33,18 +33,17 @@ public abstract class EnterableState extends TransitionTarget implements Documen * List of optional OnEntry elements holding executable content to be run upon * entering this transition target. */ - private List<OnEntry> onEntries; + private final List<OnEntry> onEntries; /** * List of optional OnExit elements holding executable content to be run upon * exiting this transition target. */ - private List<OnExit> onExits; + private final List<OnExit> onExits; public EnterableState() { - super(); - onEntries = new ArrayList<OnEntry>(); - onExits = new ArrayList<OnExit>(); + onEntries = new ArrayList<>(); + onExits = new ArrayList<>(); } /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/Executable.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/Executable.java b/src/main/java/org/apache/commons/scxml2/model/Executable.java index eb5eec6..a141bde 100644 --- a/src/main/java/org/apache/commons/scxml2/model/Executable.java +++ b/src/main/java/org/apache/commons/scxml2/model/Executable.java @@ -31,7 +31,7 @@ public abstract class Executable implements Serializable { * The set of executable elements (those that inheriting from * Action) that are contained in this Executable. */ - private List<Action> actions; + private final List<Action> actions; /** * The parent container, for traceability. @@ -42,8 +42,7 @@ public abstract class Executable implements Serializable { * Constructor. */ public Executable() { - super(); - this.actions = new ArrayList<Action>(); + this.actions = new ArrayList<>(); } /** http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/Final.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/Final.java b/src/main/java/org/apache/commons/scxml2/model/Final.java index ff8f95d..bfc0a8e 100644 --- a/src/main/java/org/apache/commons/scxml2/model/Final.java +++ b/src/main/java/org/apache/commons/scxml2/model/Final.java @@ -90,7 +90,7 @@ public class Final extends EnterableState { Context ctx = exctx.getScInstance().getGlobalContext(); if (content != null) { if (content.getExpr() != null) { - Object evalResult = null; + Object evalResult; try { evalResult = eval.eval(ctx, content.getExpr()); } catch (SCXMLExpressionException e) { http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/Foreach.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/Foreach.java b/src/main/java/org/apache/commons/scxml2/model/Foreach.java index 9f15beb..73ace8f 100644 --- a/src/main/java/org/apache/commons/scxml2/model/Foreach.java +++ b/src/main/java/org/apache/commons/scxml2/model/Foreach.java @@ -46,10 +46,9 @@ public class Foreach extends Action implements ActionsContainer { * The set of executable elements (those that inheriting from * Action) that are contained in this <if> element. */ - private List<Action> actions; + private final List<Action> actions; public Foreach() { - super(); this.actions = new ArrayList<>(); } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/If.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/If.java b/src/main/java/org/apache/commons/scxml2/model/If.java index 7f90ade..0243bd9 100644 --- a/src/main/java/org/apache/commons/scxml2/model/If.java +++ b/src/main/java/org/apache/commons/scxml2/model/If.java @@ -51,7 +51,7 @@ public class If extends Action implements ActionsContainer { * The set of executable elements (those that inheriting from * Action) that are contained in this <if> element. */ - private List<Action> actions; + private final List<Action> actions; /** * The boolean value that dictates whether the particular child action @@ -64,7 +64,7 @@ public class If extends Action implements ActionsContainer { */ public If() { super(); - this.actions = new ArrayList<Action>(); + this.actions = new ArrayList<>(); this.execute = false; } http://git-wip-us.apache.org/repos/asf/commons-scxml/blob/05e94b82/src/main/java/org/apache/commons/scxml2/model/NodeTextValue.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/scxml2/model/NodeTextValue.java b/src/main/java/org/apache/commons/scxml2/model/NodeTextValue.java index af1c9b5..a798699 100644 --- a/src/main/java/org/apache/commons/scxml2/model/NodeTextValue.java +++ b/src/main/java/org/apache/commons/scxml2/model/NodeTextValue.java @@ -24,7 +24,7 @@ public class NodeTextValue implements ParsedValue { /** * the XML node as text */ - private String nodeText; + private final String nodeText; public NodeTextValue(final String nodeText) { this.nodeText = nodeText;