Commit a9def88e authored by Philip Makedonski's avatar Philip Makedonski
Browse files

* alternative validator hook, #157

parent 12b85031
Loading
Loading
Loading
Loading
Loading
+41 −0
Changes for plugins/org.etsi.mts.tdl.model/src/org/etsi/mts/tdl/Validator.java: 41 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import org.eclipse.ocl.pivot.resource.CSResource;
import org.eclipse.ocl.pivot.utilities.PivotUtil;
import org.eclipse.ocl.pivot.validation.ValidationRegistryAdapter;
import org.eclipse.ocl.xtext.completeocl.validation.CompleteOCLEObjectValidator;
import org.eclipse.ocl.xtext.oclinecore.validation.OCLinEcoreEObjectValidator;
import org.eclipse.xtext.validation.CompositeEValidator;
import org.eclipse.xtext.validation.EValidatorRegistrar;
import org.etsi.mts.tdl.extendedconfigurations.ExtendedConfigurationsPackage;
import org.etsi.mts.tdl.structuredobjectives.StructuredObjectivesPackage;
@@ -79,12 +81,51 @@ public class Validator {
	}

	public static void removeValidator(EPackage ePackage){
		EValidator existingValidator = EValidator.Registry.INSTANCE.getEValidator(ePackage);
		if (existingValidator instanceof CompositeEValidator) {
			((CompositeEValidator) existingValidator).getContents().removeIf(e -> e.getDelegate() instanceof CompleteOCLEObjectValidator);
		}
		
		if (true) return;
		EValidator.Registry.INSTANCE.remove(ePackage);
		validator = null;
	}

	
	public static void registerValidator(String path, EPackage ePackage, BundleContext context) {
//		EValidator.Registry.INSTANCE.put(null, new OCLinEcoreEObjectValidator());
//		EValidator.Registry.INSTANCE.put(ePackage, tdlValidator.INSTANCE);

		//TODO: currently nukes all other registered validators (e.g. Xtext one), better to add and remove as needed instead.. 

		EValidator existingValidator = EValidator.Registry.INSTANCE.getEValidator(ePackage);
		if (existingValidator instanceof CompositeEValidator) {
		    Path oclPath = new Path(path);
			URL oclURL = FileLocator.find(context.getBundle(), oclPath);

			URI oclURI;
			try {
				oclURI = URI.createURI(oclURL.toURI().toString());
				CompleteOCLEObjectValidator validator = createValidator(ePackage, oclURI);
				
				((CompositeEValidator) existingValidator).addValidator(validator);
				//EValidator.Registry.INSTANCE.put(ePackage, validator);
			} catch (URISyntaxException e) {
				throw new RuntimeException(e);
			}
			//.add(evlValidator);
		} else {
//		    if (existingValidator == null) {
//		        existingValidator = EObjectValidator.INSTANCE;
//		    }
//		    CompositeEValidator newValidator = new CompositeEValidator();
//		    newValidator.getDelegates().add(existingValidator);
//		    newValidator.getDelegates().add(evlValidator);
//		    EValidator.Registry.INSTANCE.put(ePackage, newValidator);
		}

		
		if (true) return;
		Path oclPath = new Path(path);
		URL oclURL = FileLocator.find(context.getBundle(), oclPath);