package com.sap.furcas.runtime.tcs;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EClassifier;
import com.sap.furcas.metamodel.FURCAS.TCS.Alternative;
import com.sap.furcas.metamodel.FURCAS.TCS.AndExp;
import com.sap.furcas.metamodel.FURCAS.TCS.AtomExp;
import com.sap.furcas.metamodel.FURCAS.TCS.Block;
import com.sap.furcas.metamodel.FURCAS.TCS.BooleanPropertyExp;
import com.sap.furcas.metamodel.FURCAS.TCS.ClassTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.ConditionalElement;
import com.sap.furcas.metamodel.FURCAS.TCS.CustomSeparator;
import com.sap.furcas.metamodel.FURCAS.TCS.EqualsExp;
import com.sap.furcas.metamodel.FURCAS.TCS.Expression;
import com.sap.furcas.metamodel.FURCAS.TCS.FunctionCall;
import com.sap.furcas.metamodel.FURCAS.TCS.InjectorActionsBlock;
import com.sap.furcas.metamodel.FURCAS.TCS.InstanceOfExp;
import com.sap.furcas.metamodel.FURCAS.TCS.IsDefinedExp;
import com.sap.furcas.metamodel.FURCAS.TCS.LiteralRef;
import com.sap.furcas.metamodel.FURCAS.TCS.OneExp;
import com.sap.furcas.metamodel.FURCAS.TCS.OperatorTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.Property;
import com.sap.furcas.metamodel.FURCAS.TCS.SequenceElement;
import com.sap.furcas.metamodel.FURCAS.TCS.Template;
import com.sap.furcas.runtime.common.util.EcoreHelper;
public class TcsDebugUtil {
public static String prettyPrint(Template t) {
if (t == null) {
return "null";
}
if (t instanceof ClassTemplate) {
ClassTemplate ct = (ClassTemplate) t;
String typeName = "null";
String mode = ct.getMode();
EClassifier type = ct.getMetaReference();
if (type != null) {
typeName = TcsUtil.joinNameList(EcoreHelper.getQualifiedName(type));
}
if (ct.isIsMain()) {
return "ClassTemplate (main) for type " + typeName
+ " and mode " + mode;
} else {
return "ClassTemplate for type " + typeName + " and mode "
+ mode;
}
}
if (t instanceof OperatorTemplate) {
return "OperatorTemplate";
}
return t.toString();
}
public static String prettyPrint(SequenceElement e) {
if (e == null) {
return "null";
}
if (e instanceof LiteralRef) {
LiteralRef ref = (LiteralRef) e;
if (ref.getReferredLiteral() != null) {
return "LiteralRef " + ref.getReferredLiteral().getValue();
} else {
return "LiteralRef with null value";
}
}
if (e instanceof Property) {
Property prop = (Property) e;
return "Property "
+ TcsUtil.getPropertyName(prop.getPropertyReference());
}
if (e instanceof FunctionCall) {
FunctionCall call = (FunctionCall) e;
return "FunctionCall " + call.getCalledFunction().getFunctionName();
}
if (e instanceof ConditionalElement) {
ConditionalElement cond = (ConditionalElement) e;
return "ConditionalElement (" + prettyPrint(cond.getCondition())
+ ")";
}
if (e instanceof Alternative) {
// Alternative alt = (Alternative) e;
return "Alternative";
}
if (e instanceof Block) {
// Block block = (Block) e;
return "Block";
}
if (e instanceof InjectorActionsBlock) {
// InjectorActionsBlock block = (InjectorActionsBlock) e;
return "InjectorActionsBlock";
}
if (e instanceof CustomSeparator) {
// CustomSeparator cs = (CustomSeparator) e;
return "CustomSeparator";
}
return e.toString();
}
public static String prettyPrint(Expression e) {
if (e == null) {
return "null";
}
if (e instanceof AndExp) {
AndExp and = (AndExp) e;
if (and.getExpressions() != null) {
List<? extends AtomExp> expressions = new ArrayList<AtomExp>(
and.getExpressions());
String output = "";
for (int i = 0; i < expressions.size() - 1; i++) {
output += prettyPrint(expressions.get(i)) + " && ";
}
output += prettyPrint(expressions.get(expressions.size() - 1));
return output;
} else {
return "[AndExp with null expressions]";
}
}
return e.toString();
}
public static String prettyPrint(AtomExp e) {
if (e == null) {
return "null";
}
if (e instanceof BooleanPropertyExp) {
BooleanPropertyExp exp = (BooleanPropertyExp) e;
String output = TcsUtil.getPropertyName(exp.getPropertyReference());
if (output != null) {
return output;
} else {
return "[BooleanPropertyExp with null property ref]";
}
}
if (e instanceof EqualsExp) {
// EqualsExp exp = (EqualsExp) e;
// TODO
return "[EqualsExp]";
}
if (e instanceof InstanceOfExp) {
// InstanceOfExp exp = (InstanceOfExp) e;
// TODO
return "[InstaceOfExp]";
}
if (e instanceof IsDefinedExp) {
IsDefinedExp exp = (IsDefinedExp) e;
String output = TcsUtil.getPropertyName(exp.getPropertyReference());
if (output != null) {
return "isDefined(" + output + ")";
} else {
return "[IsDefinedExp with null property ref]";
}
}
if (e instanceof OneExp) {
// OneExp exp = (OneExp) e;
// TODO
return "[OneExp]";
}
return e.toString();
}
}