java/ch/wlkl/wsm/Flow.java
package ch.wlkl.wsm;
import static ch.wlkl.wsm.Parser.xQuote;
/**
* @author walter
* a normal flow with a result
*/
class FlowNormal extends Flow {
public FlowNormal(Object obj) {
super(obj);
}
public boolean isNormal() {
return true;
}
}
class FlowReturn extends Flow {
public FlowReturn(Object obj) {
super(obj);
}
public boolean isReturn() {
return true;
}
}
class FlowThrow extends Flow {
public FlowThrow(Object obj) {
super(obj);
}
public boolean isThrow() {
return true;
}
}
/**
* @author walter
*
*/
public abstract class Flow {
private Object u;
public Flow(Object obj) {
u = obj;
}
public static Flow normal(Object obj) {
return new FlowNormal(obj);
}
public static Flow ret(Object obj) {
return new FlowReturn(obj);
}
public static Flow thrw(Object obj) {
return new FlowThrow(obj);
}
public Object u() {
return u;
}
public boolean isNormal() {
return false;
}
public boolean isReturn() {
return false;
}
public boolean isThrow() {
return false;
}
public Flow exe(Frame cf) {
if (! isNormal())
return new FlowThrow("cannot exe " + this);
Ex ex;
try {
ex = (Ex) u();
} catch (Exception e) {
return new FlowThrow("cannot exe " + this + ": " + e);
}
return ex.exe(cf);
}
public String uString() {
return u == null ? "null" : u instanceof String ? xQuote((String) u) : u.toString();
}
public String toString() {
return this.getClass().getSimpleName() + ':' + uString();
}
}