/******************************************************************************* * Copyright (c) 2007, 2008 Edgar Espina. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package org.deved.antlride.internal.core.model.evaluation; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.deved.antlride.core.model.IGrammar; import org.deved.antlride.core.model.evaluation.EvalElementKind; import org.deved.antlride.core.model.evaluation.IEvalElement; public abstract class AEvalElement implements IEvalElement { private List<IEvalElement> elements; private EvalElementKind elementKind; private String elementName; private IEvalElement parentElement; private Object userData; private IGrammar grammar; public AEvalElement(IGrammar grammar, AEvalElement parent, String elementName, EvalElementKind elementKind) { elements = new ArrayList<IEvalElement>(5); if (parent != null) parent.elements.add(this); this.grammar = grammar; this.parentElement = parent; this.elementKind = elementKind; this.elementName = elementName; } public IGrammar getGrammar() { return grammar; } public Object getUserData() { return userData; } public void clear() { userData = null; for (IEvalElement e : elements) { e.clear(); } elements.clear(); } public void setUserData(Object userData) { this.userData = userData; } public IEvalElement getElement(int index) { return elements.get(index); } public IEvalElement firstElement() { if (getElementCount() > 0) return getElement(0); return null; } public IEvalElement lastElement() { if (getElementCount() > 0) return getElement(getElementCount() - 1); return null; } public int getElementCount() { return elements.size(); } public EvalElementKind getElementKind() { return elementKind; } public String getElementName() { return elementName; } public IEvalElement getParent() { return parentElement; } public boolean isLeaf() { return getElementCount() == 0; } public boolean isRoot() { return getParent() == null; } public Iterator<IEvalElement> iterator() { return elements.iterator(); } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(getElementName()); if (getElementCount() > 0) { builder.append("("); for (IEvalElement e : this) { builder.append(e); builder.append(" "); } builder.setCharAt(builder.length() - 1, ')'); } return builder.toString(); } }