From 7ca3b616c31649c4622e07ba119af06bcbe1b9f4 Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Mon, 14 Mar 2011 13:11:52 +0000 Subject: [PATCH] LMS-2102 Improvements to the upload client. SVN: 20319 --- .../client/api/gui/DataSetMetadataPanel.java | 15 ++++++ .../api/gui/DataSetPropertiesPanel.java | 14 ++++++ .../client/api/gui/DataSetUploadClient.java | 5 +- .../api/gui/DataSetUploadClientModel.java | 50 +++++++++++++++++++ .../api/gui/DataSetUploadTableModel.java | 36 +++++++------ .../gui/UploadStatusTableCellRenderer.java | 2 +- .../shared/api/v1/NewDataSetDTOBuilder.java | 4 ++ 7 files changed, 107 insertions(+), 19 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetMetadataPanel.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetMetadataPanel.java index 1e912111112..9c9c7a124bb 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetMetadataPanel.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetMetadataPanel.java @@ -29,6 +29,8 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.File; @@ -193,6 +195,19 @@ public class DataSetMetadataPanel extends JPanel } }); + ownerIdText.addFocusListener(new FocusListener() + { + + public void focusLost(FocusEvent e) + { + setOwnerId(ownerIdText.getText()); + } + + public void focusGained(FocusEvent e) + { + // Do nothing + } + }); experimentButton.addActionListener(new ActionListener() { diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetPropertiesPanel.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetPropertiesPanel.java index 719d6455224..9604843ef6d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetPropertiesPanel.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetPropertiesPanel.java @@ -26,6 +26,8 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -111,6 +113,18 @@ public class DataSetPropertiesPanel extends JPanel } }); + textField.addFocusListener(new FocusListener() + { + public void focusLost(FocusEvent e) + { + setPropertyValue(propertyType, textField.getText()); + } + + public void focusGained(FocusEvent e) + { + // Do nothing + } + }); addFormField(col, row, label, textField); formFields.put(propertyType.getCode(), textField); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClient.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClient.java index 143a753a6d4..02a72f39110 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClient.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClient.java @@ -46,7 +46,6 @@ import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; -import ch.systemsx.cisd.common.exceptions.NotImplementedException; import ch.systemsx.cisd.common.utilities.ITimeProvider; /** @@ -82,7 +81,7 @@ public class DataSetUploadClient extends AbstractSwingGUI throws ch.systemsx.cisd.cifex.shared.basic.UserFailureException, EnvironmentFailureException { - setLookAndFeelToMetal(); + setLookAndFeelToNative(); try { @@ -205,7 +204,7 @@ public class DataSetUploadClient extends AbstractSwingGUI { public void actionPerformed(ActionEvent e) { - throw new NotImplementedException(); + clientModel.queueUploadOfDataSet(clientModel.getNewDataSetInfos()); } }); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClientModel.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClientModel.java index 08d678ccc41..55d3c9ecbb7 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClientModel.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadClientModel.java @@ -20,10 +20,15 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import ch.systemsx.cisd.base.namedthread.NamingThreadPoolExecutor; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.io.TransmissionSpeedCalculator; import ch.systemsx.cisd.common.utilities.ITimeProvider; +import ch.systemsx.cisd.openbis.dss.client.api.gui.DataSetUploadClientModel.NewDataSetInfo.Status; import ch.systemsx.cisd.openbis.dss.client.api.v1.IDssComponent; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; @@ -38,6 +43,8 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.PropertyTypeGroup; */ public class DataSetUploadClientModel { + private static ExecutorService executor = new NamingThreadPoolExecutor("Data Set Upload", 1, 1, + 0, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()).daemonize(); private final IDssComponent dssComponent; @@ -175,6 +182,12 @@ public class DataSetUploadClientModel { return status; } + + public boolean canBeQueued() + { + return status != Status.UPLOADING && status != Status.STALLED + && status != Status.COMPLETED_UPLOAD; + } } /** @@ -191,11 +204,24 @@ public class DataSetUploadClientModel public NewDataSetInfo addNewDataSetInfo() { NewDataSetDTOBuilder newDataSetBuilder = new NewDataSetDTOBuilder(); + String defaultDataSetTypeCode = getDefaultDataSetTypeCode(); + newDataSetBuilder.getDataSetMetadata().setDataSetTypeOrNull(defaultDataSetTypeCode); NewDataSetInfo newDataSetInfo = new NewDataSetInfo(newDataSetBuilder, timeProvider); newDataSetInfos.add(newDataSetInfo); return newDataSetInfo; } + private String getDefaultDataSetTypeCode() + { + if (dataSetTypes.size() > 0) + { + return getDataSetTypes().get(0).getCode(); + } else + { + return null; + } + } + /** * Remove a data set info. */ @@ -285,6 +311,30 @@ public class DataSetUploadClientModel return newDataSetDTO; } + /** + * Start a data set upload in a separate thread. Callers need to ensure that queuing makes + * sense. + */ + public void queueUploadOfDataSet(NewDataSetInfo newDataSetInfo) + { + if (false == newDataSetInfo.canBeQueued()) + { + return; + } + newDataSetInfo.setStatus(Status.QUEUED_FOR_UPLOAD); + DataSetUploadOperation op = new DataSetUploadOperation(tableModel, this, newDataSetInfo); + executor.submit(op); + } + + public void queueUploadOfDataSet(List<NewDataSetInfo> newDataSetInfosToQueue) + { + for (NewDataSetInfo newDataSetInfo : newDataSetInfosToQueue) + { + queueUploadOfDataSet(newDataSetInfo); + } + + } + private DataSetType tryDataSetType(String dataSetTypeCode) { if (null == dataSetTypeCode) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadTableModel.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadTableModel.java index ff6d18ccd73..af1f13f8593 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadTableModel.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadTableModel.java @@ -22,9 +22,6 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.TimeUnit; import javax.swing.JFrame; import javax.swing.JTable; @@ -33,9 +30,7 @@ import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; -import ch.systemsx.cisd.base.namedthread.NamingThreadPoolExecutor; import ch.systemsx.cisd.openbis.dss.client.api.gui.DataSetUploadClientModel.NewDataSetInfo; -import ch.systemsx.cisd.openbis.dss.client.api.gui.DataSetUploadClientModel.NewDataSetInfo.Status; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO.DataSetOwner; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTOBuilder; @@ -62,9 +57,6 @@ public class DataSetUploadTableModel extends AbstractTableModel static final int UPLOAD_STATUS_COLUMN = 4; - private static ExecutorService executor = new NamingThreadPoolExecutor("Data Set Upload", 1, 1, - 0, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()).daemonize(); - private final JFrame mainWindow; private final DataSetUploadClientModel clientModel; @@ -301,9 +293,7 @@ public class DataSetUploadTableModel extends AbstractTableModel // Only start uploading if the file hasn't been upload yet NewDataSetInfo.Status status = newDataSetInfo.getStatus(); - if ((status != NewDataSetInfo.Status.TO_UPLOAD) - && (status != NewDataSetInfo.Status.COMPLETED_UPLOAD) - && (status != NewDataSetInfo.Status.FAILED)) + if ((status != NewDataSetInfo.Status.TO_UPLOAD) && (status != NewDataSetInfo.Status.FAILED)) { return; } @@ -353,12 +343,30 @@ public class DataSetUploadTableModel extends AbstractTableModel { NewDataSetInfo newlyCreated = clientModel.addNewDataSetInfo(); syncNewDataSetInfos(); + ArrayList<Integer> selectedIndices = new ArrayList<Integer>(); + selectedIndices.add(clientModel.getNewDataSetInfos().size() - 1); + setSelectedIndices(selectedIndices); selectNewDataSetInfo(newlyCreated); } public void removeSelectedDataSet() { - assert false : "Not yet implemented"; + if (selectedRow < 0) + { + return; + } + if (selectedRow >= newDataSetInfos.size()) + { + return; + } + NewDataSetInfo dataSetInfoToRemove = newDataSetInfos.get(selectedRow); + + int newSelectedRow = Math.max(0, selectedRow - 1); + ArrayList<Integer> selectedIndices = new ArrayList<Integer>(); + selectedIndices.add(newSelectedRow); + setSelectedIndices(selectedIndices); + clientModel.removeNewDataSetInfo(dataSetInfoToRemove); + syncNewDataSetInfos(); } /** @@ -390,9 +398,7 @@ public class DataSetUploadTableModel extends AbstractTableModel */ private void queueUploadOfDataSet(NewDataSetInfo newDataSetInfo) { - newDataSetInfo.setStatus(Status.QUEUED_FOR_UPLOAD); - DataSetUploadOperation op = new DataSetUploadOperation(this, clientModel, newDataSetInfo); - executor.submit(op); + clientModel.queueUploadOfDataSet(newDataSetInfo); } public NewDataSetInfo getSelectedNewDataSet() diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/UploadStatusTableCellRenderer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/UploadStatusTableCellRenderer.java index 3d7725a8d68..019cc94cdc1 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/UploadStatusTableCellRenderer.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/UploadStatusTableCellRenderer.java @@ -117,7 +117,7 @@ public class UploadStatusTableCellRenderer implements TableCellRenderer case STALLED: panel = progressPanel; progressBar.setValue(0); - progressLabel.setText("progress..."); + progressLabel.setText("uploading..."); break; case COMPLETED_UPLOAD: panel = completedPanel; diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTOBuilder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTOBuilder.java index d2d4c1ee22d..07b14e6524d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTOBuilder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/NewDataSetDTOBuilder.java @@ -110,6 +110,10 @@ public class NewDataSetDTOBuilder try { ArrayList<FileInfoDssDTO> fileInfos = new ArrayList<FileInfoDssDTO>(); + if (null == file) + { + return fileInfos; + } if (false == file.exists()) { return fileInfos; -- GitLab