diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/plugin.xml b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/plugin.xml index 5ad5679c3..dfd2d151e 100644 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/plugin.xml +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/plugin.xml @@ -13,8 +13,7 @@ - - + diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.IModelProcessor b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.IModelProcessor new file mode 100644 index 000000000..fc79e2a5d --- /dev/null +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.IModelProcessor @@ -0,0 +1 @@ +com.ge.research.sadl.jena.JenaBasedSadlModelProcessor \ No newline at end of file diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.ISadlImportProcessor b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.ISadlImportProcessor new file mode 100644 index 000000000..3d3e3228f --- /dev/null +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.ISadlImportProcessor @@ -0,0 +1 @@ +com.ge.research.sadl.jena.JenaBasedSadlImportProcessor \ No newline at end of file diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.ISadlInferenceProcessor b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.ISadlInferenceProcessor new file mode 100644 index 000000000..c4e07e731 --- /dev/null +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.jena/src/META-INF/services/com.ge.research.sadl.processing.ISadlInferenceProcessor @@ -0,0 +1 @@ +com.ge.research.sadl.jena.JenaBasedSadlInferenceProcessor \ No newline at end of file diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.tests/src/com/ge/research/sadl/tests/GH_154_CheckProcessorsTest.xtend b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.tests/src/com/ge/research/sadl/tests/GH_154_CheckProcessorsTest.xtend new file mode 100644 index 000000000..9e68e03b8 --- /dev/null +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.tests/src/com/ge/research/sadl/tests/GH_154_CheckProcessorsTest.xtend @@ -0,0 +1,71 @@ +/************************************************************************ + * Copyright © 2007-2017 - General Electric Company, All Rights Reserved + * + * Project: SADL + * + * Description: The Semantic Application Design Language (SADL) is a + * language for building semantic models and expressing rules that + * capture additional domain knowledge. The SADL-IDE (integrated + * development environment) is a set of Eclipse plug-ins that + * support the editing and testing of semantic models using the + * SADL language. + * + * This software is distributed "AS-IS" without ANY WARRANTIES + * and licensed under the Eclipse Public License - v 1.0 + * which is available at http://www.eclipse.org/org/documents/epl-v10.php + * + ***********************************************************************/ +package com.ge.research.sadl.tests + +import com.ge.research.sadl.jena.JenaBasedSadlImportProcessor +import com.ge.research.sadl.jena.JenaBasedSadlInferenceProcessor +import com.ge.research.sadl.jena.JenaBasedSadlModelProcessor +import com.ge.research.sadl.processing.SadlImportProcessorProvider +import com.ge.research.sadl.processing.SadlInferenceProcessorProvider +import com.ge.research.sadl.processing.SadlModelProcessorProvider +import com.google.inject.Inject +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.XtextRunner +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Test for checking whether any SADL model, inference, and import + * processors are available in the headless case. + * + *

