blob: 2f469b22d54c5717cbc4b359042eee040f215722 [file] [log] [blame]
package org.eclipse.epsilon.emc.emf;
import java.util.Collection;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.epsilon.eol.EolModule;
import org.eclipse.epsilon.eol.types.EolCollectionType;
import org.eclipse.epsilon.eol.types.IEolCollectionTypeResolver;
public class EmfCollectionTypeResolver implements IEolCollectionTypeResolver {
public static void main(String[] args) throws Exception {
EolModule m = new EolModule();
m.parse("EClass.all.first().eAttributes.isKindOf(Set).println();");
ResourceSet rs = new ResourceSetImpl();
rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
Resource r = rs.createResource(URI.createFileURI(""));
EObject root = EcorePackage.eINSTANCE;
r.getContents().add(root);
InMemoryEmfModel model = new InMemoryEmfModel("M", r, EcorePackage.eINSTANCE);
m.getContext().getModelRepository().addModel(model);
m.execute();
}
@Override
public boolean canResolveType(Collection<?> c) {
return c instanceof Setting;
}
@Override
public EolCollectionType resolveType(Collection<?> c) {
EStructuralFeature sf = ((Setting) c).getEStructuralFeature();
if (sf.isOrdered()) {
if (sf.isUnique()) return EolCollectionType.OrderedSet;
else return EolCollectionType.Sequence;
}
else {
if (sf.isUnique()) return EolCollectionType.Set;
else return EolCollectionType.Bag;
}
}
}