package de.hub.srcrepo; import java.io.PrintStream; import java.util.Date; import java.util.function.Supplier; import org.apache.commons.lang.exception.ExceptionUtils; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.eclipse.gmt.modisco.java.emf.JavaPackage; import org.eclipse.xtext.xbase.lib.Functions.Function0; import org.osgi.framework.BundleContext; import de.hub.jstattrack.JStatTrackActivator; import de.hub.srcrepo.repositorymodel.RepositoryModelPackage; public class SrcRepoActivator extends Plugin { public static final String commit = "$git$"; public static SrcRepoActivator INSTANCE; public Supplier<PrintStream> logOutSupplier = new Supplier<PrintStream>() { @Override public PrintStream get() { return System.out; } }; private boolean isStandAlone = false; private boolean logInStandAlone = true; private boolean isDebug = false; public boolean useCGit = false; private void init() { JStatTrackActivator.instance.enableWebServer(); JStatTrackActivator.instance.batchedDataPoints = 100; } @Override public void start(BundleContext context) throws Exception { super.start(context); INSTANCE = this; INSTANCE.init(); } public static void debug(Function0<String> message) { if (INSTANCE.isDebug) { String output = message.apply(); if (output != null) { INSTANCE.debug(output); } } } public static void condition(Function0<Boolean> condition) { condition("Failed condition.", condition); } public static void condition(String message, Function0<Boolean> condition) { if (INSTANCE.isDebug) { if (!condition.apply()) { throw new IllegalArgumentException(message); } } } 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) { log(Status.WARNING, msg, null); } public void warning(String msg, Exception e) { log(Status.WARNING, msg, e); } public void error(String msg) { log(Status.ERROR, msg, null); } public void error(String msg, Exception e) { log(Status.ERROR, msg, e); } public static void standalone() { INSTANCE = new SrcRepoActivator(); INSTANCE.isStandAlone = true; JStatTrackActivator.standalone(); INSTANCE.init(); EPackage.Registry.INSTANCE.put(RepositoryModelPackage.eINSTANCE.getNsURI(), RepositoryModelPackage.eINSTANCE); EPackage.Registry.INSTANCE.put(JavaPackage.eINSTANCE.getNsURI(), JavaPackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl()); } 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) { if (e != null) { String trace = ExceptionUtils.getStackTrace(e); if (trace.trim().equals("NullPointerException")) { System.out.println("####"); // TODO debug } logOutSupplier.get().println(new Date(System.currentTimeMillis()).toString() + " LOG(" + level + "): " + (msg != null ? msg : "") + "\n" + trace); } else { logOutSupplier.get().println(new Date(System.currentTimeMillis()).toString() + " LOG(" + level + "): " + (msg != null ? msg : "(null)")); } } } } }