/**
* <copyright>
* </copyright>
*
* $Id$
*/
package tefkat.engine.runtime.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EEnumLiteral;
import tefkat.engine.runtime.Binding;
import tefkat.engine.runtime.Context;
import tefkat.engine.runtime.EnumConstant;
import tefkat.engine.runtime.Expression;
import tefkat.engine.runtime.NotGroundException;
import tefkat.engine.runtime.ResolutionException;
import tefkat.engine.runtime.RuntimePackage;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Enum Constant</b></em>'.
* <!-- end-user-doc -->
* <p>
* </p>
*
* @generated
*/
public class EnumConstantImpl extends CompoundExprImpl implements EnumConstant {
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public static final String copyright = "Copyright michael lawley 2004";
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected EnumConstantImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected EClass eStaticClass() {
return RuntimePackage.Literals.ENUM_CONSTANT;
}
public List eval(Context context, Binding binding) throws ResolutionException, NotGroundException {
List values = new ArrayList();
List args = getArg();
Expression enumExpr = (Expression) args.get(0);
Expression literalExpr = (Expression) args.get(1);
List enumObjs = enumExpr.eval(context);
List literalObjs = literalExpr.eval(context);
for (final Iterator eItr = enumObjs.iterator(); eItr.hasNext(); ) {
Object eObj = eItr.next();
EEnum enumeration = null;
if (eObj instanceof String) {
eObj = context.findClassifierByName((String) eObj);
}
if (eObj instanceof EEnum) {
enumeration = (EEnum) eObj;
}
if (null != enumeration) {
for (final Iterator lItr = literalObjs.iterator(); lItr.hasNext(); ) {
Object lObj = lItr.next();
if (lObj instanceof String) {
EEnumLiteral eLit = enumeration.getEEnumLiteral((String) lObj);
if (null != eLit) {
values.add(eLit.getInstance());
}
}
}
}
}
return values;
}
} //EnumConstantImpl