package no.hal.scxml.generator; import org.apache.commons.scxml.model.Initial; import org.apache.commons.scxml.model.OnEntry; import org.apache.commons.scxml.model.OnExit; import org.apache.commons.scxml.model.Parallel; import org.apache.commons.scxml.model.State; import org.apache.commons.scxml.model.Transition; import org.apache.commons.scxml.model.TransitionTarget; public class ScxmlFactory { public <T> T create(Class<T> c) { T scxmlObject = null; if (c == State.class) { scxmlObject = (T)createState(); } else if (c == Parallel.class) { scxmlObject = (T)createParallel(); } else if (c == Transition.class) { scxmlObject = (T)createTransition(); } else if (c == Initial.class) { scxmlObject = (T)createInitial(); } else if (c == OnEntry.class) { scxmlObject = (T)createOnEntry(); } else if (c == OnExit.class) { scxmlObject = (T)createOnExit(); } else if (c == Parallel.class) { scxmlObject = (T)createParallel(); } else if (c == Parallel.class) { scxmlObject = (T)createParallel(); } if (scxmlObject == null) { try { scxmlObject = (T)c.newInstance(); } catch (Exception e) { } } return scxmlObject; } protected String getStateNameString(TransitionTarget tt) { return (tt != null ? tt.getId() : "?"); } public State createState() { return new State() { public String toString() { return "[State " + getStateNameString(this) + "]"; } }; } public Parallel createParallel() { return new Parallel() { public String toString() { return "[Parallel " + getStateNameString(this) + "]"; } }; } public Transition createTransition() { return new Transition() { public String toString() { return "[Transition " + getStateNameString(getParent()) + " -> " + getNext() + " on " + getEvent() + "]"; } }; } public Initial createInitial() { return new Initial() { public String toString() { return "[Initial " + getTransition() + "]"; } }; } public OnEntry createOnEntry() { return new OnEntry() { public String toString() { return "[OnEntry in " + getStateNameString(getParent()) + "]"; } }; } public OnExit createOnExit() { return new OnExit() { public String toString() { return "[OnExit in " + getStateNameString(getParent()) + "]"; } }; } }