diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DatasetModificationReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DatasetModificationReportingPlugin.java index 475d943cfef5aa50e88941c2d47cc79c137f465f..58511569cefad800287c9f8a2371bcb8cf5aa6b4 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DatasetModificationReportingPlugin.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/demo/DatasetModificationReportingPlugin.java @@ -25,6 +25,8 @@ import java.util.Properties; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractDatastorePlugin; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.IReportingPluginTask; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.SimpleTableModelBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel.TableModelColumnType; import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; @@ -54,7 +56,9 @@ public class DatasetModificationReportingPlugin extends AbstractDatastorePlugin { File file = getDataSubDir(dataset); String datasetCode = dataset.getDatasetCode(); - List<String> row = Arrays.asList(datasetCode, new Date(file.lastModified()).toString()); + List<ISerializableComparable> row = + Arrays.<ISerializableComparable> asList(new StringTableCell(datasetCode), + new StringTableCell(new Date(file.lastModified()).toString())); builder.addRow(row); } return builder.getTableModel(); 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 8410784a21b95eaa16a8d8839f8c5effdec302bd..b9d3575fc590971188bec46ddf933ca3db437477 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 @@ -27,6 +27,10 @@ import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractDatastorePlugin; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.IReportingPluginTask; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.SimpleTableModelBuilder; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ImageUtil; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ImageTableCell; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel.TableModelColumnType; import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; @@ -48,7 +52,8 @@ public class DemoReportingPlugin extends AbstractDatastorePlugin implements IRep public TableModel createReport(List<DatasetDescription> datasets) { SimpleTableModelBuilder builder = new SimpleTableModelBuilder(); - builder.addHeader("Dataset code", TableModelColumnType.TEXT); + builder.addHeader("Dataset Code", TableModelColumnType.TEXT); + builder.addHeader("Thumbnail", TableModelColumnType.THUMBNAIL); builder.addHeader("Name", TableModelColumnType.TEXT); builder.addHeader("Size", TableModelColumnType.INTEGER); for (DatasetDescription dataset : datasets) @@ -83,15 +88,33 @@ public class DemoReportingPlugin extends AbstractDatastorePlugin implements IRep private void describeUnknown(SimpleTableModelBuilder builder, DatasetDescription dataset, File file) { String datasetCode = dataset.getDatasetCode(); - List<String> row = Arrays.asList(datasetCode, file.getName(), "[does not exist]"); + ISerializableComparable image = createImageCell(dataset, file); + List<ISerializableComparable> row = + Arrays.<ISerializableComparable> asList(new StringTableCell(datasetCode), image, + new StringTableCell(file.getName()), + new StringTableCell("[does not exist]")); builder.addRow(row); } + private static ISerializableComparable createImageCell(DatasetDescription dataset, File file) + { + if (ImageUtil.isImageFile(file)) + { + String code = dataset.getDatasetCode(); + String location = dataset.getDataSetLocation(); + return new ImageTableCell(code, location, file.getPath(), 100, 60); + } + return new StringTableCell(file.getName()); + } + private static void describeFile(SimpleTableModelBuilder builder, DatasetDescription dataset, File file) { - List<String> row = - Arrays.asList(dataset.getDatasetCode(), file.getName(), "" + getSize(file)); + ISerializableComparable image = createImageCell(dataset, file); + List<ISerializableComparable> row = + Arrays.<ISerializableComparable> asList(new StringTableCell(dataset + .getDatasetCode()), image, new StringTableCell(file.getName()), + new StringTableCell("" + getSize(file))); builder.addRow(row); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java index 5df498fa179fcc1b0b1046570bb1ee2c53cab55c..55592249391cc8cfcae5a3f176564b36ab344ead 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractDataMergingReportingPlugin.java @@ -21,7 +21,6 @@ import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Properties; @@ -35,6 +34,8 @@ import ch.systemsx.cisd.common.parser.ParsingException; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.DatasetFileLines; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.IReportingPluginTask; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.SimpleTableModelBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell; import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; /** @@ -90,9 +91,12 @@ public abstract class AbstractDataMergingReportingPlugin extends AbstractDatasto protected static void addDataRow(SimpleTableModelBuilder builder, String datasetCode, String[] dataTokens) { - List<String> row = new ArrayList<String>(); - row.add(datasetCode); - row.addAll(Arrays.asList(dataTokens)); + List<ISerializableComparable> row = new ArrayList<ISerializableComparable>(); + row.add(new StringTableCell(datasetCode)); + for (String token : dataTokens) + { + row.add(new StringTableCell(token)); + } builder.addRow(row); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/IterativeTableModelBuilder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/IterativeTableModelBuilder.java index 5a51ecfef44e1d0592556b82cf2517030509d909..c0b61b3396f707723d87daeefa98d62ee5f098cd 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/IterativeTableModelBuilder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/IterativeTableModelBuilder.java @@ -30,6 +30,8 @@ import org.apache.log4j.Logger; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRow; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel.TableModelColumnHeader; @@ -180,11 +182,11 @@ public class IterativeTableModelBuilder } for (String rowId : rowIdentifiers) { - final List<String> rowValues = new ArrayList<String>(headers.size()); + final List<ISerializableComparable> rowValues = new ArrayList<ISerializableComparable>(headers.size()); for (TableModelColumnHeader header : headers) { final String valueOrNull = columnMap.get(header.getTitle()).get(rowId); - rowValues.add((valueOrNull == null) ? "" : valueOrNull); + rowValues.add(new StringTableCell((valueOrNull == null) ? "" : valueOrNull)); } rows.add(new TableModelRow(rowValues)); } 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 31b6cd462c008e410a523e6012fe1cfb04d73ee3..5b18725bb4a05ad3fb0a67186a17f30f4d351bea 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 @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks; import java.util.ArrayList; import java.util.List; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRow; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel.TableModelColumnHeader; @@ -46,7 +47,7 @@ public class SimpleTableModelBuilder header.add(new TableModelColumnHeader(title, type, header.size())); } - public void addRow(List<String> values) + public void addRow(List<ISerializableComparable> values) { assert values.size() == header.size() : "header has different number of columns than a row"; rows.add(new TableModelRow(values)); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java index 4fa7efc77d2ececaf3ce24d14e9d6b5a69a3f784..e0f1fcd38857ed94bd0539a6917ef4f9e8bd331e 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java @@ -20,6 +20,10 @@ import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import javax.media.jai.JAI; import javax.media.jai.PlanarImage; @@ -31,6 +35,28 @@ import javax.media.jai.PlanarImage; */ public class ImageUtil { + private static final Set<String> FILE_TYPES = + Collections.unmodifiableSet(new HashSet<String>(Arrays.asList("gif", "jpg", "jpeg", + "tif", "tiff"))); + + /** + * Returns <code>true</code> if the specified file is a supported image file. Supported formats + * are GIF, JPG, PNG, TIFF. Only file type is taken into account for figuring out the image + * format. Following file types are recognized: + * <code>.gif, .jpg, .jpeg, .png, .tif, .tiff</code> + */ + public static boolean isImageFile(File file) + { + String name = file.getName(); + int lastIndexOfDot = name.lastIndexOf('.'); + if (lastIndexOfDot < 0) + { + return false; + } + String fileType = name.substring(lastIndexOfDot + 1).toLowerCase(); + return FILE_TYPES.contains(fileType); + } + /** * Loads an image from specified file. Supported file formats are GIF, JPG, PNG, and TIFF. * diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/IterativeTableModelBuilderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/IterativeTableModelBuilderTest.java index f3a5d2fff299ca2a14c2a8dc246b56b25839178d..5100c4ff9a06935d469f4575fea3afac93ec3a80 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/IterativeTableModelBuilderTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/tasks/IterativeTableModelBuilderTest.java @@ -26,6 +26,7 @@ import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import ch.systemsx.cisd.common.logging.LogInitializer; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRow; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel.TableModelColumnHeader; @@ -62,18 +63,18 @@ public class IterativeTableModelBuilderTest assertEquals(1, headers.get(1).getIndex()); final List<TableModelRow> rows = model.getRows(); assertEquals(3, rows.size()); - final List<String> row0 = rows.get(0).getValues(); + final List<ISerializableComparable> row0 = rows.get(0).getValues(); assertEquals(2, row0.size()); - assertEquals("a", row0.get(0)); - assertEquals("A", row0.get(1)); - final List<String> row1 = rows.get(1).getValues(); + assertEquals("a", row0.get(0).toString()); + assertEquals("A", row0.get(1).toString()); + final List<ISerializableComparable> row1 = rows.get(1).getValues(); assertEquals(2, row1.size()); - assertEquals("b", row1.get(0)); - assertEquals("B", row1.get(1)); - final List<String> row2 = rows.get(2).getValues(); + assertEquals("b", row1.get(0).toString()); + assertEquals("B", row1.get(1).toString()); + final List<ISerializableComparable> row2 = rows.get(2).getValues(); assertEquals(2, row2.size()); - assertEquals("c", row2.get(0)); - assertEquals("C", row2.get(1)); + assertEquals("c", row2.get(0).toString()); + assertEquals("C", row2.get(1).toString()); } private DatasetDescription createDatasetDescription() @@ -107,21 +108,21 @@ public class IterativeTableModelBuilderTest assertEquals(2, headers.get(2).getIndex()); final List<TableModelRow> rows = model.getRows(); assertEquals(3, rows.size()); - final List<String> row0 = rows.get(0).getValues(); + final List<ISerializableComparable> row0 = rows.get(0).getValues(); assertEquals(3, row0.size()); - assertEquals("a", row0.get(0)); - assertEquals("A", row0.get(1)); - assertEquals("D", row0.get(2)); - final List<String> row1 = rows.get(1).getValues(); + assertEquals("a", row0.get(0).toString()); + assertEquals("A", row0.get(1).toString()); + assertEquals("D", row0.get(2).toString()); + final List<ISerializableComparable> row1 = rows.get(1).getValues(); assertEquals(3, row1.size()); - assertEquals("b", row1.get(0)); - assertEquals("B", row1.get(1)); - assertEquals("E", row1.get(2)); - final List<String> row2 = rows.get(2).getValues(); + assertEquals("b", row1.get(0).toString()); + assertEquals("B", row1.get(1).toString()); + assertEquals("E", row1.get(2).toString()); + final List<ISerializableComparable> row2 = rows.get(2).getValues(); assertEquals(3, row2.size()); - assertEquals("c", row2.get(0)); - assertEquals("C", row2.get(1)); - assertEquals("F", row2.get(2)); + assertEquals("c", row2.get(0).toString()); + assertEquals("C", row2.get(1).toString()); + assertEquals("F", row2.get(2).toString()); } @Test @@ -149,31 +150,31 @@ public class IterativeTableModelBuilderTest assertEquals(2, headers.get(2).getIndex()); final List<TableModelRow> rows = model.getRows(); assertEquals(5, rows.size()); - final List<String> row0 = rows.get(0).getValues(); + final List<ISerializableComparable> row0 = rows.get(0).getValues(); assertEquals(3, row0.size()); - assertEquals("a", row0.get(0)); - assertEquals("A", row0.get(1)); - assertEquals("", row0.get(2)); - final List<String> row1 = rows.get(1).getValues(); + assertEquals("a", row0.get(0).toString()); + assertEquals("A", row0.get(1).toString()); + assertEquals("", row0.get(2).toString()); + final List<ISerializableComparable> row1 = rows.get(1).getValues(); assertEquals(3, row1.size()); - assertEquals("b", row1.get(0)); - assertEquals("B", row1.get(1)); - assertEquals("E", row1.get(2)); - final List<String> row2 = rows.get(2).getValues(); + assertEquals("b", row1.get(0).toString()); + assertEquals("B", row1.get(1).toString()); + assertEquals("E", row1.get(2).toString()); + final List<ISerializableComparable> row2 = rows.get(2).getValues(); assertEquals(3, row2.size()); - assertEquals("c", row2.get(0)); - assertEquals("C", row2.get(1)); - assertEquals("", row2.get(2)); - final List<String> row3 = rows.get(3).getValues(); + assertEquals("c", row2.get(0).toString()); + assertEquals("C", row2.get(1).toString()); + assertEquals("", row2.get(2).toString()); + final List<ISerializableComparable> row3 = rows.get(3).getValues(); assertEquals(3, row3.size()); - assertEquals("d", row3.get(0)); - assertEquals("", row3.get(1)); - assertEquals("D", row3.get(2)); - final List<String> row4 = rows.get(4).getValues(); + assertEquals("d", row3.get(0).toString()); + assertEquals("", row3.get(1).toString()); + assertEquals("D", row3.get(2).toString()); + final List<ISerializableComparable> row4 = rows.get(4).getValues(); assertEquals(3, row4.size()); - assertEquals("f", row4.get(0)); - assertEquals("", row4.get(1)); - assertEquals("F", row4.get(2)); + assertEquals("f", row4.get(0).toString()); + assertEquals("", row4.get(1).toString()); + assertEquals("F", row4.get(2).toString()); } @Test @@ -198,21 +199,21 @@ public class IterativeTableModelBuilderTest assertEquals(2, headers.get(2).getIndex()); final List<TableModelRow> rows = model.getRows(); assertEquals(3, rows.size()); - final List<String> row0 = rows.get(0).getValues(); + final List<ISerializableComparable> row0 = rows.get(0).getValues(); assertEquals(3, row0.size()); - assertEquals("a", row0.get(0)); - assertEquals("A", row0.get(1)); - assertEquals("A", row0.get(2)); - final List<String> row1 = rows.get(1).getValues(); + assertEquals("a", row0.get(0).toString()); + assertEquals("A", row0.get(1).toString()); + assertEquals("A", row0.get(2).toString()); + final List<ISerializableComparable> row1 = rows.get(1).getValues(); assertEquals(3, row1.size()); - assertEquals("b", row1.get(0)); - assertEquals("B", row1.get(1)); - assertEquals("B", row1.get(2)); - final List<String> row2 = rows.get(2).getValues(); + assertEquals("b", row1.get(0).toString()); + assertEquals("B", row1.get(1).toString()); + assertEquals("B", row1.get(2).toString()); + final List<ISerializableComparable> row2 = rows.get(2).getValues(); assertEquals(3, row2.size()); - assertEquals("c", row2.get(0)); - assertEquals("C", row2.get(1)); - assertEquals("C", row2.get(2)); + assertEquals("c", row2.get(0).toString()); + assertEquals("C", row2.get(1).toString()); + assertEquals("C", row2.get(2).toString()); } @Test @@ -253,17 +254,17 @@ public class IterativeTableModelBuilderTest assertEquals(1, headers.get(1).getIndex()); final List<TableModelRow> rows = model.getRows(); assertEquals(3, rows.size()); - final List<String> row0 = rows.get(0).getValues(); + final List<ISerializableComparable> row0 = rows.get(0).getValues(); assertEquals(2, row0.size()); - assertEquals("a", row0.get(0)); - assertEquals("A", row0.get(1)); - final List<String> row1 = rows.get(1).getValues(); + assertEquals("a", row0.get(0).toString()); + assertEquals("A", row0.get(1).toString()); + final List<ISerializableComparable> row1 = rows.get(1).getValues(); assertEquals(2, row1.size()); - assertEquals("b", row1.get(0)); - assertEquals("B", row1.get(1)); - final List<String> row2 = rows.get(2).getValues(); + assertEquals("b", row1.get(0).toString()); + assertEquals("B", row1.get(1).toString()); + final List<ISerializableComparable> row2 = rows.get(2).getValues(); assertEquals(2, row2.size()); - assertEquals("c", row2.get(0)); - assertEquals("C", row2.get(1)); + assertEquals("c", row2.get(0).toString()); + assertEquals("C", row2.get(1).toString()); } }