diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java index 5e4b46bd71fdf28a3093dbe4c3e735e3a7b6ba4b..7147548925d6b15ca73a04cee274d22515233004 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java @@ -73,9 +73,9 @@ public abstract class AbstractPropertyColRenderer<T extends IEntityPropertiesHol return renderValue(entity); } - public Comparable<?> getComparableValue(GridRowModel<T> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<T> rowModel) { - return colDef.getComparableValue(rowModel); + return colDef.tryGetComparableValue(rowModel); } public boolean isLink() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/AbstractColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/AbstractColumnDefinition.java index 41b66a1ae0065052a16d5049635c1273c6ed1b3a..9d737b9ff927ccc40f1cf9d472b52a5e7a718580 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/AbstractColumnDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/AbstractColumnDefinition.java @@ -72,7 +72,7 @@ public abstract class AbstractColumnDefinition<T> implements IColumnDefinitionUI return value != null ? value : ""; } - public Comparable<?> getComparableValue(GridRowModel<T> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<T> rowModel) { return getValue(rowModel); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/CommonColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/CommonColumnDefinition.java index cbbb2d34982ac34583c81f3a5aa0e350cc604ebc..a2034e20d6c68de6c648a5760a693bae17f44719 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/CommonColumnDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/CommonColumnDefinition.java @@ -60,7 +60,7 @@ public class CommonColumnDefinition<T> extends AbstractColumnDefinition<T> } @Override - public Comparable<?> getComparableValue(GridRowModel<T> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<T> rowModel) { return columnDefinitionKind.getDescriptor().getComparableValue(rowModel); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/EntityPropertyColDef.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/EntityPropertyColDef.java index b969a8a41f3f3d97fc2405bc41f0ed80a5f1c888..23ebed62279b9f8749fbe2eb0c7bda2dbbb77b27 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/EntityPropertyColDef.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/EntityPropertyColDef.java @@ -35,10 +35,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; public class EntityPropertyColDef<T extends IEntityPropertiesHolder> extends AbstractColumnDefinition<T> implements IsSerializable { - private static final Double DOUBLE_MIN_VALUE = new Double(-Double.MAX_VALUE); - - private static final Integer INTEGER_MIN_VALUE = new Integer(Integer.MIN_VALUE); - private static final int PROPERTY_COLUMN_WIDTH = 120; private static final String PROPERTY_PREFIX = "property-"; @@ -112,18 +108,18 @@ public class EntityPropertyColDef<T extends IEntityPropertiesHolder> extends } @Override - public Comparable<?> getComparableValue(GridRowModel<T> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<T> rowModel) { String valueAsString = tryGetValue(rowModel.getOriginalObject()); DataTypeCode dataType = getDataTypeCode(); switch (dataType) { case INTEGER: - return valueAsString == null ? INTEGER_MIN_VALUE : new Integer(valueAsString); + return valueAsString == null ? null : new Integer(valueAsString); case REAL: - return valueAsString == null ? DOUBLE_MIN_VALUE : new Double(valueAsString); + return valueAsString == null ? null : new Double(valueAsString); default: - return super.getComparableValue(rowModel); + return super.tryGetComparableValue(rowModel); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GenericTableRowColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GenericTableRowColumnDefinition.java index a03aee67f683174cb154d35840f198a2be52f109..eff1fe538d51d709d319a42b018a2e0f1fdd7fa0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GenericTableRowColumnDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GenericTableRowColumnDefinition.java @@ -44,7 +44,7 @@ public class GenericTableRowColumnDefinition implements IColumnDefinition<Generi this(null, null); } - public Comparable<?> getComparableValue(GridRowModel<GenericTableRow> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<GenericTableRow> rowModel) { return getCellValue(rowModel); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GridCustomColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GridCustomColumnDefinition.java index f456e2c55f1ea247b275b7e3997704f4c174375e..a00301beac1a271c12125aa93e3b5b4a95b7b23a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GridCustomColumnDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GridCustomColumnDefinition.java @@ -58,7 +58,7 @@ public class GridCustomColumnDefinition<T> implements IColumnDefinitionUI<T> return false; } - public Comparable<?> getComparableValue(GridRowModel<T> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<T> rowModel) { return getPrimitiveValue(rowModel).getComparableValue(); } @@ -72,7 +72,8 @@ public class GridCustomColumnDefinition<T> implements IColumnDefinitionUI<T> public String getValue(GridRowModel<T> rowModel) { - return getPrimitiveValue(rowModel).toString(); + String value = getPrimitiveValue(rowModel).toString(); + return value != null ? value : ""; } public String getHeader() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/data/DataSetReportColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/data/DataSetReportColumnDefinition.java index 93825630e8fdae8b0bdd85cfbd16a97cb68c42a3..2a795b7dddc219cf1d7770280ef98c5ff0a8b7e4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/data/DataSetReportColumnDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/data/DataSetReportColumnDefinition.java @@ -49,7 +49,7 @@ public class DataSetReportColumnDefinition implements IColumnDefinition<TableMod this.sessionID = sessionID; } - public Comparable<?> getComparableValue(GridRowModel<TableModelRow> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<TableModelRow> rowModel) { return getCellValue(rowModel); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/GridExpressionUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/GridExpressionUtils.java index 66dcd02922d15fd98cbe92325625e4a7d311bc1e..b0d24305aba1cb6e0fc6f208d14f0fdc15d02d33 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/GridExpressionUtils.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/GridExpressionUtils.java @@ -128,8 +128,12 @@ public class GridExpressionUtils String columnId = customColumn.getCode(); RowCalculator<T> calculator = calculators.get(columnId); PrimitiveValue value = evalCustomColumn(rowData, customColumn, calculator); - customColumn.setDataType(DataTypeUtils.getCompatibleDataType(customColumn - .getDataType(), value.getDataType())); + // don't modify type if it is a null string + if (value.toString() == null) + { + customColumn.setDataType(DataTypeUtils.getCompatibleDataType(customColumn + .getDataType(), value.getDataType())); + } customColumnValues.put(columnId, value); } result.add(new GridRowModel<T>(rowData, customColumnValues)); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/Row.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/Row.java index 8f45ff5a73d135df7d1ad07e2c3fba06504421f3..1679074e5f5f5eb0811b69dd30b0349778243d31 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/Row.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/Row.java @@ -72,7 +72,7 @@ final class Row<T> throw new IllegalArgumentException("Undefined column: " + columnID); } - return columnDefinition.getComparableValue(row); + return columnDefinition.tryGetComparableValue(row); } /** diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculator.java index 685def5e1a62d1342fc4a4f5d54078d44744d486..ae036c1dd682b89abcdd7773eb13de48a7cc3581 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculator.java @@ -44,9 +44,9 @@ class RowCalculator<T> public RowCalculator(Set<IColumnDefinition<T>> availableColumns, String expression) { - this(availableColumns, expression, Collections.<ParameterWithValue>emptySet()); + this(availableColumns, expression, Collections.<ParameterWithValue> emptySet()); } - + public RowCalculator(Set<IColumnDefinition<T>> availableColumns, String expression, Set<ParameterWithValue> parameters) { @@ -73,7 +73,7 @@ class RowCalculator<T> return new PrimitiveValue((Double) value); } else { - return new PrimitiveValue(value.toString()); + return new PrimitiveValue(value == null ? (String) null : value.toString()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java index 2dac49fa4b62811cebe22b5e54e40fa2d13ee89c..f7d77beb66a49339aff37ec8cac37acc1c5a948b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java @@ -257,9 +257,19 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se @SuppressWarnings("unchecked") public int compare(GridRowModel<T> o1, GridRowModel<T> o2) { - Comparable v1 = sortField.getComparableValue(o1); - Comparable v2 = sortField.getComparableValue(o2); - return v1.compareTo(v2); + Comparable v1 = sortField.tryGetComparableValue(o1); + Comparable v2 = sortField.tryGetComparableValue(o2); + // treat null as minimal value + if (v1 == null) + { + return -1; + } else if (v2 == null) + { + return 1; + } else + { + return v1.compareTo(v2); + } } }; return applySortDir(sortDir, comparator); @@ -335,11 +345,11 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se { K dataKey = cacheConfig.tryGetResultSetKey(); GridRowModels<T> data = fetchCachedData(dataKey); - if (data == null) // Really shoudn't happen, but these cases have been observed. + if (data == null) // Really shoudn't happen, but these cases have been observed. { return calculateResultSetAndSave(sessionToken, resultConfig, dataProvider); } - + if (mode == ResultSetFetchMode.FETCH_FROM_CACHE) { return filterLimitAndSort(resultConfig, data, dataKey); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/GridRowModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/GridRowModel.java index 9c1b5c9bf619b22083c1fe81cc13a3246abc49bd..a2c941d30bf7682d63e9cfdf8d7dd884471b086b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/GridRowModel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/GridRowModel.java @@ -33,6 +33,7 @@ public class GridRowModel<T> implements IsSerializable { private T originalObject; + // TODO Now that we use GWT 2.0 it should be possible to use map here. // We would like to have a Map field, but we cannot do it because of a bug in // displaying serialization warnings in GWT 1.5. It was fixed in GWT 1.6 private List<GridCustomColumnValue> calculatedColumnValues; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IColumnDefinition.java index 40a056c963ef1ba74a7b4dcff8a6121a068376d2..8a8e4b7f4ac25e164cd77720f8bec29a54cc584b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IColumnDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IColumnDefinition.java @@ -18,7 +18,6 @@ package ch.systemsx.cisd.openbis.generic.shared.basic; import com.google.gwt.user.client.rpc.IsSerializable; - /** * Describes table column's metadata. Has the ability to render cell values for the column given the * row model. @@ -30,7 +29,8 @@ public interface IColumnDefinition<T> extends IsSerializable /** extracts value for the cell of the represented column */ String getValue(GridRowModel<T> rowModel); - Comparable<?> getComparableValue(GridRowModel<T> rowModel); + /** tries to extract comparable value for the cell of the represented column */ + Comparable<?> tryGetComparableValue(GridRowModel<T> rowModel); /** column's header */ String getHeader(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/GridCustomColumn.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/GridCustomColumn.java index fc21d1036bdd5667eca2f2cb00fb79cbad833979..a39a3c03b63f27f085ac7d0792af16a2f6d386fb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/GridCustomColumn.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/GridCustomColumn.java @@ -16,7 +16,6 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto; - /** * Stores information describing the grid custom column. * @@ -28,6 +27,7 @@ public class GridCustomColumn extends AbstractGridExpression private static final long serialVersionUID = ServiceVersionHolder.VERSION; private String code; + private DataTypeCode dataType; public String getCode() @@ -50,4 +50,10 @@ public class GridCustomColumn extends AbstractGridExpression return dataType; } + @Override + public String toString() + { + return code + "[" + dataType + "]"; + } + } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculatorTest.java index e0f22846cd4e55a170d8acaccc3f94e7816d1d95..9e1bef584420c3351d00defdb461dab79b9b257b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculatorTest.java @@ -71,7 +71,7 @@ public class RowCalculatorTest extends AssertJUnit } @Override - public Comparable<?> getComparableValue(GridRowModel<Data> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<Data> rowModel) { return rowModel.getOriginalObject().getValue(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowTest.java index c707db2665a86ddf74a14d6ee9804b330b0656d0..14a2baa927a1dc66162948ecbe2db02788f5f27e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowTest.java @@ -121,10 +121,10 @@ public class RowTest extends AssertJUnit context.checking(new Expectations() { { - one(def1).getComparableValue(data1); + one(def1).tryGetComparableValue(data1); will(returnValue(getVal(data1))); - one(def2).getComparableValue(data2); + one(def2).tryGetComparableValue(data2); will(returnValue(getVal(data2))); } }); @@ -206,7 +206,7 @@ public class RowTest extends AssertJUnit one(def2).tryToGetProperty(PROPERTY_KEY); will(returnValue(PROPERTY_VALUE)); - one(def2).getComparableValue(data); + one(def2).tryGetComparableValue(data); will(returnValue(getVal(data))); } }); @@ -289,10 +289,10 @@ public class RowTest extends AssertJUnit context.checking(new Expectations() { { - one(def1).getComparableValue(data); + one(def1).tryGetComparableValue(data); will(returnValue(getVal(data))); - one(def2).getComparableValue(data); + one(def2).tryGetComparableValue(data); will(returnValue(2 * getVal(data))); } }); @@ -319,10 +319,10 @@ public class RowTest extends AssertJUnit context.checking(new Expectations() { { - one(def1).getComparableValue(data); + one(def1).tryGetComparableValue(data); will(returnValue(getVal(data))); - one(def2).getComparableValue(data); + one(def2).tryGetComparableValue(data); will(returnValue(2 * getVal(data))); } }); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManagerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManagerTest.java index 7900b4e0ad8fd939b3b3284320d36cbb69fb3051..36b8ec5b90244a3c175b612051564b9abdea1a56 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManagerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManagerTest.java @@ -333,7 +333,7 @@ public final class CachedResultSetManagerTest return identifier; } - public Comparable<?> getComparableValue(GridRowModel<String> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<String> rowModel) { return getValue(rowModel); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/FilterUtilsTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/FilterUtilsTest.java index 7bd2ba4f5a7a1009888f1337b561c700f438f7e7..40b48249eca2ea556208f8d854c3a321357702f7 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/FilterUtilsTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/FilterUtilsTest.java @@ -78,7 +78,7 @@ public class FilterUtilsTest extends AssertJUnit } @Override - public Comparable<?> getComparableValue(GridRowModel<Data> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<Data> rowModel) { return rowModel.getOriginalObject().getValue(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/TSVRendererTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/TSVRendererTest.java index aff69868ed1f494507eaed70a8dd30935132f14c..195793cb92cf738f76c24770abe9adf48000fc44 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/TSVRendererTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/TSVRendererTest.java @@ -95,7 +95,7 @@ public class TSVRendererTest return rowModel.getOriginalObject()[colIx]; } - public Comparable<?> getComparableValue(GridRowModel<String[]> rowModel) + public Comparable<?> tryGetComparableValue(GridRowModel<String[]> rowModel) { return getValue(rowModel); }