From dc56cf50183b6df4c4741b6418a1ce60705fbc36 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 21 Oct 2009 09:25:06 +0000 Subject: [PATCH] LMS-1231 TableModel refactored to allow ImageTableCell. Using ImageTableCell in demo reporting plugin SVN: 13022 --- .../DatasetModificationReportingPlugin.java | 6 +- .../plugins/demo/DemoReportingPlugin.java | 31 ++++- .../AbstractDataMergingReportingPlugin.java | 12 +- .../tasks/IterativeTableModelBuilder.java | 6 +- .../tasks/SimpleTableModelBuilder.java | 3 +- .../dss/generic/shared/utils/ImageUtil.java | 26 ++++ .../tasks/IterativeTableModelBuilderTest.java | 125 +++++++++--------- 7 files changed, 135 insertions(+), 74 deletions(-) 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 475d943cfef..58511569cef 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 8410784a21b..b9d3575fc59 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 5df498fa179..55592249391 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 5a51ecfef44..c0b61b3396f 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 31b6cd462c0..5b18725bb4a 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 4fa7efc77d2..e0f1fcd3885 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 f3a5d2fff29..5100c4ff9a0 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()); } } -- GitLab