$search
00001 /* 00002 * generated by Xtext 00003 */ 00004 package org.best.of.robotics.ui.internal; 00005 00006 import java.util.Collections; 00007 import java.util.Map; 00008 00009 import org.apache.log4j.Logger; 00010 import org.eclipse.ui.plugin.AbstractUIPlugin; 00011 import org.eclipse.xtext.ui.shared.SharedStateModule; 00012 import org.eclipse.xtext.util.Modules2; 00013 import org.osgi.framework.BundleContext; 00014 00015 import com.google.common.collect.Maps; 00016 import com.google.inject.Guice; 00017 import com.google.inject.Injector; 00018 import com.google.inject.Module; 00019 00024 public class SmachDSLActivator extends AbstractUIPlugin { 00025 00026 public static final String ORG_BEST_OF_ROBOTICS_SMACHDSL = "org.best.of.robotics.SmachDSL"; 00027 00028 private static final Logger logger = Logger.getLogger(SmachDSLActivator.class); 00029 00030 private static SmachDSLActivator INSTANCE; 00031 00032 private Map<String, Injector> injectors = Collections.synchronizedMap(Maps.<String, Injector> newHashMapWithExpectedSize(1)); 00033 00034 @Override 00035 public void start(BundleContext context) throws Exception { 00036 super.start(context); 00037 INSTANCE = this; 00038 } 00039 00040 @Override 00041 public void stop(BundleContext context) throws Exception { 00042 injectors.clear(); 00043 INSTANCE = null; 00044 super.stop(context); 00045 } 00046 00047 public static SmachDSLActivator getInstance() { 00048 return INSTANCE; 00049 } 00050 00051 public Injector getInjector(String language) { 00052 synchronized (injectors) { 00053 Injector injector = injectors.get(language); 00054 if (injector == null) { 00055 injectors.put(language, injector = createInjector(language)); 00056 } 00057 return injector; 00058 } 00059 } 00060 00061 protected Injector createInjector(String language) { 00062 try { 00063 Module runtimeModule = getRuntimeModule(language); 00064 Module sharedStateModule = getSharedStateModule(); 00065 Module uiModule = getUiModule(language); 00066 Module mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule); 00067 return Guice.createInjector(mergedModule); 00068 } catch (Exception e) { 00069 logger.error("Failed to create injector for " + language); 00070 logger.error(e.getMessage(), e); 00071 throw new RuntimeException("Failed to create injector for " + language, e); 00072 } 00073 } 00074 00075 protected Module getRuntimeModule(String grammar) { 00076 if (ORG_BEST_OF_ROBOTICS_SMACHDSL.equals(grammar)) { 00077 return new org.best.of.robotics.SmachDSLRuntimeModule(); 00078 } 00079 00080 throw new IllegalArgumentException(grammar); 00081 } 00082 00083 protected Module getUiModule(String grammar) { 00084 if (ORG_BEST_OF_ROBOTICS_SMACHDSL.equals(grammar)) { 00085 return new org.best.of.robotics.ui.SmachDSLUiModule(this); 00086 } 00087 00088 throw new IllegalArgumentException(grammar); 00089 } 00090 00091 protected Module getSharedStateModule() { 00092 return new SharedStateModule(); 00093 } 00094 00095 }