catch up with development
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b9f0a46
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+**/bin/
+**/target/
+**._trace
+**git.properties
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
index cdf6c7a..9ecbd7c 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -17,6 +17,7 @@
<jenkins.build.dependencies>
<jenkins.build.dependency>org.eclipse.osbp.bpmn2.ecore</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.dsl</jenkins.build.dependency>
+ <jenkins.build.dependency>org.eclipse.osbp.ecview.addons</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.preferences</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.ui.api</jenkins.build.dependency>
diff --git a/org.eclipse.osbp.dsl.metadata.service.feature/.gitignore b/org.eclipse.osbp.dsl.metadata.service.feature/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service.feature/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.dsl.metadata.service.feature/feature.xml b/org.eclipse.osbp.dsl.metadata.service.feature/feature.xml
index e8951d3..aef77ab 100644
--- a/org.eclipse.osbp.dsl.metadata.service.feature/feature.xml
+++ b/org.eclipse.osbp.dsl.metadata.service.feature/feature.xml
@@ -14,7 +14,8 @@
id="org.eclipse.osbp.dsl.metadata.service.feature"
label="%featureName"
version="0.9.0.qualifier"
- provider-name="%providerName">
+ provider-name="%providerName"
+ plugin="org.eclipse.osbp.dsl.metadata.service">
<description>
%description
diff --git a/org.eclipse.osbp.dsl.metadata.service/.classpath b/org.eclipse.osbp.dsl.metadata.service/.classpath
new file mode 100644
index 0000000..43b9862
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.dsl.metadata.service/.gitignore b/org.eclipse.osbp.dsl.metadata.service/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.dsl.metadata.service/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.dsl.metadata.service/META-INF/MANIFEST.MF b/org.eclipse.osbp.dsl.metadata.service/META-INF/MANIFEST.MF
index e1a0a39..82e09f1 100644
--- a/org.eclipse.osbp.dsl.metadata.service/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.dsl.metadata.service/META-INF/MANIFEST.MF
@@ -9,8 +9,8 @@
osgi.enterprise;bundle-version="4.2.0",
org.eclipse.emf.common,
org.eclipse.emf.ecore;bundle-version="2.10.2",
- org.eclipse.xtext;bundle-version="[2.7.3,2.8.0)",
- org.eclipse.xtext.common.types;bundle-version="[2.7.3,2.8.0)",
+ org.eclipse.xtext;bundle-version="[2.11.0,2.12.0)",
+ org.eclipse.xtext.common.types;bundle-version="[2.11.0,2.12.0)",
org.eclipse.osbp.xtext.builder.metadata.services;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.xtext.builder.types.loader.api;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.xtext.builder.types.loader.runtime;bundle-version="[0.9.0,0.10.0)",
@@ -31,7 +31,8 @@
org.eclipse.osbp.dsl.entity.xtext;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.dsl.dto.xtext;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.dsl.datatype.xtext;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.osbp.xtext.statemachine;bundle-version="0.9.0"
+ org.eclipse.osbp.xtext.statemachine;bundle-version="0.9.0",
+ org.eclipse.osbp.ecview.dsl;bundle-version="0.9.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Import-Package: javax.validation.constraints,
@@ -39,10 +40,10 @@
org.eclipse.e4.core.services.translation,
org.eclipse.osbp.preferences;version="0.9.0",
org.eclipse.osbp.ui.api.metadata;version="0.9.0",
+ org.eclipse.osbp.ui.api.perspective;version="0.9.0",
org.eclipse.osbp.xtext.blip;version="0.9.0",
org.eclipse.osbp.xtext.i18n;version="0.9.0",
org.eclipse.osbp.xtext.perspective;version="0.9.0",
- org.jbpm.task.query;version="5.5.1",
org.osgi.service.component;version="1.2.0",
org.osgi.service.component.annotations,
org.slf4j;resolution:=optional
diff --git a/org.eclipse.osbp.dsl.metadata.service/src/org/eclipse/osbp/dsl/metadata/service/DSLBuilderParticipant.java b/org.eclipse.osbp.dsl.metadata.service/src/org/eclipse/osbp/dsl/metadata/service/DSLBuilderParticipant.java
index 4176fa5..1485121 100644
--- a/org.eclipse.osbp.dsl.metadata.service/src/org/eclipse/osbp/dsl/metadata/service/DSLBuilderParticipant.java
+++ b/org.eclipse.osbp.dsl.metadata.service/src/org/eclipse/osbp/dsl/metadata/service/DSLBuilderParticipant.java
@@ -1,20 +1,22 @@
-/**
+/*
*
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany
*
- * 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
+ * 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:
- * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ * Initial contribution:
+ * Loetz GmbH & Co. KG
+ *
*/
package org.eclipse.osbp.dsl.metadata.service;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.HashMap;
@@ -23,6 +25,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.MissingResourceException;
import java.util.Properties;
import java.util.ResourceBundle;
@@ -30,23 +33,34 @@
import javax.inject.Inject;
+import org.apache.commons.lang3.StringUtils;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.osbp.dsl.semantic.common.types.LTypedPackage;
import org.eclipse.osbp.dsl.semantic.dto.LDto;
+import org.eclipse.osbp.dsl.semantic.entity.LEntity;
import org.eclipse.osbp.dsl.xtext.types.bundles.BundleSpaceTypeProvider;
+import org.eclipse.osbp.ecview.semantic.uimodel.UiModel;
+import org.eclipse.osbp.ecview.semantic.uimodel.UiView;
import org.eclipse.osbp.preferences.ProductConfiguration;
import org.eclipse.osbp.runtime.common.extender.IExtenderConstants;
import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
+import org.eclipse.osbp.ui.api.perspective.IPerspectiveProvider;
+import org.eclipse.osbp.xtext.authorizationdsl.AuthorizationPackage;
+import org.eclipse.osbp.xtext.authorizationdsl.Role;
import org.eclipse.osbp.xtext.builder.metadata.services.AbstractBuilderParticipant;
import org.eclipse.osbp.xtext.builder.metadata.services.IBuilderParticipant;
import org.eclipse.osbp.xtext.builder.metadata.services.IMetadataBuilderService;
+import org.eclipse.osbp.xtext.builder.metadata.services.IUnitOfWork;
import org.eclipse.osbp.xtext.chart.Chart;
import org.eclipse.osbp.xtext.chart.ChartDSLPackage;
import org.eclipse.osbp.xtext.chart.ChartPackage;
+import org.eclipse.osbp.xtext.datainterchange.DataInterchangePackage;
+import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
import org.eclipse.osbp.xtext.datamartdsl.DatamartDefinition;
+import org.eclipse.osbp.xtext.datamartdsl.DatamartEntity;
import org.eclipse.osbp.xtext.datamartdsl.DatamartPackage;
import org.eclipse.osbp.xtext.dialogdsl.Dialog;
import org.eclipse.osbp.xtext.dialogdsl.DialogDSLPackage;
@@ -88,7 +102,7 @@
public class DSLBuilderParticipant extends AbstractBuilderParticipant {
/** The Constant log. */
- private final static Logger log = LoggerFactory.getLogger(DSLBuilderParticipant.class);
+ private static final Logger log = LoggerFactory.getLogger(DSLBuilderParticipant.class);
/** The metadata builder service. */
@Inject
@@ -101,7 +115,13 @@
private ServiceRegistration<IDSLMetadataService> dslServiceRegister;
/** The dsl bundles. */
- private Map<String, List<Bundle>> dslBundles = new HashMap<String, List<Bundle>>();
+ private Map<String, List<Bundle>> dslBundles = new HashMap<>();
+
+ /** The used keys. */
+ private Map<Bundle, List<String>> usedKeys = new HashMap<>();
+
+ /** The scanned bundles for translations. */
+ private List<Bundle> scannedBundles = new ArrayList<>();
/** The translations. */
private HashMap<String, Properties> translations = new HashMap<>();
@@ -132,71 +152,24 @@
/*
* (non-Javadoc)
*
- * @see
- * org.eclipse.osbp.xtext.builder.metadata.services.AbstractBuilderParticipant
- * #getModels(org.osgi.framework.Bundle)
+ * @see org.eclipse.osbp.xtext.builder.metadata.services.
+ * AbstractBuilderParticipant #getModels(org.osgi.framework.Bundle)
*/
@Override
public List<URL> getModels(Bundle suspect) {
- List<URL> results = new ArrayList<URL>();
+ List<URL> results = new ArrayList<>();
BundleWiring wiring = suspect.adapt(BundleWiring.class);
suspect.getState();
if (wiring == null) {
return results;
}
- log.debug("visiting bundle " + suspect.getSymbolicName());
- // bundles containing model information
- if (containsHeader(suspect, IExtenderConstants.FACTORY_MODEL_EXTENDER)) {
- for (String extension : getExtensions(suspect, IExtenderConstants.FACTORY_MODEL_EXTENDER)) {
- extension = extension.trim();
- if (!extension.isEmpty()) {
- List<URL> entries = wiring.findEntries("/", "*." + extension, BundleWiring.LISTRESOURCES_RECURSE);
- boolean hadEntries = false;
- for (URL entry : entries) {
- if (!entry.getPath().contains("META-INF")) {
- log.debug("found entry " + entry.getPath() + " from bundle " + suspect.getSymbolicName());
- results.add(entry);
- hadEntries = true;
- }
- }
- if (hadEntries) {
- if (dslBundles.containsKey(extension)) {
- if (!dslBundles.get(extension).contains(suspect)) {
- dslBundles.get(extension).add(suspect);
- }
- } else {
- List<Bundle> list = new ArrayList<Bundle>();
- list.add(suspect);
- dslBundles.put(extension, list);
- }
- loadTranslations(suspect);
- }
- }
- }
- }
- // bundles necessary in runtime to be called dynamically via uri
- if (containsHeader(suspect, IExtenderConstants.FACTORY_BUNDLE_EXTENDER)) {
- for (String extension : getExtensions(suspect, IExtenderConstants.FACTORY_BUNDLE_EXTENDER)) {
- extension = extension.trim();
- if (!extension.isEmpty()) {
- if (dslBundles.containsKey(extension)) {
- if (!dslBundles.get(extension).contains(suspect)) {
- dslBundles.get(extension).add(suspect);
- }
- } else {
- List<Bundle> list = new ArrayList<Bundle>();
- list.add(suspect);
- dslBundles.put(extension, list);
- }
- }
- }
- }
- // bundles containing translations
- if (containsHeader(suspect, IExtenderConstants.FACTORY_TRANSLATIONS)) {
- loadTranslations(suspect);
- }
+ log.debug("visiting bundle {}", suspect.getSymbolicName());
+ scanModelBundles(suspect, results, wiring);
+ scanRuntimeBundles(suspect);
+ // bundles containing translations and don't scan translations twice
+ scanTranslationBundles(suspect);
- Set<String> fragments = new HashSet<String>();
+ Set<String> fragments = new HashSet<>();
for (Iterator<URL> iterator = results.iterator(); iterator.hasNext();) {
URL url = iterator.next();
URI uri = URI.createURI(url.toString());
@@ -210,6 +183,90 @@
}
/**
+ * Scan translation bundles containing translation resources.
+ *
+ * @param suspect
+ * the suspect
+ */
+ private void scanTranslationBundles(Bundle suspect) {
+ if (containsHeader(suspect, IExtenderConstants.FACTORY_TRANSLATIONS) && !scannedBundles.contains(suspect)) {
+ loadTranslations(suspect);
+ scannedBundles.add(suspect);
+ }
+ }
+
+ /**
+ * Scan runtime bundles necessary at runtime to be called dynamically via
+ * uri.
+ *
+ * @param suspect
+ * the suspect
+ */
+ private void scanRuntimeBundles(Bundle suspect) { // NOSONAR
+ if (containsHeader(suspect, IExtenderConstants.FACTORY_BUNDLE_EXTENDER)) {
+ for (String extension : getExtensions(suspect, IExtenderConstants.FACTORY_BUNDLE_EXTENDER)) {
+ extension = extension.trim();
+ if (!extension.isEmpty()) {
+ if (dslBundles.containsKey(extension)) {
+ if (!dslBundles.get(extension).contains(suspect)) {
+ dslBundles.get(extension).add(suspect);
+ }
+ } else {
+ List<Bundle> list = new ArrayList<>();
+ list.add(suspect);
+ dslBundles.put(extension, list);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Scan model bundles containing model information
+ *
+ * @param suspect
+ * the suspect
+ * @param results
+ * the results
+ * @param wiring
+ * the wiring
+ */
+ private void scanModelBundles(Bundle suspect, List<URL> results, BundleWiring wiring) { // NOSONAR
+ if (containsHeader(suspect, IExtenderConstants.FACTORY_MODEL_EXTENDER)) {
+ for (String extension : getExtensions(suspect, IExtenderConstants.FACTORY_MODEL_EXTENDER)) {
+ extension = extension.trim();
+ if (!extension.isEmpty()) {
+ List<URL> entries = wiring.findEntries("/", "*." + extension, BundleWiring.LISTRESOURCES_RECURSE);
+ boolean hadEntries = false;
+ for (URL entry : entries) {
+ if (!entry.getPath().contains("META-INF")) {
+ log.debug("found entry {} from bundle {}", entry.getPath(), suspect.getSymbolicName());
+ results.add(entry);
+ hadEntries = true;
+ }
+ }
+ if (hadEntries) {
+ if (dslBundles.containsKey(extension)) {
+ if (!dslBundles.get(extension).contains(suspect)) {
+ dslBundles.get(extension).add(suspect);
+ }
+ } else {
+ List<Bundle> list = new ArrayList<>();
+ list.add(suspect);
+ dslBundles.put(extension, list);
+ }
+ // don't scan translations twice
+ if (!scannedBundles.contains(suspect)) {
+ loadTranslations(suspect);
+ scannedBundles.add(suspect);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
* Load translations from a bundle. Tries to find an i18n directory with
* different language properties.
*
@@ -219,7 +276,27 @@
void loadTranslations(Bundle suspect) {
BundleWiring bundleWiring = suspect.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
+ // check for duplicates
+ List<String> duplicateKeys = new ArrayList<>();
+ try {
+ final List<String> keys = Collections
+ .list(ResourceBundle.getBundle("i18n.I18N", Locale.ROOT, classLoader).getKeys());
+ for (Entry<Bundle, List<String>> used : usedKeys.entrySet()) {
+ for (String entry : used.getValue()) {
+ if (keys.contains(entry)) {
+ duplicateKeys.add(entry);
+ log.debug("{} translates the key >{}< but was already translated by {}",
+ suspect.getSymbolicName(), entry, used.getKey().getSymbolicName());
+ }
+ }
+ }
+ usedKeys.put(suspect, keys);
+ } catch (MissingResourceException e) { // NOSONAR
+ }
for (String language : ProductConfiguration.getLanguages().keySet()) {
+ if (language.equals("default")) {
+ continue;
+ }
Properties properties = null;
if (translations.containsKey(language)) {
properties = translations.get(language);
@@ -227,20 +304,46 @@
properties = new Properties();
}
try {
- ResourceBundle resource = ResourceBundle.getBundle("i18n.I18N", Locale.forLanguageTag(language), classLoader);
- Enumeration<String> keyIterator = resource.getKeys();
- while (keyIterator.hasMoreElements()) {
- String element = keyIterator.nextElement();
- String value = resource.getString(element);
+ ResourceBundle resource = ResourceBundle.getBundle("i18n.I18N", Locale.forLanguageTag(language),
+ classLoader);
+ computeTranslations(duplicateKeys, language, properties, resource);
+ } catch (MissingResourceException e) {
+ log.debug("bundle {} has no resource for locale {}", suspect.getSymbolicName(), language);
+ }
+ }
+ }
+
+ private void computeTranslations(List<String> duplicateKeys, String language, Properties properties, // NOSONAR
+ ResourceBundle resource) {
+ Enumeration<String> keyIterator = resource.getKeys();
+ while (keyIterator.hasMoreElements()) {
+ String element = keyIterator.nextElement();
+ if (!element.isEmpty()) {
+ String value = resource.getString(element);
+ if (duplicateKeys.contains(element)) {
+ if (value == null) {
+ value = "";
+ }
+ String prevValue = properties.getProperty(element);
+ if (prevValue == null) {
+ prevValue = "";
+ }
+ int distanceFromKey = StringUtils.getLevenshteinDistance(value, element);
+ int distanceFromPrevious = StringUtils.getLevenshteinDistance(prevValue, element);
+ if (distanceFromKey > 1 && distanceFromKey > distanceFromPrevious) {
+ properties.put(element, value);
+ log.debug(
+ "translation for {} of key >{}< with >{}< was preferred due to its better levenshtein distance from the key.",
+ language, element, value);
+ }
+ } else if (value != null && !value.equals(element)) {
properties.put(element, value);
}
- if (!properties.isEmpty()) {
- translations.put(language, properties);
- }
- } catch (MissingResourceException e) {
- log.error("bundle "+suspect.getSymbolicName()+" has no resource for locale "+language);
}
}
+ if (!properties.isEmpty()) {
+ translations.put(language, properties);
+ }
}
/**
@@ -274,14 +377,14 @@
* @return the extensions
*/
private List<String> getExtensions(Bundle bundle, String header) {
- return new ArrayList<String>(Arrays.asList(bundle.getHeaders().get(header).split(",")));
+ return new ArrayList<>(Arrays.asList(bundle.getHeaders().get(header).split(",")));
}
/*
* (non-Javadoc)
*
- * @see
- * org.eclipse.osbp.xtext.builder.metadata.services.AbstractBuilderParticipant
+ * @see org.eclipse.osbp.xtext.builder.metadata.services.
+ * AbstractBuilderParticipant
* #notifyLifecyle(org.eclipse.osbp.xtext.builder.metadata.services.
* IBuilderParticipant.LifecycleEvent)
*/
@@ -291,7 +394,8 @@
initialize();
} else if (event.getState() == IBuilderParticipant.LifecycleEvent.BUNDLES_SCANNED) {
DSLMetadataService datatypesService = new DSLMetadataService();
- dslServiceRegister = context.getBundleContext().registerService(IDSLMetadataService.class, datatypesService, null);
+ dslServiceRegister = context.getBundleContext().registerService(IDSLMetadataService.class, datatypesService,
+ null);
} else if (event.getState() == IBuilderParticipant.LifecycleEvent.DEACTIVATED) {
if (dslServiceRegister != null) {
@@ -327,52 +431,83 @@
*/
@Override
public EObject getMetadata(String id, EClass eclass) {
- EObject eObject = metadataBuilderService.getMetadata(id, eclass);
- return eObject;
+ return metadataBuilderService.getMetadata(id, eclass);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ui.api.metadata.IDSLMetadataService#getResourceURL(
+ * java.lang.String, java.lang.String)
+ */
@Override
- public URL getResourceURL(EObject eObject, String resourceExtension, String extension) {
- String fqn = NamingConventions.toFQN(eObject);
- String resourcePath = fqn.replaceAll("\\.","/")+"."+resourceExtension;
+ public URL getResourceURL(String resourceName, String extension) {
+ if (dslBundles.containsKey(extension)) {
+ for (Bundle bundle : dslBundles.get(extension)) {
+ BundleWiring wiring = bundle.adapt(BundleWiring.class);
+ List<URL> entries = wiring.findEntries("/", resourceName, BundleWiring.LISTRESOURCES_RECURSE);
+ if (!entries.isEmpty()) {
+ return entries.get(0);
+ }
+ }
+ }
+ log.error("resource {} could not be found in bundles with extension {}", resourceName, extension);
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ui.api.metadata.IDSLMetadataService#getClass(org.
+ * eclipse.emf.ecore.EObject, java.lang.String)
+ */
+ @Override
+ public Class<?> getClass(EObject eObject, String extension) {
+ String className = getClassName(eObject, "");
if (dslBundles.containsKey(extension)) {
for (Bundle bundle : dslBundles.get(extension)) {
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
- URL url = classLoader.getResource(resourcePath);
- if(url != null) {
- return url;
+ Class<?> clz = null;
+ try {
+ clz = classLoader.loadClass(className);
+ } catch (ClassNotFoundException e) {
+ // nothing to do
+ }
+ if (clz != null) {
+ return clz;
}
}
}
- log.error("resource url "+resourcePath+" could not be found in bundles with extension "+extension);
+ log.error("class {} could not be found for extension {}", className, extension);
return null;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.ui.api.metadata.IDSLMetadataService#getClassInstance
+ * (org.eclipse.emf.ecore.EObject, java.lang.String)
+ */
@Override
public Object getClassInstance(EObject eObject, String extension) {
- String className = getClassName(eObject, "");
- if (dslBundles.containsKey(extension)) {
- try {
- for (Bundle bundle : dslBundles.get(extension)) {
- BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
- ClassLoader classLoader = bundleWiring.getClassLoader();
- Class<?> clz = classLoader.loadClass(className);
- try {
- return clz.newInstance();
- } catch (InstantiationException | IllegalAccessException e) {
- log.error("class "+className+" could not be instantiated");
- if(e.getCause() != null) {
- log.error("because "+e.getCause());
- }
- }
- }
- } catch (ClassNotFoundException e) {
+ Class<?> clz = getClass(eObject, extension);
+ try {
+ if (clz != null) {
+ return clz.newInstance();
+ }
+ } catch (InstantiationException | IllegalAccessException e) {
+ log.error("class {} could not be instantiated", clz.getCanonicalName());
+ if (e.getCause() != null) {
+ log.error("because " + e.getCause());
}
}
- log.error("class "+className+" could not be found for extension "+extension);
return null;
}
+
/**
* Gets the class URI. As more than one bundle could carry a model
* instance, we must try to load the requested class to be sure to have
@@ -391,9 +526,11 @@
try {
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
- classLoader.loadClass(className);
- return "bundleclass://" + bundle.getSymbolicName() + "/" + className;
- } catch (ClassNotFoundException e) {
+ Class<?> clz = classLoader.loadClass(className);
+ if (clz != null) {
+ return "bundleclass://" + bundle.getSymbolicName() + "/" + className;
+ }
+ } catch (ClassNotFoundException e) { // NOSONAR
}
}
}
@@ -415,9 +552,8 @@
/*
* (non-Javadoc)
*
- * @see
- * org.eclipse.osbp.ui.api.metadata.IDSLMetadataService#getAllDescriptions
- * (org.eclipse.emf.ecore.EClass)
+ * @see org.eclipse.osbp.ui.api.metadata.IDSLMetadataService#
+ * getAllDescriptions (org.eclipse.emf.ecore.EClass)
*/
@Override
public Iterable<IEObjectDescription> getAllDescriptions(EClass eClass) {
@@ -462,9 +598,8 @@
/*
* (non-Javadoc)
*
- * @see
- * org.eclipse.osbp.ui.api.metadata.IDSLMetadataService#getAll(org.eclipse
- * .emf.ecore.EClass)
+ * @see org.eclipse.osbp.ui.api.metadata.IDSLMetadataService#getAll(org.
+ * eclipse .emf.ecore.EClass)
*/
@Override
public Iterable<EObject> getAll(EClass eClass) {
@@ -480,7 +615,7 @@
*/
@Override
public String translate(String localeString, String key) {
- if (localeString == null) {
+ if (localeString == null || key == null) {
return key;
}
String k = I18NKeyGenerator.key(key);
@@ -491,10 +626,17 @@
String ranges = localeString + ";q=1.0";
List<Locale.LanguageRange> languageRanges = Locale.LanguageRange.parse(ranges);
String localeTag = Locale.lookupTag(languageRanges, translations.keySet());
- Properties properties = translations.get(localeTag);
- if (properties.containsKey(k)) {
- String value = properties.getProperty(k);
- return value;
+ if (localeTag != null) {
+ Properties properties = translations.get(localeTag);
+ if (properties != null) {
+ if (properties.containsKey(k)) {
+ return properties.getProperty(k);
+ }
+ } else {
+ log.error("localeTag {} not supported", localeTag);
+ }
+ } else {
+ log.error("locale {} not supported", localeString);
}
return key;
}
@@ -565,8 +707,7 @@
@Override
public List<Pair> getDslGrammarElementNames(IDSLMetadataService.DSLLiterals literal) {
List<Pair> result = new ArrayList<>();
- switch (literal) {
- case PERSPECTIVES:
+ if (literal == DSLLiterals.PERSPECTIVES) {
for (EObject obj : getAll(PerspectiveDslPackage.Literals.PERSPECTIVE)) {
Perspective perspective = ((Perspective) obj);
result.add(Tuples.pair(perspective.getName(), NamingConventions.getPerspectiveFQN(perspective)));
@@ -574,12 +715,59 @@
}
return result;
}
+
+ @Override
+ public <T> void execute(T state, Object unitOfWork) {
+ metadataBuilderService.execute(state, (IUnitOfWork<T>) unitOfWork);
+ }
+
+ @Override
+ public Class<?> getDatamartRootClass(String canonicalName) {
+ DatamartDefinition definition = (DatamartDefinition) getMetadata(canonicalName,
+ DatamartDSLPackage.Literals.DATAMART_DEFINITION);
+ if (definition == null) {
+ return null;
+ }
+ if (!(definition.getSource() instanceof DatamartEntity)) {
+ return null;
+ }
+ LEntity entity = ((DatamartEntity) definition.getSource()).getEntityRef();
+ return getClass(entity, "entity");
+ }
+
+ @Override
+ public String getDatamartRootClassIdentifierName(String canonicalName) {
+ DatamartDefinition definition = (DatamartDefinition) getMetadata(canonicalName,
+ DatamartDSLPackage.Literals.DATAMART_DEFINITION);
+ if (definition == null) {
+ return null;
+ }
+ if (!(definition.getSource() instanceof DatamartEntity)) {
+ return null;
+ }
+ LEntity entity = ((DatamartEntity) definition.getSource()).getEntityRef();
+ if (entity.getPrimaryKeyAttribute() == null) {
+ return null;
+ }
+ return entity.getPrimaryKeyAttribute().getName();
+ }
+
+ @Override
+ public String getECViewId(EObject dialog) {
+ if(!(dialog instanceof Dialog)) {
+ log.error("{} is not a dialog.", dialog);
+ return "";
+ }
+ return NamingConventions.getECViewId((Dialog) dialog);
+ }
}
/**
* The Class NamingConventions.
*/
private static class NamingConventions {
+ private NamingConventions() {
+ }
/**
* To extension.
@@ -592,18 +780,19 @@
EPackage pkg = eObject.eClass().getEPackage();
if (pkg == ChartDSLPackage.eINSTANCE) {
- return "chart";
+ return IPerspectiveProvider.PerspectiveViewType.CHART;
} else if (pkg == DialogDSLPackage.eINSTANCE) {
- return "dialog";
+ return IPerspectiveProvider.PerspectiveViewType.DIALOG;
} else if (pkg == ReportDSLPackage.eINSTANCE) {
- return "report";
+ return IPerspectiveProvider.PerspectiveViewType.REPORT;
} else if (pkg == TableDSLPackage.eINSTANCE) {
- return "table";
+ return IPerspectiveProvider.PerspectiveViewType.TABLE;
} else if (pkg == TopologyDSLPackage.eINSTANCE) {
- return "topology";
+ return IPerspectiveProvider.PerspectiveViewType.TOPOLOGY;
}
- throw new IllegalArgumentException("No registered naming logic for " + eObject);
+ throw new IllegalArgumentException(
+ IDSLMetadataService.ThrowableMessages.NAMING_LOGIC_NOT_REGISTERD + eObject);
}
/**
@@ -620,6 +809,8 @@
if (eObject instanceof Chart) {
return getChartFQN(eObject);
+ } else if (eObject instanceof Role) {
+ return getAuthorizationFQN(eObject);
} else if (eObject instanceof Dialog) {
return getDialogFQN(eObject);
} else if (eObject instanceof LDto) {
@@ -633,7 +824,8 @@
} else if (eObject instanceof DatamartDefinition) {
return getDatamartFQN(eObject);
}
- throw new IllegalArgumentException("No registered naming logic for " + eObject);
+ throw new IllegalArgumentException(
+ IDSLMetadataService.ThrowableMessages.NAMING_LOGIC_NOT_REGISTERD + eObject);
}
/**
@@ -652,6 +844,10 @@
return getChartClassName(eObject);
} else if (eObject instanceof Dialog) {
return getDialogClassName(eObject);
+ } else if (eObject instanceof LDto) {
+ return getDtoClassName(eObject);
+ } else if (eObject instanceof LEntity) {
+ return getEntityClassName(eObject);
} else if (eObject instanceof Report) {
return getReportClassName(eObject);
} else if (eObject instanceof Table) {
@@ -662,8 +858,11 @@
return getTopologyClassName(eObject);
} else if (eObject instanceof DatamartDefinition) {
return getDatamartClassName(eObject);
+ } else if (eObject instanceof DataInterchangePackage) {
+ return getDataInterchangeClassName(eObject);
}
- throw new IllegalArgumentException("No registered naming logic for " + eObject);
+ throw new IllegalArgumentException(
+ IDSLMetadataService.ThrowableMessages.NAMING_LOGIC_NOT_REGISTERD + eObject);
}
/**
@@ -683,6 +882,38 @@
}
/**
+ * Gets the entity FQN.
+ *
+ * @param eObject
+ * the e object
+ * @return the entity FQN
+ */
+ private static String getEntityFQN(EObject eObject) {
+ LEntity entity = (LEntity) eObject;
+ if (entity == null) {
+ return "";
+ }
+ LTypedPackage pkg = (LTypedPackage) entity.eContainer();
+ return pkg.getName() + "." + entity.getName();
+ }
+
+ /**
+ * Gets the authorization FQN.
+ *
+ * @param eObject
+ * the e object
+ * @return the table FQN
+ */
+ private static String getAuthorizationFQN(EObject eObject) {
+ Role role = (Role) eObject;
+ if (role == null) {
+ return "";
+ }
+ AuthorizationPackage pkg = (AuthorizationPackage) role.eContainer();
+ return pkg.getName() + "." + role.getName();
+ }
+
+ /**
* Gets the table FQN.
*
* @param eObject
@@ -690,12 +921,12 @@
* @return the table FQN
*/
private static String getTableFQN(EObject eObject) {
- Table dto = (Table) eObject;
- if (dto == null) {
+ Table table = (Table) eObject;
+ if (table == null) {
return "";
}
- TablePackage pkg = (TablePackage) dto.eContainer();
- return pkg.getName() + "." + dto.getName();
+ TablePackage pkg = (TablePackage) table.eContainer();
+ return pkg.getName() + "." + table.getName();
}
/**
@@ -706,12 +937,12 @@
* @return the chart FQN
*/
private static String getChartFQN(EObject eObject) {
- Chart dto = (Chart) eObject;
- if (dto == null) {
+ Chart chart = (Chart) eObject;
+ if (chart == null) {
return "";
}
- ChartPackage pkg = (ChartPackage) dto.eContainer();
- return pkg.getName() + "." + dto.getName();
+ ChartPackage pkg = (ChartPackage) chart.eContainer();
+ return pkg.getName() + "." + chart.getName();
}
/**
@@ -722,12 +953,12 @@
* @return the report FQN
*/
private static String getReportFQN(EObject eObject) {
- Report dto = (Report) eObject;
- if (dto == null) {
+ Report report = (Report) eObject;
+ if (report == null) {
return "";
}
- ReportPackage pkg = (ReportPackage) dto.eContainer();
- return pkg.getName() + "." + dto.getName();
+ ReportPackage pkg = (ReportPackage) report.eContainer();
+ return pkg.getName() + "." + report.getName();
}
/**
@@ -738,20 +969,30 @@
* @return the dialog FQN
*/
private static String getDialogFQN(EObject eObject) {
- Dialog dto = (Dialog) eObject;
- if (dto == null) {
+ Dialog dialog = (Dialog) eObject;
+ if (dialog == null) {
return "";
}
- DialogPackage pkg = (DialogPackage) dto.eContainer();
- return pkg.getName() + "." + dto.getName();
+ DialogPackage pkg = (DialogPackage) dialog.eContainer();
+ String name = pkg.getName() + "." + dialog.getName();
+
+ return name;
+ }
+
+ private static String getDatainterchangeFQN(EObject eObject) {
+ DataInterchangePackage data = (DataInterchangePackage) eObject;
+ if (data == null) {
+ return "";
+ }
+ return data.getName();
}
/**
- * Gets the dialog FQN.
+ * Gets the perspective FQN.
*
* @param eObject
* the e object
- * @return the dialog FQN
+ * @return the perspective FQN
*/
private static String getPerspectiveFQN(EObject eObject) {
Perspective perspective = (Perspective) eObject;
@@ -770,18 +1011,19 @@
* @return the topology FQN
*/
private static String getTopologyFQN(EObject eObject) {
- Topology dto = (Topology) eObject;
- if (dto == null) {
+ Topology topology = (Topology) eObject;
+ if (topology == null) {
return "";
}
- TopologyPackage pkg = (TopologyPackage) dto.eContainer();
- return pkg.getName() + "." + dto.getName();
+ TopologyPackage pkg = (TopologyPackage) topology.eContainer();
+ return pkg.getName() + "." + topology.getName();
}
/**
* Gets the datamart FQN.
*
- * @param eObject the e object
+ * @param eObject
+ * the e object
* @return the datamart FQN
*/
private static String getDatamartFQN(EObject eObject) {
@@ -794,6 +1036,28 @@
}
/**
+ * Gets the dto class name.
+ *
+ * @param eObject
+ * the e object
+ * @return the dto class name
+ */
+ private static String getDtoClassName(EObject eObject) {
+ return getDtoFQN(eObject);
+ }
+
+ /**
+ * Gets the entity class name.
+ *
+ * @param eObject
+ * the e object
+ * @return the entity class name
+ */
+ private static String getEntityClassName(EObject eObject) {
+ return getEntityFQN(eObject);
+ }
+
+ /**
* Gets the topology class name.
*
* @param eObject
@@ -807,7 +1071,8 @@
/**
* Gets the datamart class name.
*
- * @param eObject the e object
+ * @param eObject
+ * the e object
* @return the datamart class name
*/
private static String getDatamartClassName(EObject eObject) {
@@ -871,7 +1136,41 @@
* @return the dialog class name
*/
private static String getDialogClassName(EObject eObject) {
- return getDialogFQN(eObject) + "Dialog";
+ Dialog dialog = (Dialog) eObject;
+ if(dialog.isEmbedded()) {
+ return getDialogFQN(eObject) + "DialogEmbedded";
+ }else{
+ return getDialogFQN(eObject) + "Dialog";
+ }
+ }
+
+ private static String getDataInterchangeClassName(EObject eObject) {
+ return getDatainterchangeFQN(eObject) + "TriggerView";
+ }
+
+ /**
+ * Gets the ecview id.
+ *
+ * @param dialog
+ * the dialog
+ * @return the ecview id
+ */
+ private static String getECViewId(Dialog dialog) {
+ if (dialog == null) {
+ return "";
+ }
+ DialogPackage pkg = (DialogPackage) dialog.eContainer();
+ String ecviewId = null;
+ if (dialog.isAutowire()) {
+ ecviewId = pkg.getName() + ".autobinded." + dialog.getName();
+ } else if (dialog.getUiView() != null) {
+ UiView ui = dialog.getUiView();
+ UiModel model = (UiModel) ui.eContainer();
+ ecviewId = model.getPackageName() + "." + ui.getName();
+ } else {
+ ecviewId = pkg.getName() + "." + dialog.getName();
+ }
+ return ecviewId;
}
}
diff --git a/pom.xml b/pom.xml
index 6c123b3..55cea39 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,4 +85,13 @@
</plugins>
</pluginManagement>
</build>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.osbp.dependencies</groupId>
+ <artifactId>
+ org.eclipse.osbp.dependencies.bundle.activemq.all.osgi
+ </artifactId>
+ <version>5.14.5-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
</project>