/SmartSAX

SmartSAX - enhanced EMF for partially loading XMI models

Primary LanguageJava

SmartSAX

SmartSAX aims at partial loading XMI-based EMF models to reduce the time and memory consumption for conventional EMF model loader

For Demonstration, please go through the code in the Demonstration class. The static method generateEffectiveMetamodel() generates the effective metamodel needed to compute the GraBaTs 2009 query. After the effective metamodel is generated, put them in an list, like below:

	ArrayList<EffectiveMetamodel> effectiveMetamodels = new ArrayList<EffectiveMetamodel>();
	EffectiveMetamodel effectiveMetamodel = Demonstration.generateEffectiveMetamodel();
	effectiveMetamodels.add(effectiveMetamodel);

Then follow the conventional EMF process for registering metamodels, like below

	
	ResourceSet resourceSet = new ResourceSetImpl();
	
	ResourceSet ecoreResourceSet = new ResourceSetImpl();
	ecoreResourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
		.put("*", new XMIResourceFactoryImpl());
	Resource ecoreResource = ecoreResourceSet.
		createResource(URI.createFileURI(new File("model/JDTAST.ecore").getAbsolutePath()));
	ecoreResource.load(null);
	for (EObject o : ecoreResource.getContents()) {
		EPackage ePackage = (EPackage) o;
		resourceSet.getPackageRegistry().put(ePackage.getNsURI(), ePackage);
	}

Then follow the conventional EMF process for loading models, only difference is, create a SmartSAXResrouceFactory, like below

	resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().
		put("xmi", new SmartSAXModelResourceFactory());
	Resource resource = resourceSet.
		createResource(URI.createFileURI(new File("model/set0.xmi").getAbsolutePath()));

To partial load, construct the loadOptions, in which, put the effective metamodels, and the option for loading all attributes for types, like below

	Map<String, Object> loadOptions = new HashMap<String, Object>();
	loadOptions.put(SmartSAXXMIResource.OPTION_EFFECTIVE_METAMODELS, effectiveMetamodels);
	loadOptions.put(SmartSAXXMIResource.OPTION_LOAD_ALL_ATTRIBUTES, false);

Then call load(), SmartSAX will partial load with respect to the effective metamodels

	resource.load(loadOptions);
	for (EObject o : resource.getContents()) {
		System.out.println(o);
	}