package de.hub.emffrag; import java.util.Map; import junit.framework.Assert; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import de.hub.emffrag.fragmentation.FGlobalEventListener; import de.hub.emffrag.fragmentation.FragmentedModel; import de.hub.emffrag.fragmentation.FragmentedModelFactory; import de.hub.emffrag.fragmentation.IdSemantics; import de.hub.emffrag.fragmentation.IndexBasedIdSemantics; import de.hub.emffrag.fragmentation.IndexBasedIdSemantics.IdBehaviour; public class EmfFragActivator extends Plugin { public FragmentedModel defaultModel = null; public boolean useBinaryFragments = false; public boolean collectStatistics = false; public FGlobalEventListener globalEventListener = FGlobalEventListener.emptyInstance; public IdSemantics idSemantics = new IndexBasedIdSemantics(IdBehaviour.strict); public static EmfFragActivator instance = null; public boolean logInStandAlone = false; private boolean isStandAlone = false; public int cacheSize = 100; public int bulkInsertSize = 1000; private int warningsAndErrors = 0; @Override public void start(BundleContext context) throws Exception { super.start(context); instance = this; init(); Bundle bundle = Platform.getBundle("de.hub.emffrag.mongodb"); if (bundle != null) { try { bundle.start(); } catch (Exception e) { } } } private void init() { Map<String, Object> protocolToFactoryMap = Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap(); protocolToFactoryMap.put("memory", new FragmentedModelFactory()); } public static void standalone(EPackage... metaModels) { for (EPackage metaModel: metaModels) { EPackage.Registry.INSTANCE.put(metaModel.getNsURI(), metaModel); } EPackage.Registry.INSTANCE.put(EcorePackage.eINSTANCE.getNsURI(), EcorePackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("ecore", new XMIResourceFactoryImpl()); instance = new EmfFragActivator(); instance.init(); try { instance.getLog(); } catch (Exception e) { instance.isStandAlone = true; } } private void log(int level, String msg, Exception e) { if (!isStandAlone) { try { getLog().log(new Status(level, getBundle().getSymbolicName(), Status.OK, msg, e)); } catch (Exception ex) { isStandAlone = true; } } if (isStandAlone) { if (logInStandAlone) { System.out.println("LOG(" + level + "): " + (msg != null ? msg : "(null)") + (e != null ? ": " + e.getMessage() : "")); } } } public void debug(String msg) { log(Status.OK, msg, null); } public void info(String msg) { log(Status.INFO, msg, null); } public void warning(String msg) { warningsAndErrors++; log(Status.WARNING, msg, null); } public void warning(String msg, Exception e) { warningsAndErrors++; log(Status.WARNING, msg, e); } public void error(String msg) { warningsAndErrors++; log(Status.ERROR, msg, null); } public void error(String msg, Exception e) { warningsAndErrors++; log(Status.ERROR, msg, e); } public void assertWarningsAndErrors(boolean value) { Assert.assertEquals(value, warningsAndErrors == 0); } public void resetWarningsAndErrors() { warningsAndErrors = 0; } }