+ * In this test we check the existence of the Jena-based ones. + * The processors are registered via Java SPI. + * + * @author akos.kitta + */ +@RunWith(XtextRunner) +@InjectWith(SADLInjectorProvider) +class GH_154_CheckProcessorsTest extends Assert { + + @Inject + SadlModelProcessorProvider modelProcessorProvider; + + @Inject + SadlInferenceProcessorProvider inferenceProcessorProvider + + @Inject + SadlImportProcessorProvider importProcessorProvider + + @Test + def void checkJenaModelProcessor() { + modelProcessorProvider.allProcessors.filter(JenaBasedSadlModelProcessor).empty.assertFalse; + } + + @Test + def void checkJenaInferenceProcessor() { + inferenceProcessorProvider.allProcessors.filter(JenaBasedSadlInferenceProcessor).empty.assertFalse; + } + + @Test + def void checkNotNullJenaImportProcessor() { + importProcessorProvider.allProcessors.filter(JenaBasedSadlImportProcessor).empty.assertFalse; + } + +} diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/META-INF/MANIFEST.MF b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/META-INF/MANIFEST.MF index 8c6d8504d..15b3927af 100644 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/META-INF/MANIFEST.MF +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/META-INF/MANIFEST.MF @@ -13,7 +13,8 @@ Require-Bundle: com.ge.research.sadl.ui, org.eclipse.xtext.testing, org.eclipse.xtext.junit4, org.eclipse.xtext.xbase.testing, - org.junit;bundle-version="4.12.0" + org.junit;bundle-version="4.12.0", + com.ge.research.sadl.jena;bundle-version="3.1.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: com.ge.research.sadl.ui.tests;x-internal=true Import-Package: org.hamcrest.core, diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/src/com/ge/research/sadl/ui/tests/GH_154_CheckProcessorsPluginTest.xtend b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/src/com/ge/research/sadl/ui/tests/GH_154_CheckProcessorsPluginTest.xtend new file mode 100644 index 000000000..ce5294313 --- /dev/null +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/src/com/ge/research/sadl/ui/tests/GH_154_CheckProcessorsPluginTest.xtend @@ -0,0 +1,81 @@ +/************************************************************************ + * Copyright © 2007-2017 - General Electric Company, All Rights Reserved + * + * Project: SADL + * + * Description: The Semantic Application Design Language (SADL) is a + * language for building semantic models and expressing rules that + * capture additional domain knowledge. The SADL-IDE (integrated + * development environment) is a set of Eclipse plug-ins that + * support the editing and testing of semantic models using the + * SADL language. + * + * This software is distributed "AS-IS" without ANY WARRANTIES + * and licensed under the Eclipse Public License - v 1.0 + * which is available at http://www.eclipse.org/org/documents/epl-v10.php + * + ***********************************************************************/ +package com.ge.research.sadl.ui.tests + +import com.ge.research.sadl.jena.JenaBasedSadlImportProcessor +import com.ge.research.sadl.jena.JenaBasedSadlInferenceProcessor +import com.ge.research.sadl.jena.JenaBasedSadlModelProcessor +import com.ge.research.sadl.processing.SadlImportProcessorProvider +import com.ge.research.sadl.processing.SadlInferenceProcessorProvider +import com.ge.research.sadl.processing.SadlModelProcessorProvider +import com.google.inject.Inject +import org.eclipse.core.runtime.Platform +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.XtextRunner +import org.junit.Assert +import org.junit.BeforeClass +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Test for checking whether any SADL model, inference, and import + * processors are available in the Eclipse-based case. + * + *

