From c6e9aa47819f5681b187668753ae4a5e53f4e2bc Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Mon, 9 Dec 2013 17:34:51 +0100 Subject: Return false from Transition.hasOutcome and hasScript if there are property symbols but the properties are empty (e.g. activities with no schema defined). The methods must now be given activity properties. --- .../com/c2kernel/lifecycle/instance/Activity.java | 2 +- .../com/c2kernel/lifecycle/instance/WfVertex.java | 2 +- .../instance/stateMachine/Transition.java | 34 ++++++++++++++-------- 3 files changed, 24 insertions(+), 14 deletions(-) (limited to 'src/main/java/com/c2kernel/lifecycle/instance') diff --git a/src/main/java/com/c2kernel/lifecycle/instance/Activity.java b/src/main/java/com/c2kernel/lifecycle/instance/Activity.java index 42ffe79..889006c 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/Activity.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/Activity.java @@ -143,7 +143,7 @@ public class Activity extends WfVertex Schema schema = null; String viewName = null; boolean storeOutcome = false; - if (transition.hasOutcome()) { + if (transition.hasOutcome(getProperties())) { schema = transition.getSchema(getProperties()); viewName = (String)getProperties().get("Viewpoint"); if (requestData != null && requestData.length()>0) diff --git a/src/main/java/com/c2kernel/lifecycle/instance/WfVertex.java b/src/main/java/com/c2kernel/lifecycle/instance/WfVertex.java index de5f56f..a6e39ae 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/WfVertex.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/WfVertex.java @@ -152,6 +152,7 @@ public abstract class WfVertex extends GraphableVertex } } + //TODO: is this right? if (requiredInput.containsKey("item")) { script.setInputParamValue("item", Gateway.getProxyManager().getProxy(new EntityPath(itemSysKey))); } @@ -178,7 +179,6 @@ public abstract class WfVertex extends GraphableVertex throw new ScriptingEngineException("Script name is empty"); Script script; if (version!=null) { - Logger.debug(version.toString()); script = new Script(name, version); } else { // empty version: try expression diff --git a/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/Transition.java b/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/Transition.java index 9922c7c..704f2bf 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/Transition.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/Transition.java @@ -241,7 +241,7 @@ public class Transition implements Serializable { while (propMatcher.find()) { String propName = propMatcher.group(1); Object propValue = props.get(propName); - Logger.debug("Replacing Property "+propName+" as "+propValue); + Logger.msg(8, "Replacing Property "+propName+" as "+propValue); String propValString = propValue==null?"":propValue.toString(); result = result.replace("${"+propName+"}", propValString); } @@ -254,19 +254,24 @@ public class Transition implements Serializable { return (Boolean)props.get(enabledProp); } - public boolean hasOutcome() { - return outcome!=null - && outcome.schemaName!=null && outcome.schemaName.length()>0 - && outcome.schemaVersion!=null && outcome.schemaVersion.length()>0; + public boolean hasOutcome(CastorHashMap actProps) { + if (outcome == null || actProps == null) return false; + String outcomeName = resolveValue(outcome.schemaName, actProps); + if (outcomeName == null || outcomeName.length() == 0) + return false; + String outcomeVersion = resolveValue(outcome.schemaVersion, actProps); + if (outcomeVersion == null || outcomeVersion.length() == 0) + return false; + return true; } public Schema getSchema(CastorHashMap actProps) throws InvalidDataException, ObjectNotFoundException { - if (hasOutcome()) + if (hasOutcome(actProps)) try { return LocalObjectLoader.getSchema(resolveValue(outcome.schemaName, actProps), Integer.parseInt(resolveValue(outcome.schemaVersion, actProps))); } catch (NumberFormatException ex) { - throw new InvalidDataException("Bad schema version number: "+outcome.schemaVersion+" ("+resolveValue(outcome.schemaVersion, actProps), ""); + throw new InvalidDataException("Bad schema version number: "+outcome.schemaVersion+" ("+resolveValue(outcome.schemaVersion, actProps)+")", ""); } else return null; @@ -280,13 +285,18 @@ public class Transition implements Serializable { try { return Integer.parseInt(resolveValue(script.scriptVersion, actProps)); } catch (NumberFormatException ex) { - throw new InvalidDataException("Bad Script version number: "+script.scriptVersion+" ("+resolveValue(script.scriptVersion, actProps)); + throw new InvalidDataException("Bad Script version number: "+script.scriptVersion+" ("+resolveValue(script.scriptVersion, actProps)+")", ""); } } - public boolean hasScript() { - return script!=null - && script.scriptName!=null && script.scriptName.length()>0 - && script.scriptVersion!=null && script.scriptVersion.length()>0; + public boolean hasScript(CastorHashMap actProps) { + if (script == null || actProps == null) return false; + String scriptName = getScriptName(actProps); + if (scriptName == null || scriptName.length() == 0) + return false; + String scriptVersion = resolveValue(script.scriptVersion, actProps); + if (scriptVersion == null || scriptVersion.length() == 0) + return false; + return true; } } -- cgit v1.2.3