From da638ca78f18976e88f642217246d57bb5c4df3a Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 25 Jan 2010 08:35:56 +0000 Subject: [PATCH] SE-191 Alternative version of RawDataSampleGrid SVN: 14416 --- .../web/client/IPhosphoNetXClientService.java | 10 +- .../IPhosphoNetXClientServiceAsync.java | 10 +- .../client/application/RawDataSampleGrid.java | 193 ++------------- .../web/public/phosphonetx-dictionary.js | 5 +- .../web/server/PhosphoNetXClientService.java | 14 +- .../web/server/RawDataSampleProvider.java | 223 +++++++++++++++++- .../server/RawDataServiceInternal.java | 4 +- 7 files changed, 259 insertions(+), 200 deletions(-) diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientService.java index 253cf47e82d..4e55fc527f6 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientService.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientService.java @@ -19,13 +19,13 @@ package ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client; import java.util.List; import ch.systemsx.cisd.openbis.generic.client.web.client.IClientService; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentAndReferenceCriteria; import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentCriteria; @@ -86,10 +86,10 @@ public interface IPhosphoNetXClientService extends IClientService TableExportCriteria<SampleWithPropertiesAndAbundance> exportCriteria) throws UserFailureException; - public ResultSetWithEntityTypes<Sample> listRawDataSamples(IResultSetConfig<String, Sample> criteria) + public GenericTableResultSet listRawDataSamples(IResultSetConfig<String, GenericTableRow> criteria) throws UserFailureException; - - public String prepareExportRawDataSamples(TableExportCriteria<Sample> exportCriteria) + + public String prepareExportRawDataSamples(TableExportCriteria<GenericTableRow> exportCriteria) throws UserFailureException; public void copyRawData(long[] rawDataSampleIDs) throws UserFailureException; diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientServiceAsync.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientServiceAsync.java index d2ed0719009..6d522eb5d2d 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientServiceAsync.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/IPhosphoNetXClientServiceAsync.java @@ -21,12 +21,12 @@ import java.util.List; import com.google.gwt.user.client.rpc.AsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.IClientServiceAsync; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentAndReferenceCriteria; import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentCriteria; @@ -104,11 +104,11 @@ public interface IPhosphoNetXClientServiceAsync extends IClientServiceAsync AsyncCallback<String> callback); /** @see IPhosphoNetXClientService#listRawDataSamples(IResultSetConfig) */ - public void listRawDataSamples(IResultSetConfig<String, Sample> criteria, - AsyncCallback<ResultSetWithEntityTypes<Sample>> callback); + public void listRawDataSamples(IResultSetConfig<String, GenericTableRow> criteria, + AsyncCallback<GenericTableResultSet> callback); /** @see IPhosphoNetXClientService#prepareExportRawDataSamples(TableExportCriteria) */ - public void prepareExportRawDataSamples(TableExportCriteria<Sample> exportCriteria, + public void prepareExportRawDataSamples(TableExportCriteria<GenericTableRow> exportCriteria, AsyncCallback<String> callback); /** @see IPhosphoNetXClientService#copyRawData(long[]) */ diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java index 23292509eda..491b89c32a7 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java @@ -16,101 +16,26 @@ package ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application; -import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.createOrDelete; -import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.edit; -import static ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application.Dict.COPY_DATA_SETS_BUTTON_LABEL; -import static ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application.Dict.COPY_DATA_SETS_MESSAGE; -import static ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application.Dict.COPY_DATA_SETS_TITLE; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import com.extjs.gxt.ui.client.widget.Dialog; -import com.extjs.gxt.ui.client.widget.button.Button; -import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; +import com.google.gwt.user.client.rpc.AsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.VoidAsyncCallback; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.EntityGridModelFactory; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListener; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.GenericTableBrowserGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataConfirmationDialog; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria; -import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow; import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientServiceAsync; -import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.application.columns.RawDataSampleColDefKind; /** * @author Franz-Josef Elmer */ -class RawDataSampleGrid extends AbstractSimpleBrowserGrid<Sample> +class RawDataSampleGrid extends GenericTableBrowserGrid { - private static final class CopyConfirmationDialog extends - AbstractDataConfirmationDialog<List<Sample>> - { - private final IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext; - private final List<Sample> samples; - - private CopyConfirmationDialog(IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext, - List<Sample> samples, String title) - { - super(specificViewContext, samples, title); - this.specificViewContext = specificViewContext; - this.samples = samples; - } - - @Override - protected String createMessage() - { - String list = "["; - String delim = ""; - for (Sample sample : samples) - { - list += delim + sample.getCode(); - delim = ", "; - } - list += "]"; - return specificViewContext.getMessage(COPY_DATA_SETS_MESSAGE, list); - } - - @Override - protected void executeConfirmedAction() - { - long[] rawDataSampleIDs = new long[samples.size()]; - for (int i = 0; i < samples.size(); i++) - { - rawDataSampleIDs[i] = samples.get(i).getId(); - } - specificViewContext.getService().copyRawData(rawDataSampleIDs, - new VoidAsyncCallback<Void>(specificViewContext)); - } - - @Override - protected void extendForm() - { - } - } - - public static final String BROWSER_ID = - GenericConstants.ID_PREFIX + "raw-data-sample-browser"; + public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "raw_data_sample_browser"; public static final String GRID_ID = BROWSER_ID + "-grid"; @@ -123,103 +48,24 @@ class RawDataSampleGrid extends AbstractSimpleBrowserGrid<Sample> private final IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext; - private Set<BasicEntityType> shownEntityTypesOrNull; - RawDataSampleGrid(IViewContext<IPhosphoNetXClientServiceAsync> viewContext) { - super(viewContext.getCommonViewContext(), BROWSER_ID, GRID_ID, true, + super(viewContext.getCommonViewContext(), BROWSER_ID, GRID_ID, true, true, PhosphoNetXDisplayTypeIDGenerator.RAW_DATA_SAMPLE_BROWSER_GRID); specificViewContext = viewContext; allowMultipleSelection(); - registerLinkClickListenerFor(RawDataSampleColDefKind.CODE.id(), new ICellListener<Sample>() - { - public void handle(Sample rowItem) - { - showEntityViewer(rowItem, false); - } - }); - addEntityOperationsLabel(); - Button uploadButton = - new Button(viewContext.getMessage(COPY_DATA_SETS_BUTTON_LABEL), - new AbstractCreateDialogListener() - { - @Override - protected Dialog createDialog(List<Sample> samples, - IBrowserGridActionInvoker invoker) - { - return new CopyConfirmationDialog(specificViewContext, samples, - specificViewContext.getMessage(COPY_DATA_SETS_TITLE)); - } - }); - addButton(uploadButton); - } - @Override - protected IColumnDefinitionKind<Sample>[] getStaticColumnsDefinition() - { - return RawDataSampleColDefKind.values(); - } - - @Override - protected ColumnDefsAndConfigs<Sample> createColumnsDefinition() - { - IColumnDefinitionKind<Sample>[] columnsDefinition = getStaticColumnsDefinition(); - EntityGridModelFactory<Sample> factory = new EntityGridModelFactory<Sample>(columnsDefinition); - ArrayList<PropertyType> propertyTypes = new ArrayList<PropertyType>(); - if (shownEntityTypesOrNull != null) - { - for (BasicEntityType type : shownEntityTypesOrNull) - { - if (type instanceof EntityType) - { - EntityType entityType = (EntityType) type; - List<? extends EntityTypePropertyType<?>> etpts = entityType.getAssignedPropertyTypes(); - for (EntityTypePropertyType<?> entityTypePropertyType : etpts) - { - propertyTypes.add(entityTypePropertyType.getPropertyType()); - } - } - } - } - System.out.println(shownEntityTypesOrNull + " " + propertyTypes); - ColumnDefsAndConfigs<Sample> schema = factory.createColumnsSchema(viewContext, propertyTypes); - GridCellRenderer<BaseEntityModel<?>> linkCellRenderer = createInternalLinkCellRenderer(); - schema.setGridCellRendererFor(RawDataSampleColDefKind.CODE.id(), linkCellRenderer); - return schema; } - - @Override - protected List<IColumnDefinition<Sample>> getInitialFilters() - { - return asColumnFilters(new RawDataSampleColDefKind[] {RawDataSampleColDefKind.CODE}); - } - + @Override - protected void listEntities(DefaultResultSetConfig<String, Sample> resultSetConfig, - final AbstractAsyncCallback<ResultSet<Sample>> callback) + protected void listTableRows(IResultSetConfig<String, GenericTableRow> resultSetConfig, + AsyncCallback<GenericTableResultSet> callback) { - AbstractAsyncCallback<ResultSetWithEntityTypes<Sample>> extendedCallback = - new AbstractAsyncCallback<ResultSetWithEntityTypes<Sample>>(viewContext) - { - @Override - protected void process(ResultSetWithEntityTypes<Sample> result) - { - shownEntityTypesOrNull = result.getAvailableEntityTypes(); - callback.onSuccess(result.getResultSet()); -// refreshColumnsSettingsIfNecessary(); - } - - @Override - public void finishOnFailure(Throwable caught) - { - callback.finishOnFailure(caught); - } - }; - specificViewContext.getService().listRawDataSamples(resultSetConfig, extendedCallback); + specificViewContext.getService().listRawDataSamples(resultSetConfig, callback); } @Override - protected void prepareExportEntities(TableExportCriteria<Sample> exportCriteria, + protected void prepareExportEntities(TableExportCriteria<GenericTableRow> exportCriteria, AbstractAsyncCallback<String> callback) { specificViewContext.getService().prepareExportRawDataSamples(exportCriteria, callback); @@ -227,16 +73,7 @@ class RawDataSampleGrid extends AbstractSimpleBrowserGrid<Sample> public DatabaseModificationKind[] getRelevantModifications() { - return new DatabaseModificationKind[] - { createOrDelete(ObjectKind.SAMPLE_TYPE), edit(ObjectKind.SAMPLE_TYPE), - createOrDelete(ObjectKind.GROUP), - createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), - edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT) }; - } - - @Override - protected void showEntityViewer(Sample entity, boolean editMode) - { - showEntityInformationHolderViewer(entity, editMode); + return new DatabaseModificationKind[] {}; } + } diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js index 9c8e3e50ea2..ac8ee59a99f 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js @@ -40,8 +40,9 @@ var phosphonetx = { ALL_RAW_DATA_SAMPLES_menu_item: "All MS INJECTION Samples", ALL_RAW_DATA_SAMPLES_tab_label: "MS INJECTION Samples and Related Biological Samples", - ms_injection_sample_code: "MS INJECTION Sample", - biological_sample_identifier: "Biological Sample", + openbis_raw_data_sample_browser_CODE: "MS INJECTION Sample", + openbis_raw_data_sample_browser_REGISTRATION_DATE: "Regustration Date", + openbis_raw_data_sample_browser_PARENT: "Biological Sample", copy_data_sets_button_label: "Copy Data Sets", copy_data_sets_title: "Copy Data Sets Confirmation", copy_data_sets_message: "Do you want to make the data sets of the samples {0} available for processing?", diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java index 75e3d1843ae..a78874bc47f 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/PhosphoNetXClientService.java @@ -24,15 +24,15 @@ import org.springframework.stereotype.Component; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.servlet.IRequestContextProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria; import ch.systemsx.cisd.openbis.generic.client.web.server.AbstractClientService; import ch.systemsx.cisd.openbis.generic.client.web.server.translator.UserFailureExceptionTranslator; import ch.systemsx.cisd.openbis.generic.shared.IServer; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientService; import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.dto.ListProteinByExperimentAndReferenceCriteria; @@ -186,19 +186,21 @@ public class PhosphoNetXClientService extends AbstractClientService implements return prepareExportEntities(exportCriteria); } - public ResultSetWithEntityTypes<Sample> listRawDataSamples(IResultSetConfig<String, Sample> criteria) + public GenericTableResultSet listRawDataSamples(IResultSetConfig<String, GenericTableRow> criteria) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { final String sessionToken = getSessionToken(); - return listEntitiesWithTypes(criteria, new RawDataSampleProvider(rawDataService, sessionToken)); + RawDataSampleProvider rawDataSampleProvider = new RawDataSampleProvider(rawDataService, sessionToken); + ResultSet<GenericTableRow> resultSet = listEntities(criteria, rawDataSampleProvider); + return new GenericTableResultSet(resultSet, rawDataSampleProvider.getHeaders()); } - public String prepareExportRawDataSamples(TableExportCriteria<Sample> exportCriteria) + public String prepareExportRawDataSamples(TableExportCriteria<GenericTableRow> exportCriteria) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { return prepareExportEntities(exportCriteria); } - + public void copyRawData(long[] rawDataSampleIDs) throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException { diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java index 11cabcd2c10..bafc24a09dd 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java @@ -16,11 +16,28 @@ package ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.server; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IOriginalDataProvider; +import ch.systemsx.cisd.openbis.generic.client.web.server.util.DataTypeUtils; +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.GenericTableColumnHeader; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IntegerTableCell; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell; import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal; /** @@ -28,8 +45,138 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInterna * * @author Franz-Josef Elmer */ -class RawDataSampleProvider implements IOriginalDataProvider<Sample> +class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow> { + private static final class Column + { + private final List<ISerializableComparable> values = new ArrayList<ISerializableComparable>(); + private final GenericTableColumnHeader header; + + Column(GenericTableColumnHeader header) + { + this.header = header; + } + + GenericTableColumnHeader getHeader() + { + return header; + } + + List<ISerializableComparable> getValues() + { + return values; + } + + void add(int index, ISerializableComparable value) + { + while (values.size() < index) + { + values.add(null); + } + values.add(value); + } + + void addNumber(int index, Long number) + { + add(index, new IntegerTableCell(number)); + } + + void addString(int index, String string) + { + add(index, new StringTableCell(string)); + } + + void addDate(int index, Date date) + { + add(index, new DateTableCell(date)); + } + + void addPrefixToColumnHeaderCodes(String prefix) + { + header.setCode(prefix + header.getCode()); + } + + void setIndex(int index) + { + header.setIndex(index); + } + } + + private static final class PropertyColumns + { + private final Map<String, Column> columns = new TreeMap<String, Column>(); + + void add(int index, IEntityProperty property) + { + PropertyType propertyType = property.getPropertyType(); + DataTypeCode dataType = propertyType.getDataType().getCode(); + String key = propertyType.getCode(); + Column column = columns.get(key); + if (column == null) + { + GenericTableColumnHeader header = new GenericTableColumnHeader(); + header.setCode(key); + header.setIndex(columns.size()); + header.setTitle(propertyType.getLabel()); + header.setType(dataType); + column = new Column(header); + columns.put(key, column); + } + column.add(index, DataTypeUtils.convertTo(dataType, property.getValue())); + } + + Set<String> getColumnCodes() + { + return columns.keySet(); + } + + void addPrefixToColumnHeaderCodes(String prefix) + { + for (Map.Entry<String, Column> entry : columns.entrySet()) + { + entry.getValue().addPrefixToColumnHeaderCodes(prefix); + } + } + + int reindexColumns(int startIndex) + { + int index = startIndex; + for (Map.Entry<String, Column> entry : columns.entrySet()) + { + entry.getValue().setIndex(index++); + } + return index; + } + + Collection<? extends Column> getColumns() + { + return columns.values(); + } + } + + private static final class ColumnsWithIDColumn + { + private final List<Column> columns; + private final Column idColumn; + + public ColumnsWithIDColumn(List<Column> columns, Column idColumn) + { + this.columns = columns; + this.idColumn = idColumn; + } + + public List<Column> getColumns() + { + return columns; + } + + public Column getIdColumn() + { + return idColumn; + } + + } + private final IRawDataServiceInternal service; private final String sessionToken; @@ -39,10 +186,80 @@ class RawDataSampleProvider implements IOriginalDataProvider<Sample> this.sessionToken = sessionToken; } - public List<Sample> getOriginalData() throws UserFailureException + public List<GenericTableRow> getOriginalData() throws UserFailureException + { + ColumnsWithIDColumn columnsWithIDColumn = getColumns(); + List<Column> columns = columnsWithIDColumn.getColumns(); + int numberOfRows = columns.get(0).getValues().size(); + List<GenericTableRow> result = new ArrayList<GenericTableRow>(numberOfRows); + for(int i = 0; i < numberOfRows; i++) + { + ISerializableComparable[] row = new ISerializableComparable[columns.size()]; + for (int j = 0; j < row.length; j++) + { + Column column = columns.get(j); + List<ISerializableComparable> values = column.getValues(); + row[j] = i < values.size() ? values.get(i) : null; + } + result.add(new GenericTableRow(row)); + } + return result; + } + + public List<GenericTableColumnHeader> getHeaders() + { + List<Column> columns = getColumns().getColumns(); + List<GenericTableColumnHeader> headers = new ArrayList<GenericTableColumnHeader>(columns.size()); + for (Column column : columns) + { + headers.add(column.getHeader()); + } + return headers; + } + + private ColumnsWithIDColumn getColumns() { List<Sample> samples = service.listRawDataSamples(sessionToken); - return samples; + Column idColumn = new Column(GenericTableColumnHeader.untitledStringHeader(0, "ID")); + Column codeColumn = new Column(GenericTableColumnHeader.untitledStringHeader(0, "CODE")); + Column dateColumn = new Column(GenericTableColumnHeader.untitledStringHeader(1, "REGISTRATION_DATE")); + Column parentColumn = new Column(GenericTableColumnHeader.untitledStringHeader(2, "PARENT")); + List<Column> columns = new ArrayList<Column>(); + columns.add(codeColumn); + columns.add(dateColumn); + columns.add(parentColumn); + int fixedColumns = columns.size(); + PropertyColumns samplePropertyColumns = new PropertyColumns(); + PropertyColumns parentPropertyColumns = new PropertyColumns(); + for (int i = 0; i < samples.size(); i++) + { + Sample sample = samples.get(i); + idColumn.addNumber(i, sample.getId()); + codeColumn.addString(i, sample.getCode()); + dateColumn.addDate(i, sample.getRegistrationDate()); + parentColumn.addString(i, sample.getGeneratedFrom().getIdentifier()); + addPropertyTypes(samplePropertyColumns, i, sample); + addPropertyTypes(parentPropertyColumns, i, sample.getGeneratedFrom()); + } + int nextIndex = samplePropertyColumns.reindexColumns(fixedColumns); + parentPropertyColumns.reindexColumns(nextIndex); + HashSet<String> commonColumns = new HashSet<String>(samplePropertyColumns.getColumnCodes()); + commonColumns.retainAll(parentPropertyColumns.getColumnCodes()); + if (commonColumns.isEmpty() == false) + { + parentPropertyColumns.addPrefixToColumnHeaderCodes("BIO_"); + } + columns.addAll(samplePropertyColumns.getColumns()); + columns.addAll(parentPropertyColumns.getColumns()); + return new ColumnsWithIDColumn(columns, idColumn); + } + + private void addPropertyTypes(PropertyColumns columns, int index, Sample sample) + { + for (IEntityProperty property : sample.getProperties()) + { + columns.add(index, property); + } } } diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java index 9480b1c67f0..3f9cca5ce6a 100644 --- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java +++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java @@ -135,7 +135,9 @@ public class RawDataServiceInternal extends AbstractServer<IRawDataServiceIntern criteria.setSampleType(SampleTypeTranslator.translate(sampleTypePE, null)); criteria.setIncludeGroup(true); criteria.setGroupCode(GROUP_CODE); - return sampleLister.list(new ListOrSearchSampleCriteria(criteria)); + ListOrSearchSampleCriteria criteria2 = new ListOrSearchSampleCriteria(criteria); + criteria2.setEnrichDependentSamplesWithProperties(true); + return sampleLister.list(criteria2); } private String findDataStoreServer() -- GitLab