+ * In this test we check the existence of the Jena-based ones. + * The processors are registered via Eclipse-based extension points. + * + * @author akos.kitta + */ +@RunWith(XtextRunner) +@InjectWith(SADLUiInjectorProvider) +class GH_154_CheckProcessorsPluginTest extends Assert { + + @Inject + SadlModelProcessorProvider modelProcessorProvider; + + @Inject + SadlInferenceProcessorProvider inferenceProcessorProvider + + @Inject + SadlImportProcessorProvider importProcessorProvider; + + @BeforeClass + static def void assertRunningPlatform() { + assertTrue('These tests require a running Eclipse platform. + Execute them as a JUnit Plug-in Test. + If you see this error from Maven, then please configure your POM to use Tycho Surefire correctly for test execution.', + Platform.isRunning); + } + + @Test + def void checkJenaModelProcessor() { + modelProcessorProvider.allProcessors.filter(JenaBasedSadlModelProcessor).empty.assertFalse; + } + + @Test + def void checkJenaInferenceProcessor() { + inferenceProcessorProvider.allProcessors.filter(JenaBasedSadlInferenceProcessor).empty.assertFalse; + } + + @Test + def void checkNotNullJenaImportProcessor() { + importProcessorProvider.allProcessors.filter(JenaBasedSadlImportProcessor).empty.assertFalse; + } + +} diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/src/com/ge/research/sadl/ui/tests/HelloMaven.xtend b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/src/com/ge/research/sadl/ui/tests/HelloMaven.xtend deleted file mode 100644 index 3eed31e7b..000000000 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui.tests/src/com/ge/research/sadl/ui/tests/HelloMaven.xtend +++ /dev/null @@ -1,5 +0,0 @@ -package com.ge.research.sadl.ui.tests - -class HelloMaven { - -} \ No newline at end of file diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/META-INF/MANIFEST.MF b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/META-INF/MANIFEST.MF index 5fb9215d0..91bd078d4 100644 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/META-INF/MANIFEST.MF +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/META-INF/MANIFEST.MF @@ -34,7 +34,6 @@ Export-Package: com.ge.research.sadl.ui, com.ge.research.sadl.ui.labeling, com.ge.research.sadl.ui.outline, com.ge.research.sadl.ui.preferences, - com.ge.research.sadl.ui.processing, com.ge.research.sadl.ui.quickfix, com.ge.research.sadl.ui.syntaxcoloring, com.ge.research.sadl.ui.visualize diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/src/com/ge/research/sadl/ui/imports/OwlImportOperation.java b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/src/com/ge/research/sadl/ui/imports/OwlImportOperation.java index 27c8d253a..e8332af7e 100644 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/src/com/ge/research/sadl/ui/imports/OwlImportOperation.java +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/src/com/ge/research/sadl/ui/imports/OwlImportOperation.java @@ -14,7 +14,6 @@ import java.io.ByteArrayInputStream; import java.io.File; -import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -23,8 +22,6 @@ import java.util.List; import java.util.zip.ZipEntry; -import javax.activation.DataSource; - //import org.eclipse.core.filesystem.URIUtil; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; @@ -38,7 +35,6 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IExecutableExtension; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -65,8 +61,6 @@ import com.ge.research.sadl.processing.ISadlImportProcessor; import com.ge.research.sadl.processing.SadlImportProcessorProvider; import com.ge.research.sadl.ui.internal.SadlActivator; -import com.ge.research.sadl.ui.processing.ExtensionPointBasedSadlImportProcessorProvider; -import com.ge.research.sadl.utils.ResourceManager; import com.google.inject.Inject; import com.google.inject.Injector; diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/src/com/ge/research/sadl/ui/processing/ExtensionPointBasedSadlImportProcessorProvider.xtend b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/src/com/ge/research/sadl/ui/processing/ExtensionPointBasedSadlImportProcessorProvider.xtend deleted file mode 100644 index 0cb2b6935..000000000 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl.ui/src/com/ge/research/sadl/ui/processing/ExtensionPointBasedSadlImportProcessorProvider.xtend +++ /dev/null @@ -1,47 +0,0 @@ -/************************************************************************ - * Copyright © 2007-2016 - General Electric Company, All Rights Reserved - * - * Project: SADL - * - * Description: The Semantic Application Design Language (SADL) is a - * language for building semantic models and expressing rules that - * capture additional domain knowledge. The SADL-IDE (integrated - * development environment) is a set of Eclipse plug-ins that - * support the editing and testing of semantic models using the - * SADL language. - * - * This software is distributed "AS-IS" without ANY WARRANTIES - * and licensed under the Eclipse Public License - v 1.0 - * which is available at http://www.eclipse.org/org/documents/epl-v10.php - * - ***********************************************************************/ -package com.ge.research.sadl.ui.processing - -import com.ge.research.sadl.processing.SadlImportProcessorProvider -import com.ge.research.sadl.processing.ISadlImportProcessor -import com.google.inject.Provider -import org.eclipse.core.runtime.RegistryFactory -import com.google.inject.Inject -import com.google.inject.Injector - -class ExtensionPointBasedSadlImportProcessorProvider extends SadlImportProcessorProvider { - - static val EXTENSION_ID = 'com.ge.research.sadl.ui.sadl_import_processor' - - @Inject Injector injector; - - override getAllProviders() { - val registry = RegistryFactory.getRegistry(); - val configElements = registry.getConfigurationElementsFor(EXTENSION_ID).toList - return configElements.map [ configElement | - new Provider() { - override get() { - val result = configElement.createExecutableExtension("class") as ISadlImportProcessor - injector.injectMembers(result) - return result - } - }; - ]; - } - -} \ No newline at end of file diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/AbstractSadlProcessorProvider.xtend b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/AbstractSadlProcessorProvider.xtend index 78feb9517..f9979f373 100644 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/AbstractSadlProcessorProvider.xtend +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/AbstractSadlProcessorProvider.xtend @@ -29,7 +29,6 @@ import java.util.Map import java.util.ServiceLoader import org.eclipse.core.runtime.RegistryFactory import org.eclipse.emf.common.EMFPlugin -import org.eclipse.emf.ecore.resource.Resource import org.slf4j.LoggerFactory /** @@ -39,9 +38,14 @@ import org.slf4j.LoggerFactory * the Eclipse platform is not running, it uses the the Java SPI discovery * approach instead to load 3rd party processor implementations. * + * @param + *

Type of the provided processor. + * @param + * Type of the subject object which is used to provide the processor. + * * @author akos.kitta */ -abstract class AbstractSadlProcessorProvider

