catch up with branch daily
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
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 b18683d..57f9e3f 100644
--- a/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.xtext.datamart.common/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
Bundle-Vendor: Eclipse OSBP
Bundle-Version: 0.9.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: mondrian.osgi;bundle-version="[3.5.0,3.5.1)",
+Require-Bundle: mondrian.osgi;bundle-version="[3.5.0,4.0.0)",
olap4j.osgi;bundle-version="[1.1.0,1.3.0)",
org.jsoup;bundle-version="1.8.1",
org.eclipse.core.runtime,
@@ -32,6 +32,7 @@
org.eclipse.osbp.preferences;version="0.9.0",
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",
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",
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 e980d3d..d8fe54a 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
@@ -26,7 +26,7 @@
@SuppressWarnings("all")
public abstract class ACubeDatamart extends ADatamart<RolapConnection> {
- public abstract DerivedCellSet getResults(final Class operativeDtoClass, final List<IDto> operativeDtos);
+ public abstract DerivedCellSet getResults();
@Override
public final Map<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 71db7f4..86a91f9 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
@@ -27,6 +27,7 @@
import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
import org.eclipse.osbp.ui.api.datamart.DatamartFilter.FilterType;
import org.eclipse.osbp.ui.api.datamart.IDataMart;
+import org.eclipse.osbp.ui.api.datamart.IDatamartBetweenInput;
/**
* The Class ADatamart.
@@ -123,6 +124,16 @@
return filter.getSql();
}
+ /**
+ * Calls the vendor specific 'to date' sql method.
+ *
+ * @param date the date
+ * @return the vendor 'to date' sql method prefix
+ */
+ protected String vendorConvertToDateSQL( java.util.Date date ) {
+ return vendorConvertToDateSQL(new Date(date.getTime()));
+ }
+
/**
* Calls the vendor specific 'to date' sql method.
*
@@ -135,7 +146,7 @@
}
return "to_date('"+date.toString().replace(".0","")+"','YYYY-MM-DD HH24:MI:SS')";
}
-
+
/**
* Gets the vendor specific 'to date' sql method prefix.
*
@@ -232,7 +243,15 @@
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() + "'");
+
+ if (filter.getBetweenInputComponent() instanceof DatamartBetweenDate) {
+ String betweenFrom = vendorConvertToDateSQL(((DatamartBetweenDate)filter.getBetweenInputComponent()).getFromInput().getValue());
+ String betweenUntil = vendorConvertToDateSQL(((DatamartBetweenDate)filter.getBetweenInputComponent()).getUntilInput().getValue());
+ filter.setCondition(filter.getName() + " BETWEEN " + betweenFrom + " AND " + betweenUntil);
+ } else {
+ filter.setCondition(filter.getName() + " BETWEEN '" + filter.getBetweenInputComponent().getFrom() + "' AND '" + filter.getBetweenInputComponent().getUntil() + "'");
+ }
+
} else {
filter.setCondition("1=1");
}
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 4c90dbc..d6da6e0 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
@@ -25,5 +25,6 @@
@SuppressWarnings("all")
public abstract class AEntityDatamart extends ADatamart<Connection> {
- public abstract DerivedCellSet getResults(Class operativeDtoClass, List<IDto> operativeDtos);
+ public abstract DerivedCellSet getResults();
+ public abstract DerivedCellSet getResults(boolean limited, Class operativeDtoClass, List<IDto> operativeDtos);
}
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 631494f..8a741bc 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
@@ -112,7 +112,9 @@
*/
@Override
public void addFilterChangeListener(FilterChangeListener listener) {
- listeners.add(listener);
+ if(!listeners.contains(listener)) {
+ listeners.add(listener);
+ }
}
/* (non-Javadoc)
@@ -120,7 +122,9 @@
*/
@Override
public void removeFilterChangeListener(FilterChangeListener listener) {
- listeners.remove(listener);
+ if(listeners.contains(listener)) {
+ listeners.remove(listener);
+ }
}
/* (non-Javadoc)
@@ -157,18 +161,16 @@
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(event.getTopic().endsWith(filter.getShortName())) {
if(id instanceof Integer) {
filter.setSql(((Integer)id).toString());
} else if (id instanceof String) {
filter.setSql("'"+(String)id+"'");
+ } else {
+ filter.setSql("");
}
-
- } else {
- filter.setSql("");
+ mustRefresh = true;
}
- mustRefresh = true;
}
break;
case SINGLE:
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 4ac74f6..4b1f134 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
@@ -26,6 +26,7 @@
import java.sql.NClob;
import java.sql.Ref;
import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
import java.sql.RowId;
import java.sql.SQLException;
import java.sql.SQLWarning;
@@ -47,6 +48,8 @@
import org.eclipse.osbp.ui.api.datamart.IDataMart;
import org.eclipse.osbp.ui.api.datamart.IDataMart.AttributeVisibility;
import org.eclipse.osbp.ui.api.datamart.IDataMart.EType;
+import org.eclipse.osbp.ui.api.date.SimpleDateFormatter;
+import org.eclipse.osbp.ui.api.user.IUser;
import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
@@ -115,7 +118,7 @@
private OperativeDtoContainer operativeDtoContainer = null;
private IUserAccessService userAccessService;
-
+ private long numRowsFetched = 0L;
private Map<String, Boolean> columnIsVisible = new HashMap<>();
public SqlCellSet(List<BPMTaskSummary> tasks, Map<Integer,ArrayList<String>> axisMap) {
@@ -149,7 +152,7 @@
SqlCellSetAxis sqlCellSetAxis = new SqlCellSetAxis(this, 1);
sqlAxes.add(sqlCellSetAxis);
}
-
+ numRowsFetched = 0;
if (numColumns > 0) {
int rowNo = 0;
for(BPMTaskSummary task : tasks) {
@@ -193,6 +196,7 @@
}
fCells.add(row);
rowNo++;
+ numRowsFetched ++;
}
for(SqlCellSetAxis axis : sqlAxes) {
fAxes.add(axis);
@@ -279,7 +283,7 @@
return null;
}
- public SqlCellSet(ResultSet rs, 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, List<DatamartPrimary<?>> primaryKeys, IUserAccessService pUserAccessService) { //NOSONAR
fCells = new ArrayList<>();
fAxes = new ArrayList<>();
sqlAxes = new ArrayList<>();
@@ -294,7 +298,7 @@
SqlCellSetAxis sqlCellSetAxis = null;
try {
if(!rs.isClosed()) {
- numColumns = rs.getMetaData().getColumnCount();
+ numColumns = metaData.getColumnCount();
}
} catch (SQLException e) {
LOGGER.error(e.getLocalizedMessage());
@@ -310,7 +314,7 @@
for (String columnLabel : axisMap.get(0)) {
try {
int columnIdx = rs.findColumn(columnLabel);
- sqlCellSetAxis.addPosition(axisNumber, ordinal, convertToMemberType(rs, columnIdx), rs.getMetaData().getColumnName(columnIdx), rs.getMetaData().getColumnLabel(columnIdx));
+ sqlCellSetAxis.addPosition(axisNumber, ordinal, convertToMemberType(rs, metaData, columnIdx), metaData.getColumnName(columnIdx), metaData.getColumnLabel(columnIdx));
ordinal ++;
} catch (SQLException e) {}
}
@@ -321,7 +325,7 @@
else {
sqlCellSetAxis = new SqlCellSetAxis(this, 0);
for (int idx=1; idx<=numColumns; idx++) {
- sqlCellSetAxis.addPosition(0, idx-1, convertToMemberType(rs, idx), rs.getMetaData().getColumnName(idx), rs.getMetaData().getColumnLabel(idx));
+ sqlCellSetAxis.addPosition(0, idx-1, convertToMemberType(rs, metaData, idx), metaData.getColumnName(idx), metaData.getColumnLabel(idx));
}
sqlAxes.add(sqlCellSetAxis);
}
@@ -335,19 +339,22 @@
sqlCellSetAxis = new SqlCellSetAxis(this, 1);
sqlAxes.add(sqlCellSetAxis);
}
-
+ numRowsFetched = 0;
if (numColumns > 0) {
try {
if(!rs.isClosed()) {
int targetRowNo = 0;
while (rs.next()) {
+ if(resultAttributes.isEmpty()) {
+ registerFirstLine(rs, metaData, user, resultAttributes);
+ }
if (operativeDtoContainer == null) {
operativeDtoContainer = new OperativeDtoContainer(datamartDtoMapper, operativeDtoClass, operativeDtos);
}
boolean displayRow = true;
if (operativeDtoContainer.getOperativeDtoIdColumn() != null) {
int columnIdx = rs.findColumn(operativeDtoContainer.getOperativeDtoIdColumn());
- Object value = getCastedValue(rs, columnIdx);
+ Object value = getCastedValue(rs, metaData, columnIdx);
displayRow = (operativeDtoContainer.getOperativeDtoForId(value) != null);
}
if (displayRow) {
@@ -355,7 +362,7 @@
if (axisMap.keySet().size() > 1) {
int numCols = 0;
for (int idx=1; idx<=numColumns; idx++) {
- String columnName = rs.getMetaData().getColumnName(idx).toLowerCase();
+ String columnName = metaData.getColumnName(idx).toLowerCase();
if (!axisMap.get(1).contains(columnName)) {
numCols ++;
}
@@ -377,15 +384,15 @@
formattedValue = "";
value = null;
if (isColumnVisible(aliasMap, hiddenMap, columnLabel )) {
- formattedValue = getFormattedValue(rs, columnIdx);
- value = getCastedValue(rs, columnIdx);
+ formattedValue = getFormattedValue(rs, metaData, columnIdx);
+ value = getCastedValue(rs, metaData, 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, convertToMemberType(rs, columnIdx), formattedValue, columnLabel);
+ sqlAxes.get(1).addPosition(1, targetRowNo, convertToMemberType(rs, metaData, columnIdx), formattedValue, columnLabel);
}
else {
row[ordinal] = new SqlCell(this, targetRowNo, ordinal, value, formattedValue, isId(columnLabel, idMap), getType(idMap));
@@ -397,13 +404,13 @@
}
else {
for (int columnIdx=1; columnIdx<=numColumns; columnIdx++) {
- String columnLabel = rs.getMetaData().getColumnLabel(columnIdx);
+ String columnLabel = metaData.getColumnLabel(columnIdx);
formattedValue = "";
value = null;
if (isColumnVisible(aliasMap, hiddenMap, columnLabel)){
- formattedValue = getFormattedValue(rs, columnIdx);
- value = getCastedValue(rs, columnIdx);
+ formattedValue = getFormattedValue(rs, metaData, columnIdx);
+ value = getCastedValue(rs, metaData, columnIdx);
}
if(primaryMap.containsKey(columnLabel)) {
primaryMap.get(columnLabel).add(value);
@@ -417,6 +424,7 @@
}
fCells.add(row);
targetRowNo++;
+ numRowsFetched ++;
}
}
}
@@ -457,12 +465,12 @@
return retColumnIsVisible;
}
- private MemberType convertToMemberType(ResultSet rs, int idx) {
+ private MemberType convertToMemberType(ResultSet rs, ResultSetMetaData metaData, int idx) {
int type;
int scale;
try {
- type = rs.getMetaData().getColumnType(idx);
- scale = rs.getMetaData().getScale(idx);
+ type = metaData.getColumnType(idx);
+ scale = metaData.getScale(idx);
} catch (SQLException e) {
return null;
}
@@ -505,9 +513,9 @@
return operativeDtoContainer;
}
- private Object getCastedValue(ResultSet rs, int idx) throws SQLException {
- int type = rs.getMetaData().getColumnType(idx);
- int scale = rs.getMetaData().getScale(idx);
+ private Object getCastedValue(ResultSet rs, ResultSetMetaData metaData, int idx) throws SQLException {
+ int type = metaData.getColumnType(idx);
+ int scale = metaData.getScale(idx);
switch (type) {
case java.sql.Types.DATE:
@@ -560,8 +568,8 @@
return null;
}
- private String getFormattedValue(ResultSet rs, int idx) throws SQLException {
- int type = rs.getMetaData().getColumnType(idx);
+ private String getFormattedValue(ResultSet rs, ResultSetMetaData metaData, int idx) throws SQLException {
+ int type = metaData.getColumnType(idx);
String formattedValue = "";
switch (type) {
case java.sql.Types.DATE:
@@ -1899,4 +1907,56 @@
return null;
}
+ public void registerFirstLine(ResultSet rs, ResultSetMetaData metaData, IUser user, Map<String, String> resultAttributes) throws SQLException {
+ for (int column = 1; column <= metaData.getColumnCount(); column++) {
+ int type = metaData.getColumnType(column);
+ switch (type) {
+ case java.sql.Types.DATE:
+ if (rs.getDate(column) != null) {
+ if (user == null) {
+ resultAttributes.put(metaData.getColumnName(column), rs.getDate(column).toString());
+ } else {
+ resultAttributes.put(metaData.getColumnName(column), SimpleDateFormatter
+ .getFormat("LONGDATE", user.getLocale()).format(rs.getDate(column)));
+ }
+ }
+ break;
+ case java.sql.Types.TIMESTAMP:
+ if (rs.getTimestamp(column) != null) {
+ if (user == null) {
+ resultAttributes.put(metaData.getColumnName(column),
+ rs.getTimestamp(column).toString());
+ } else {
+ resultAttributes.put(metaData.getColumnName(column), SimpleDateFormatter
+ .getFormat("LONGDATE", user.getLocale()).format(rs.getTimestamp(column)));
+ }
+ }
+ break;
+ case java.sql.Types.DECIMAL:
+ if (rs.getBigDecimal(column) != null) {
+ resultAttributes.put(metaData.getColumnName(column),
+ rs.getBigDecimal(column).toPlainString());
+ }
+ break;
+ case java.sql.Types.NUMERIC:
+ case java.sql.Types.DOUBLE:
+ resultAttributes.put(metaData.getColumnName(column), Double.toString(rs.getDouble(column)));
+ break;
+ case java.sql.Types.FLOAT:
+ resultAttributes.put(metaData.getColumnName(column), Float.toString(rs.getFloat(column)));
+ break;
+ 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:
+ resultAttributes.put(metaData.getColumnName(column), rs.getString(column));
+ break;
+ }
+ }
+ }
+
+ public long getFetchedRows() {
+ return numRowsFetched;
+ }
}