From 99a8fce1e6d2b1aa88538a666e7bb0fec3344908 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 25 Jan 2010 13:11:39 +0000 Subject: [PATCH] SE-191 link on MS_INJECTION sample code, copy data set action SVN: 14426 --- .../client/application/RawDataSampleGrid.java | 132 +++++++++++++++++- .../web/server/RawDataSampleProvider.java | 52 ++----- 2 files changed, 141 insertions(+), 43 deletions(-) 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 491b89c32a7..22364c4a78c 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,18 +16,38 @@ 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.List; + +import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.button.Button; 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.ui.grid.GenericTableBrowserGrid; +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.IDisposableComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataConfirmationDialog; 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.IEntityInformationHolder; +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.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SerializableComparableIDDecorator; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientServiceAsync; /** @@ -46,14 +66,89 @@ class RawDataSampleGrid extends GenericTableBrowserGrid return grid.asDisposableWithoutToolbar(); } - private final IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext; + private static final class CopyConfirmationDialog extends + AbstractDataConfirmationDialog<List<GenericTableRow>> + { + private final IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext; + + private final List<GenericTableRow> samples; + + private CopyConfirmationDialog( + IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext, + List<GenericTableRow> samples, String title) + { + super(specificViewContext, samples, title); + this.specificViewContext = specificViewContext; + this.samples = samples; + } + + @Override + protected String createMessage() + { + String list = "["; + String delim = ""; + for (GenericTableRow sample : samples) + { + list += delim + sample.tryToGetValue(0); + 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++) + { + GenericTableRow row = samples.get(i); + ISerializableComparable c = row.tryToGetValue(0); + if (c instanceof SerializableComparableIDDecorator == false) + { + throw new IllegalArgumentException("Missing id: " + c); + } + rawDataSampleIDs[i] = ((SerializableComparableIDDecorator) c).getID(); + } + specificViewContext.getService().copyRawData(rawDataSampleIDs, + new VoidAsyncCallback<Void>(specificViewContext)); + } + + @Override + protected void extendForm() + { + } + } + + private final IViewContext<IPhosphoNetXClientServiceAsync> specificViewContext; RawDataSampleGrid(IViewContext<IPhosphoNetXClientServiceAsync> viewContext) { super(viewContext.getCommonViewContext(), BROWSER_ID, GRID_ID, true, true, PhosphoNetXDisplayTypeIDGenerator.RAW_DATA_SAMPLE_BROWSER_GRID); specificViewContext = viewContext; + registerLinkClickListenerFor("CODE", new ICellListener<GenericTableRow>() + { + public void handle(GenericTableRow rowItem) + { + showEntityViewer(rowItem, false); + } + }); allowMultipleSelection(); + addEntityOperationsLabel(); + Button uploadButton = + new Button(viewContext.getMessage(COPY_DATA_SETS_BUTTON_LABEL), + new AbstractCreateDialogListener() + { + @Override + protected Dialog createDialog(List<GenericTableRow> samples, + IBrowserGridActionInvoker invoker) + { + return new CopyConfirmationDialog(specificViewContext, samples, + specificViewContext.getMessage(COPY_DATA_SETS_TITLE)); + } + }); + addButton(uploadButton); } @@ -73,7 +168,40 @@ class RawDataSampleGrid extends GenericTableBrowserGrid public DatabaseModificationKind[] getRelevantModifications() { - return new DatabaseModificationKind[] {}; + 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(final GenericTableRow entity, boolean editMode) + { + showEntityInformationHolderViewer(new IEntityInformationHolder() + { + + public String getCode() + { + return entity.tryToGetValue(0).toString(); + } + + public Long getId() + { + return ((SerializableComparableIDDecorator) entity.tryToGetValue(0)).getID(); + } + + public BasicEntityType getEntityType() + { + BasicEntityType type = new BasicEntityType(); + type.setCode("MS_INJECTION"); + return type; + } + + public EntityKind getEntityKind() + { + return EntityKind.SAMPLE; + } + }, editMode); + } } 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 bafc24a09dd..add9a918af4 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 @@ -34,9 +34,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableColumnHeade 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.SerializableComparableIDDecorator; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell; import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal; @@ -76,14 +76,9 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow> values.add(value); } - void addNumber(int index, Long number) + void addStringWithID(int index, String string, Long id) { - add(index, new IntegerTableCell(number)); - } - - void addString(int index, String string) - { - add(index, new StringTableCell(string)); + add(index, new SerializableComparableIDDecorator(new StringTableCell(string), id)); } void addDate(int index, Date date) @@ -154,29 +149,6 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow> } } - 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; @@ -188,8 +160,7 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow> public List<GenericTableRow> getOriginalData() throws UserFailureException { - ColumnsWithIDColumn columnsWithIDColumn = getColumns(); - List<Column> columns = columnsWithIDColumn.getColumns(); + List<Column> columns = getColumns(); int numberOfRows = columns.get(0).getValues().size(); List<GenericTableRow> result = new ArrayList<GenericTableRow>(numberOfRows); for(int i = 0; i < numberOfRows; i++) @@ -208,7 +179,7 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow> public List<GenericTableColumnHeader> getHeaders() { - List<Column> columns = getColumns().getColumns(); + List<Column> columns = getColumns(); List<GenericTableColumnHeader> headers = new ArrayList<GenericTableColumnHeader>(columns.size()); for (Column column : columns) { @@ -217,11 +188,10 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow> return headers; } - private ColumnsWithIDColumn getColumns() + private List<Column> getColumns() { List<Sample> samples = service.listRawDataSamples(sessionToken); - Column idColumn = new Column(GenericTableColumnHeader.untitledStringHeader(0, "ID")); - Column codeColumn = new Column(GenericTableColumnHeader.untitledStringHeader(0, "CODE")); + Column codeColumn = new Column(GenericTableColumnHeader.untitledLinkableStringHeader(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>(); @@ -234,10 +204,10 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow> for (int i = 0; i < samples.size(); i++) { Sample sample = samples.get(i); - idColumn.addNumber(i, sample.getId()); - codeColumn.addString(i, sample.getCode()); + codeColumn.addStringWithID(i, sample.getCode(), sample.getId()); dateColumn.addDate(i, sample.getRegistrationDate()); - parentColumn.addString(i, sample.getGeneratedFrom().getIdentifier()); + Sample parent = sample.getGeneratedFrom(); + parentColumn.addStringWithID(i, parent.getIdentifier(), parent.getId()); addPropertyTypes(samplePropertyColumns, i, sample); addPropertyTypes(parentPropertyColumns, i, sample.getGeneratedFrom()); } @@ -251,7 +221,7 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow> } columns.addAll(samplePropertyColumns.getColumns()); columns.addAll(parentPropertyColumns.getColumns()); - return new ColumnsWithIDColumn(columns, idColumn); + return columns; } private void addPropertyTypes(PropertyColumns columns, int index, Sample sample) -- GitLab