{ +abstract class AbstractSadlProcessorProvider { static val LOGGER = LoggerFactory.getLogger(AbstractSadlProcessorProvider); static val CONFIGURATION_ELEMENT_NAME = 'class'; @@ -62,9 +66,9 @@ abstract class AbstractSadlProcessorProvider

{ } /** - * Returns with the processor for the given resource argument. + * Returns with the processor for the given subject argument. */ - protected def P getProcessor(Resource resource); + def P getProcessor(R subject); /** * Returns with a view of all available processor instances. diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/SadlImportProcessorProvider.xtend b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/SadlImportProcessorProvider.xtend index e4afcc6ce..ea1527770 100644 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/SadlImportProcessorProvider.xtend +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/SadlImportProcessorProvider.xtend @@ -1,38 +1,48 @@ /************************************************************************ * Copyright © 2007-2016 - General Electric Company, All Rights Reserved - * + * * Project: SADL - * + * * Description: The Semantic Application Design Language (SADL) is a * language for building semantic models and expressing rules that * capture additional domain knowledge. The SADL-IDE (integrated * development environment) is a set of Eclipse plug-ins that * support the editing and testing of semantic models using the * SADL language. - * + * * This software is distributed "AS-IS" without ANY WARRANTIES * and licensed under the Eclipse Public License - v 1.0 * which is available at http://www.eclipse.org/org/documents/epl-v10.php - * + * ***********************************************************************/ package com.ge.research.sadl.processing -import com.google.inject.Provider -import java.util.Set +import com.google.common.base.Optional +import com.google.inject.Inject +import com.google.inject.Injector import org.eclipse.emf.ecore.resource.Resource import org.eclipse.emf.ecore.resource.ResourceSet import org.eclipse.xtend.lib.annotations.Data import org.eclipse.xtext.util.internal.EmfAdaptable -class SadlImportProcessorProvider { - +/** + * SADL import processor for both the headless and the Eclipse-based use-cases. + */ +class SadlImportProcessorProvider extends AbstractSadlProcessorProvider { + + static val EXTENSION_ID = 'com.ge.research.sadl.sadl_import_processor'; + @EmfAdaptable @Data static class InternalAdapter { - protected ISadlImportProcessor processor + private ISadlImportProcessor processor + } + + @Inject + new(Injector injector) { + super(ISadlImportProcessor, injector) } - - public static val Set> Registry = newHashSet - - def ISadlImportProcessor getProcessor(ResourceSet resourceSet) { + + @Override + override ISadlImportProcessor getProcessor(ResourceSet resourceSet) { val adapter = InternalAdapter.findInEmfObject(resourceSet) if (adapter !== null) { return adapter.processor @@ -41,31 +51,34 @@ class SadlImportProcessorProvider { new InternalAdapter(result).attachToEmfObject(resourceSet) return result } - + + @Override + override protected getExtensionPointId() { + return Optional.of(EXTENSION_ID); + } + protected def doCreateProcessor(ResourceSet set) { - val processors = getAllProviders.map[get]; + + // XXX akitta: it does not make much sense. It uses the first and ignores the others. return new ISadlImportProcessor() { + override onImport(Resource resource, String targetProjectOwlModelsFolder) { - val pitr = processors.iterator - while (pitr.hasNext()) { - val pr = pitr.next - return pr.onImport(resource, targetProjectOwlModelsFolder) + val itr = allProcessors.iterator; + while (itr.hasNext()) { + val processor = itr.next; + return processor.onImport(resource, targetProjectOwlModelsFolder); } } - + override onImport(String owlContent) { - val pitr = processors.iterator - while (pitr.hasNext()) { - val pr = pitr.next - return pr.onImport(owlContent) + val itr = allProcessors.iterator; + while (itr.hasNext()) { + val processor = itr.next; + return processor.onImport(owlContent); } } - - } - } - - protected def Iterable> getAllProviders() { - Registry + + }; } - -} \ No newline at end of file + +} diff --git a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/SadlInferenceProcessorProvider.xtend b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/SadlInferenceProcessorProvider.xtend index 56d277cbc..a30cc6551 100644 --- a/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/SadlInferenceProcessorProvider.xtend +++ b/sadl3/com.ge.research.sadl.parent/com.ge.research.sadl/src/com/ge/research/sadl/processing/SadlInferenceProcessorProvider.xtend @@ -24,9 +24,9 @@ import com.google.inject.Injector import org.eclipse.emf.ecore.resource.Resource /** - * Provides {@code SADL} inferences in a headless case. + * Provides {@code SADL} inferences. */ -class SadlInferenceProcessorProvider extends AbstractSadlProcessorProvider { +class SadlInferenceProcessorProvider extends AbstractSadlProcessorProvider { static val EXTENSION_ID = 'com.ge.research.sadl.sadl_inference_processor'; @@ -40,7 +40,7 @@ class SadlInferenceProcessorProvider extends AbstractSadlProcessorProvider implements IModelProcessorProvider { +class SadlModelProcessorProvider extends AbstractSadlProcessorProvider implements IModelProcessorProvider { static val MODEL_PROCESSOR_CACHE_KEY = 'modelprocessor'; static val EXTENSION_ID = 'com.ge.research.sadl.sadl_model_processor'; @@ -44,7 +44,7 @@ class SadlModelProcessorProvider extends AbstractSadlProcessorProvider