enhance filter
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 57f9e3f..0f9a439 100644
--- a/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
@@ -30,6 +30,7 @@
org.eclipse.osbp.dsl.semantic.common.types;version="0.9.0",
org.eclipse.osbp.dsl.semantic.entity;version="0.9.0",
org.eclipse.osbp.preferences;version="0.9.0",
+ org.eclipse.osbp.preferences.databases.vendors,
org.eclipse.osbp.runtime.common.i18n;version="0.9.0",
org.eclipse.osbp.ui.api.datamart;version="0.9.0",
org.eclipse.osbp.ui.api.date;version="0.9.0",
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 86a91f9..0504ffc 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
@@ -21,13 +21,13 @@
import java.util.List;
import java.util.Map;
-import org.eclipse.osbp.preferences.EnumDatabaseVendor;
import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.preferences.databases.vendors.DatabaseVendor;
import org.eclipse.osbp.runtime.common.event.IDualData;
import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
import org.eclipse.osbp.ui.api.datamart.DatamartFilter.FilterType;
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter.MultipleType;
import org.eclipse.osbp.ui.api.datamart.IDataMart;
-import org.eclipse.osbp.ui.api.datamart.IDatamartBetweenInput;
/**
* The Class ADatamart.
@@ -91,7 +91,7 @@
public abstract void disconnect();
/** The db vendor. */
- protected EnumDatabaseVendor dbVendor = null;
+ protected DatabaseVendor dbVendor = null;
/** The filter map. */
private ArrayList<DatamartFilter> filterMap = null;
@@ -226,19 +226,6 @@
filter.setCondition(filter.getName()+"="+filter.getSql());
}
break;
- case SINGLE:
- case SINGLESLICER:
- case SINGLEHIERARCHY:
- case SINGLEHIERARCHYCHILDREN:
- if(!filter.getSelectedData().isEmpty()) {
- filter.setCondition(filter.getSelectedData().get(0).getDatabaseSelectionValue());
- if(filter.getType()==FilterType.SINGLEHIERARCHYCHILDREN) {
- filter.setCondition(filter.getCondition()+".Children");
- }
- } else { // failsafe - but only if filter is optional
- filter.setCondition("'*'");
- }
- break;
case BETWEEN:
case BETWEEN_DATE:
if(filter.getBetweenInputComponent() != null) {
@@ -259,10 +246,9 @@
filter.setCondition("1=1");
}
break;
+ case SQL:
case EXCEPT:
- case MULTIPLE:
- case MULTIPLEHIERARCHY:
- case MULTIPLEHIERARCHYCHILDREN:
+ case HIERARCHY:
String selection = "";
for(IDualData item : filter.getSelectedData()) {
if (item != null) {
@@ -270,25 +256,31 @@
selection += ",";
}
selection += item.getDatabaseSelectionValue();
- if(filter.getType()==FilterType.MULTIPLEHIERARCHYCHILDREN) {
- selection += ".Children";
+ switch (filter.getType()) {
+ case HIERARCHY:
+ selection += ".Children";
+ filter.setCondition("{"+selection+"}");
+ break;
+ case EXCEPT:
+ filter.setCondition("{"+selection+"}");
+ break;
+ case SQL:
+ filter.setCondition(selection);
+ default:
+ break;
}
}
}
- if(!filter.getSelectedData().isEmpty()) {
- if(filter.getType()==FilterType.MULTIPLEHIERARCHYCHILDREN) {
- filter.setCondition("{"+selection+"}");
+ if(selection.isEmpty()) {
+ if(filter.isOptional()) {
+ filter.setCondition("'*'");
} else {
- filter.setCondition(selection);
+ filter.setCondition(null);
}
- } else if(filter.getType() == FilterType.EXCEPT) {
- filter.setCondition("");
- } else {
- filter.setCondition("'*'");
}
break;
- case MULTIPLESLICER:
+ case SLICER:
// all multiple slicer filters are accumulated to the first filter multiple slicer filter
List<String> myList = new ArrayList<>();
for (IDualData item : filter.getSelectedData()) {
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 a564ed1..9a723e7 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
@@ -53,21 +53,42 @@
!entityRef.getSuperType().equals(entityRef);
}
- public static String getEntityIdAliasName(LEntity entityRef) {
- LEntityAttribute idAttribute = entityRef.getPrimaryKeyAttribute();
- return getEntityIdAliasName(entityRef, idAttribute);
+ public static String getEntityIdAliasName(LEntity entity) {
+ LEntityAttribute idAttribute = entity.getPrimaryKeyAttribute();
+ return getEntityIdAliasName(entity, idAttribute);
}
+ public static String getEntityValidAliasName(LEntity entity) {
+ if(!entity.isHistorizedOrTimedependentWithParent()) {
+ return null;
+ }
+ if(hasSuperType(entity)) {
+ return IDataMart.DATAMART_VALID_COLUMN_PREFIX+entity.getSuperType().getName()+IDataMart.DATAMART_VALID_COLUMN_POSTFIX;
+ } else {
+ return IDataMart.DATAMART_VALID_COLUMN_PREFIX+entity.getName()+IDataMart.DATAMART_VALID_COLUMN_POSTFIX;
+ }
+ }
+
+ public static String getEntityCurrentAliasName(LEntity entity) {
+ if(!entity.isHistorizedOrTimedependentWithParent()) {
+ return null;
+ }
+ if(hasSuperType(entity)) {
+ return IDataMart.DATAMART_CURRENT_COLUMN_PREFIX+entity.getSuperType().getName()+IDataMart.DATAMART_CURRENT_COLUMN_POSTFIX;
+ } else {
+ return IDataMart.DATAMART_CURRENT_COLUMN_PREFIX+entity.getName()+IDataMart.DATAMART_CURRENT_COLUMN_POSTFIX;
+ }
+ }
- public static String getEntityIdAliasName(LEntity entityRef, LEntityAttribute idAttribute) {
+ public static String getEntityIdAliasName(LEntity entity, LEntityAttribute idAttribute) {
if (idAttribute == null) {
return null;
}
else {
- if(hasSuperType(entityRef)) {
- return IDataMart.DATAMART_ID_COLUMN_PREFIX+entityRef.getSuperType().getName()+IDataMart.DATAMART_ID_COLUMN_POSTFIX;
+ if(hasSuperType(entity)) {
+ return IDataMart.DATAMART_ID_COLUMN_PREFIX+entity.getSuperType().getName()+IDataMart.DATAMART_ID_COLUMN_POSTFIX;
} else {
- return IDataMart.DATAMART_ID_COLUMN_PREFIX+entityRef.getName()+IDataMart.DATAMART_ID_COLUMN_POSTFIX;
+ return IDataMart.DATAMART_ID_COLUMN_PREFIX+entity.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 8a741bc..5f582ea 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
@@ -25,8 +25,10 @@
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.runtime.common.historized.UUIDHist;
import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
import org.eclipse.osbp.ui.api.datamart.DatamartFilter.FilterType;
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter.MultipleType;
import org.eclipse.osbp.ui.api.datamart.IDataMart;
import org.eclipse.osbp.ui.api.datamart.IDatamartBetweenInput;
import org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator;
@@ -137,7 +139,7 @@
ArrayList<DatamartFilter> filters = datamart.getFilters();
if (filters != null) {
for (DatamartFilter filter : filters) {
- if(filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getName().equals(filterID)) {
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getType() != DatamartFilter.FilterType.BY_HISTUUID && filter.getName().equals(filterID)) {
for(IDualData item : filter.getData()) {
if(item.getSelectionValue().equals(sel)) {
filter.getSelector().select(item);
@@ -159,6 +161,7 @@
for(DatamartFilter filter : datamart.getFilters()) {
switch (filter.getType()) {
case BY_ID:
+ case BY_HISTUUID:
if(byId && event.getData().containsKey(EventDispatcherDataTag.ID)) {
Object id = event.getData().get(EventDispatcherDataTag.ID);
if(event.getTopic().endsWith(filter.getShortName())) {
@@ -166,6 +169,8 @@
filter.setSql(((Integer)id).toString());
} else if (id instanceof String) {
filter.setSql("'"+(String)id+"'");
+ } else if (id instanceof UUIDHist) {
+ filter.setSql("'"+((UUIDHist)id).id+"'");
} else {
filter.setSql("");
}
@@ -173,32 +178,16 @@
}
}
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)) {
- filter.getSelector().select(filter.getSelectedData());
- return false;
- }
- break;
- case SINGLESLICER:
- case SINGLEHIERARCHY:
- case SINGLEHIERARCHYCHILDREN:
- if(filter.canSelectData(event.getData(), false, true)) {
- filter.getSelector().select(filter.getSelectedData().get(0));
- return false;
- }
- break;
+ case SQL:
+ case SLICER:
+ case HIERARCHY:
case EXCEPT:
- case MULTIPLESLICER:
- case MULTIPLEHIERARCHY:
- case MULTIPLEHIERARCHYCHILDREN:
- if(filter.canSelectData(event.getData(), true, true)) {
- filter.getSelector().select(filter.getSelectedData());
+ if(filter.canSelectData(event.getData())) {
+ if(filter.getSelector() instanceof DatamartSingleSelect) {
+ filter.getSelector().select(filter.getSelectedData().get(0));
+ } else if(filter.getSelector() instanceof DatamartMultiSelect) {
+ filter.getSelector().select(filter.getSelectedData());
+ }
return false;
}
break;
@@ -242,29 +231,28 @@
for (DatamartFilter filter : filters) {
switch (filter.getType()) {
case BY_ID:
+ case BY_HISTUUID:
break;
- case SINGLE:
- case SINGLESLICER:
- case SINGLEHIERARCHY:
- case SINGLEHIERARCHYCHILDREN:
- filter.setSelector((IDatamartSelectable)filterFactory.getUiFilter(filter, numMultiRows));
- layoutManager.getTopArea().addComponent((Component)filter.getSelector());
- break;
+ case SQL:
+ case SLICER:
case EXCEPT:
- case MULTIPLE:
- case MULTIPLESLICER:
- case MULTIPLEHIERARCHY:
- case MULTIPLEHIERARCHYCHILDREN:
+ case HIERARCHY:
filter.setSelector((IDatamartSelectable)filterFactory.getUiFilter(filter, numMultiRows));
- layoutManager.getSideArea().addComponent((Component)filter.getSelector());
+ if(filter.getMultipleType() == MultipleType.MULTIPLE) {
+ layoutManager.getSideArea().addComponent((Component)filter.getSelector());
+ } else {
+ layoutManager.getTopArea().addComponent((Component)filter.getSelector());
+ }
break;
case BETWEEN:
case BETWEEN_DATE:
filter.setBetweenInputComponent((IDatamartBetweenInput)filterFactory.getUiFilter(filter, numMultiRows));
layoutManager.getTopArea().addComponent((Component) filter.getBetweenInputComponent());
break;
+ default:
+ break;
}
- if(filter.getType() != DatamartFilter.FilterType.BY_ID) {
+ if(filter.getType() != DatamartFilter.FilterType.BY_ID && filter.getType() != DatamartFilter.FilterType.BY_HISTUUID) {
if (DatamartFilter.FilterType.BETWEEN == filter.getType() || DatamartFilter.FilterType.BETWEEN_DATE == filter.getType()){
filter.getBetweenInputComponent().addValueChangeListener(this);
} else {
@@ -311,28 +299,26 @@
filter.clearSelectedData();
switch (filter.getType()) {
case BY_ID:
- break;
- case SINGLE:
- case SINGLESLICER:
- case SINGLEHIERARCHY:
- case SINGLEHIERARCHYCHILDREN:
- if(filter.getSelector().getValue() != null) {
- filter.addSelectedItem((IDualData)filter.getSelector().getValue());
- } else {
- filter.clearSelectedData();
- allFiltersSet = false;
- }
+ case BY_HISTUUID:
break;
case EXCEPT:
filter.setSelectedData(filter.getSelector().getSelectedItems());
break;
- case MULTIPLE:
- case MULTIPLESLICER:
- case MULTIPLEHIERARCHY:
- case MULTIPLEHIERARCHYCHILDREN:
- filter.setSelectedData(filter.getSelector().getSelectedItems());
- if(filter.getSelector().getSelectedItems().isEmpty()) {
- allFiltersSet = false;
+ case SQL:
+ case SLICER:
+ case HIERARCHY:
+ if(filter.getSelector() instanceof DatamartSingleSelect) {
+ if(filter.getSelector().getValue() != null) {
+ filter.addSelectedItem((IDualData)filter.getSelector().getValue());
+ } else {
+ filter.clearSelectedData();
+ allFiltersSet = false;
+ }
+ } else {
+ filter.setSelectedData(filter.getSelector().getSelectedItems());
+ if(filter.getSelector().getSelectedItems().isEmpty()) {
+ allFiltersSet = false;
+ }
}
break;
default:
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 b32c205..2ea52a9 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
@@ -26,12 +26,12 @@
import com.vaadin.data.Container;
import com.vaadin.ui.ListSelect;
+import com.vaadin.ui.UI;
public class DatamartMultiSelect extends ListSelect implements
IDatamartSelectable {
private static final long serialVersionUID = 7284120542309904692L;
- private boolean slicer = false;
private String hierarchy = null;
private IDualData firstItem = null;
private boolean selectFirst;
@@ -43,10 +43,8 @@
return (obj.size() > 0);
}
- public DatamartMultiSelect(int rowsLimit, boolean isExcept,
- boolean isSlicer, boolean selectFirst, Collection<IDualData> data) {
+ public DatamartMultiSelect(int rowsLimit, boolean selectFirst, Collection<IDualData> data) {
addStyleName(EnumCssClass.MULTI_SELECTION.styleName());
- slicer = isSlicer;
this.selectFirst = selectFirst;
setMultiSelect(true);
update(data);
@@ -61,10 +59,6 @@
return serialVersionUID;
}
- public boolean isSlicer() {
- return slicer;
- }
-
public DatamartMultiSelect() {
}
@@ -74,11 +68,9 @@
* @param options
*/
public void update(Collection<IDualData> options) {
- getUI().getCurrent().access(new Runnable() {
+ UI.getCurrent().access(new Runnable() {
@Override
public void run() {
-// Temporarily not in use to avoid a loop due to the dependency from org.eclipse.osbp.runtime.web to this bundle
-// VaadinObservables.activateRealm(getUI().getCurrent());
removeAllItems();
firstItem = null;
for (IDualData dd : options) {
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 280eec2..fab085e 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
@@ -24,27 +24,21 @@
import com.vaadin.data.Container;
import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.UI;
public class DatamartSingleSelect extends ComboBox implements
IDatamartSelectable {
private static final long serialVersionUID = -5673052113801450589L;
private String hierarchy = null;
- private boolean slicer = false;
private IDualData firstItem = null;
public static long getSerialversionuid() {
return serialVersionUID;
}
- public boolean isSlicer() {
- return slicer;
- }
-
- public DatamartSingleSelect(boolean isExcept, boolean isSlicer,
- Collection<IDualData> data) {
+ public DatamartSingleSelect(Collection<IDualData> data) {
addStyleName(EnumCssClass.SINGLE_SELECTION.styleName());
- slicer = isSlicer;
update(data);
}
@@ -57,7 +51,7 @@
* @param options
*/
public void update(Collection<IDualData> options) {
- getUI().getCurrent().access(new Runnable() {
+ UI.getCurrent().access(new Runnable() {
@Override
public void run() {
removeAllItems();
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java
index c767738..ba23239 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/DatamartUiFilterFactory.java
@@ -18,7 +18,7 @@
import java.util.Map;
import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
-import org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator;
+import org.eclipse.osbp.ui.api.datamart.DatamartFilter.FilterType;
import com.vaadin.ui.Component;
@@ -27,34 +27,25 @@
public Component getUiFilter(DatamartFilter filter, int numMultiRows){
Component component = uiFilters.get(filter.getName());
if (component == null) {
- switch (filter.getType()) {
- case BY_ID:
- break;
+ switch (filter.getMultipleType()) {
case SINGLE:
- case SINGLEHIERARCHY:
- case SINGLEHIERARCHYCHILDREN:
- uiFilters.put(filter.getName(), new DatamartSingleSelect(false, false, filter.getData()));
- break;
- case SINGLESLICER:
- uiFilters.put(filter.getName(), new DatamartSingleSelect(false, true, filter.getData()));
- break;
- case EXCEPT:
- uiFilters.put(filter.getName(), new DatamartMultiSelect(numMultiRows, false, true, false, filter.getData()));
+ uiFilters.put(filter.getName(), new DatamartSingleSelect(filter.getData()));
break;
case MULTIPLE:
- case MULTIPLEHIERARCHY:
- case MULTIPLEHIERARCHYCHILDREN:
- uiFilters.put(filter.getName(), new DatamartMultiSelect(numMultiRows, false, false, true, filter.getData()));
+ uiFilters.put(filter.getName(), new DatamartMultiSelect(numMultiRows, (filter.getType() != FilterType.EXCEPT), filter.getData()));
break;
- case MULTIPLESLICER:
- uiFilters.put(filter.getName(), new DatamartMultiSelect(numMultiRows, false, true, true, filter.getData()));
+ default:
break;
+ }
+ switch (filter.getType()) {
case BETWEEN:
uiFilters.put(filter.getName(), new DatamartBetweenText());
break;
case BETWEEN_DATE:
uiFilters.put(filter.getName(), new DatamartBetweenDate(filter.format, filter.resolution));
break;
+ default:
+ break;
}
component = uiFilters.get(filter.getName());
}
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 c2fb3f8..2d8ef39 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
@@ -132,7 +132,7 @@
} else {
jsonRowsDataArray = new JreJsonArray(factory);
}
- jsonRowsDataArray.set(jsonArray.length(), childrenListMap);
+ jsonRowsDataArray.set(jsonRowsDataArray.length(), childrenListMap);
jsonMap.put(KEY_CHILDREN, jsonRowsDataArray);
} else {
jsonChildrenArray = createJsonMapStructure(jsonChildrenArray, tokenList, childrenListMap);
diff --git a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedCell.java b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedCell.java
index e3d9635..d60ed7c 100644
--- a/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedCell.java
+++ b/org.eclipse.osbp.xtext.datamart.common/src/org/eclipse/osbp/xtext/datamart/common/olap/DerivedCell.java
@@ -15,7 +15,10 @@
*/
package org.eclipse.osbp.xtext.datamart.common.olap;
+import java.math.BigDecimal;
+
import org.eclipse.osbp.xtext.datamart.common.sql.SqlCell;
+import org.olap4j.OlapException;
import mondrian.olap.Cell;
@@ -44,9 +47,20 @@
public Object getValue(){
if (olapCell!=null){
+ if(olapCell.getValue() instanceof BigDecimal) {
+ try {
+ return olapCell.getDoubleValue();
+ } catch (OlapException e) {
+ return 0.0;
+ }
+ }
return olapCell.getValue();
} else if (mondrianCell!=null){
- return mondrianCell.getValue();
+ value = mondrianCell.getValue();
+ if(value instanceof BigDecimal) {
+ return ((BigDecimal)value).doubleValue();
+ }
+ return value;
} else {
return value;
}
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 4b1f134..edb0bb5 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
@@ -39,11 +39,13 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.osbp.bpm.api.BPMTaskSummary;
import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.runtime.common.historized.UUIDHist;
import org.eclipse.osbp.ui.api.datamart.DatamartPrimary;
import org.eclipse.osbp.ui.api.datamart.IDataMart;
import org.eclipse.osbp.ui.api.datamart.IDataMart.AttributeVisibility;
@@ -283,18 +285,16 @@
return null;
}
- public SqlCellSet(ResultSet rs, ResultSetMetaData metaData, IUser user, Map<String, String> resultAttributes, Map<Integer,ArrayList<String>> axisMap, Map<String, EType> idMap, Map<String, String> aliasMap, Map<String, IDataMart.AttributeVisibility> hiddenMap, DatamartDtoMapper datamartDtoMapper, Class<?> operativeDtoClass, List<IDto> operativeDtos, List<DatamartPrimary<?>> primaryKeys, IUserAccessService pUserAccessService) { //NOSONAR
+ public SqlCellSet(ResultSet rs, ResultSetMetaData metaData, IUser user, Map<String, String> resultAttributes, Map<Integer,ArrayList<String>> axisMap, Map<String, EType> idMap, Map<String, String> aliasMap, Map<String, IDataMart.AttributeVisibility> hiddenMap, DatamartDtoMapper datamartDtoMapper, Class<?> operativeDtoClass, List<IDto> operativeDtos, Map<String, DatamartPrimary> primaryMap, IUserAccessService pUserAccessService, boolean isHistorized) { //NOSONAR
fCells = new ArrayList<>();
fAxes = new ArrayList<>();
sqlAxes = new ArrayList<>();
this.userAccessService = pUserAccessService;
operativeDtoContainer = null;
- Map<String, DatamartPrimary> primaryMap = new HashMap<>();
- for(DatamartPrimary<?> pr : primaryKeys) {
- pr.clear();
- primaryMap.put(pr.getAlias(), pr);
- }
int numColumns = 0;
+ for(Entry<String, DatamartPrimary> p:primaryMap.entrySet()) {
+ p.getValue().clear();
+ }
SqlCellSetAxis sqlCellSetAxis = null;
try {
if(!rs.isClosed()) {
@@ -307,11 +307,11 @@
try {
if(!rs.isClosed()) {
if (!axisMap.keySet().isEmpty()) {
- for (int axisNumber : axisMap.keySet()) {
+ for(int axisNumber=0; axisNumber<axisMap.size();axisNumber++) {
sqlCellSetAxis = new SqlCellSetAxis(this, axisNumber);
if (axisNumber == 0) { // the columns axis
int ordinal = 0;
- for (String columnLabel : axisMap.get(0)) {
+ for (String columnLabel : axisMap.get(axisNumber)) {
try {
int columnIdx = rs.findColumn(columnLabel);
sqlCellSetAxis.addPosition(axisNumber, ordinal, convertToMemberType(rs, metaData, columnIdx), metaData.getColumnName(columnIdx), metaData.getColumnLabel(columnIdx));
@@ -389,7 +389,11 @@
}
if(primaryMap.containsKey(columnLabel)) {
- primaryMap.get(columnLabel).add(value);
+ if(isHistorized) {
+ primaryMap.get(columnLabel).add(new UUIDHist((String)value, (long)getCastedValue(rs, metaData, columnIdx+1)));
+ } else {
+ primaryMap.get(columnLabel).add(value);
+ }
}
if (axisMap.keySet().size() > 1 && axisMap.get(1).contains(columnLabel)) {
sqlAxes.get(1).addPosition(1, targetRowNo, convertToMemberType(rs, metaData, columnIdx), formattedValue, columnLabel);
@@ -398,7 +402,9 @@
row[ordinal] = new SqlCell(this, targetRowNo, ordinal, value, formattedValue, isId(columnLabel, idMap), getType(idMap));
ordinal ++;
}
- } catch (SQLException e) {}
+ } catch (SQLException e) {
+ LOGGER.error("{}", e);
+ }
}
}
}
@@ -516,6 +522,7 @@
private Object getCastedValue(ResultSet rs, ResultSetMetaData metaData, int idx) throws SQLException {
int type = metaData.getColumnType(idx);
int scale = metaData.getScale(idx);
+ int precision = metaData.getPrecision(idx);
switch (type) {
case java.sql.Types.DATE:
@@ -530,12 +537,17 @@
case java.sql.Types.BIGINT:
return rs.getBigDecimal(idx);
case java.sql.Types.INTEGER:
+ return (int) rs.getInt(idx);
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);
+ if(precision > 10) {
+ return rs.getLong(idx);
+ } else {
+ return rs.getInt(idx);
+ }
}
return rs.getDouble(idx);
case java.sql.Types.DECIMAL:
@@ -586,7 +598,7 @@
case java.sql.Types.BOOLEAN:
case java.sql.Types.BIT:
case java.sql.Types.NUMERIC:
- formattedValue = Integer.toString(rs.getInt(idx));
+ formattedValue = Long.toString(rs.getLong(idx));
break;
case java.sql.Types.DECIMAL:
case java.sql.Types.DOUBLE: