package org.reuseware.air.language.abstractsyntax.resource.as.analysis;
import java.util.Map;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.impl.EcoreFactoryImpl;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.EReference;
import org.reuseware.air.language.abstractsyntax.Attribute;
import org.reuseware.air.language.abstractsyntax.resource.as.IAsReferenceResolveResult;
import org.reuseware.air.language.abstractsyntax.resource.as.IAsReferenceResolver;
public class AttributeTypeReferenceResolver implements IAsReferenceResolver<Attribute,EDataType> {
public String deResolve(EDataType element, Attribute container, EReference reference) {
return element.getName();
}
public void resolve(String identifier, Attribute container, EReference reference, int position, boolean resolveFuzzy, IAsReferenceResolveResult<EDataType> result) {
EcoreFactory factory = EcoreFactoryImpl.init();
EcorePackage ecorePackage = factory.getEcorePackage();
EDataType dataType = null;
if(identifier.equals("int")||identifier.equals("EInt")){
dataType = ecorePackage.getEInt();
}
else if(identifier.equals("String")||identifier.equals("string")||identifier.equals("EString")){
dataType = ecorePackage.getEString();
}
else if(identifier.equals("boolean")||identifier.equals("EBoolean")){
dataType = ecorePackage.getEBoolean();
}
else{
try{
Object object = ecorePackage.getClass().getMethod("get"+identifier).invoke(ecorePackage);
if(object instanceof EDataType){
dataType = (EDataType)object;
}
}
catch(Exception e){
//e.printStackTrace();
}
}
if(dataType!=null){
result.addMapping(identifier,dataType);
}
else{
result.setErrorMessage(identifier+" is not a valid EDataType.");
}
}
public void setOptions(Map<?, ?> options) {
// TODO Auto-generated method stub
}
}