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