package com.sap.ap.metamodel.formatter;
import java.util.Iterator;
import data.classes.ActualObjectParameter;
import data.classes.ClassTypeDefinition;
import data.classes.FunctionSignatureTypeDefinition;
import data.classes.MethodSignature;
import data.classes.NestedTypeDefinition;
import data.classes.Parameter;
import data.classes.Signature;
import data.classes.TypeDefinition;
import dataaccess.expressions.literals.Literal;
/**
* Can provide a text representation for different types of model elements
*
* @author Axel Uhl (D043530)
*
*/
public class StringFormatter {
public static String toString(TypeDefinition td) {
StringBuilder sb = new StringBuilder();
if (td instanceof ClassTypeDefinition) {
if (((ClassTypeDefinition) td).getClazz() != null) {
sb.append(((ClassTypeDefinition) td).getClazz().getName());
if (((ClassTypeDefinition) td).getObjectParameters().size() > 0) {
sb.append('|');
boolean commaBefore = false;
for (ActualObjectParameter aop : ((ClassTypeDefinition) td).getObjectParameters()) {
if (commaBefore) {
sb.append(", ");
} else {
commaBefore = true;
}
if (aop.getValue() instanceof Literal) {
sb.append(((Literal) aop.getValue()).getLiteral());
} else {
sb.append(aop.getValue());
}
}
sb.append('|');
}
} else {
sb.append("<null>");
}
} else if (td instanceof NestedTypeDefinition) {
sb.append(toString(((NestedTypeDefinition) td).getType()));
} else if (td instanceof FunctionSignatureTypeDefinition) {
FunctionSignatureTypeDefinition fstd = (FunctionSignatureTypeDefinition) td;
sb.append(toString(fstd.getSignature()));
}
sb.append('[');
if (td != null) {
sb.append(td.getLowerMultiplicity());
sb.append("..");
sb.append((td.getUpperMultiplicity()==-1)?"*":""+td.getUpperMultiplicity());
if (td.isOrdered()) {
sb.append('o');
}
if (td.isUnique()) {
sb.append('u');
}
} else {
sb.append("<null>");
}
sb.append(']');
return sb.toString();
}
public static String toString(Signature sig) {
StringBuilder sb = new StringBuilder();
if (sig instanceof MethodSignature) {
MethodSignature ms = (MethodSignature) sig;
if (ms.getOwner() != null) {
sb.append(ms.getOwner().getName());
sb.append("::");
}
sb.append(ms.getName());
}
sb.append('(');
for (Iterator<Parameter> i = sig.getInput().iterator(); i.hasNext();) {
sb.append(toString(i.next().getType()));
if (i.hasNext()) {
sb.append(", ");
}
}
sb.append(')');
sb.append(":");
if (sig.getOutput() != null) {
sb.append(toString(sig.getOutput()));
} else {
sb.append("void");
}
return sb.toString();
}
}