diff --git a/src/main/java/org/apache/commons/scxml2/SCInstance.java b/src/main/java/org/apache/commons/scxml2/SCInstance.java index f417e6a0f..967fef7e8 100644 --- a/src/main/java/org/apache/commons/scxml2/SCInstance.java +++ b/src/main/java/org/apache/commons/scxml2/SCInstance.java @@ -83,7 +83,7 @@ public class SCInstance implements Serializable { /** * Running status for this state machine */ - private boolean running; + private boolean runningStatus; /** * The SCXML I/O Processor for the internal event queue @@ -151,7 +151,7 @@ protected SCInstance(final SCXMLIOProcessor internalIOProcessor, final Evaluator * @throws ModelException if the state machine hasn't been setup for this instance */ protected void initialize() throws ModelException { - running = false; + runningStatus = false; if (stateMachine == null) { throw new ModelException(ERR_NO_STATE_MACHINE); } @@ -162,8 +162,7 @@ protected void initialize() throws ModelException { singleContext = true; } if (stateMachine.getDatamodelName() != null && !stateMachine.getDatamodelName().equals(evaluator.getSupportedDatamodel())) { - throw new ModelException("Incompatible SCXML document datamodel \""+stateMachine.getDatamodelName()+"\"" - + " for evaluator "+evaluator.getClass().getName()+" supported datamodel \""+evaluator.getSupportedDatamodel()+"\""); + showException(); } if (errorReporter == null) { throw new ModelException(ERR_NO_ERROR_REPORTER); @@ -177,6 +176,11 @@ protected void initialize() throws ModelException { initialized = true; } + private void showException() throws ModelException { + throw new ModelException("Incompatible SCXML document datamodel \""+stateMachine.getDatamodelName()+"\"" + + " for evaluator "+evaluator.getClass().getName()+" supported datamodel \""+evaluator.getSupportedDatamodel()+"\""); + } + protected void initializeDatamodel(final Map data) { if (globalContext == null) { // Clone root datamodel @@ -359,21 +363,25 @@ else if (datum.getParsedValue() != null) { setValue = true; } if (setValue) { - if (evaluator instanceof JSEvaluator) { - // the Javascript engine (Nashorn) may require special handling/wrapping of data objects which - // directly injecting them in the context. - try { - ((JSEvaluator)evaluator).injectData(ctx, datum.getId(), value); - } catch (final SCXMLExpressionException e) { - if (internalIOProcessor != null) { - internalIOProcessor.addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build()); - } - errorReporter.onError(ErrorConstants.EXPRESSION_ERROR, e.getMessage(), datum); - } - } else { - ctx.setLocal(datum.getId(), value); + injectContext(ctx, evaluator, errorReporter, datum, value); + } + } + } + + private void injectContext(Context ctx, Evaluator evaluator, ErrorReporter errorReporter, Data datum, Object value) { + if (evaluator instanceof JSEvaluator) { + // the Javascript engine (Nashorn) may require special handling/wrapping of data objects which + // directly injecting them in the context. + try { + ((JSEvaluator) evaluator).injectData(ctx, datum.getId(), value); + } catch (final SCXMLExpressionException e) { + if (internalIOProcessor != null) { + internalIOProcessor.addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build()); } + errorReporter.onError(ErrorConstants.EXPRESSION_ERROR, e.getMessage(), datum); } + } else { + ctx.setLocal(datum.getId(), value); } } @@ -395,7 +403,7 @@ public Status getCurrentStatus() { * @return Returns if the state machine is running */ public boolean isRunning() { - return running; + return runningStatus; } /** @@ -403,17 +411,17 @@ public boolean isRunning() { * @throws IllegalStateException Exception thrown if trying to start the state machine when in a Final state */ public void start() throws IllegalStateException { - if (!this.running && currentStatus.isFinal()) { + if (!this.runningStatus && currentStatus.isFinal()) { throw new IllegalStateException("The state machine is in a Final state and cannot be set running again"); } - this.running = true; + this.runningStatus = true; } /** * Stops the state machine, {@link #isRunning()} hereafter will return false */ public void stop() { - this.running = false; + this.runningStatus = false; } /** 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 6fb8cbce8..5512d1781 100644 --- a/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java +++ b/src/main/java/org/apache/commons/scxml2/env/SimpleDispatcher.java @@ -50,52 +50,7 @@ public class SimpleDispatcher implements EventDispatcher, Serializable { /** Serial version UID. */ private static final long serialVersionUID = 1L; - /** - * TimerTask implementation. - */ - class DelayedEventTask extends TimerTask { - - /** - * The ID of the <send> element. - */ - private final String id; - - /** - * The event - */ - private final TriggerEvent event; - - /** - * The target io processor - */ - private final SCXMLIOProcessor target; - - /** - * Constructor for events with payload. - * - * @param id The ID of the send element. - * @param event The event to be triggered. - * @param target The target io processor - */ - DelayedEventTask(final String id, final TriggerEvent event, final SCXMLIOProcessor target) { - this.id = id; - this.event = event; - this.target = target; - } - /** - * What to do when timer expires. - */ - @Override - public void run() { - timers.remove(id); - target.addEvent(event); - if (log.isDebugEnabled()) { - log.debug("Fired event '" + event.getName() + "' as scheduled by " - + " with id '" + id + "'"); - } - } - } /** Implementation independent log category. */ private static final Log log = LogFactory.getLog(EventDispatcher.class); @@ -237,3 +192,59 @@ else if (SCXMLIOProcessor.INTERNAL_EVENT_PROCESSOR.equals(target)) { } } +/** + * TimerTask implementation. + */ +class DelayedEventTask extends TimerTask { + + /** + * The ID of the <send> element. + */ + private final String id; + + /** Implementation independent log category. */ + private static final Log log = LogFactory.getLog(EventDispatcher.class); + + /** + * The Map of active Timers, keyed by + * <send> element ids. + */ + private final Map timers = Collections.synchronizedMap(new HashMap()); + + /** + * The event + */ + private final TriggerEvent event; + + /** + * The target io processor + */ + private final SCXMLIOProcessor target; + + /** + * Constructor for events with payload. + * + * @param id The ID of the send element. + * @param event The event to be triggered. + * @param target The target io processor + */ + DelayedEventTask(final String id, final TriggerEvent event, final SCXMLIOProcessor target) { + this.id = id; + this.event = event; + this.target = target; + } + + /** + * What to do when timer expires. + */ + @Override + public void run() { + timers.remove(id); + target.addEvent(event); + if (log.isDebugEnabled()) { + log.debug("Fired event '" + event.getName() + "' as scheduled by " + + " with id '" + id + "'"); + } + } +} + diff --git a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContext.java b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContext.java index d5191b4fb..e5000c6d7 100644 --- a/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContext.java +++ b/src/main/java/org/apache/commons/scxml2/env/groovy/GroovyContext.java @@ -35,8 +35,6 @@ */ public class GroovyContext extends SimpleContext { - private static final long serialVersionUID = 1L; - private static final Log log = LogFactory.getLog(GroovyContext.class); private String scriptBaseClass; @@ -80,14 +78,6 @@ public GroovyContext(final Context parent, final GroovyEvaluator evaluator) { this.evaluator = evaluator; } - protected GroovyEvaluator getGroovyEvaluator() { - return evaluator; - } - - protected void setGroovyEvaluator(final GroovyEvaluator evaluator) { - this.evaluator = evaluator; - } - @Override public Map getVars() { return vars; 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 897ba124f..d5e482bbb 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 @@ -46,6 +46,8 @@ public class GroovyEvaluator extends AbstractBaseEvaluator { public static final String SUPPORTED_DATA_MODEL = "groovy"; + private GroovyEvaluator evaluator; + public static class GroovyEvaluatorProvider implements EvaluatorProvider { @Override @@ -64,6 +66,15 @@ public Evaluator getEvaluator(final SCXML document) { } } + protected GroovyEvaluator getGroovyEvaluator() { + return evaluator; + } + + protected void setGroovyEvaluator(final GroovyEvaluator evaluator) { + this.evaluator = evaluator; + } + + /** Error message if evaluation context is not a GroovyContext. */ private static final String ERR_CTX_TYPE = "Error evaluating Groovy " + "expression, Context must be a org.apache.commons.scxml2.env.groovy.GroovyContext"; @@ -182,8 +193,8 @@ public Object eval(final Context ctx, final String expr) throws SCXMLExpressionE } final GroovyContext groovyCtx = (GroovyContext) ctx; - if (groovyCtx.getGroovyEvaluator() == null) { - groovyCtx.setGroovyEvaluator(this); + if (getGroovyEvaluator() == null) { + setGroovyEvaluator(this); } try { return getScript(getEffectiveContext(groovyCtx), groovyCtx.getScriptBaseClass(), expr).run(); @@ -208,8 +219,8 @@ public Boolean evalCond(final Context ctx, final String expr) throws SCXMLExpres } final GroovyContext groovyCtx = (GroovyContext) ctx; - if (groovyCtx.getGroovyEvaluator() == null) { - groovyCtx.setGroovyEvaluator(this); + if (getGroovyEvaluator() == null) { + setGroovyEvaluator(this); } try { final Object result = getScript(getEffectiveContext(groovyCtx), groovyCtx.getScriptBaseClass(), expr).run(); @@ -234,8 +245,8 @@ public Object evalScript(final Context ctx, final String scriptSource) throws SC } final GroovyContext groovyCtx = (GroovyContext) ctx; - if (groovyCtx.getGroovyEvaluator() == null) { - groovyCtx.setGroovyEvaluator(this); + if (getGroovyEvaluator() == null) { + setGroovyEvaluator(this); } try { final GroovyContext effective = getEffectiveContext(groovyCtx); diff --git a/src/main/java/org/apache/commons/scxml2/env/javascript/JSContext.java b/src/main/java/org/apache/commons/scxml2/env/javascript/JSContext.java index fb605b777..432967771 100644 --- a/src/main/java/org/apache/commons/scxml2/env/javascript/JSContext.java +++ b/src/main/java/org/apache/commons/scxml2/env/javascript/JSContext.java @@ -29,9 +29,6 @@ */ public class JSContext extends SimpleContext { - /** Serial version UID. */ - private static final long serialVersionUID = 1L; - /** * Default constructor - just invokes the SimpleContext default constructor. */ diff --git a/src/main/java/org/apache/commons/scxml2/env/jexl/JexlContext.java b/src/main/java/org/apache/commons/scxml2/env/jexl/JexlContext.java index f6745714c..8772562bb 100644 --- a/src/main/java/org/apache/commons/scxml2/env/jexl/JexlContext.java +++ b/src/main/java/org/apache/commons/scxml2/env/jexl/JexlContext.java @@ -28,9 +28,6 @@ public class JexlContext extends SimpleContext implements org.apache.commons.jexl3.JexlContext { - /** Serial version UID. */ - private static final long serialVersionUID = 1L; - /** * Constructor. */ diff --git a/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java b/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java index 23af0de4c..4f04c2f72 100644 --- a/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java +++ b/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java @@ -36,9 +36,6 @@ */ public class MinimalContext extends SimpleContext { - /** Serial version UID. */ - private static final long serialVersionUID = 1L; - private static Context getMinimalContextParent(final Context parent) { if (parent != null) { if (parent instanceof MinimalContext) { 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 19432e87c..8b950413d 100644 --- a/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java +++ b/src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java @@ -2469,7 +2469,7 @@ private static void reportIgnoredAttribute(final XMLStreamReader reader, final C * errors in the SCXML document that may not be identified by the schema). */ private static void reportConflictingAttribute(final XMLStreamReader reader, final Configuration configuration, - final String element, final String attr, final String conflictingAttr) + final String element, final String attr, final String conflictingAttr) throws XMLStreamException, ModelException { final StringBuilder sb = new StringBuilder(); @@ -2937,4 +2937,4 @@ public void setStrict(final boolean strict) { this.strict = strict; } } -} +} \ No newline at end of file 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 20ed05764..4e33bddb0 100644 --- a/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java +++ b/src/main/java/org/apache/commons/scxml2/io/SCXMLWriter.java @@ -1362,4 +1362,4 @@ public Configuration(final String factoryId, final ClassLoader factoryClassLoade } } } -} +} \ No newline at end of file