Added selective EVL module example
diff --git a/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/evl/SelectiveEvlModule.java b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/evl/SelectiveEvlModule.java
new file mode 100644
index 0000000..e11892a
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/evl/SelectiveEvlModule.java
@@ -0,0 +1,107 @@
+package org.eclipse.epsilon.examples.standalone.evl;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.epsilon.common.module.ModuleElement;
+import org.eclipse.epsilon.common.parse.AST;
+import org.eclipse.epsilon.emc.emf.InMemoryEmfModel;
+import org.eclipse.epsilon.eol.exceptions.models.EolModelElementTypeNotFoundException;
+import org.eclipse.epsilon.eol.exceptions.models.EolModelNotFoundException;
+import org.eclipse.epsilon.eol.execute.context.IEolContext;
+import org.eclipse.epsilon.evl.EvlModule;
+import org.eclipse.epsilon.evl.dom.ConstraintContext;
+
+/**
+ * Demonstrates subclassing EvlModule to only check
+ * constraints against a selection of model elements
+ */
+
+public class SelectiveEvlModule extends EvlModule {
+	
+	protected List<EObject> rootEObjects;
+	
+	@Override
+	public ModuleElement adapt(AST cst, ModuleElement parentAst) {
+		ModuleElement moduleElement = super.adapt(cst, parentAst);
+		if (moduleElement instanceof ConstraintContext) {
+			return new SelectiveConstraintContext();
+		}
+		return moduleElement;
+	}
+	
+	class SelectiveConstraintContext extends ConstraintContext {
+		@Override
+		public Collection<?> getAllOfSourceKind(IEolContext context)
+				throws EolModelElementTypeNotFoundException, EolModelNotFoundException {
+			// Only return a subset containing elements which are
+			// descendants of one of the root objects
+			return super.getAllOfSourceKind(context).stream().
+					filter(e -> shouldCheck(e)).collect(Collectors.toList());
+		}
+	}
+	
+	protected boolean shouldCheck(Object object) {
+		// Only check elements which are decendants of one of the
+		// root objects
+		return EcoreUtil.isAncestor(rootEObjects, (EObject) object);
+	}
+	
+	public void setRootEObjects(List<EObject> rootEObjects) {
+		this.rootEObjects = rootEObjects;
+	}
+	
+	public List<EObject> getRootEObjects() {
+		return rootEObjects;
+	}
+	
+	public static void main(String[] args) throws Exception {
+		
+		SelectiveEvlModule module = new SelectiveEvlModule();
+		
+		ResourceSetImpl resourceSet = new ResourceSetImpl();
+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
+		Resource resource = resourceSet.createResource(URI.createURI("foo.ecore"));
+		resourceSet.getPackageRegistry().put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE);
+		
+		// Create 2 classes C1 and C2 with one attribute each
+		EClass c1 = EcoreFactory.eINSTANCE.createEClass();
+		c1.setName("C1");
+		EAttribute a1 = EcoreFactory.eINSTANCE.createEAttribute();
+		a1.setName("a1");
+		c1.getEStructuralFeatures().add(a1);
+		
+		EClass c2 = EcoreFactory.eINSTANCE.createEClass();
+		c2.setName("C2");
+		EAttribute a2 = EcoreFactory.eINSTANCE.createEAttribute();
+		a2.setName("a2");
+		c2.getEStructuralFeatures().add(a2);
+		
+		resource.getContents().add(c1);
+		resource.getContents().add(c2);
+		
+		InMemoryEmfModel model = new InMemoryEmfModel(resource);
+		
+		// Constraint for EAttibute
+		module.parse("context EAttribute { constraint Test { check {('Checking ' + self.name).println(); return true;} }}");
+		module.getContext().getModelRepository().addModel(model);
+		
+		// Only elements under C1 (i.e. attribute a1) should be checked
+		module.setRootEObjects(Arrays.asList(c1));
+		
+		module.execute();
+	}
+	
+}