catch up with development
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a013ef6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+**._trace
+**/target/
+**.log.properties
+**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 b0e8a32..5792be1 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -22,7 +22,7 @@
<jenkins.build.dependency>org.eclipse.osbp.runtime.web</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.ui.api</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.utils</jenkins.build.dependency>
- <jenkins.build.dependency>org.eclipse.osbp.utils.ui</jenkins.build.dependency>
+ <jenkins.build.dependency>org.eclipse.osbp.xtext.entitymock.common</jenkins.build.dependency>
<jenkins.build.dependency>org.eclipse.osbp.xtext.i18n</jenkins.build.dependency>
</jenkins.build.dependencies>
</jenkins>
diff --git a/org.eclipse.osbp.xtext.datamart.common.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.xtext.datamart.common.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common.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.xtext.datamart.common.feature/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.xtext.datamart.common.feature/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common.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.xtext.datamart.common.feature/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.xtext.datamart.common.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..19e3115
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common.feature/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,11 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+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.xtext.datamart.common.feature/feature.xml b/org.eclipse.osbp.xtext.datamart.common.feature/feature.xml
index 83b6ee9..deb3e9c 100644
--- a/org.eclipse.osbp.xtext.datamart.common.feature/feature.xml
+++ b/org.eclipse.osbp.xtext.datamart.common.feature/feature.xml
@@ -14,7 +14,8 @@
id="org.eclipse.osbp.xtext.datamart.common.feature"
label="%featureName"
version="0.9.0.qualifier"
- provider-name="%providerName">
+ provider-name="%providerName"
+ plugin="org.eclipse.osbp.xtext.datamart.common">
<description>
%description
diff --git a/org.eclipse.osbp.xtext.datamart.common/.classpath b/org.eclipse.osbp.xtext.datamart.common/.classpath
new file mode 100644
index 0000000..cf36b56
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/.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.xtext.datamart.common/.gitignore b/org.eclipse.osbp.xtext.datamart.common/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/org.eclipse.osbp.xtext.datamart.common/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.xtext.datamart.common/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..0904e44
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,2 @@
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.7"]
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.xtext.datamart.common/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.xtext.datamart.common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.osbp.xtext.datamart.common/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.xtext.datamart.common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/.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.xtext.datamart.common/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.xtext.datamart.common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/.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.xtext.datamart.common/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.xtext.datamart.common/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0b6859d
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+BuilderConfiguration.is_project_specific=true
+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.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF b/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
index 225587d..510228b 100644
--- a/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
@@ -6,21 +6,22 @@
Bundle-Version: 0.9.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: mondrian.osgi;bundle-version="[3.5.0,3.5.1)",
- javax.annotation;bundle-version="[1.1.0,1.2.0)",
olap4j.osgi;bundle-version="[1.1.0,1.3.0)",
org.jsoup;bundle-version="1.8.1",
org.eclipse.core.runtime,
- org.eclipse.core.databinding;bundle-version="1.4.2",
- org.eclipse.core.databinding.beans;bundle-version="1.2.200",
+ org.eclipse.core.databinding;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)",
org.eclipse.osbp.runtime.web.vaadin.databinding;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.dsl.entity.xtext;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.dsl.common.xtext;bundle-version="[0.9.0,0.10.0)",
- com.vaadin.client;bundle-version="7.5.7",
- com.vaadin.server;bundle-version="7.5.7",
- com.vaadin.shared;bundle-version="7.5.7",
- org.eclipse.xtext.common.types;bundle-version="[2.7.3,2.8.0)",
- org.eclipse.osbp.dsl.datatype.lib
-Import-Package: javax.validation,
+ com.vaadin.client;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ org.eclipse.xtext.common.types;bundle-version="[2.11.0,2.12.0)",
+ org.eclipse.osbp.dsl.datatype.lib;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.runtime.common
+Import-Package: javax.annotation,
+ javax.validation,
javax.validation.constraints,
org.apache.commons.lang3,
org.apache.log4j,
@@ -33,16 +34,11 @@
org.eclipse.osbp.ui.api.datamart;version="0.9.0",
org.eclipse.osbp.ui.api.layout;version="0.9.0",
org.eclipse.osbp.ui.api.metadata;version="0.9.0",
+ org.eclipse.osbp.ui.api.themes;version="0.9.0",
org.eclipse.osbp.ui.api.user;version="0.9.0",
- org.eclipse.osbp.utils.common;version="0.9.0",
- org.eclipse.osbp.utils.constants;version="0.9.0",
org.eclipse.osbp.utils.entityhelper;version="0.9.0",
- org.eclipse.osbp.utils.fillertext;version="0.9.0",
- org.eclipse.osbp.utils.theme;version="0.9.0",
- org.eclipse.osbp.utils.vaadin;version="0.9.0",
+ org.eclipse.osbp.xtext.entitymock.common.filler;version="0.9.0",
org.eclipse.osbp.xtext.i18n;version="0.9.0",
- org.jbpm.task,
- org.jbpm.task.query,
org.slf4j;resolution:=optional
Export-Package: org.eclipse.osbp.xtext.datamart.common;version="0.9.0",
org.eclipse.osbp.xtext.datamart.common.olap;version="0.9.0",
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ACubeDatamart.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ACubeDatamart.java
index 57a0863..291805f 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ACubeDatamart.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ACubeDatamart.java
@@ -20,13 +20,14 @@
import mondrian.rolap.RolapConnection;
import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
import org.eclipse.osbp.ui.api.user.IUser;
import org.eclipse.osbp.xtext.datamart.common.olap.DerivedCellSet;
@SuppressWarnings("all")
public abstract class ACubeDatamart extends ADatamart<RolapConnection> {
- public abstract DerivedCellSet getResults(final IUser user, final Map<String,String> filteredItems, final Class operativeDtoClass, final List<IDto> operativeDtos);
+ public abstract DerivedCellSet getResults(final Class operativeDtoClass, final List<IDto> operativeDtos);
@Override
public final HashMap<Integer, ArrayList<String>> getAxisMap() {
return null;
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ADatamart.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ADatamart.java
index e6b2e77..f90d8ac 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ADatamart.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ADatamart.java
@@ -14,80 +14,249 @@
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
+import java.util.Iterator;
+import java.util.List;
import org.eclipse.osbp.preferences.EnumDatabaseVendor;
import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.runtime.common.event.IDualData;
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
import org.eclipse.osbp.ui.api.datamart.IDataMart;
-import org.eclipse.osbp.ui.api.user.IUser;
-import org.eclipse.osbp.ui.api.datamart.IDataMart.EType;
+/**
+ * The Class ADatamart.
+ *
+ * @param <C> the generic type
+ */
@SuppressWarnings("all")
public abstract class ADatamart<C> implements IDataMart {
- public abstract C connect();
- public abstract HashMap<Integer,ArrayList<String>> getAxisMap();
- public abstract int getNumberOfAxes();
- public abstract HashMap<String, EType> getIdMap();
- public abstract HashMap<String, EType> getTypesMap(IUser user);
- public String setFilters(final Map<String,String> filteredItems) {
- return null;
- }
+
/**
- * @see {@link #enableFillerText(boolean)}
- * @param filteredItems
+ * Connect.
+ *
+ * @return the c
+ */
+ public abstract C connect();
+
+ /**
+ * Gets the axis map.
+ *
+ * @return the axis map
+ */
+ public abstract HashMap<Integer,ArrayList<String>> getAxisMap();
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDataMart#getIdMap()
+ */
+ public abstract HashMap<String, EType> getIdMap();
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDataMart#getTypesMap()
+ */
+ public abstract HashMap<String, EType> getTypesMap();
+
+ /**
+ * Disconnect.
+ *
* @return returns results from datamart. If filler text is enabled, the result will be generated via filler text.
+ * @see {@link #enableFillerText(boolean)}
*/
public abstract void disconnect();
+ /** The db vendor. */
protected EnumDatabaseVendor dbVendor = null;
- private HashMap<String, String> filterMap = null;
+
+ /** The filter map. */
+ private ArrayList<DatamartFilter> filterMap = null;
/**
* @return the map with all filters, which has to be initialized once
*/
- private HashMap<String, String> getFilterMap() {
+ @Override
+ public ArrayList<DatamartFilter> getFilters() {
if (filterMap == null) {
- String jndiName = ProductConfiguration.getPersistenceUnitJndiName(getPersistenceUnit());
- dbVendor = ProductConfiguration.getDataSource(jndiName).getDatabaseVendor();
+ if(getPersistenceUnit() != null) {
+ String jndiName = ProductConfiguration.getPersistenceUnitJndiName(getPersistenceUnit());
+ dbVendor = ProductConfiguration.getDataSource(jndiName).getDatabaseVendor();
+ }
filterMap = initializeFilterMap();
}
return filterMap;
}
/**
- * @return all filter ids
+ * Gets the vendor specific sql.
+ *
+ * @param filter the filter
+ * @return the vendor sql
*/
- protected Set<String> getFilterIds() {
- return getFilterMap().keySet();
- }
-
- /**
- * @param filterID
- * @return the filter for the given filter id
- */
- protected String getFilter(String filterID) {
- String filter = getFilterMap().get(filterID);
- if (filter != null) {
- filter = dbVendor.applySqlSpecifications(filter);
+ protected String getVendorSql(DatamartFilter filter) {
+ if(dbVendor != null) {
+ return dbVendor.applySqlSpecifications(filter.getSql());
}
- return filter;
+ return filter.getSql();
}
-
+
/**
+ * Gets the vendor specific 'to date' sql method prefix.
+ *
+ * @return the vendor 'to date' sql method prefix
+ */
+ protected String getVendorToDateSQLMethod() {
+ if(dbVendor != null) {
+ return dbVendor.getToDateSQLMethod();
+ }
+ return "to_date";
+ }
+
+ /**
+ * Gets the vendor specific 'to timestamp' sql method prefix.
+ *
+ * @return the vendor 'to timestamp' sql method prefix
+ */
+ protected String getVendorToTimestampSQLMethod() {
+ if(dbVendor != null) {
+ return dbVendor.getToTimestampSQLMethod();
+ }
+ return "to_timestamp";
+ }
+
+ /**
+ * Gets the filters count.
+ *
* @return count of filters
*/
protected int getFiltersCount() {
- return getFilterMap().size();
+ return getFilters().size();
}
/**
+ * Gets the persistence unit.
+ *
* @return the persistence unit used
*/
abstract protected String getPersistenceUnit();
/**
+ * Initialize filter map.
+ *
* @return the initialized filter map
*/
- abstract protected HashMap<String, String> initializeFilterMap();
+ abstract protected ArrayList<DatamartFilter> initializeFilterMap();
+
+ /**
+ * Compute conditions from selected data according to the filter type.
+ */
+ @Override
+ public void computeConditions() {
+ ArrayList<DatamartFilter> filters = getFilters();
+ if (filters != null) {
+ DatamartFilter firstFilter = null;
+ List<List<String>> filterGroup = new ArrayList<List<String>>();
+ for (DatamartFilter filter : filters) {
+ filter.setCondition(null);
+ switch (filter.getType()) {
+ case BY_ID:
+ if(!filter.getSql().isEmpty()) {
+ filter.setCondition(filter.getName()+"="+filter.getSql());
+ }
+ break;
+ case SINGLE:
+ case SINGLEHIERARCHY:
+ case EXCEPT:
+ case SINGLESLICER:
+ if(!filter.getSelectedData().isEmpty()) {
+ filter.setCondition(filter.getSelectedData().get(0).getDatabaseSelectionValue());
+ } else { // failsafe - but only if filter is optional
+ filter.setCondition("'*'");
+ }
+ break;
+ case BETWEEN:
+ case BETWEEN_DATE:
+ if(filter.getBetweenInputComponent() != null) {
+ if ((!filter.getBetweenInputComponent().getFrom().isEmpty()) && (!filter.getBetweenInputComponent().getUntil().isEmpty())){
+ filter.setCondition(filter.getName() + " BETWEEN '" + filter.getBetweenInputComponent().getFrom() + "' AND '" + filter.getBetweenInputComponent().getUntil() + "'");
+ } else {
+ filter.setCondition("1=1");
+ }
+ } else { // failsafe - but only if filter is optional
+ filter.setCondition("'*'");
+ }
+ break;
+ case MULTIPLE:
+ case MULTIPLEHIERARCHY:
+ String selection = "";
+ for(IDualData item : filter.getSelectedData()) {
+ if (item != null) {
+ if (!selection.isEmpty()) {
+ selection += ",";
+ }
+ selection += item.getDatabaseSelectionValue();
+ }
+ }
+ filter.setCondition(selection);
+ break;
+ case MULTIPLESLICER:
+ // all multiple slicer filters are accumulated to the first filter multiple slicer filter
+ List<String> myList = new ArrayList<String>();
+ for (IDualData item : filter.getSelectedData()) {
+ if (item != null) {
+ myList.add(item.getDatabaseSelectionValue());
+ }
+ }
+ filterGroup.add(myList);
+ if (firstFilter == null) {
+ firstFilter = filter;
+ } else {
+ filter.setCondition("<empty>");
+ }
+ break;
+ }
+ }
+ if(firstFilter != null) {
+ // calculate every permutation of selection as slices must be created
+ List<List<String>> permutations = new ArrayList<List<String>>();
+ int numEntries = 1;
+ for (List<String> list : filterGroup) {
+ numEntries *= list.size();
+ }
+ for (int i = 0; i < numEntries; i++) {
+ permutations.add(new ArrayList<String>());
+ }
+ for (List<String> itemList : filterGroup) {
+ Iterator<String> iterator = itemList.iterator();
+ if (iterator.hasNext()) {
+ for (List<String> entry : permutations) {
+ entry.add(iterator.next());
+ if (!iterator.hasNext()) {
+ iterator = itemList.iterator();
+ }
+ }
+ }
+ }
+ String set = "";
+ boolean firstSet = true;
+ for (List<String> permutation : permutations) {
+ boolean firstTuple = true;
+ String tuple = "";
+ for (String item : permutation) {
+ if (firstTuple) {
+ firstTuple = false;
+ } else {
+ tuple += ",";
+ }
+ tuple += item;
+ }
+ if (firstSet) {
+ firstSet = false;
+ } else {
+ set += ",";
+ }
+ set += "(" + tuple + ")";
+ }
+ firstFilter.setCondition("{" + set + "}");
+ }
+ }
+ }
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/AEntityDatamart.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/AEntityDatamart.java
index 02931ee..cb18666 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/AEntityDatamart.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/AEntityDatamart.java
@@ -14,24 +14,16 @@
import java.sql.Connection;
import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.osbp.dsl.common.datatypes.IDto;
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
-import org.eclipse.osbp.ui.api.user.IUser;
-import org.eclipse.osbp.utils.common.IEntityIdModificationListenerView;
-import org.eclipse.osbp.utils.fillertext.FillerTextProvider;
-import org.eclipse.osbp.xtext.datamart.common.olap.DerivedAxis;
-import org.eclipse.osbp.xtext.datamart.common.olap.DerivedCell;
import org.eclipse.osbp.xtext.datamart.common.olap.DerivedCellSet;
-import org.eclipse.osbp.xtext.datamart.common.olap.DerivedPosition;
+import org.eclipse.osbp.xtext.entitymock.common.filler.FillerTextProvider;
@SuppressWarnings("all")
public abstract class AEntityDatamart extends ADatamart<Connection> {
- public abstract DerivedCellSet getResults(final IUser user, final Map<String,String> filteredItems, Class operativeDtoClass, List<IDto> operativeDtos);
+ public abstract DerivedCellSet getResults(Class operativeDtoClass, List<IDto> operativeDtos);
protected boolean fFillerTextEnabled = false;
/**
@@ -53,66 +45,4 @@
public Map<String, Object> generateFillerTextRow(FillerTextProvider provider) {
return null;
}
-
- /**
- * @see {@link IEntityIdModificationListenerView}
- * The view has to subscribe/unsubsribe to REFRESH_VIEW!
- * <br>
- * <b>The IDs/UUIDs for entities have to be on the AXIS_COLUMN only!</b>
- * @param listeningView the view, that should listen to modifications on modified entity ids
- * @param cellSet the result set, from which the entity ids, that should be listened to, are extracted
- */
- public void addEntityIdsToModifyListener(IEntityIdModificationListenerView listeningView, DerivedCellSet cellSet) {
- // --- find all columns containing entity ids/uuids
- Map<String,Integer> entityIdColumns = new HashMap<String, Integer>();
- try {
- // --- next get the header for all "columns" ---
- // Column header
- // See
- // http://www.olap4j.org/api/index.html?org/olap4j/Position.html
- // on how Position works, it helps a lot
- // Every position will be a column in the header
- int count = 0;
- for (DerivedPosition pos : cellSet.getAxes().get(DerivedAxis.AXIS_COLUMNS).getPositions()) {
- String columnName = pos.getMembers().get(0).getCaption();
- if (DatamartDefinitionUtil.isEntityIdColumnName(columnName)) {
- entityIdColumns.put(DatamartDefinitionUtil.getEntityNameForIdColumnName(columnName), count);
- }
- count++;
- }
- }
- catch (Exception e) {
- }
- if (!entityIdColumns.isEmpty()) {
- addEntityIdsToModifyListener(listeningView, cellSet, entityIdColumns, cellSet.getAxes().size(), new ArrayList<Integer>());
- }
- }
-
- private void addEntityIdsToModifyListener(IEntityIdModificationListenerView listeningView, DerivedCellSet cellSet, Map<String,Integer> entityIdColumns, int axisDepth, ArrayList<Integer> coordinate) {
- int itemCount = cellSet.getAxes().get(axisDepth-1).getPositions().size();
- if (axisDepth > 1) {
- for (int item = 0; item < itemCount; item++) {
- ArrayList<Integer> newCoordinate = new ArrayList<Integer>();
- newCoordinate.add(item);
- newCoordinate.addAll(coordinate);
- addEntityIdsToModifyListener(listeningView, cellSet, entityIdColumns, axisDepth-1, newCoordinate);
- }
- }
- else {
- for (String entityName : entityIdColumns.keySet()) {
- ArrayList<Integer> newCoordinate = new ArrayList<Integer>();
- newCoordinate.add(entityIdColumns.get(entityName));
- newCoordinate.addAll(coordinate);
- DerivedCell result;
- try {
- result = cellSet.getCell(newCoordinate);
- if (result != null) {
- listeningView.addEntityIdToModifyListener(entityName, result.getFormattedValue().trim());
- }
- } catch (DerivedOlapException e) {
- e.printStackTrace();
- }
- }
- }
- }
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ATaskDatamart.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ATaskDatamart.java
index f649509..6a9dd2f 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ATaskDatamart.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/ATaskDatamart.java
@@ -14,12 +14,14 @@
package org.eclipse.osbp.xtext.datamart.common;
import java.sql.Connection;
+import java.util.ArrayList;
import java.util.Map;
import org.eclipse.osbp.bpm.api.IBPMTaskClient;
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
import org.eclipse.osbp.ui.api.user.IUser;
import org.eclipse.osbp.xtext.datamart.common.olap.DerivedCellSet;
public abstract class ATaskDatamart extends ADatamart<Connection> {
- public abstract DerivedCellSet getResults(final IBPMTaskClient client, final IUser user, final Map<String,String> filteredItems);
+ public abstract DerivedCellSet getResults();
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java
new file mode 100644
index 0000000..4a05360
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenDate.java
@@ -0,0 +1,280 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - 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
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ */
+package org.eclipse.osbp.xtext.datamart.common;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
+import org.eclipse.osbp.ui.api.datamart.IDatamartBetweenInput;
+import org.eclipse.osbp.ui.api.themes.EnumCssClass;
+import org.slf4j.Logger;
+
+import com.vaadin.data.Property.ReadOnlyException;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.util.converter.Converter.ConversionException;
+import com.vaadin.shared.ui.datefield.Resolution;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.HorizontalLayout;
+
+public class DatamartBetweenDate extends HorizontalLayout implements IDatamartBetweenInput {
+
+ private static Logger LOGGER = org.slf4j.LoggerFactory.getLogger(DatamartBetweenDate.class.getName());
+
+ private DateField fromInput;
+
+ private DateField untilInput;
+
+ private static final long serialVersionUID = -5673052113801450589L;
+
+ // private DateFormat formatter = DateFormat.getDateTimeInstance();
+ private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+ public DatamartBetweenDate() {
+ fromInput = new DateField();
+ untilInput = new DateField();
+ fromInput.setDateFormat("yyyy-MM-dd HH:mm:ss");
+ untilInput.setDateFormat("yyyy-MM-dd HH:mm:ss");
+ fromInput.setResolution(Resolution.SECOND);
+ untilInput.setResolution(Resolution.SECOND);
+ addComponent(fromInput);
+ addComponent(untilInput);
+ addStyleName(EnumCssClass.SINGLE_SELECTION.styleName());
+ }
+
+ public DatamartBetweenDate(DatamartFilter.DateTimeFormat filterFormat, DatamartFilter.DateResolution filterResolution) {
+ fromInput = new DateField();
+ untilInput = new DateField();
+ String dateFormat = "yyyy-MM-dd HH:mm:ss";
+ Resolution resolution = Resolution.MINUTE;
+ if (filterFormat != null && filterResolution != null) {
+ dateFormat = getFormat(filterFormat, filterResolution);
+ resolution = mapToVaadin(filterResolution);
+ }
+ fromInput.setDateFormat(dateFormat);
+ untilInput.setDateFormat(dateFormat);
+ fromInput.setResolution(resolution);
+ untilInput.setResolution(resolution);
+ addComponent(fromInput);
+ addComponent(untilInput);
+ addStyleName(EnumCssClass.SINGLE_SELECTION.styleName());
+ }
+
+ private String getFormat(DatamartFilter.DateTimeFormat format, DatamartFilter.DateResolution resolution) {
+ DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);
+ String pattern = ((SimpleDateFormat)formatter).toPattern();
+ String dateFormat = null;
+ if (format != null) {
+ switch (format) {
+ case DATE:
+ switch (resolution) {
+ case YEAR:
+ dateFormat = filterFormat(pattern, "yyyy");
+ break;
+ case MONTH:
+ dateFormat = filterFormat(pattern, "yyyy.MM");
+ break;
+ case DAY:
+ dateFormat = filterFormat(pattern, "yyyy.MM.dd");
+ break;
+ default:
+ throw new IllegalArgumentException(resolution
+ + " is not a valid resolution for " + format);
+ }
+ break;
+ case DATE_TIME:
+ switch (resolution) {
+ case YEAR:
+ dateFormat = filterFormat(pattern, "yyyy");
+ break;
+ case MONTH:
+ dateFormat = filterFormat(pattern, "yyyy.MM");
+ break;
+ case DAY:
+ dateFormat = filterFormat(pattern, "yyyy.MM.dd");
+ break;
+ case HOUR:
+ dateFormat = filterFormat(pattern, "yyyy.MM.dd hhHH");
+ break;
+ case MINUTE:
+ dateFormat = filterFormat(pattern, "yyyy.MM.dd hhHH:mm");
+ break;
+ case SECOND:
+ dateFormat = filterFormat(pattern, "yyyy.MM.dd hhHH:mm:ss");
+ break;
+ default:
+ throw new IllegalArgumentException(resolution
+ + " is not a valid resolution for " + format);
+ }
+ break;
+ case TIME:
+ switch (resolution) {
+ case HOUR:
+ dateFormat = filterFormat(pattern, "HH");
+ break;
+ case MINUTE:
+ dateFormat = filterFormat(pattern, "HH:mm");
+ break;
+ case SECOND:
+ dateFormat = filterFormat(pattern, "HH:mm:ss");
+ break;
+ default:
+ throw new IllegalArgumentException(resolution
+ + " is not a valid resolution for " + format);
+ }
+ break;
+ }
+ }
+ return dateFormat;
+ }
+
+ /**
+ * filters from any localized date-time pattern the desired subset
+ * defined by filterPattern without destroying the original localized
+ * pattern .
+ *
+ * @param localizedPattern
+ * the localized full date-time pattern
+ * @param filterPattern
+ * the subset of desired date-time formatter patterns
+ * @return the string
+ */
+ private String filterFormat(String localizedPattern, String filterPattern) {
+ // remove any multiple characters sequences and remove all separator signs from filterPattern
+ String filter = filterPattern.replaceAll("(.)\\1+", "$1").replaceAll("[^\\w\\s]", "")+",";
+ // create a replacement pattern to remove unnecessary blanks disturbing the recognition of orphaned separators
+ // rule: each blank must be surrounded by any filter-letter to be valid
+ String invalidBlanks = "(?!["+filter+"])( )(?!["+filter+"])";
+ // create a replacement pattern to remove remaining separators without formatting function
+ // rule: each separator must be surrounded by any filter-letter or blank to be valid
+ String invalidSeparators = "(?!["+filter+" ])([.:])(?!["+filter+" ])";
+ return localizedPattern.replaceAll("[^"+filter+",.: ]", "").replaceAll(invalidBlanks, "").trim().replaceAll(invalidSeparators, "");
+ }
+
+ /**
+ * Map to vaadin.
+ *
+ * @param resolution
+ * the resolution
+ * @return the resolution
+ */
+ private Resolution mapToVaadin(DatamartFilter.DateResolution resolution) {
+ switch (resolution) {
+ case YEAR:
+ return Resolution.YEAR;
+ case MONTH:
+ return Resolution.MONTH;
+ case DAY:
+ return Resolution.DAY;
+ case HOUR:
+ return Resolution.HOUR;
+ case MINUTE:
+ return Resolution.MINUTE;
+ case SECOND:
+ return Resolution.SECOND;
+ case UNDEFINED:
+ return Resolution.DAY;
+ }
+
+ return Resolution.DAY;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.xtext.datamart.common.IDatamartBetweenInput#getFrom()
+ */
+ @Override
+ public String getFrom() {
+ return fromInput.getValue() != null ? formatter.format(fromInput.getValue()) : "";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.xtext.datamart.common.IDatamartBetweenInput#setFrom(java
+ * .lang.String)
+ */
+ @Override
+ public void setFrom(String from) {
+ try {
+ fromInput.setValue(formatter.parse(from));
+ } catch (ReadOnlyException | ConversionException | ParseException e) {
+ LOGGER.error("DateParseError on setFrom method!", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.xtext.datamart.common.IDatamartBetweenInput#getUntil()
+ */
+ @Override
+ public String getUntil() {
+ return untilInput.getValue() != null ? formatter.format(untilInput.getValue()) : "";
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.osbp.xtext.datamart.common.IDatamartBetweenInput#setUntil(
+ * java.lang.String)
+ */
+ @Override
+ public void setUntil(String until) {
+ try {
+ untilInput.setValue(formatter.parse(until));
+ } catch (ReadOnlyException | ConversionException | ParseException e) {
+ LOGGER.error("DateParseError on setUntil method!", e);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public DateField getFromInput() {
+ return fromInput;
+ }
+
+ @SuppressWarnings("unchecked")
+ public DateField getUntilInput() {
+ return untilInput;
+ }
+
+ @Override
+ public void addValueChangeListener(ValueChangeListener listener) {
+ fromInput.addValueChangeListener(listener);
+ untilInput.addValueChangeListener(listener);
+ }
+
+ @Override
+ public void removeValueChangeListener(ValueChangeListener listener) {
+ fromInput.removeValueChangeListener(listener);
+ untilInput.removeValueChangeListener(listener);
+ }
+
+ @Override
+ public void setDescription(String description) {
+ fromInput.setDescription("[" + description);
+ untilInput.setDescription(description + "]");
+ }
+
+}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenText.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenText.java
new file mode 100644
index 0000000..11a45c8
--- /dev/null
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartBetweenText.java
@@ -0,0 +1,105 @@
+/**
+ *
+ * Copyright (c) 2011, 2016 - 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
+ *
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ */
+package org.eclipse.osbp.xtext.datamart.common;
+
+import org.eclipse.osbp.ui.api.datamart.IDatamartBetweenInput;
+import org.eclipse.osbp.ui.api.themes.EnumCssClass;
+
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.TextField;
+
+public class DatamartBetweenText extends HorizontalLayout implements IDatamartBetweenInput {
+
+ private TextField fromInput;
+
+ private TextField untilInput;
+
+ private static final long serialVersionUID = -5673052113801450589L;
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+ public DatamartBetweenText() {
+ fromInput = new TextField();
+ untilInput = new TextField();
+ addComponent(fromInput);
+ addComponent(untilInput);
+ addStyleName(EnumCssClass.SINGLE_SELECTION.styleName());
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.xtext.datamart.common.IDatamartBetweenInput#getFrom()
+ */
+ @Override
+ public String getFrom() {
+ return fromInput.getValue();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.xtext.datamart.common.IDatamartBetweenInput#setFrom(java.lang.String)
+ */
+ @Override
+ public void setFrom(String from) {
+ fromInput.setValue((String) from);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.xtext.datamart.common.IDatamartBetweenInput#getUntil()
+ */
+ @Override
+ public String getUntil() {
+ return untilInput.getValue();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.xtext.datamart.common.IDatamartBetweenInput#setUntil(java.lang.String)
+ */
+ @Override
+ public void setUntil(String until) {
+ untilInput.setValue((String) until);
+ }
+
+ @SuppressWarnings("unchecked")
+ public TextField getFromInput() {
+ return fromInput;
+ }
+
+ @SuppressWarnings("unchecked")
+ public TextField getUntilInput() {
+ return untilInput;
+ }
+
+ @Override
+ public void addValueChangeListener(ValueChangeListener listener) {
+ fromInput.addValueChangeListener(listener);
+ untilInput.addValueChangeListener(listener);
+ }
+
+ @Override
+ public void removeValueChangeListener(ValueChangeListener listener) {
+ fromInput.removeValueChangeListener(listener);
+ untilInput.removeValueChangeListener(listener);
+ }
+
+
+ @Override
+ public void setDescription(String description) {
+ fromInput.setDescription("[" + description);
+ untilInput.setDescription(description + "]");
+ }
+
+
+
+}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartDefinitionUtil.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartDefinitionUtil.java
index 331b726..e35c9c0 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartDefinitionUtil.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartDefinitionUtil.java
@@ -43,13 +43,23 @@
}
}
+ private static boolean hasSuperType(LEntity entityRef) {
+ return entityRef.getSuperType() != null &&
+ !entityRef.getSuperType().isMappedSuperclass() &&
+ !entityRef.getSuperType().equals(entityRef);
+ }
+
public static String getEntityIdAliasName(LEntity entityRef) {
LEntityAttribute idAttribute = getEntityIdAttribute(entityRef);
if (idAttribute == null) {
return null;
}
else {
- return IDataMart.DATAMART_ID_COLUMN_PREFIX+entityRef.getName()+IDataMart.DATAMART_ID_COLUMN_POSTFIX;
+ if(hasSuperType(entityRef)) {
+ return IDataMart.DATAMART_ID_COLUMN_PREFIX+entityRef.getSuperType().getName()+IDataMart.DATAMART_ID_COLUMN_POSTFIX;
+ } else {
+ return IDataMart.DATAMART_ID_COLUMN_PREFIX+entityRef.getName()+IDataMart.DATAMART_ID_COLUMN_POSTFIX;
+ }
}
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java
index a951fd5..ca29d18 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartFilterGenerator.java
@@ -1,6 +1,6 @@
/**
*
- * 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
@@ -13,116 +13,332 @@
package org.eclipse.osbp.xtext.datamart.common;
import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Locale;
-import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag;
+import org.eclipse.osbp.runtime.common.event.IDualData;
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
import org.eclipse.osbp.ui.api.datamart.IDataMart;
import org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator;
-import org.eclipse.osbp.ui.api.datamart.IDatamartSelectable;
-import org.eclipse.osbp.ui.api.datamart.IDualData;
import org.eclipse.osbp.ui.api.layout.IViewLayoutManager;
import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
import org.eclipse.osbp.ui.api.user.IUser;
-import org.eclipse.osbp.utils.theme.EnumCssClass;
-import org.eclipse.osbp.utils.vaadin.ViewLayoutManager;
import org.eclipse.osbp.xtext.i18n.I18NKeyGenerator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
-import com.vaadin.ui.AbstractOrderedLayout;
-import com.vaadin.ui.Alignment;
import com.vaadin.ui.Component;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.TextField;
// creates a filtermap from selected and multiselected components.
+/**
+ * The Class DatamartFilterGenerator.
+ */
// For cubes the class creates permutated slices over all filter aspects
-public class DatamartFilterGenerator implements IDatamartFilterGenerator {
+@SuppressWarnings("serial")
+public class DatamartFilterGenerator implements IDatamartFilterGenerator, ValueChangeListener, IUser.UserLocaleListener {
- private static Logger log = LoggerFactory
- .getLogger(DatamartFilterGenerator.class);
+ /** The dsl metadata service. */
+ private transient IDSLMetadataService dslMetadataService;
+
+ /** The datamart. */
+ private transient IDataMart datamart;
+
+ /** The listeners. */
+ private transient List<FilterChangeListener> listeners = new CopyOnWriteArrayList<>();
+
+ /** avoid concurrent modification of vadin multiselect list **/
+ private boolean concurrentModificationLock = false;
+ private ValueChangeEvent concurrentEvent;
+ private boolean concurrentEventOccured = false;
- // the key is the same as the filterMap key
- // the selection component is therefore associated with the filterMap id and
- // so with the event id
- private Map<String, IDatamartSelectable> selectors = new HashMap<String, IDatamartSelectable>();
- private boolean idMode = false;
- private String id = null;
- private String idProperty;
- private boolean cube = false;
- private HorizontalLayout selectionArea = null;
- private IDSLMetadataService dslMetadataService;
- private boolean showCaption;
-
- @Override
- public void setDslMetadataService(IDSLMetadataService dslMetadataService) {
+ /**
+ * Instantiates a new datamart filter generator.
+ *
+ * @param datamart the datamart
+ * @param dslMetadataService the dsl metadata service
+ */
+ public DatamartFilterGenerator(IDataMart datamart, IDSLMetadataService dslMetadataService) {
+ this.datamart = datamart;
this.dslMetadataService = dslMetadataService;
+ if(this.datamart != null && datamart.getUser() != null) {
+ this.datamart.getUser().addUserLocaleListener(this);
+ }
}
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#addFilterChangeListener(org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator.FilterChangeListener)
+ */
@Override
- public void setId(String idProperty, String id) {
- idMode = true;
- this.idProperty = idProperty;
- this.id = id;
+ public void addFilterChangeListener(FilterChangeListener listener) {
+ listeners.add(listener);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#removeChangeListener(org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator.FilterChangeListener)
+ */
+ @Override
+ public void removeFilterChangeListener(FilterChangeListener listener) {
+ listeners.remove(listener);
}
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#selectItem(java.lang.String, java.lang.String)
+ */
@Override
- public void resetId() {
- idMode = false;
- }
-
- @Override
- public Map<String, IDatamartSelectable> getSelectors() {
- return selectors;
- }
-
- @Override
- public boolean isCube() {
- return cube;
- }
-
- @Override
- public void setCube(boolean cube) {
- this.cube = cube;
- }
-
- @Override
- public void selectItem(String filter, String selection) {
- if (selection != null) {
+ public void selectItem(String filterID, String selection) {
+ if (selection != null && datamart != null) {
String sel = selection.replace("_", " ");
- if (selectors.containsKey(filter)) {
- for (Object id : selectors.get(filter).getContainerDataSource()
- .getItemIds()) {
- if (((IDualData) id).getSignificantValue().equals(sel)) {
- selectors.get(filter).select(id);
- break;
+ ArrayList<DatamartFilter> filters = datamart.getFilters();
+ if (filters != null) {
+ for (DatamartFilter filter : filters) {
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getName().equals(filterID)) {
+ for(IDualData item : filter.getData()) {
+ if(item.getSelectionValue().equals(sel)) {
+ filter.getSelector().select(item);
+ return;
+ }
+ }
}
}
}
}
}
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#selectItem(java.util.Map)
+ */
@Override
- public void resetItem(String filter) {
- if (selectors.containsKey(filter)) {
- selectors.get(filter).select(selectors.get(filter).getFirstItem());
+ public boolean selectItem(EventDispatcherEvent event, boolean byId) {
+ boolean mustRefresh = false;
+ for(DatamartFilter filter : datamart.getFilters()) {
+ switch (filter.getType()) {
+ case BY_ID:
+ if(byId && event.getData().containsKey(EventDispatcherDataTag.ID)) {
+ Object id = event.getData().get(EventDispatcherDataTag.ID);
+ filter.setSql("");
+ if(event.getTopic().endsWith(filter.getName())) {
+ if(id instanceof Integer) {
+ filter.setSql(((Integer)id).toString());
+ } else if (id instanceof String) {
+ filter.setSql("'"+(String)id+"'");
+ }
+
+ } else {
+ filter.setSql("");
+ }
+ mustRefresh = true;
+ }
+ break;
+ case SINGLE:
+ if(filter.canSelectData(event.getData(), false, false)) {
+ filter.getSelector().select(filter.getSelectedData().get(0));
+ return false;
+ }
+ break;
+ case MULTIPLE:
+ if(filter.canSelectData(event.getData(), true, false)) {
+ concurrentModificationLock = true;
+ filter.getSelector().select(filter.getSelectedData());
+ concurrentModificationLock = false;
+ if(concurrentEventOccured) {
+ valueChange(concurrentEvent);
+ }
+ return false;
+ }
+ break;
+ case SINGLEHIERARCHY:
+ case SINGLESLICER:
+ case EXCEPT:
+ if(filter.canSelectData(event.getData(), false, true)) {
+ filter.getSelector().select(filter.getSelectedData().get(0));
+ return false;
+ }
+ break;
+ case MULTIPLEHIERARCHY:
+ case MULTIPLESLICER:
+ if(filter.canSelectData(event.getData(), true, true)) {
+ concurrentModificationLock = true;
+ filter.getSelector().select(filter.getSelectedData());
+ concurrentModificationLock = false;
+ if(concurrentEventOccured) {
+ valueChange(concurrentEvent);
+ }
+ return false;
+ }
+ break;
+ }
+ }
+ return mustRefresh;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#resetItem(java.lang.String)
+ */
+ @Override
+ public void resetItem(String filterID) {
+ if (datamart != null) {
+ ArrayList<DatamartFilter> filters = datamart.getFilters();
+ if (filters != null) {
+ for (DatamartFilter filter : filters) {
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
+ filter.getSelector().select(filter.getSelector().getFirstItem());
+ return;
+ }
+ }
+ }
}
}
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#createUIFilters(org.eclipse.osbp.ui.api.layout.IViewLayoutManager)
+ */
+ @Override
+ public boolean createUIFilters(IViewLayoutManager layoutManager) {
+ boolean hasFilters = false;
+ if(datamart != null) {
+ datamart.renderFilters();
+ ArrayList<DatamartFilter> filters = datamart.getFilters();
+ if (filters != null) {
+ hasFilters = true;
+ for (DatamartFilter filter : filters) {
+ switch (filter.getType()) {
+ case BY_ID:
+ break;
+ case SINGLE:
+ case SINGLEHIERARCHY:
+ filter.setSelector(new DatamartSingleSelect(false, false, filter.getData()));
+ layoutManager.getTopArea().addComponent((Component)filter.getSelector());
+ break;
+ case SINGLESLICER:
+ filter.setSelector(new DatamartSingleSelect(false, true, filter.getData()));
+ layoutManager.getTopArea().addComponent((Component)filter.getSelector());
+ break;
+ case EXCEPT:
+ filter.setSelector(new DatamartSingleSelect(true, false, filter.getData()));
+ layoutManager.getTopArea().addComponent((Component)filter.getSelector());
+ break;
+ case MULTIPLE:
+ case MULTIPLEHIERARCHY:
+ filter.setSelector(new DatamartMultiSelect(IDatamartFilterGenerator.MULTISELECTION_ROWS, false, false, filter.getData()));
+ layoutManager.getSideArea().addComponent((Component)filter.getSelector());
+ break;
+ case MULTIPLESLICER:
+ filter.setSelector(new DatamartMultiSelect(IDatamartFilterGenerator.MULTISELECTION_ROWS, false, true, filter.getData()));
+ layoutManager.getSideArea().addComponent((Component)filter.getSelector());
+ break;
+ case BETWEEN:
+ filter.setBetweenInputComponent(new DatamartBetweenText());
+ layoutManager.getTopArea().addComponent((Component) filter.getBetweenInputComponent());
+ break;
+ case BETWEEN_DATE:
+ filter.setBetweenInputComponent(new DatamartBetweenDate(filter.format, filter.resolution));
+ layoutManager.getTopArea().addComponent((Component) filter.getBetweenInputComponent());
+ break;
+ }
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
+ if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()){
+ filter.getBetweenInputComponent().addValueChangeListener(this);
+ } else {
+ filter.getSelector().addValueChangeListener(this);
+ }
+ }
+ }
+ }
+ localeChanged(datamart.getUser().getLocale());
+ getSelections();
+ }
+ return hasFilters;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator#updateFilter()
+ */
+ @Override
+ public void updateFilter() {
+ if(datamart != null) {
+ datamart.renderFilters();
+ ArrayList<DatamartFilter> filters = datamart.getFilters();
+ if (filters != null) {
+ for (DatamartFilter filter : filters) {
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
+ filter.getSelector().update(filter.getData());
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Gets the selections.
+ *
+ * @return the selections
+ */
+ private boolean getSelections() {
+ boolean allFiltersSet = true;
+ if(datamart != null) {
+ ArrayList<DatamartFilter> filters = datamart.getFilters();
+ if (filters != null) {
+ for (DatamartFilter filter : filters) {
+ filter.clearSelectedData();
+ switch (filter.getType()) {
+ case BY_ID:
+ break;
+ case SINGLE:
+ case SINGLEHIERARCHY:
+ case EXCEPT:
+ case SINGLESLICER:
+ if(filter.getSelector().getValue() != null) {
+ filter.addSelectedItem((IDualData)filter.getSelector().getValue());
+ } else {
+ filter.clearSelectedData();
+ allFiltersSet = false;
+ }
+ break;
+ case MULTIPLE:
+ case MULTIPLEHIERARCHY:
+ case MULTIPLESLICER:
+ filter.setSelectedData(filter.getSelector().getSelectedItems());
+ if(filter.getSelector().getSelectedItems().isEmpty()) {
+ allFiltersSet = false;
+ }
+ break;
+ }
+ }
+ }
+ }
+ return allFiltersSet;
+ }
+
+ /**
+ * Strip MDX characters.
+ *
+ * @param filterName the filter name
+ * @return the string
+ */
+ private String stripMDXCharacters(String filterName) {
+ return filterName.replace("[", "").replace("]", "");
+ }
+
+ /**
+ * Gets the translatable key.
+ *
+ * @param filterName the filter name
+ * @return the translatable key
+ */
private String getTranslatableKey(String filterName) {
return I18NKeyGenerator.key(stripHierarchy(filterName));
}
- private String stripMDXCharacters(String filterName) {
- return filterName.replace(IDataMart.singleSelectDecorator, "").replace(IDataMart.multiSelectDecorator, "").replace(IDataMart.exceptDecorator, "")
- .replace(IDataMart.slicerSingleSelectDecorator, "").replace(IDataMart.slicerMultiSelectDecorator, "").replace("[", "")
- .replace("]", "");
- }
-
+ /**
+ * Strip hierarchy.
+ *
+ * @param filterName the filter name
+ * @return the string
+ */
private String stripHierarchy(String filterName) {
String result = filterName;
String[] parts = stripMDXCharacters(filterName).split("\\.");
@@ -133,270 +349,70 @@
return result.replace(".", " ");
}
+ /* (non-Javadoc)
+ * @see com.vaadin.data.Property.ValueChangeListener#valueChange(com.vaadin.data.Property.ValueChangeEvent)
+ */
@Override
- public boolean createFilter(IDataMart datamart, IUser user,
- ValueChangeListener filterChangeListener,
- IViewLayoutManager layoutManager) {
- return createFilter(datamart, user, filterChangeListener, layoutManager, false);
- }
-
- @Override
- public boolean createFilter(IDataMart datamart, IUser user,
- ValueChangeListener filterChangeListener,
- IViewLayoutManager layoutManager,
- boolean showCaption) {
- boolean hasFilters = false;
- this.showCaption = showCaption;
- HashMap<String, ArrayList<IDualData>> filters = datamart
- .getFilters(user);
- if ((filters != null) && filters.size() > 0) {
- for (String filter : filters.keySet()) {
- if (!hasFilters) {
- hasFilters = true;
- }
- // the id filter solution
- if (!filters.get(filter).contains(IDataMart.filterIdPlaceholder)) {
- boolean isSingleSelect = false;
- boolean isMultiSelect = false;
- boolean isSlicer = false;
- boolean isExcept = false;
- if (filter.contains(IDataMart.multiSelectDecorator)) {
- isMultiSelect = true;
- }
- if (filter.contains(IDataMart.singleSelectDecorator)) {
- isSingleSelect = true;
- }
- if (filter.contains(IDataMart.exceptDecorator)) {
- isSingleSelect = true;
- isExcept = true;
- }
- if (filter.contains(IDataMart.slicerSingleSelectDecorator)) {
- isSingleSelect = true;
- isSlicer = true;
- }
- if (filter.contains(IDataMart.slicerMultiSelectDecorator)) {
- isMultiSelect = true;
- isSlicer = true;
- }
- // --- the filter should be UNIQUE for each view ---
- if (!selectors.containsKey(filter)) {
- IDatamartSelectable box = null;
- if (isSingleSelect) {
- box = new DatamartSingleSelect(isExcept, isSlicer,
- filter, filters.get(filter));
- layoutManager.getTopArea().addComponent((Component)box);
-
- } else if (isMultiSelect) {
- box = new DatamartMultiSelect(5, false, isSlicer,
- filter, filters.get(filter));
- layoutManager.getSideArea().addComponent((Component)box);
- }
- if (box != null && filterChangeListener != null) {
- box.addValueChangeListener(filterChangeListener);
- }
- selectors.put(filter, box);
- }
- }
- }
- }
- return hasFilters;
- }
-
- @Override
- public void updateFilter(IDataMart datamart, IUser user,
- ValueChangeListener filterChangeListener) {
- HashMap<String, ArrayList<IDualData>> filters = datamart
- .getFilters(user);
- if ((filters != null) && filters.size() > 0) {
- for (String filter : filters.keySet()) {
- if (selectors.containsKey(filter)) {
- if(filterChangeListener != null) {
- selectors.get(filter).removeValueChangeListener(
- filterChangeListener);
- }
- selectors.get(filter).update(filters.get(filter));
- if(filterChangeListener != null) {
- selectors.get(filter).addValueChangeListener(
- filterChangeListener);
- }
- }
- }
- }
- }
-
- @Override
- public Map<String, String> getFilter(boolean isCube) {
- Map<String, String> filters = new HashMap<String, String>();
- setCube(isCube);
- if (idMode) {
- idMode = false;
- filters.put(idProperty, id);
- return filters;
- }
- boolean hasSlicer = false;
- boolean isMultiSelected = false;
- for (String selector : selectors.keySet()) {
- if (selectors.get(selector).isSlicer()) {
- hasSlicer = true;
- }
- if (selectors.get(selector).isMultiSelected()) {
- isMultiSelected = true;
- }
- }
- if (!isCube || !hasSlicer || !isMultiSelected) {
- for (String selector : selectors.keySet()) {
- if (selectors.get(selector) instanceof DatamartMultiSelect) {
- String selection = "";
- for (IDualData item : selectors.get(selector)
- .getSelectedItems()) {
- if (item != null) {
- if (!selection.isEmpty()) {
- selection += ",";
+ public void valueChange(ValueChangeEvent event) {
+ if(!concurrentModificationLock) {
+ concurrentEventOccured = false;
+ // compute selections
+ if(getSelections()) {
+ // get the filter that changed
+ DatamartFilter changedFilter = null;
+ if(datamart != null) {
+ ArrayList<DatamartFilter> filters = datamart.getFilters();
+ if (filters != null) {
+ for (DatamartFilter filter : filters) {
+ if(event != null) {
+ if (filter.getType() == DatamartFilter.FilterType.BETWEEN || filter.getType() == DatamartFilter.FilterType.BETWEEN_DATE) {
+ if (!filter.getBetweenInputComponent().getFrom().isEmpty() && filter.getBetweenInputComponent().getUntilInput().equals(event.getProperty())){
+ changedFilter = filter;
+ break;
+ }
+ } else if (filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getSelector().equals(event.getProperty())) {
+ changedFilter = filter;
+ break;
+ }
}
- selection += item.getSelectionValue();
}
}
- filters.put(selectors.get(selector).getFilterName(),
- selection);
- } else {
- try {
- filters.put(
- selectors.get(selector).getFilterName(),
- ((IDualData) selectors.get(selector).getValue())
- .getSelectionValue());
- } catch (NullPointerException npe) {
- log.error("NPE for "
- + selectors.get(selector).getFilterName(), npe);
- }
+ }
+ // notify the listeners of the changed filter
+ for(FilterChangeListener listener:listeners) {
+ listener.filterChanged(changedFilter);
}
}
} else {
- String firstFilter = null;
- List<List<String>> filterGroup = new ArrayList<List<String>>();
- for (String multiSelect : selectors.keySet()) {
- if (selectors.get(multiSelect) instanceof DatamartMultiSelect) {
- if (selectors.get(multiSelect).isSlicer()) {
- List<String> myList = new ArrayList<String>();
- for (IDualData item : selectors.get(multiSelect)
- .getSelectedItems()) {
- if (item != null) {
- myList.add(item.getSelectionValue());
- }
- }
- filterGroup.add(myList);
- if (firstFilter == null) {
- firstFilter = selectors.get(multiSelect)
- .getFilterName();
- } else {
- filters.put(selectors.get(multiSelect)
- .getFilterName(), "<empty>");
- }
- } else {
- String selection = "";
- for (IDualData item : selectors.get(multiSelect)
- .getSelectedItems()) {
- if (item != null) {
- if (!selection.isEmpty()) {
- selection += ",";
- }
- selection += item.getSelectionValue();
- }
- }
- filters.put(selectors.get(multiSelect).getFilterName(),
- selection);
- }
- } else {
- if (selectors.get(multiSelect).isSlicer()) {
- List<String> myList = new ArrayList<String>();
- for (IDualData item : selectors.get(multiSelect)
- .getSelectedItems()) {
- if (item != null) {
- myList.add(item.getSelectionValue());
- }
- }
- filterGroup.add(myList);
- if (firstFilter == null) {
- firstFilter = selectors.get(multiSelect)
- .getFilterName();
- } else {
- filters.put(selectors.get(multiSelect)
- .getFilterName(), "<empty>");
- }
- } else if (selectors.get(multiSelect).getValue() != null) {
- try {
- filters.put(selectors.get(multiSelect)
- .getFilterName(), ((IDualData) selectors
- .get(multiSelect).getValue())
- .getSelectionValue());
- } catch (NullPointerException npe) {
- log.error("NPE for "
- + selectors.get(multiSelect)
- .getFilterName(), npe);
- }
- }
- }
- }
- // calculate every permutation of selection as slices must be
- // created
- List<List<String>> permutations = new ArrayList<List<String>>();
- int numEntries = 1;
- for (List<String> list : filterGroup) {
- numEntries *= list.size();
- }
- for (int i = 0; i < numEntries; i++) {
- permutations.add(new ArrayList<String>());
- }
- for (List<String> itemList : filterGroup) {
- Iterator<String> iterator = itemList.iterator();
- if (iterator.hasNext()) {
- for (List<String> entry : permutations) {
- entry.add(iterator.next());
- if (!iterator.hasNext()) {
- iterator = itemList.iterator();
- }
- }
- }
- }
- String set = "";
- boolean firstSet = true;
- for (List<String> permutation : permutations) {
- boolean firstTuple = true;
- String tuple = "";
- for (String item : permutation) {
- if (firstTuple) {
- firstTuple = false;
- } else {
- tuple += ",";
- }
- tuple += item;
- }
- if (firstSet) {
- firstSet = false;
- } else {
- set += ",";
- }
- set += "(" + tuple + ")";
- }
- filters.put(firstFilter, "{" + set + "}");
+ concurrentEventOccured = true;
+ concurrentEvent = event;
}
- return filters;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.osbp.ui.api.user.IUser.UserLocaleListener#localeChanged(java.util.Locale)
+ */
@Override
- public void setLocale(Locale locale) {
- if (dslMetadataService != null) {
- for (String sel : selectors.keySet()) {
- if (showCaption) {
- selectors.get(sel).setCaption(
- dslMetadataService.translate(
- locale.toLanguageTag(),
- getTranslatableKey(selectors.get(sel)
- .getFilterName())));
+ public void localeChanged(final Locale locale) {
+ if(datamart != null) {
+ ArrayList<DatamartFilter> filters = datamart.getFilters();
+ if (filters != null) {
+ for (DatamartFilter filter : filters) {
+ if(filter.getSelector() != null || filter.getBetweenInputComponent() != null) {
+ if (IDatamartFilterGenerator.SHOW_CAPTION) {
+ if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()) {
+ filter.getBetweenInputComponent().setCaption(dslMetadataService.translate(locale.toLanguageTag(), getTranslatableKey(filter.getName())));
+ } else {
+ filter.getSelector().setCaption(dslMetadataService.translate(locale.toLanguageTag(), getTranslatableKey(filter.getName())));
+ }
+ }
+ if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()) {
+ filter.getBetweenInputComponent().setDescription(dslMetadataService.translate(locale.toLanguageTag(), getTranslatableKey(filter.getName())));
+ } else {
+ filter.getSelector().setDescription(dslMetadataService.translate(locale.toLanguageTag(), getTranslatableKey(filter.getName())));
+ }
+ }
}
- selectors.get(sel).setDescription(
- dslMetadataService.translate(locale.toLanguageTag(),
- getTranslatableKey(selectors.get(sel)
- .getFilterName())));
}
}
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java
index ea1e7cb..e0e0e5d 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartMultiSelect.java
@@ -16,9 +16,9 @@
import java.util.Collection;
import java.util.List;
+import org.eclipse.osbp.runtime.common.event.IDualData;
import org.eclipse.osbp.ui.api.datamart.IDatamartSelectable;
-import org.eclipse.osbp.ui.api.datamart.IDualData;
-import org.eclipse.osbp.utils.theme.EnumCssClass;
+import org.eclipse.osbp.ui.api.themes.EnumCssClass;
import com.vaadin.data.Container;
import com.vaadin.ui.ListSelect;
@@ -27,7 +27,6 @@
IDatamartSelectable {
private static final long serialVersionUID = 7284120542309904692L;
- private String filterName = null;
private boolean slicer = false;
private String hierarchy = null;
private IDualData firstItem = null;
@@ -40,10 +39,9 @@
}
public DatamartMultiSelect(int rowsLimit, boolean isExcept,
- boolean isSlicer, String filterName, Collection<IDualData> data) {
+ boolean isSlicer, Collection<IDualData> data) {
addStyleName(EnumCssClass.MULTI_SELECTION.styleName());
slicer = isSlicer;
- setFilterName(filterName);
setMultiSelect(true);
update(data);
if (data.size() > rowsLimit) {
@@ -74,15 +72,13 @@
firstItem = null;
for (IDualData dd : options) {
setHierarchy(dd.getHierarchy());
- // String item = dd.getFormattedValue();
- String item = dd.getSignificantValue();
+ String item = dd.getSelectionValue();
if (item != null) {
if (firstItem == null) {
firstItem = dd;
}
addItem(dd);
- // setItemCaption(dd, dd.getFormattedValue());
- setItemCaption(dd, dd.getSignificantValue());
+ setItemCaption(dd, dd.getFormattedValue());
}
}
// always select the first option
@@ -99,14 +95,6 @@
super.setWidth(width);
}
- public String getFilterName() {
- return filterName;
- }
-
- public void setFilterName(String filterName) {
- this.filterName = filterName;
- }
-
public List<IDualData> getSelectedItems() {
List<IDualData> list = new ArrayList<IDualData>();
for (Object item : (Collection<?>) getValue()) {
@@ -132,9 +120,18 @@
return super.getContainerDataSource();
}
+ @SuppressWarnings("unchecked")
@Override
public void select(Object obj) {
- super.select(obj);
+ for(Object item:getItemIds()) {
+ for(IDualData sel:(List<IDualData>)obj) {
+ if(sel.equals((IDualData)item)) {
+ super.select(item);
+ } else {
+ super.unselect(item);
+ }
+ }
+ }
}
@Override
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java
index a1c37d2..3c6c198 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartSingleSelect.java
@@ -16,9 +16,9 @@
import java.util.Collection;
import java.util.List;
+import org.eclipse.osbp.runtime.common.event.IDualData;
import org.eclipse.osbp.ui.api.datamart.IDatamartSelectable;
-import org.eclipse.osbp.ui.api.datamart.IDualData;
-import org.eclipse.osbp.utils.theme.EnumCssClass;
+import org.eclipse.osbp.ui.api.themes.EnumCssClass;
import com.vaadin.data.Container;
import com.vaadin.ui.ComboBox;
@@ -27,7 +27,6 @@
IDatamartSelectable {
private static final long serialVersionUID = -5673052113801450589L;
- private String filterName = null;
private String hierarchy = null;
private boolean slicer = false;
private IDualData firstItem = null;
@@ -41,10 +40,9 @@
}
public DatamartSingleSelect(boolean isExcept, boolean isSlicer,
- String filterName, Collection<IDualData> data) {
+ Collection<IDualData> data) {
addStyleName(EnumCssClass.SINGLE_SELECTION.styleName());
slicer = isSlicer;
- setFilterName(filterName);
update(data);
}
@@ -61,15 +59,13 @@
firstItem = null;
for (IDualData dd : options) {
setHierarchy(dd.getHierarchy());
- // String item = dd.getFormattedValue();
- String item = dd.getSignificantValue();
+ String item = dd.getSelectionValue();
if (item != null) {
if (firstItem == null) {
firstItem = dd;
}
addItem(dd);
- // setItemCaption(dd, dd.getFormattedValue());
- setItemCaption(dd, dd.getSignificantValue());
+ setItemCaption(dd, dd.getFormattedValue());
}
}
// always select the first option
@@ -84,14 +80,6 @@
super.setWidth(width);
}
- public String getFilterName() {
- return filterName;
- }
-
- public void setFilterName(String filterName) {
- this.filterName = filterName;
- }
-
public List<IDualData> getSelectedItems() {
List<IDualData> items = new ArrayList<IDualData>();
items.add((IDualData) getValue());
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/Cell2dTable.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/Cell2dTable.java
index 5916595..16a33a4 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/Cell2dTable.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/Cell2dTable.java
@@ -19,7 +19,6 @@
import java.util.TreeMap;
import org.eclipse.osbp.dsl.entity.xtext.util.PersistenceNamingUtils;
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
/**
* Do not mistake {@link Cell2dTable} with {@link DerivedCellSet}!
@@ -34,16 +33,13 @@
private final Map<Integer,HeaderMapping> fIndexToHeaderMap;
private final Map<String,HeaderMapping> fNameToHeaderMap;
- public Cell2dTable(DerivedCellSet cellSet) throws DerivedOlapException {
+ @SuppressWarnings("restriction")
+ public Cell2dTable(DerivedCellSet cellSet) {
fCellSet = cellSet;
fIndexToHeaderMap = new TreeMap<Integer,HeaderMapping>();
fNameToHeaderMap = new HashMap<String,HeaderMapping>();
- if (cellSet == null) {
- throw new DerivedOlapException("referenced datamart EmployeeSalary generates no results");
- } else if (cellSet.getAxes().size() < 2) {
- throw new DerivedOlapException("at least 2 axes from referenced datamart EmployeeSalary are needed to render EmployeeSalary");
- } else {
+ if (cellSet != null && cellSet.getAxes().size() > 1) {
try {
// --- first get the header for all "rows" ---
DerivedHierarchy hier = fCellSet.getAxes().get(DerivedAxis.AXIS_ROWS).getPositions().get(0).getMembers().get(0).getHierarchy();
@@ -51,9 +47,8 @@
int count = 0;
for (DerivedLevel lev : hier.getLevels()) {
HeaderMapping headerMap = new HeaderMapping(
- fIndexToHeaderMap.size(),
- // see DatamartDSLJvmInferrer & ReportDSLJvmInferrer
- PersistenceNamingUtils.camelCaseToUpperCase(lev.getName()).toLowerCase(),
+ -hier.getLevels().size() + count,
+ lev.getName(),
DerivedAxis.AXIS_ROWS,
count);
fIndexToHeaderMap.put(headerMap.fHeaderIndex, headerMap);
@@ -62,35 +57,26 @@
}
}
}
- catch (DerivedOlapException oe) {
- throw oe;
- }
catch (Exception e) {
}
- try {
- // --- next get the header for all "columns" ---
- // Column header
- // See
- // http://www.olap4j.org/api/index.html?org/olap4j/Position.html
- // on how Position works, it helps a lot
- // Every position will be a column in the header
- int count = 0;
- for (DerivedPosition pos : fCellSet.getAxes().get(DerivedAxis.AXIS_COLUMNS).getPositions()) {
- // --- only use 1st member ---
- HeaderMapping headerMap = new HeaderMapping(
- fIndexToHeaderMap.size(),
- // see DatamartDSLJvmInferrer & ReportDSLJvmInferrer
- PersistenceNamingUtils.camelCaseToUpperCase(pos.getMembers().get(0).getCaption()).toLowerCase(),
- DerivedAxis.AXIS_COLUMNS,
- count);
- fIndexToHeaderMap.put(headerMap.fHeaderIndex, headerMap);
- fNameToHeaderMap.put(headerMap.fHeaderName, headerMap);
- count++;
- }
- }
- catch (Exception e) {
- throw new DerivedOlapException(e.getLocalizedMessage());
+ // --- next get the header for all "columns" ---
+ // Column header
+ // See
+ // http://www.olap4j.org/api/index.html?org/olap4j/Position.html
+ // on how Position works, it helps a lot
+ // Every position will be a column in the header
+ int count = 0;
+ for (DerivedPosition pos : fCellSet.getAxes().get(DerivedAxis.AXIS_COLUMNS).getPositions()) {
+ // --- only use 1st member ---
+ HeaderMapping headerMap = new HeaderMapping(
+ count,
+ pos.getMembers().get(0).getCaption(),
+ DerivedAxis.AXIS_COLUMNS,
+ count);
+ fIndexToHeaderMap.put(headerMap.fHeaderIndex, headerMap);
+ fNameToHeaderMap.put(headerMap.fHeaderName, headerMap);
+ count++;
}
}
}
@@ -100,8 +86,13 @@
}
private HeaderMapping header(String name) {
- // see DatamartDSLJvmInferrer & ReportDSLJvmInferrer
- return fNameToHeaderMap.get(PersistenceNamingUtils.camelCaseToUpperCase(name).toLowerCase());
+ // see DatamartDSLJvmInferrer & ReportDSLJvmInferrer
+ for(String col:fNameToHeaderMap.keySet()) {
+ if(col.equalsIgnoreCase(name)) {
+ return fNameToHeaderMap.get(col);
+ }
+ }
+ return null;
}
/**
@@ -113,11 +104,11 @@
/**
* @param name
- * @return the index of the header or -1 if it doesn't exist
+ * @return the index of the header or -99 if it doesn't exist
*/
public int getHeaderIndex(String name) {
HeaderMapping header = header(name);
- return header == null ? -1 : header.fHeaderIndex;
+ return header == null ? -99 : header.fHeaderIndex;
}
/**
@@ -182,11 +173,7 @@
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(header.fIndexOnAxis); // coordinte
list.add(rowIndex); // coordinte
- try {
- result = fCellSet.getCell(list);
- } catch (DerivedOlapException e) {
- e.printStackTrace();
- }
+ result = fCellSet.getCell(list);
break;
}
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/CellSetToD3JsonConverter.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/CellSetToD3JsonConverter.java
index 472ac18..c364950 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/CellSetToD3JsonConverter.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/CellSetToD3JsonConverter.java
@@ -18,8 +18,6 @@
import java.util.LinkedList;
import java.util.List;
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
-
import elemental.json.JsonFactory;
import elemental.json.impl.JreJsonArray;
import elemental.json.impl.JreJsonFactory;
@@ -32,7 +30,7 @@
private static final String KEY_TOOLTIPNAME="tooltipName";
private static JsonFactory factory = new JreJsonFactory();
- public static String getD3JsonString(DerivedCellSet cxCellSet) throws DerivedOlapException{
+ public static String getD3JsonString(DerivedCellSet cxCellSet) {
// generate a new result component
if (cxCellSet == null) {
return "";
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedAxis.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedAxis.java
index b846ace..7c53539 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedAxis.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedAxis.java
@@ -21,7 +21,7 @@
import mondrian.olap.Axis;
-import org.jbpm.task.query.TaskSummary;
+import org.eclipse.osbp.bpm.api.BPMTaskSummary;
import org.olap4j.CellSetAxis;
@@ -32,7 +32,7 @@
private CellSetAxis olapAxis = null;
private Axis mondrianAxis = null;
- private List<TaskSummary> taskAxis = null;
+ private List<BPMTaskSummary> taskAxis = null;
private List<DerivedPosition> positionList = new ArrayList<>();
private Map<Integer, DerivedPosition> positionsByOrdinal = new HashMap<>();
private Map<DerivedPosition, Integer> ordinalsByPosition = new HashMap<>();
@@ -62,7 +62,7 @@
}
}
- public DerivedAxis(List<TaskSummary> taskAxis, int axisNo, DerivedCellSet container) {
+ public DerivedAxis(List<BPMTaskSummary> taskAxis, int axisNo, DerivedCellSet container) {
super();
this.container = container;
this.taskAxis = taskAxis;
@@ -114,7 +114,7 @@
ordinalsByPosition.put(pos, ordinal);
}
if (axisNo == 1) {
- for (TaskSummary task : taskAxis) {
+ for (BPMTaskSummary task : taskAxis) {
DerivedPosition pos = new DerivedPosition("row", ordinal++, container);
positionList.add(pos);
positionsByOrdinal.put(ordinal, pos);
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedCellSet.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedCellSet.java
index bafa401..9cba6f2 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedCellSet.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedCellSet.java
@@ -19,12 +19,11 @@
import mondrian.olap.Result;
import org.apache.commons.lang3.ArrayUtils;
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
+import org.eclipse.osbp.bpm.api.BPMTaskSummary;
import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
import org.eclipse.osbp.ui.api.user.IUser;
import org.eclipse.osbp.xtext.datamart.common.sql.OperativeDtoContainer;
import org.eclipse.osbp.xtext.datamart.common.sql.SqlCellSet;
-import org.jbpm.task.query.TaskSummary;
import org.olap4j.CellSet;
import org.olap4j.CellSetAxis;
import org.slf4j.Logger;
@@ -38,13 +37,13 @@
* </ul>
*/
public class DerivedCellSet{
- private final static Logger cellLog = LoggerFactory.getLogger(DerivedCellSet.class);
+ private static final Logger cellLog = LoggerFactory.getLogger(DerivedCellSet.class);
private final ResultSetMetaData resultSetMetaData;
private CellSet olapCellset = null;
private Result mondrianCellset = null;
- private List<TaskSummary> taskCellset = null;
- private List<DerivedAxis> axisList = new ArrayList<DerivedAxis>();
+ private List<BPMTaskSummary> taskCellset = null;
+ private List<DerivedAxis> axisList = new ArrayList<>();
private IDSLMetadataService dslMetadataService;
private IUser user;
@@ -74,7 +73,7 @@
}
}
- public DerivedCellSet(List<TaskSummary> tasks, IDSLMetadataService dslMetadataService, IUser user) {
+ public DerivedCellSet(List<BPMTaskSummary> tasks, IDSLMetadataService dslMetadataService, IUser user) {
super();
this.dslMetadataService = dslMetadataService;
this.user = user;
@@ -121,7 +120,7 @@
* @param rowIndex
* @return
*/
- public DerivedCell getCell(List<Integer> coordinate) throws DerivedOlapException {
+ public DerivedCell getCell(List<Integer> coordinate) {
DerivedCell cxCell = null;
try {
if (olapCellset!=null){
@@ -132,7 +131,7 @@
cxCell = new DerivedCell(getTaskCellValue(taskCellset,coordinate), getTaskCellFormattedValue(taskCellset,coordinate));
}
} catch (Exception e) {
- cellLog.error(e.getLocalizedMessage());
+ cellLog.error("{}", e);
}
return cxCell;
}
@@ -143,8 +142,8 @@
return mondrianCellset.getCell(coordinateArray);
}
- private Object getTaskCellValue(List<TaskSummary> taskCellset, List<Integer> coordinate){
- TaskSummary task = taskCellset.get(coordinate.get(1));
+ private Object getTaskCellValue(List<BPMTaskSummary> taskCellset, List<Integer> coordinate){
+ BPMTaskSummary task = taskCellset.get(coordinate.get(1));
switch(coordinate.get(0)) {
case 0: return task.getName();
case 1: return task.getPriority();
@@ -157,12 +156,14 @@
case 8: return task.getActivationTime();
case 9: return task.getActualOwner();
case 10:return task.getId();
+ default:
+ break;
}
return null;
}
- private String getTaskCellFormattedValue(List<TaskSummary> taskCellset, List<Integer> coordinate){
- TaskSummary task = taskCellset.get(coordinate.get(1));
+ private String getTaskCellFormattedValue(List<BPMTaskSummary> taskCellset, List<Integer> coordinate){
+ BPMTaskSummary task = taskCellset.get(coordinate.get(1));
switch(coordinate.get(0)) {
case 0: return task.getName();
case 1:
@@ -201,6 +202,8 @@
return Long.toString(task.getId());
}
return null;
+ default:
+ break;
}
return null;
}
@@ -213,8 +216,8 @@
return user;
}
- public boolean idsMatch(DerivedCellSet other, List<Integer>coordinateSystem, int rowOrdinal) throws DerivedOlapException {
- List<Integer> coordinates = new ArrayList<Integer>(coordinateSystem);
+ public boolean idsMatch(DerivedCellSet other, List<Integer>coordinateSystem, int rowOrdinal) {
+ List<Integer> coordinates = new ArrayList<>(coordinateSystem);
coordinates.set(1, rowOrdinal);
Object value = null;
Object otherValue = null;
@@ -233,9 +236,6 @@
if (value == null && otherValue == null) {
return true; // there are no ids in table
}
- if (value != null && otherValue != null && value.equals(otherValue)) {
- return true;
- }
- return false;
+ return (value != null && otherValue != null && value.equals(otherValue));
}
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedHierarchy.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedHierarchy.java
index 9d06d27..03bf48c 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedHierarchy.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedHierarchy.java
@@ -16,12 +16,9 @@
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
-
public class DerivedHierarchy {
private org.olap4j.metadata.Hierarchy olapHierarchy;
private mondrian.olap.Hierarchy mondrianHierarchy;
- private DerivedOlapException cxOlapException = new DerivedOlapException("No Hierarchy found!!!!");
List<DerivedLevel> levelList = new ArrayList<DerivedLevel>();
@@ -39,14 +36,12 @@
}
}
- public String getName() throws DerivedOlapException{
+ public String getName() {
String name = "";
if (olapHierarchy!=null){
name = olapHierarchy.getName();
} else if (mondrianHierarchy!=null){
name = mondrianHierarchy.getName();
- } else {
- throw cxOlapException;
}
return name;
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedMember.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedMember.java
index d71a11e..68ccefe 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedMember.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedMember.java
@@ -13,14 +13,14 @@
*/
package org.eclipse.osbp.xtext.datamart.common.olap;
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
+import mondrian.olap.Member.MemberType;
+import mondrian.olap.type.Type;
public class DerivedMember {
private org.olap4j.metadata.Member olapMember = null;
private mondrian.olap.Member mondrianMember = null;
private String taskMember = null;
- private DerivedOlapException cxOlapException = new DerivedOlapException("No Member found!!!!");
public DerivedMember(org.olap4j.metadata.Member olapMember) {
this.olapMember = olapMember;
@@ -58,7 +58,7 @@
return caption;
}
- public DerivedHierarchy getHierarchy() throws DerivedOlapException {
+ public DerivedHierarchy getHierarchy() {
DerivedHierarchy hierarchy = null;
if (olapMember != null) {
hierarchy = new DerivedHierarchy(olapMember.getHierarchy());
@@ -81,4 +81,16 @@
}
return level;
}
+
+ public MemberType getType() {
+ MemberType type = null;
+ if (olapMember != null) {
+ type = MemberType.valueOf(olapMember.getMemberType().name());
+ } else if (mondrianMember != null) {
+ type = mondrianMember.getMemberType();
+ } else {
+ return null;
+ }
+ return type;
+ }
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedPosition.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedPosition.java
index 6107494..de1668b 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedPosition.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedPosition.java
@@ -18,17 +18,11 @@
import java.util.ListIterator;
import java.util.Locale;
-import org.eclipse.osbp.ui.api.datamart.DerivedOlapException;
-
import mondrian.olap.Member;
-
-
public class DerivedPosition {
private DerivedCellSet container;
private org.olap4j.Position olapPosition = null;
- private mondrian.olap.Position mondrianPosition = null;
- private String taskPosition = null;
private List<DerivedMember> memberList = new ArrayList<DerivedMember>();
private int ordinal;
@@ -44,7 +38,7 @@
super();
setContainer(container);
this.ordinal = ordinal;
- this.mondrianPosition = mondrianPosition;
+// this.mondrianPosition = mondrianPosition;
for (ListIterator<Member> iterator = mondrianPosition.listIterator();iterator.hasNext();) {
mondrian.olap.Member mondrianMember = (mondrian.olap.Member) iterator.next();
memberList.add(new DerivedMember(mondrianMember));
@@ -61,7 +55,7 @@
super();
setContainer(container);
this.ordinal = ordinal;
- this.taskPosition = taskPosition;
+// this.taskPosition = taskPosition;
memberList.add(new DerivedMember(taskPosition));
}
@@ -104,11 +98,7 @@
if (getOrdinal() < 0) {
List<String>colHeaders = new ArrayList<String>();
DerivedHierarchy hier = null;
- try {
- hier = member.getHierarchy();
- } catch (DerivedOlapException e) {
- e.printStackTrace();
- }
+ hier = member.getHierarchy();
if (hier != null) {
for(DerivedLevel lev : hier.getLevels()) {
if(locale != null) {
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/FillerTextResultSet.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/FillerTextResultSet.java
index daf5bac..9307af0 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/FillerTextResultSet.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/FillerTextResultSet.java
@@ -32,13 +32,11 @@
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
-import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.eclipse.osbp.xtext.datamart.common.AEntityDatamart;
-
-import org.eclipse.osbp.utils.fillertext.FillerTextProvider;
+import org.eclipse.osbp.xtext.entitymock.common.filler.FillerTextProvider;
public class FillerTextResultSet implements ResultSet {
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCell.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCell.java
index 3a6d205..acbc38c 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCell.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCell.java
@@ -84,8 +84,9 @@
@Override
public Object getValue() {
// get rid of the missing bigdecimal implementation of filtertable
+ // changed to int value for mysql as id are type bigdecimal
if (fValue instanceof BigDecimal) {
- return ((BigDecimal)fValue).doubleValue();
+ return ((BigDecimal)fValue).intValue();
}
return fValue;
}
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java
index 38bbf38..2fe86d1 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSet.java
@@ -15,9 +15,6 @@
import java.io.InputStream;
import java.io.Reader;
-import java.io.UnsupportedEncodingException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.Array;
@@ -36,12 +33,14 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-import org.jbpm.task.query.TaskSummary;
+import org.eclipse.osbp.bpm.api.BPMTaskSummary;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.ui.api.datamart.DatamartPrimary;
+import org.eclipse.osbp.ui.api.datamart.IDataMart.EType;
+import org.eclipse.osbp.xtext.datamart.common.DatamartDtoMapper;
import org.olap4j.Cell;
import org.olap4j.CellSet;
import org.olap4j.CellSetAxis;
@@ -51,26 +50,25 @@
import org.olap4j.Position;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.commons.lang3.StringUtils;
-import org.eclipse.osbp.dsl.common.datatypes.IDto;
-import org.eclipse.osbp.utils.common.EntityUtils;
-import org.eclipse.osbp.ui.api.datamart.IDataMart.EType;
-import org.eclipse.osbp.xtext.datamart.common.DatamartDtoMapper;
+
+import mondrian.olap.Member;
+import mondrian.olap.Member.MemberType;
+import mondrian.olap.type.Type;
class TaskMetaInfo {
- String type;
+ MemberType type;
Integer ordinal;
- TaskMetaInfo(String type, Integer ordinal) {
+ TaskMetaInfo(MemberType type, Integer ordinal) {
this.type = type;
this.ordinal = ordinal;
}
- public String getType() {
+ public MemberType getType() {
return type;
}
- public void setType(String type) {
+ public void setType(MemberType type) {
this.type = type;
}
@@ -90,28 +88,28 @@
private final List<CellSetAxis> fAxes;
private final List<SqlCellSetAxis> sqlAxes;
private final Map<String, TaskMetaInfo> taskMetaData = new HashMap<String, TaskMetaInfo>() {{
- put("Name", new TaskMetaInfo("String", 0));
- put("Priority", new TaskMetaInfo("Integer", 1));
- put("Status", new TaskMetaInfo("Integer", 2));
- put("Subject", new TaskMetaInfo("String", 3));
- put("Description", new TaskMetaInfo("String", 4));
- put("ExpirationTime", new TaskMetaInfo("Date", 5));
- put("CreatedOn", new TaskMetaInfo("Date", 6));
- put("CreatedBy", new TaskMetaInfo("String", 7));
- put("ActivationTime", new TaskMetaInfo("Date", 8));
- put("ActualOwner", new TaskMetaInfo("String", 9));
- put("TaskId", new TaskMetaInfo("Long", 10));
- put("ProcessId", new TaskMetaInfo("String", 11));
- put("ProcessInstanceId",new TaskMetaInfo("Long", 12));
- put("ProcessSessionId", new TaskMetaInfo("Integer", 13));
+ put("Name", new TaskMetaInfo(MemberType.REGULAR, 0));
+ put("Priority", new TaskMetaInfo(MemberType.REGULAR, 1));
+ put("Status", new TaskMetaInfo(MemberType.REGULAR, 2));
+ put("Subject", new TaskMetaInfo(MemberType.REGULAR, 3));
+ put("Description", new TaskMetaInfo(MemberType.REGULAR, 4));
+ put("ExpirationTime", new TaskMetaInfo(MemberType.REGULAR, 5));
+ put("CreatedOn", new TaskMetaInfo(MemberType.REGULAR, 6));
+ put("CreatedBy", new TaskMetaInfo(MemberType.REGULAR, 7));
+ put("ActivationTime", new TaskMetaInfo(MemberType.REGULAR, 8));
+ put("ActualOwner", new TaskMetaInfo(MemberType.REGULAR, 9));
+ put("TaskId", new TaskMetaInfo(MemberType.REGULAR, 10));
+ put("ProcessId", new TaskMetaInfo(MemberType.REGULAR, 11));
+ put("ProcessInstanceId",new TaskMetaInfo(MemberType.REGULAR, 12));
+ put("ProcessSessionId", new TaskMetaInfo(MemberType.REGULAR, 13));
}};
private OperativeDtoContainer operativeDtoContainer = null;
- public SqlCellSet(List<TaskSummary> tasks, HashMap<Integer,ArrayList<String>> axisMap) {
- fCells = new ArrayList<Cell[]>();
- fAxes = new ArrayList<CellSetAxis>();
- sqlAxes = new ArrayList<SqlCellSetAxis>();
+ public SqlCellSet(List<BPMTaskSummary> tasks, HashMap<Integer,ArrayList<String>> axisMap) {
+ fCells = new ArrayList<>();
+ fAxes = new ArrayList<>();
+ sqlAxes = new ArrayList<>();
int numColumns = taskMetaData.keySet().size();
if (!axisMap.keySet().isEmpty()) {
for (int axisNumber : axisMap.keySet()) {
@@ -142,7 +140,7 @@
if (numColumns > 0) {
int rowNo = 0;
- for(TaskSummary task : tasks) {
+ for(BPMTaskSummary task : tasks) {
Cell[] row = null;
if (!axisMap.keySet().isEmpty()) {
int numCols = axisMap.get(0).size();
@@ -160,7 +158,7 @@
formattedValue = getFormattedValue(task, columnLabel);
value = getValue(task, columnLabel);
if (axisMap.keySet().size() > 1 && axisMap.get(1).contains(columnLabel)) {
- sqlAxes.get(1).addPosition(1, rowNo, columnLabel, formattedValue, formattedValue);
+ sqlAxes.get(1).addPosition(1, rowNo, taskMetaData.get(columnLabel).getType(), formattedValue, formattedValue);
}
else {
row[ordinal] = new SqlCell(this, rowNo, ordinal, value, formattedValue, false, null);
@@ -179,7 +177,7 @@
}
}
if (axisMap.keySet().size() < 2) {
- sqlAxes.get(1).addPosition(0, rowNo, "", "", "");
+ sqlAxes.get(1).addPosition(0, rowNo, MemberType.NULL, "", "");
}
fCells.add(row);
rowNo++;
@@ -190,7 +188,7 @@
}
}
- private Object getValue(TaskSummary task, String column){
+ private Object getValue(BPMTaskSummary task, String column){
switch(column) {
case "Name": return task.getName()!=null ?task.getName():"";
case "Priority": return task.getPriority();
@@ -199,9 +197,9 @@
case "Description": return task.getDescription()!=null?task.getDescription():"";
case "ExpirationTime": return task.getExpirationTime();
case "CreatedOn": return task.getCreatedOn();
- case "CreatedBy": return task.getCreatedBy()!=null ? task.getCreatedBy().getId() : "";
+ case "CreatedBy": return task.getCreatedBy()!=null ? task.getCreatedBy() : "";
case "ActivationTime": return task.getActivationTime();
- case "ActualOwner": return task.getActualOwner()!= null ? task.getActualOwner().getId() : "";
+ case "ActualOwner": return task.getActualOwner()!= null ? task.getActualOwner() : "";
case "TaskId": return task.getId();
case "ProcessId": return task.getProcessId();
case "ProcessInstanceId": return task.getProcessInstanceId();
@@ -210,7 +208,7 @@
}
}
- private String getFormattedValue(TaskSummary task, String column){
+ private String getFormattedValue(BPMTaskSummary task, String column){
switch(column) {
case "Name": return task.getName();
case "Priority":
@@ -231,7 +229,7 @@
return null;
case "CreatedBy":
if (task.getCreatedBy() != null) {
- return task.getCreatedBy().toString();
+ return task.getCreatedBy();
}
return null;
case "ActivationTime":
@@ -241,7 +239,7 @@
return null;
case "ActualOwner":
if (task.getActualOwner() != null) {
- return task.getActualOwner().toString();
+ return task.getActualOwner();
}
return null;
case "TaskId":
@@ -270,11 +268,16 @@
}
- public SqlCellSet(ResultSet rs, HashMap<Integer,ArrayList<String>> axisMap, HashMap<String, EType> idMap, DatamartDtoMapper datamartDtoMapper, Class<?> operativeDtoClass, List<IDto> operativeDtos) {
+ public SqlCellSet(ResultSet rs, HashMap<Integer,ArrayList<String>> axisMap, HashMap<String, EType> idMap, DatamartDtoMapper datamartDtoMapper, Class<?> operativeDtoClass, List<IDto> operativeDtos, List<DatamartPrimary<?>> primaryKeys) {
operativeDtoContainer = null;
fCells = new ArrayList<>();
fAxes = new ArrayList<>();
- sqlAxes = new ArrayList<SqlCellSetAxis>();
+ sqlAxes = new ArrayList<>();
+ Map<String, DatamartPrimary> primaryMap = new HashMap<>();
+ for(DatamartPrimary<?> pr : primaryKeys) {
+ pr.clear();
+ primaryMap.put(pr.getAlias(), pr);
+ }
int numColumns = 0;
SqlCellSetAxis sqlCellSetAxis = null;
try {
@@ -292,7 +295,7 @@
for (String columnLabel : axisMap.get(0)) {
try {
int columnIdx = rs.findColumn(columnLabel);
- sqlCellSetAxis.addPosition(axisNumber, ordinal, rs.getMetaData().getColumnClassName(columnIdx), rs.getMetaData().getColumnName(columnIdx), rs.getMetaData().getColumnLabel(columnIdx));
+ sqlCellSetAxis.addPosition(axisNumber, ordinal, convertToMemberType(rs, columnIdx), rs.getMetaData().getColumnName(columnIdx), rs.getMetaData().getColumnLabel(columnIdx));
ordinal ++;
} catch (SQLException e) {}
}
@@ -303,7 +306,7 @@
else {
sqlCellSetAxis = new SqlCellSetAxis(this, 0);
for (int idx=1; idx<=numColumns; idx++) {
- sqlCellSetAxis.addPosition(0, idx-1, rs.getMetaData().getColumnClassName(idx), rs.getMetaData().getColumnName(idx), rs.getMetaData().getColumnLabel(idx));
+ sqlCellSetAxis.addPosition(0, idx-1, convertToMemberType(rs, idx), rs.getMetaData().getColumnName(idx), rs.getMetaData().getColumnLabel(idx));
}
sqlAxes.add(sqlCellSetAxis);
}
@@ -328,7 +331,7 @@
boolean displayRow = true;
if (operativeDtoContainer.getOperativeDtoIdColumn() != null) {
int columnIdx = rs.findColumn(operativeDtoContainer.getOperativeDtoIdColumn());
- Object value = rs.getObject(columnIdx);
+ Object value = getCastedValue(rs, columnIdx);
displayRow = (operativeDtoContainer.getOperativeDtoForId(value) != null);
}
if (displayRow) {
@@ -356,9 +359,12 @@
try {
int columnIdx = rs.findColumn(columnLabel);
formattedValue = getFormattedValue(rs, columnIdx);
- value = rs.getObject(columnIdx);
+ value = getCastedValue(rs, columnIdx);
+ if(primaryMap.containsKey(columnLabel)) {
+ primaryMap.get(columnLabel).add(value);
+ }
if (axisMap.keySet().size() > 1 && axisMap.get(1).contains(columnLabel)) {
- sqlAxes.get(1).addPosition(1, targetRowNo, columnLabel, formattedValue, formattedValue);
+ sqlAxes.get(1).addPosition(1, targetRowNo, convertToMemberType(rs, columnIdx), formattedValue, columnLabel);
}
else {
row[ordinal] = new SqlCell(this, targetRowNo, ordinal, value, formattedValue, isId(columnLabel, idMap), getType(columnLabel, idMap));
@@ -372,13 +378,16 @@
for (int idx=1; idx<=numColumns; idx++) {
String columnLabel = rs.getMetaData().getColumnLabel(idx);
formattedValue = getFormattedValue(rs, idx);
- value = rs.getObject(idx);
+ value = getCastedValue(rs, idx);
+ if(primaryMap.containsKey(columnLabel)) {
+ primaryMap.get(columnLabel).add(value);
+ }
row[colNo] = new SqlCell(this, targetRowNo, colNo, value, formattedValue, isId(columnLabel, idMap), getType(columnLabel, idMap));
colNo ++;
}
}
if (axisMap.keySet().size() < 2) {
- sqlAxes.get(1).addPosition(0, targetRowNo, "", "", "");
+ sqlAxes.get(1).addPosition(0, targetRowNo, MemberType.NULL, "", "");
}
fCells.add(row);
targetRowNo++;
@@ -394,9 +403,105 @@
}
}
+ private MemberType convertToMemberType(ResultSet rs, int idx) {
+ int type;
+ int scale;
+ try {
+ type = rs.getMetaData().getColumnType(idx);
+ scale = rs.getMetaData().getScale(idx);
+ } catch (SQLException e) {
+ return null;
+ }
+
+ switch (type) {
+ case java.sql.Types.DATE:
+ case java.sql.Types.TIME:
+ case java.sql.Types.TIMESTAMP:
+ return Member.MemberType.REGULAR;
+ case java.sql.Types.TINYINT:
+ case java.sql.Types.SMALLINT:
+ case java.sql.Types.BIGINT:
+ case java.sql.Types.INTEGER:
+ case java.sql.Types.BOOLEAN:
+ case java.sql.Types.BIT:
+ return Member.MemberType.UNKNOWN;
+ case java.sql.Types.NUMERIC:
+ if(scale == 0) {
+ return Member.MemberType.UNKNOWN;
+ }
+ return Member.MemberType.MEASURE;
+ case java.sql.Types.DECIMAL:
+ case java.sql.Types.DOUBLE:
+ case java.sql.Types.FLOAT:
+ case java.sql.Types.REAL:
+ return Member.MemberType.MEASURE;
+ case java.sql.Types.CHAR:
+ case java.sql.Types.NCHAR:
+ case java.sql.Types.NVARCHAR:
+ case java.sql.Types.VARCHAR:
+ case java.sql.Types.LONGVARCHAR:
+ return Member.MemberType.REGULAR;
+ default:
+ return Member.MemberType.UNKNOWN;
+ }
+ }
+
public OperativeDtoContainer getOperativeDtoContainer() {
return operativeDtoContainer;
}
+
+ private Object getCastedValue(ResultSet rs, int idx) throws SQLException {
+ int type = rs.getMetaData().getColumnType(idx);
+ int scale = rs.getMetaData().getScale(idx);
+
+ switch (type) {
+ case java.sql.Types.DATE:
+ return rs.getDate(idx);
+ case java.sql.Types.TIME:
+ return rs.getTime(idx);
+ case java.sql.Types.TIMESTAMP:
+ return rs.getTimestamp(idx);
+ case java.sql.Types.TINYINT:
+ case java.sql.Types.SMALLINT:
+ return rs.getShort(idx);
+ case java.sql.Types.BIGINT:
+ return rs.getBigDecimal(idx);
+ case java.sql.Types.INTEGER:
+ case java.sql.Types.BOOLEAN:
+ case java.sql.Types.BIT:
+ return (int) rs.getInt(idx);
+ case java.sql.Types.NUMERIC:
+ if(scale == 0) {
+ return rs.getInt(idx);
+ }
+ return rs.getDouble(idx);
+ case java.sql.Types.DECIMAL:
+ case java.sql.Types.DOUBLE:
+ case java.sql.Types.REAL:
+ return rs.getDouble(idx);
+ case java.sql.Types.FLOAT:
+ return (double) rs.getFloat(idx);
+ case java.sql.Types.CHAR:
+ case java.sql.Types.NCHAR:
+ case java.sql.Types.NVARCHAR:
+ case java.sql.Types.VARCHAR:
+ case java.sql.Types.LONGVARCHAR:
+ return rs.getString(idx);
+ case java.sql.Types.BLOB:
+ return rs.getBlob(idx);
+ case java.sql.Types.CLOB:
+ return rs.getClob(idx);
+ case java.sql.Types.NCLOB:
+ return rs.getNClob(idx);
+ case java.sql.Types.DATALINK:
+ return rs.getCharacterStream(idx);
+ case java.sql.Types.SQLXML:
+ return rs.getSQLXML(idx);
+ case java.sql.Types.ROWID:
+ return rs.getRowId(idx);
+ }
+ return null;
+ }
private String getFormattedValue(ResultSet rs, int idx) throws SQLException {
int type = rs.getMetaData().getColumnType(idx);
@@ -414,11 +519,13 @@
case java.sql.Types.INTEGER:
case java.sql.Types.BIGINT:
case java.sql.Types.BOOLEAN:
+ case java.sql.Types.BIT:
+ case java.sql.Types.NUMERIC:
formattedValue = Integer.toString(rs.getInt(idx));
break;
case java.sql.Types.DECIMAL:
- case java.sql.Types.NUMERIC:
case java.sql.Types.DOUBLE:
+ case java.sql.Types.REAL:
formattedValue = Double.toString(rs.getDouble(idx));
break;
case java.sql.Types.FLOAT:
@@ -428,6 +535,7 @@
case java.sql.Types.NCHAR:
case java.sql.Types.NVARCHAR:
case java.sql.Types.VARCHAR:
+ case java.sql.Types.LONGVARCHAR:
formattedValue = rs.getString(idx);
break;
case java.sql.Types.BLOB:
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSetAxis.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSetAxis.java
index 0ed030c..1bbba24 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSetAxis.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlCellSetAxis.java
@@ -24,6 +24,8 @@
import org.olap4j.Position;
import org.olap4j.metadata.Hierarchy;
+import mondrian.olap.Member.MemberType;
+
public class SqlCellSetAxis implements CellSetAxis {
private final CellSet fCellSet;
@@ -42,20 +44,21 @@
fHierarchy = null;
}
- public SqlCellSetAxis(CellSet cellSet, int axisOrdinal, String type, String name, String label) {
+ public SqlCellSetAxis(CellSet cellSet, int axisOrdinal, MemberType type, String name, String label) {
this(cellSet, axisOrdinal);
addPosition(axisOrdinal, 0, type, name, label);
}
- public void addPosition(int axis, int ordinal, String type, String name, String label) {
+ public void addPosition(int axis, int ordinal, MemberType type, String name, String label) {
for (Position pos : fPositions){
if (pos.getOrdinal() == ordinal) {
if (axis == 1) { // the row values must be qualified for later decomposition
- if (pos.getMembers().size() == 0) {
- pos.getMembers().add(new SqlMember(type, "["+name+"]", label, fHierarchy));
+ if (pos.getMembers().isEmpty()) {
+ pos.getMembers().add(new SqlMember(type, name, label, fHierarchy));
}
else {
- ((SqlMember)pos.getMembers().get(0)).appendLevel(type, name);
+
+ ((SqlMember)pos.getMembers().get(0)).appendLevel(type, name, label);
}
}
else {
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlLevel.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlLevel.java
index 8549c93..ff41891 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlLevel.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlLevel.java
@@ -36,14 +36,12 @@
@Override
public String getCaption() {
- // TODO Auto-generated method stub
- return null;
+ return fName;
}
@Override
public String getDescription() {
- // TODO Auto-generated method stub
- return null;
+ return fName;
}
@Override
@@ -53,8 +51,7 @@
@Override
public String getUniqueName() {
- // TODO Auto-generated method stub
- return null;
+ return fName;
}
@Override
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlMember.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlMember.java
index 66e0ee2..babe940 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlMember.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlMember.java
@@ -24,44 +24,46 @@
import org.olap4j.metadata.NamedList;
import org.olap4j.metadata.Property;
+import mondrian.olap.Member.MemberType;
+
public class SqlMember implements Member {
- private String fType;
+ private MemberType fType;
private String fName;
private final String fCaption;
private Hierarchy fHierarchy;
- public SqlMember(String type, String name, String label, Hierarchy hierarchy) {
+ public SqlMember(MemberType type, String name, String label, Hierarchy hierarchy) {
fType = type;
- fName = name;
+ fName = "[" + name + "]";
fCaption = label;
fHierarchy = hierarchy;
for (Level level : fHierarchy.getLevels()) {
- if (level.getName().equals(type)) {
+ if (level.getName().equals(label)) {
return;
}
}
// if (fHierarchy.getLevels().size() == 0) {
// fHierarchy.getLevels().add(new SqlLevel("(All)"));
// }
- fHierarchy.getLevels().add(new SqlLevel(type));
+ fHierarchy.getLevels().add(new SqlLevel(label));
}
- public void appendLevel(String type, String name) {
+ public void appendLevel(MemberType type, String name, String label) {
fName += ".[" + name + "]";
for (Level level : fHierarchy.getLevels()) {
- if (level.getName().equals(type)) {
+ if (level.getName().equals(label)) {
return;
}
}
- fHierarchy.getLevels().add(new SqlLevel(type));
+ fHierarchy.getLevels().add(new SqlLevel(label));
}
public void setName(String name) {
- fName = name;
+ fName = "[" + name + "]";
}
- public void setType(String type) {
+ public void setType(MemberType type) {
fType = type;
}
@@ -147,8 +149,7 @@
@Override
public Type getMemberType() {
- // TODO Auto-generated method stub
- return null;
+ return Type.valueOf(fType.name());
}
@Override
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlPosition.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlPosition.java
index 8e385a4..e142155 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlPosition.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/sql/SqlPosition.java
@@ -20,18 +20,20 @@
import org.olap4j.metadata.Hierarchy;
import org.olap4j.metadata.Member;
+import mondrian.olap.Member.MemberType;
+
public class SqlPosition implements Position {
private final int fOrdinal;
private final List<Member> fMembers;
private Hierarchy fHierarchy;
- protected SqlPosition(int ordinal, String type, String name, String label, Hierarchy hierarchy) {
+ protected SqlPosition(int ordinal, MemberType type, String name, String label, Hierarchy hierarchy) {
fOrdinal = ordinal;
fMembers = new ArrayList<>();
fHierarchy = hierarchy;
- if (type.length()>0) {
- fMembers.add(new SqlMember(type, "["+name+"]", label, fHierarchy));
+ if(!name.isEmpty()) {
+ fMembers.add(new SqlMember(type, name, label, fHierarchy));
}
}