package de.hub.emffrag.fragmentation; import java.util.HashMap; import java.util.Map; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import de.hub.emffrag.EmfFragActivator; import de.hub.emffrag.datastore.DataStoreImpl; import de.hub.emffrag.datastore.IDataStore; import de.hub.emffrag.datastore.InMemoryDataStore; import de.hub.emffrag.datastore.ScanningDataStore; import de.hub.emffrag.datastore.WriteCachingDataStore; public class FragmentedModelFactory implements Resource.Factory { public Map<String, IDataStore> stores = new HashMap<String, IDataStore>(); @Override public Resource createResource(URI uri) { String id = uri.authority() + uri.path(); IDataStore dataStore = stores.get(id); if (dataStore == null) { dataStore = createDataStore(uri); stores.put(id, dataStore); } return new FragmentedModel(dataStore) { @Override protected Fragment newFragment(URI uri, FragmentedModel model) { if (EmfFragActivator.instance.useBinaryFragments) { return new BinaryFragmentImpl(uri, model); } else { return super.newFragment(uri, model); } } }; } protected IDataStore createDataStore(URI uri) { InMemoryDataStore baseDataStore = new InMemoryDataStore(false); return new DataStoreImpl(new WriteCachingDataStore(new ScanningDataStore(baseDataStore, baseDataStore.createScanningScanExtension()), baseDataStore), uri); } }