package jcircus.newfrontendmethod;
import java.util.List;
import java.util.Vector;
import net.sourceforge.czt.circus.ast.Action1;
import net.sourceforge.czt.circus.ast.Action2;
import net.sourceforge.czt.circus.ast.CircusAction;
import net.sourceforge.czt.circus.ast.Communication;
import net.sourceforge.czt.circus.ast.ExtChoiceAction;
import net.sourceforge.czt.circus.ast.IntChoiceAction;
import net.sourceforge.czt.circus.ast.InterleaveAction;
import net.sourceforge.czt.circus.ast.ParallelAction;
import net.sourceforge.czt.circus.ast.PrefixingAction;
public class FrontEndPrinter {
public static FrontEndAnn getFrontEndAnn (Communication c) {
FrontEndAnn fea = new FrontEndAnn ();
List l = c.getAnns();
int size = l.size();
for (int i = 0; i < size; i++) {
if (l.get(i) instanceof FrontEndAnn) {
System.out.println ("FE found");
fea = (FrontEndAnn) l.get(i);
}
}
return fea;
}
public static String frontEndAnnAsString (FrontEndAnn fea) {
Vector <Integer> vec = fea.getFrontEnd();
int size = vec.size();
String str = "<<[";
for (int i = 0; i < size; i++) {
str = str + vec.elementAt(i);
if (i < size - 1) {
str = str + ", ";
}
}
return str + "]>>";
}
public static String communicationAsString (Communication c) { //Comunicação impressa sem os campos
String cName = c.getChannelExpr().getName().toString();
FrontEndAnn fea = getFrontEndAnn(c);
return cName + frontEndAnnAsString (fea);
}
/*public String prefixingActionAsString (PrefixingAction pa) {
String c = communicationAsString (pa.getCommunication());
}*/
public static String frontEndContentAsString (CircusAction action) {
if (action instanceof Action1) {
if (action instanceof PrefixingAction) {
Communication comm = ((PrefixingAction)action).getCommunication();
CircusAction ca = ((PrefixingAction)action).getCircusAction();
String commstr = communicationAsString (comm);
return commstr + frontEndContentAsString (ca);
}
else {
return frontEndContentAsString (((Action1)action).getCircusAction());
}
}
else if (action instanceof Action2) {
if (action instanceof ParallelAction) {
CircusAction left = ((ParallelAction)action).getLeftAction();
CircusAction right = ((ParallelAction)action).getRightAction();
return
frontEndContentAsString (left) +
" || " +
frontEndContentAsString (right)
;
}
else if (action instanceof InterleaveAction) {
CircusAction left = ((InterleaveAction)action).getLeftAction();
CircusAction right = ((InterleaveAction)action).getRightAction();
return
frontEndContentAsString (left) +
" ||| " +
frontEndContentAsString (right)
;
}
else if (action instanceof ExtChoiceAction) {
CircusAction left = ((ExtChoiceAction)action).getLeftAction();
CircusAction right = ((ExtChoiceAction)action).getRightAction();
return
frontEndContentAsString (left) +
" [] " +
frontEndContentAsString (right)
;
}
else if (action instanceof IntChoiceAction) {
CircusAction left = ((IntChoiceAction)action).getLeftAction();
CircusAction right = ((IntChoiceAction)action).getRightAction();
return
frontEndContentAsString (left) +
" |~| " +
frontEndContentAsString (right)
;
}
else {
CircusAction left = ((Action2)action).getLeftAction();
CircusAction right = ((Action2)action).getRightAction();
return
frontEndContentAsString (left) +
" <A2> " +
frontEndContentAsString (right)
;
}
}
else {
return "";
}
}
}