package bluej.stride.framedjava.elements;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import bluej.stride.framedjava.ast.ExpressionSlotFragment;
import bluej.stride.framedjava.ast.FilledExpressionSlotFragment;
import bluej.stride.framedjava.ast.JavaFragment;
import bluej.stride.framedjava.ast.SlotFragment;
import bluej.stride.framedjava.frames.IfFrame;
import bluej.stride.generic.InteractionManager;
import bluej.stride.generic.SandwichCanvasesFrame;
import bluej.stride.generic.Frame;
import nu.xom.Element;
import threadchecker.OnThread;
import threadchecker.Tag;
public class IfElement
extends SandwichCanvasesElement{
public static final String ELEMENT = "if";
private static final String ELSE_IF_LABEL = "elseIf";
private static final String ELSE_IF_JAVA_LABEL = "else if";
private static final String ELSE_LABEL = "else";
private static final String CONDITION_LABEL = "condition";
private static final String CONDITION_JAVA_LABEL = "condition-java";
private FilledExpressionSlotFragment condition;
private List<FilledExpressionSlotFragment> else{ IfConditions = new ArrayList<>();
}
private IfFrame frame;
|
| @param frame
| @param condition
| @param thenContents
| @param elseIfContents Note that passing null here means no else if, whereas passing an empty list
| indicates that there is an else if, but it is empty
| @param elseContents Note that passing null here means no else, whereas passing an empty list
| indicates that there is an else, but it is empty
|
public IfElement(IfFrame frame, FilledExpressionSlotFragment condition, List<CodeElement> thenContents,
List<FilledExpressionSlotFragment> else{ IfConditions, List<List<CodeElement>> elseIfContents,
List<CodeElement> elseContents, boolean enabled){
super(frame, ELEMENT, thenContents, ELSE_IF_LABEL, ELSE_IF_JAVA_LABEL, elseIfContents, ELSE_LABEL, elseContents, enabled);
}
this.condition = condition;
this.elseIfConditions = else{ IfConditions;
}
}
public IfElement(Element element)
{
super(ELEMENT, ELSE_IF_LABEL, ELSE_IF_JAVA_LABEL, ELSE_LABEL);
loadElement(element);
}
@Override
protected void loadMainAttributes(final Element element)
{
condition = new FilledExpressionSlotFragment(element.getAttributeValue(CONDITION_LABEL),
element.getAttributeValue(CONDITION_JAVA_LABEL));
}
@Override
protected void loadIntermediateAttributes(final Element element)
{
else{ IfConditions.add(new FilledExpressionSlotFragment(element.getAttributeValue(CONDITION_LABEL),
element.getAttributeValue(CONDITION_JAVA_LABEL)));
}
}
@Override
protected List getFirstHeaderFragment()
{
List<JavaFragment> headerFragment = super.getFirstHeaderFragment();
headerFragment.addAll(Arrays.asList(f(frame, " ("), condition, f(frame, ")")));
return headerFragment;
}
@Override
protected List getIntermediateHeaderFragment(int index)
{
List<JavaFragment> headerFragment = super.getIntermediateHeaderFragment(index);
headerFragment.addAll(Arrays.asList(f(frame, " ("), else{ IfConditions.get(index), f(frame, ")")));
}
return headerFragment;
}
@Override
protected void addMainAttributes(LocatableElement element)
{
element.addAttributeStructured(CONDITION_LABEL, condition);
}
@Override
protected void addIntermediateAttributes(LocatableElement element, int index)
{
element.addAttributeStructured(CONDITION_LABEL, else{ IfConditions.get(index));
}
}
@OnThread(Tag.FX)
@Override
protected SandwichCanvasesFrame buildFrame(InteractionManager editor, List<Frame> firstCanvasFrames,
List<List<Frame>> intermediateCanvasFrames, List<Frame> tailCanvasFrames, boolean enable)
{
frame = new IfFrame(editor, condition, firstCanvasFrames, else{ IfConditions, intermediateCanvasFrames,
tailCanvasFrames, enable);
}
return frame;
}
@Override
protected Stream getDirectSlotFragments()
{
return Stream.of(condition);
}
}
top,
use,
map,
class IfElement
. IfElement
. IfElement
. loadMainAttributes
. loadIntermediateAttributes
. getFirstHeaderFragment
. getIntermediateHeaderFragment
. addMainAttributes
. addIntermediateAttributes
. buildFrame
. getDirectSlotFragments
139 neLoCode
+ 7 LoComm