package com.sap.furcas.runtime.parser.textblocks.observer; import java.util.ArrayList; import java.util.List; import com.sap.furcas.metamodel.FURCAS.TCS.ClassTemplate; import com.sap.furcas.metamodel.FURCAS.TCS.InjectorAction; import com.sap.furcas.metamodel.FURCAS.TCS.SequenceElement; import com.sap.furcas.metamodel.FURCAS.TCS.Template; import com.sap.furcas.metamodel.FURCAS.textblocks.AbstractToken; import com.sap.furcas.runtime.common.interfaces.IModelElementProxy; public class TextBlockProxy { private TextBlockProxy parent; @Override public String toString() { StringBuffer temp = new StringBuffer(); for (Object block : this.getSubNodes()) { if(block instanceof TextBlockProxy) { //temp.append("tb[").append(((TextBlockProxy) block).getSubNodes().size()).append(":").append(block.toString()).append("]"); temp.append(block.toString()); } else if(block instanceof AbstractToken){ temp.append(((AbstractToken) block).getValue()); } } return temp.toString(); } private final List<Object> subNodes = new ArrayList<Object>(); private boolean complete; private final List<IModelElementProxy> correspondingModelElements = new ArrayList<IModelElementProxy>(1); private Template template; private final List<Template> additionalTemplates = new ArrayList<Template>(); private SequenceElement sequenceElement; private InjectorAction injectorAction; private final List<Object> contextElements = new ArrayList<Object>(); private final List<IModelElementProxy> referencedElements = new ArrayList<IModelElementProxy>(); private final List<Integer> alternativeChoices = new ArrayList<Integer>(1); public <T extends Object> void addSubNode(T newNode) { if(!subNodes.contains(newNode)) { subNodes.add(newNode); } } public <T extends Object> void addSubNodes(List<T> newNodes) { subNodes.addAll(newNodes); } public <T extends Object> void addSubNodeAt(T newNode, int position) { subNodes.add(position, newNode); } public <T extends Object> void addSubNodesAt(List<T> newNodes, int position) { subNodes.addAll(position, newNodes); } public List<Object> getSubNodes() { return subNodes; } public TextBlockProxy getParent() { return parent; } public void setParent(TextBlockProxy parent) { this.parent = parent; } public void setComplete(boolean complete) { this.complete = complete; } public boolean isComplete() { return complete; } public void addCorrespondingModelElementProxy(IModelElementProxy newModelElement) { if(getTemplate() != null && getTemplate() instanceof ClassTemplate && ((ClassTemplate)getTemplate()).isIsReferenceOnly()) { addReferencedElementProxy(newModelElement); } else { this.correspondingModelElements.add(newModelElement); } } public List<IModelElementProxy> getCorrespondingModelElementProxies() { return correspondingModelElements; } public void setTemplate(Template template) { this.template = template; } public Template getTemplate() { return template; } public void addAdditionalTemplate(Template template) { this.additionalTemplates.add(template); } public List<Template> getAdditionalTemplates() { return additionalTemplates; } public void addAdditionalTemplates(List<Template> additionalTemplates) { this.additionalTemplates.addAll(additionalTemplates); } public void removeSubNode(TextBlockProxy textBlockProxy) { subNodes.remove(textBlockProxy); } public void addCorrespondingModelElementProxies( List<IModelElementProxy> correspondingModelElements) { if(getTemplate() != null && getTemplate() instanceof ClassTemplate && ((ClassTemplate)getTemplate()).isIsReferenceOnly()) { addReferencedElementProxies(correspondingModelElements); } else { this.correspondingModelElements.addAll(correspondingModelElements); } } public void setSequenceElement(SequenceElement sequenceElement) { this.sequenceElement = sequenceElement; } public SequenceElement getSequenceElement() { return sequenceElement; } public void addToContext(Object element) { contextElements .add(element); } public List<Object> getContextElements() { return contextElements; } public List<IModelElementProxy> getReferencedElementProxies() { return referencedElements; } public void addReferencedElementProxy(IModelElementProxy referencedElement) { this.referencedElements.add(referencedElement); } public void addReferencedElementProxies( List<IModelElementProxy> referencedElements) { this.referencedElements.addAll(referencedElements); } public InjectorAction getInjectorAction() { return injectorAction; } public void setInjectorAction(InjectorAction action) { injectorAction = action; } public void addAlternativeChoice(int choice) { alternativeChoices.add(choice); } public List<Integer> getAlternativeChoices() { return alternativeChoices; } }