Browse Source

Allow configuration of domain modules

René Beckmann 7 years ago
parent
commit
c7fcee1811

+ 2 - 1
plugins/org.yakindu.sct.domain/META-INF/MANIFEST.MF

@@ -13,5 +13,6 @@ Require-Bundle: org.eclipse.core.runtime,
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-ActivationPolicy: lazy
 Export-Package: org.yakindu.sct.domain,
 Export-Package: org.yakindu.sct.domain,
- org.yakindu.sct.domain.extension
+ org.yakindu.sct.domain.extension,
+ org.yakindu.sct.domain.extension.impl
 Bundle-ClassPath: .
 Bundle-ClassPath: .

+ 21 - 0
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/IModuleConfigurator.java

@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) 2018 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	rbeckmann - initial API and implementation
+ *
+ */
+package org.yakindu.sct.domain.extension;
+
+import com.google.inject.Module;
+
+/**
+ * @author rbeckmann
+ *
+ */
+public interface IModuleConfigurator {
+	public void configureModule(Module module);
+}

+ 4 - 5
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/impl/DomainImpl.java

@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  * http://www.eclipse.org/legal/epl-v10.html
  * Contributors:
  * Contributors:
  * 	committers of YAKINDU - initial API and implementation
  * 	committers of YAKINDU - initial API and implementation
- * 
+ *
  */
  */
 package org.yakindu.sct.domain.extension.impl;
 package org.yakindu.sct.domain.extension.impl;
 
 
@@ -26,11 +26,10 @@ import com.google.common.cache.LoadingCache;
 import com.google.inject.Guice;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Module;
-import com.google.inject.util.Modules;
 
 
 /**
 /**
  * @author andreas muelder - Initial contribution and API
  * @author andreas muelder - Initial contribution and API
- * 
+ *
  */
  */
 public class DomainImpl implements IDomain {
 public class DomainImpl implements IDomain {
 
 
@@ -145,7 +144,7 @@ public class DomainImpl implements IDomain {
 		}
 		}
 		return createInjector(feature, options);
 		return createInjector(feature, options);
 	}
 	}
-	
+
 	@Override
 	@Override
 	public Injector getInjector(String feature, String... options) {
 	public Injector getInjector(String feature, String... options) {
 		return getInjector(feature, true, options);
 		return getInjector(feature, true, options);
@@ -163,7 +162,7 @@ public class DomainImpl implements IDomain {
 				modules.add(module.getModuleProvider().getModule(options));
 				modules.add(module.getModuleProvider().getModule(options));
 			}
 			}
 		}
 		}
-		Module result = Modules.combine(modules);
+		Module result = new LazyCombiningModule(modules);
 		return result;
 		return result;
 
 
 	}
 	}

+ 41 - 0
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/impl/LazyCombiningModule.java

@@ -0,0 +1,41 @@
+/**
+ * Copyright (c) 2018 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	rbeckmann - initial API and implementation
+ *
+ */
+package org.yakindu.sct.domain.extension.impl;
+
+import org.yakindu.sct.domain.extension.IModuleConfigurator;
+
+import com.google.inject.Binder;
+import com.google.inject.Module;
+import com.google.inject.util.Modules;
+
+/**
+ * @author rbeckmann
+ *
+ */
+public class LazyCombiningModule implements Module {
+	protected Iterable<Module> modules;
+
+	public LazyCombiningModule(Iterable<Module> modules) {
+		this.modules = modules;
+	}
+
+	public void applyConfigurator(IModuleConfigurator configurator) {
+		for (Module module : modules) {
+			configurator.configureModule(module);
+		}
+	}
+
+	@Override
+	public void configure(Binder binder) {
+		Modules.combine(modules).configure(binder);
+	}
+
+}

+ 36 - 0
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/execution/GeneratorEntryModuleConfigurator.java

@@ -0,0 +1,36 @@
+/**
+ * Copyright (c) 2018 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	rbeckmann - initial API and implementation
+ *
+ */
+package org.yakindu.sct.generator.core.execution;
+
+import org.yakindu.sct.domain.extension.IModuleConfigurator;
+import org.yakindu.sct.model.sgen.GeneratorEntry;
+
+import com.google.inject.Module;
+
+/**
+ * @author rbeckmann
+ *
+ */
+public class GeneratorEntryModuleConfigurator implements IModuleConfigurator {
+	protected GeneratorEntry entry;
+
+	public GeneratorEntryModuleConfigurator(GeneratorEntry entry) {
+		this.entry = entry;
+	}
+
+	@Override
+	public void configureModule(Module module) {
+		if (module instanceof IGeneratorEntryModuleExtension) {
+			((IGeneratorEntryModuleExtension) module).setGeneratorEntry(entry);
+		}
+	}
+
+}

+ 5 - 2
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/execution/GeneratorExecutorLookup.java

@@ -17,6 +17,8 @@ import org.yakindu.base.types.typesystem.AbstractTypeSystem;
 import org.yakindu.base.types.typesystem.ITypeSystem;
 import org.yakindu.base.types.typesystem.ITypeSystem;
 import org.yakindu.sct.domain.extension.DomainRegistry;
 import org.yakindu.sct.domain.extension.DomainRegistry;
 import org.yakindu.sct.domain.extension.IDomain;
 import org.yakindu.sct.domain.extension.IDomain;
+import org.yakindu.sct.domain.extension.IModuleConfigurator;
+import org.yakindu.sct.domain.extension.impl.LazyCombiningModule;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
 import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 import org.yakindu.sct.model.sgen.GeneratorEntry;
 import org.yakindu.sct.model.sgen.GeneratorEntry;
@@ -89,10 +91,11 @@ public class GeneratorExecutorLookup {
 	}
 	}
 
 
 	protected Module getDomainGeneratorModule(GeneratorEntry entry, String generatorId) {
 	protected Module getDomainGeneratorModule(GeneratorEntry entry, String generatorId) {
+		IModuleConfigurator configurator = new GeneratorEntryModuleConfigurator(entry);
 		Module module = DomainRegistry.getDomain(entry.getElementRef()).getModule(IDomain.FEATURE_GENERATOR,
 		Module module = DomainRegistry.getDomain(entry.getElementRef()).getModule(IDomain.FEATURE_GENERATOR,
 				generatorId);
 				generatorId);
-		if (module instanceof IGeneratorEntryModuleExtension) {
-			((IGeneratorEntryModuleExtension) module).setGeneratorEntry(entry);
+		if (module instanceof LazyCombiningModule) {
+			((LazyCombiningModule) module).applyConfigurator(configurator);
 		}
 		}
 		return module;
 		return module;
 	}
 	}