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