package org.feature.model.utilities; import java.io.File; import java.io.IOException; import java.util.Map; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.PropertyConfigurator; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; 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.util.ECrossReferenceAdapter; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.js.model.feature.Feature; import org.js.model.feature.FeatureModel; import org.js.model.feature.FeaturePackage; import org.js.model.feature.edit.FeatureModelHelper; /** * provide some function to load feature model * * @author Ingo Reimund * */ public class FeatureModelLoader { public FeatureModelLoader() { PropertyConfigurator.configure("conf/log4j.properties"); BasicConfigurator.configure(); // Add XMI factory to registry FeaturePackage.eINSTANCE.getName(); Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE; Map<String, Object> m = reg.getExtensionToFactoryMap(); m.put("*", new XMIResourceFactoryImpl()); } /** * load feature model from file * * @param pathToModel * path to file * @return feature model */ public FeatureModel load(String pathToModel) { // convert model path to uri URI uriToModel = URI.createFileURI(new File(pathToModel).getAbsolutePath()); // load feature model from uri with a new resource set return FeatureModel.class.cast(load(uriToModel, new ResourceSetImpl())); } /** * load EObject from uri * * @param uri * to model * @param resourceSet * set of resources * @return feature model */ public static EObject load(URI uri, ResourceSet resourceSet) { // Get the resource Resource resource = resourceSet.getResource(uri, true); // Add adapter for reverse navigation along unidirectional links ECrossReferenceAdapter adapter = ECrossReferenceAdapter.getCrossReferenceAdapter(resourceSet); if (adapter == null) resourceSet.eAdapters().add(new ECrossReferenceAdapter()); // Return root model element return resource.getContents().get(0); } /** * save an eobject to file * * @param root * object to save * @param path * to file * @throws IOException */ public void save(EObject root, String path) throws IOException { ResourceUtil.persistModel(root, path); } /** * search a feature with the given name * * @param model * model with features * @param featureName * name of wanted feature * @return wanted feature or null */ public Feature findFeature(FeatureModel model, String featureName) { FeatureModelHelper helper = new FeatureModelHelper(model); for (Feature feature : helper.getAllFeatures()) { if (feature.getName().contentEquals(featureName)) { return feature; } } return null; } }