From a10e3c2f234463a56605b090193408a4cafd354a Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 14 Aug 2012 14:05:46 +0000 Subject: [PATCH] SP-141, BIS-99, OBP-83: Export for update unit tested. SVN: 26368 --- .../resultset/TableForUpdateExporter.java | 4 +- .../resultset/TableForUpdateExporterTest.java | 151 ++++++++++++++++++ .../dto/builders/AbstractDataSetBuilder.java | 7 + .../basic/dto/builders/PropertyBuilder.java | 59 +++++-- .../basic/dto/builders/SampleBuilder.java | 46 +++--- .../util/TypedTableModelBuilderTest.java | 43 ++++- 6 files changed, 272 insertions(+), 38 deletions(-) create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporterTest.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporter.java index 1e7bfd4fd62..623a6853c83 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporter.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporter.java @@ -111,7 +111,7 @@ public class TableForUpdateExporter { if (samples.size() > 1) { - builder.append("[").append(entry.getKey()).append("]\n"); + builder.append("[").append(entry.getKey()).append("]").append(lineSeparator); } builder.append(getTableForSamples(entry, lineSeparator)); } @@ -224,7 +224,7 @@ public class TableForUpdateExporter List<IEntityProperty> filteredProperties = new ArrayList<IEntityProperty>(); for (IEntityProperty property : properties) { - if (property.isDynamic() == false && property.isDynamic() == false) + if (property.isDynamic() == false && property.isManaged() == false) { filteredProperties.add(property); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporterTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporterTest.java new file mode 100644 index 00000000000..a861d4bb334 --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/TableForUpdateExporterTest.java @@ -0,0 +1,151 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.client.web.server.resultset; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ColumnDistinctValues; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridCustomColumnInfo; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridRowModels; +import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.ContainerDataSetBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.ExperimentBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.MaterialBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.SampleBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.VocabularyTermBuilder; + +/** + * @author Franz-Josef Elmer + */ +public class TableForUpdateExporterTest extends AssertJUnit +{ + @Test + public void testExperimentExport() + { + Experiment e1 = new ExperimentBuilder().identifier("/S/P/E1").getExperiment(); + Experiment e2 = + new ExperimentBuilder().identifier("/S/P/E2").property("P1", "hello") + .getExperiment(); + ExperimentBuilder e3 = new ExperimentBuilder().identifier("/S/P/E3"); + e3.property("P2").internal().label("Property 2") + .value(new MaterialBuilder().code("ALPHA").type("GENE")); + e3.property("P3").managed().value("hello"); + e3.property("P3").dynamic().value("hello"); + GridRowModels<TableModelRowWithObject<Experiment>> rows = + createGridRowModels(e1, e2, e3.getExperiment()); + + String fileContent = + TableForUpdateExporter.getExportTableForUpdate(rows, EntityKind.EXPERIMENT, "\n"); + + assertEquals("identifier\tproject\tP1\t$P2\n" + "/S/P/E1\t\t\t\n" + "/S/P/E2\t\thello\t\n" + + "/S/P/E3\t\t\tALPHA (GENE)\n", fileContent); + } + + @Test + public void testSampleExportOnlyOneSampleType() + { + Sample s1 = + new SampleBuilder("/S/S1").type("T1") + .partOf(new SampleBuilder("/S/C1").getSample()) + .experiment(new ExperimentBuilder().identifier("/S/P/E1").getExperiment()) + .getSample(); + SampleBuilder s2 = new SampleBuilder("/S/S2").type("T1"); + s2.parents(new SampleBuilder("/S/S1").getSample(), new SampleBuilder("/S/S3").getSample()); + s2.property("P1").label("p1") + .value(new VocabularyTermBuilder("A").label("alpha").getTerm()); + GridRowModels<TableModelRowWithObject<Sample>> rows = + createGridRowModels(s1, s2.getSample()); + + String fileContent = + TableForUpdateExporter.getExportTableForUpdate(rows, EntityKind.SAMPLE, "\n"); + + assertEquals("identifier\tcontainer\tparents\texperiment\tP1\n" + + "/S/S1\t/S/C1\t\t/S/P/E1\t\n" + "/S/S2\t\t/S/S1,/S/S3\t\tA\n", fileContent); + } + + @Test + public void testSampleExportForMixedSampleTypes() + { + Sample s1 = new SampleBuilder("/S/S1").type("T1").property("P1", "hello").getSample(); + Sample s2 = new SampleBuilder("/A/S2").type("T1").getSample(); + SampleBuilder s3 = new SampleBuilder("/S/S3").type("T2"); + s3.parents(new SampleBuilder("/S/S1").getSample()); + s3.property("P2").label("p2").value(new Date(1234567L)); + GridRowModels<TableModelRowWithObject<Sample>> rows = + createGridRowModels(s1, s2, s3.getSample()); + + String fileContent = + TableForUpdateExporter.getExportTableForUpdate(rows, EntityKind.SAMPLE, "\n"); + + assertEquals("[T1]\n" + "identifier\tcontainer\tparents\texperiment\tP1\n" + + "/A/S2\t\t\t\t\n" + "/S/S1\t\t\t\thello\n" + "[T2]\n" + + "identifier\tcontainer\tparents\texperiment\tP2\n" + + "/S/S3\t\t/S/S1\t\t1970-01-01 01:20:34 +0100\n", fileContent); + } + + @Test + public void testDataSetExport() + { + Experiment experiment = new ExperimentBuilder().identifier("/S/P/E").getExperiment(); + DataSet ds1 = + new DataSetBuilder().code("ds1").experiment(experiment).property("P1", "hello") + .parent(new DataSetBuilder().code("ds3").getDataSet()) + .parent(new DataSetBuilder().code("ds4").getDataSet()).getDataSet(); + DataSet ds2 = + new DataSetBuilder().code("ds2").experiment(experiment) + .container(new ContainerDataSetBuilder().code("ds1").getContainerDataSet()) + .sample(new SampleBuilder("/S/S1").getSample()).getDataSet(); + GridRowModels<TableModelRowWithObject<DataSet>> rows = createGridRowModels(ds1, ds2); + String fileContent = + TableForUpdateExporter.getExportTableForUpdate(rows, EntityKind.DATA_SET, "\n"); + + assertEquals("code\tcontainer\tparents\texperiment\tsample\tP1\n" + + "ds1\t\tds3,ds4\t/S/P/E\t\thello\n" + "ds2\tds1\t\t/S/P/E\t/S/S1\t\n", + fileContent); + } + + private <T extends Serializable> GridRowModels<TableModelRowWithObject<T>> createGridRowModels( + T... entities) + { + List<GridRowModel<TableModelRowWithObject<T>>> rows = + new ArrayList<GridRowModel<TableModelRowWithObject<T>>>(); + for (T entity : entities) + { + rows.add(new GridRowModel<TableModelRowWithObject<T>>(new TableModelRowWithObject<T>( + entity, Collections.<ISerializableComparable> emptyList()), null)); + } + return new GridRowModels<TableModelRowWithObject<T>>(rows, + Collections.<TableModelColumnHeader> emptyList(), + Collections.<GridCustomColumnInfo> emptyList(), + Collections.<ColumnDistinctValues> emptyList()); + } +} diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/AbstractDataSetBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/AbstractDataSetBuilder.java index 865c7fee8e0..366ceb30688 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/AbstractDataSetBuilder.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/AbstractDataSetBuilder.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore; @@ -64,6 +65,12 @@ public abstract class AbstractDataSetBuilder<T extends AbstractDataSetBuilder<?> return asConcreteSubclass(); } + public T container(ContainerDataSet container) + { + dataSet.setContainer(container); + return asConcreteSubclass(); + } + public T experiment(Experiment experiment) { dataSet.setExperiment(experiment); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/PropertyBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/PropertyBuilder.java index 2a47aee9f8d..3360ea6cbbc 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/PropertyBuilder.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/PropertyBuilder.java @@ -26,16 +26,36 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm; /** * Builder for an {@link EntityProperty} instance. - * + * * @author Franz-Josef Elmer */ public class PropertyBuilder { - private final EntityProperty property = new EntityProperty(); + private static final class ExtendedEntityProperty extends EntityProperty + { + private static final long serialVersionUID = ServiceVersionHolder.VERSION; + + private boolean managed; + + @Override + public boolean isManaged() + { + return managed; + } + + void setManaged(boolean managed) + { + this.managed = managed; + } + + } + + private final ExtendedEntityProperty property = new ExtendedEntityProperty(); /** * Creates an instance for specified property type code which also the simple code. Data type is @@ -49,7 +69,7 @@ public class PropertyBuilder property.setPropertyType(propertyType); type(DataTypeCode.VARCHAR); } - + public PropertyBuilder type(DataTypeCode dataType) { property.getPropertyType().setDataType(new DataType(dataType)); @@ -61,7 +81,7 @@ public class PropertyBuilder property.getPropertyType().setLabel(label); return this; } - + /** * Sets property type to internal name space and adds a '$' code prefix. */ @@ -72,27 +92,39 @@ public class PropertyBuilder propertyType.setCode("$" + propertyType.getSimpleCode()); return this; } - + + public PropertyBuilder dynamic() + { + property.setDynamic(true); + return this; + } + + public PropertyBuilder managed() + { + property.setManaged(true); + return this; + } + public PropertyBuilder value(String value) { property.setValue(value); return this; } - + public PropertyBuilder value(int value) { type(DataTypeCode.INTEGER); property.setValue(Integer.toString(value)); return this; } - + public PropertyBuilder value(double value) { type(DataTypeCode.REAL); property.setValue(Double.toString(value)); return this; } - + public PropertyBuilder value(Date value) { type(DataTypeCode.TIMESTAMP); @@ -100,30 +132,29 @@ public class PropertyBuilder property.setValue(formatedDate); return this; } - + public PropertyBuilder value(MaterialBuilder builder) { return value(builder.getMaterial()); } - + public PropertyBuilder value(Material value) { type(DataTypeCode.MATERIAL); property.setMaterial(value); return this; } - + public PropertyBuilder value(VocabularyTerm value) { type(DataTypeCode.CONTROLLEDVOCABULARY); property.setVocabularyTerm(value); return this; } - + public EntityProperty getProperty() { return property; } - - + } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/SampleBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/SampleBuilder.java index f61d9131d0e..bfd3849f45d 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/SampleBuilder.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/builders/SampleBuilder.java @@ -23,9 +23,9 @@ import java.util.LinkedHashSet; import java.util.List; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; @@ -36,36 +36,36 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; /** * Builder for an instance of {@link Sample}. - * + * * @author Franz-Josef Elmer */ public class SampleBuilder { private Sample sample = new Sample(); - + public SampleBuilder() { sample.setProperties(new ArrayList<IEntityProperty>()); } - + public SampleBuilder(String identifier) { this(); identifier(identifier); } - + public SampleBuilder id(long id) { sample.setId(id); return this; } - + public SampleBuilder code(String code) { sample.setCode(code); return this; } - + public SampleBuilder identifier(String identifier) { sample.setIdentifier(identifier); @@ -91,7 +91,7 @@ public class SampleBuilder } return this; } - + public SampleBuilder type(String typeCode) { SampleType sampleType = new SampleType(); @@ -104,61 +104,67 @@ public class SampleBuilder sample.setSampleType(sampleType); return this; } - + public SampleBuilder markDeleted() { sample.setDeletion(new Deletion()); return this; } - + public SampleBuilder registrator(Person person) { sample.setRegistrator(person); return this; } - + public SampleBuilder date(Date date) { sample.setRegistrationDate(date); return this; } - + public SampleBuilder modificationDate(Date date) { sample.setModificationDate(date); return this; } - + public SampleBuilder experiment(Experiment experiment) { sample.setExperiment(experiment); return this; } - + public SampleBuilder permID(String permID) { sample.setPermId(permID); return this; } - + public SampleBuilder permLink(String permLink) { sample.setPermlink(permLink); return this; } - + public SampleBuilder childOf(Sample... parents) { sample.setParents(new LinkedHashSet<Sample>(Arrays.asList(parents))); return this; } - + public SampleBuilder partOf(Sample container) { sample.setContainer(container); return this; } - + + public SampleBuilder parents(Sample... parents) + { + sample.setParents(new LinkedHashSet<Sample>(Arrays.asList(parents))); + return this; + } + public PropertyBuilder property(String key) { List<IEntityProperty> properties = sample.getProperties(); @@ -166,13 +172,13 @@ public class SampleBuilder properties.add(propertyBuilder.getProperty()); return propertyBuilder; } - + public SampleBuilder property(String key, String value) { property(key).value(value); return this; } - + public Sample getSample() { return sample; diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilderTest.java index a63c3146138..e7aef2ebdeb 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilderTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilderTest.java @@ -37,6 +37,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.MaterialBuilder; /** * @author Franz-Josef Elmer @@ -121,7 +123,6 @@ public class TypedTableModelBuilderTest extends AssertJUnit TypedTableModel<Serializable> model = builder.getModel(); List<TableModelColumnHeader> headers = model.getHeader(); - System.out.println("HEADERS:" + headers); assertHeadersOrder(headers, "MY-USER-ALPHA", "MY-INTERN-BETA", "MY-USER-GAMMA", "MY-USER-KAPPA"); assertEquals("alpha", headers.get(0).getTitle()); @@ -145,6 +146,31 @@ public class TypedTableModelBuilderTest extends AssertJUnit assertEquals(2, rows.size()); } + @Test + public void testAddPropertiesForUpdate() + { + TypedTableModelBuilder<Serializable> builder = new TypedTableModelBuilder<Serializable>(); + builder.addRow(new MockSerializable()); + IEntityProperty p1 = property("beta", "3.25", true, DataTypeCode.REAL); + IEntityProperty p2 = property("alpha", "hello", false, DataTypeCode.MATERIAL); + IEntityProperty p3 = property("gamma", "hello world", false, DataTypeCode.VARCHAR); + IEntityProperty p4 = property("delta", "hi", false, DataTypeCode.CONTROLLEDVOCABULARY); + IEntityProperty p5 = + property("kappa", "2012-08-14 15:11:12", false, DataTypeCode.TIMESTAMP); + builder.columnGroup("g").addPropertiesForUpdate(Arrays.asList(p1, p2, p3, p4, p5)); + + TypedTableModel<Serializable> model = builder.getModel(); + List<TableModelColumnHeader> headers = model.getHeader(); + assertHeadersOrder(headers, "ALPHA", "$BETA", "DELTA", "GAMMA", "KAPPA"); + List<TableModelRowWithObject<Serializable>> rows = model.getRows(); + assertEquals(new StringTableCell("HELLO (TEST)"), rows.get(0).getValues().get(0)); + assertEquals(new StringTableCell("3.25"), rows.get(0).getValues().get(1)); + assertEquals(new StringTableCell("HI"), rows.get(0).getValues().get(2)); + assertEquals(new StringTableCell("hello world"), rows.get(0).getValues().get(3)); + assertEquals(new StringTableCell("2012-08-14 15:11:12"), rows.get(0).getValues().get(4)); + assertEquals(1, rows.size()); + } + private IEntityProperty property(String key, String value, boolean internalNamespace, DataTypeCode type) { @@ -157,7 +183,20 @@ public class TypedTableModelBuilderTest extends AssertJUnit propertyType.setLabel(key); propertyType.setDataType(new DataType(type)); property.setPropertyType(propertyType); - property.setValue(value); + if (type == DataTypeCode.CONTROLLEDVOCABULARY) + { + VocabularyTerm vocabularyTerm = new VocabularyTerm(); + vocabularyTerm.setCode(value.toUpperCase()); + vocabularyTerm.setLabel(value); + property.setVocabularyTerm(vocabularyTerm); + } else if (type == DataTypeCode.MATERIAL) + { + property.setMaterial(new MaterialBuilder().code(value.toUpperCase()).type("TEST") + .getMaterial()); + } else + { + property.setValue(value); + } return property; } -- GitLab