From 395a73c9f7f2ee8f19f33dd8888006525cbfeda0 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 9 Feb 2010 14:19:53 +0000 Subject: [PATCH] LMS-1354 Adding and managing data types SVN: 14655 --- .../plugins/demo/DemoReportingPlugin.java | 2 +- .../tasks/SimpleTableModelBuilder.java | 63 ++++++++++++++++--- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoReportingPlugin.java index a84b84e253b..47239c7392e 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoReportingPlugin.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DemoReportingPlugin.java @@ -58,7 +58,7 @@ public class DemoReportingPlugin extends AbstractDatastorePlugin implements IRep builder.addHeader("Thumbnail"); builder.addHeader("Name"); builder.addHeader("Last Modified"); - builder.addHeader("Size", true); + builder.addHeader("Size"); for (DatasetDescription dataset : datasets) { File file = getDataSubDir(dataset); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/SimpleTableModelBuilder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/SimpleTableModelBuilder.java index e6180a598e4..ded459d7617 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/SimpleTableModelBuilder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/SimpleTableModelBuilder.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DateTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DoubleTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; @@ -38,33 +39,75 @@ public class SimpleTableModelBuilder { private List<TableModelRow> rows; - private List<TableModelColumnHeader> header; + private List<TableModelColumnHeader> headers; public SimpleTableModelBuilder() { this.rows = new ArrayList<TableModelRow>(); - this.header = new ArrayList<TableModelColumnHeader>(); - } - - public void addHeader(String title, boolean numeric) - { - header.add(new TableModelColumnHeader(title, header.size(), numeric)); + this.headers = new ArrayList<TableModelColumnHeader>(); } public void addHeader(String title) { - addHeader(title, false); + headers.add(new TableModelColumnHeader(title, headers.size())); } public void addRow(List<ISerializableComparable> values) { - assert values.size() == header.size() : "header has different number of columns than a row"; + assert values.size() == headers.size() : "header has different number of columns than a row"; + for (int i = 0; i < values.size(); i++) + { + ISerializableComparable value = values.get(i); + TableModelColumnHeader header = headers.get(i); + DataTypeCode headerDataType = header.getDataType(); + DataTypeCode dataType = getDataTypeCodeFor(value); + if (headerDataType == null) + { + header.setDataType(dataType); + } else if (headerDataType == DataTypeCode.REAL) + { + if (dataType != DataTypeCode.REAL && dataType != DataTypeCode.INTEGER) + { + header.setDataType(DataTypeCode.VARCHAR); + } + } else if (headerDataType == DataTypeCode.INTEGER) + { + if (dataType == DataTypeCode.REAL) + { + header.setDataType(DataTypeCode.REAL); + } else if (dataType != DataTypeCode.INTEGER) + { + header.setDataType(DataTypeCode.VARCHAR); + } + } else if (headerDataType == DataTypeCode.TIMESTAMP + && dataType != DataTypeCode.TIMESTAMP) + { + header.setDataType(DataTypeCode.VARCHAR); + } + } rows.add(new TableModelRow(values)); } + + private DataTypeCode getDataTypeCodeFor(ISerializableComparable value) + { + if (value instanceof IntegerTableCell) + { + return DataTypeCode.INTEGER; + } + if (value instanceof DoubleTableCell) + { + return DataTypeCode.REAL; + } + if (value instanceof DateTableCell) + { + return DataTypeCode.TIMESTAMP; + } + return DataTypeCode.VARCHAR; + } public TableModel getTableModel() { - return new TableModel(header, rows); + return new TableModel(headers, rows); } public static ISerializableComparable asText(String textOrNull) -- GitLab