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 b43ee752c19af938df67ce278d77e7d0237c4602..1e9121111122e399aef49e4040360dc7020340c7 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 @@ -247,6 +247,7 @@ public class DataSetMetadataPanel extends JPanel newDataSetInfo.getNewDataSetBuilder().getDataSetMetadata() .setDataSetTypeOrNull(dataSetType); + clientModel.notifyObserversOfChanges(newDataSetInfo); } protected void updateFileLabel() 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 77aae121d2198cd9e6d68bd94f0ee211a7170c01..719d6455224a1fc5c7c325b634dc7da554f1c474 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 @@ -143,7 +143,13 @@ public class DataSetPropertiesPanel extends JPanel NewDataSetMetadataDTO metadata = builder.getDataSetMetadata(); Map<String, String> props = metadata.getProperties(); HashMap<String, String> newProps = new HashMap<String, String>(props); - newProps.put(propertyType.getCode(), text); + if (null == text || text.trim().length() < 1) + { + newProps.remove(propertyType.getCode()); + } else + { + newProps.put(propertyType.getCode(), text); + } metadata.setProperties(newProps); clientModel.notifyObserversOfChanges(newDataSetInfo); 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 f80f79623ca79930555778ed7f054510615ea79b..143a753a6d43e8b8d1704fdfb422fcef6ae3ca52 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,6 +46,7 @@ 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; /** @@ -204,6 +205,7 @@ public class DataSetUploadClient extends AbstractSwingGUI { public void actionPerformed(ActionEvent e) { + throw new NotImplementedException(); } }); @@ -268,6 +270,9 @@ public class DataSetUploadClient extends AbstractSwingGUI fileTable.getColumnModel().getColumn(DataSetUploadTableModel.DATA_SET_OWNER_COLUMN); column.setPreferredWidth(320); + column = fileTable.getColumnModel().getColumn(DataSetUploadTableModel.DATA_SET_TYPE_COLUMN); + column.setPreferredWidth(150); + column = fileTable.getColumnModel().getColumn( DataSetUploadTableModel.DATA_SET_METADATA_COLUMN); 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 d76c576508fa15f2ef9ae8ff68b81c31695900ed..08d678ccc417a821ab8ea055422e02645101014b 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 @@ -18,15 +18,20 @@ package ch.systemsx.cisd.openbis.dss.client.api.gui; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; +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.v1.IDssComponent; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTOBuilder; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.PropertyType; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.PropertyTypeGroup; /** * @author Chandrasekhar Ramakrishnan @@ -212,16 +217,16 @@ public class DataSetUploadClientModel return dataSetTypes; } - public int getIndexOfDataSetType(String dataSetType) + public int getIndexOfDataSetType(String dataSetTypeCode) { - if (null == dataSetType) + if (null == dataSetTypeCode) { return 0; } for (int i = 0; i < dataSetTypes.size(); ++i) { - if (dataSetTypes.get(i).getCode().equals(dataSetType)) + if (dataSetTypes.get(i).getCode().equals(dataSetTypeCode)) { return i; } @@ -239,10 +244,63 @@ public class DataSetUploadClientModel this.tableModel = tableModel; } - // Broadcasting Notifications + /** + * Broadcast changes to observers. + */ public void notifyObserversOfChanges(NewDataSetInfo changedInfo) { tableModel.selectedRowDataChanged(); } + /** + * Clean the <var>newDataSetDTO</var> object. This means removing any properties that are not + * valid for the data set type. + */ + public NewDataSetDTO cleanNewDataSetDTO(NewDataSetDTO newDataSetDTO) + { + DataSetType dataSetType = tryDataSetType(newDataSetDTO.tryDataSetType()); + if (null == dataSetType) + { + throw new UserFailureException("The new data set has no type"); + } + + HashSet<String> allPropertyCodes = new HashSet<String>(); + for (PropertyTypeGroup group : dataSetType.getPropertyTypeGroups()) + { + for (PropertyType propertyType : group.getPropertyTypes()) + { + allPropertyCodes.add(propertyType.getCode()); + } + } + + HashSet<String> keys = new HashSet<String>(newDataSetDTO.getProperties().keySet()); + for (String propertyTypeCode : keys) + { + if (false == allPropertyCodes.contains(propertyTypeCode)) + { + newDataSetDTO.getProperties().remove(propertyTypeCode); + } + } + + return newDataSetDTO; + } + + private DataSetType tryDataSetType(String dataSetTypeCode) + { + if (null == dataSetTypeCode) + { + return null; + } + + for (int i = 0; i < dataSetTypes.size(); ++i) + { + DataSetType type = dataSetTypes.get(i); + if (type.getCode().equals(dataSetTypeCode)) + { + return type; + } + } + return null; + } + } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadOperation.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadOperation.java index f9124f3428bd3a1147b72d68eb960aad4c1b2713..86efef9294aabb735c7d8606e636a7663bf71e72 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadOperation.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/gui/DataSetUploadOperation.java @@ -21,6 +21,7 @@ import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.FileExistsException; 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; /** * DataSetUploadOperation represents a request to upload a data set to openBIS/dss. The upload @@ -53,8 +54,10 @@ final class DataSetUploadOperation implements Runnable { newDataSetInfo.setStatus(Status.UPLOADING); tableModel.fireChanged(newDataSetInfo, Status.UPLOADING); - clientModel.getDssComponent().putDataSet( - newDataSetInfo.getNewDataSetBuilder().asNewDataSetDTO(), + NewDataSetDTO cleanDto = + clientModel.cleanNewDataSetDTO(newDataSetInfo.getNewDataSetBuilder() + .asNewDataSetDTO()); + clientModel.getDssComponent().putDataSet(cleanDto, newDataSetInfo.getNewDataSetBuilder().getFile()); } newDataSetInfo.setStatus(Status.COMPLETED_UPLOAD); 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 344cb26d8e49d7333bbb0a5ed41b0b66881c7408..ff6d18ccd7364a831ccc535204ea831e26c5ecbb 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 @@ -36,6 +36,8 @@ 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; /** * The DataSetUploadClientModel manages the list of data sets to register, initiates uploads (which @@ -52,11 +54,13 @@ public class DataSetUploadTableModel extends AbstractTableModel // Constants for column order static final int DATA_SET_OWNER_COLUMN = 0; - static final int DATA_SET_METADATA_COLUMN = 1; + static final int DATA_SET_TYPE_COLUMN = 1; - static final int DATA_SET_PATH_COLUMN = 2; + static final int DATA_SET_METADATA_COLUMN = 2; - static final int UPLOAD_STATUS_COLUMN = 3; + static final int DATA_SET_PATH_COLUMN = 3; + + 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(); @@ -138,6 +142,15 @@ public class DataSetUploadTableModel extends AbstractTableModel String identifier2 = info2.getNewDataSetBuilder().getDataSetOwnerIdentifier(); result = identifier1.compareTo(identifier2); break; + case DATA_SET_TYPE_COLUMN: + String type1 = + info1.getNewDataSetBuilder().getDataSetMetadata().tryDataSetType(); + String type2 = + info2.getNewDataSetBuilder().getDataSetMetadata().tryDataSetType(); + type1 = null == type1 ? "" : type1; + type2 = null == type2 ? "" : type2; + result = type1.compareTo(type2); + break; case DATA_SET_PATH_COLUMN: File file1 = info1.getNewDataSetBuilder().getFile(); File file2 = info2.getNewDataSetBuilder().getFile(); @@ -194,7 +207,7 @@ public class DataSetUploadTableModel extends AbstractTableModel public int getColumnCount() { - return 4; + return 5; } public int getRowCount() @@ -215,6 +228,9 @@ public class DataSetUploadTableModel extends AbstractTableModel case DATA_SET_OWNER_COLUMN: name += " Owner"; break; + case DATA_SET_TYPE_COLUMN: + name += " Type"; + break; case DATA_SET_METADATA_COLUMN: name += " Metadata"; break; @@ -231,20 +247,33 @@ public class DataSetUploadTableModel extends AbstractTableModel public Object getValueAt(int rowIndex, int columnIndex) { NewDataSetInfo newDataSetInfo = newDataSetInfos.get(rowIndex); + NewDataSetDTOBuilder builder = newDataSetInfo.getNewDataSetBuilder(); switch (columnIndex) { case DATA_SET_OWNER_COLUMN: - return newDataSetInfo.getNewDataSetBuilder().getDataSetOwner(); + DataSetOwner owner = builder.getDataSetOwner(); + return owner.getType() + ":" + untouchedStringOrEmpty(owner.getIdentifier()); + case DATA_SET_TYPE_COLUMN: + return untouchedStringOrEmpty(builder.getDataSetMetadata().tryDataSetType()); case DATA_SET_METADATA_COLUMN: - return newDataSetInfo.getNewDataSetBuilder().getDataSetMetadata(); + return builder.getDataSetMetadata().getProperties(); case DATA_SET_PATH_COLUMN: - return newDataSetInfo.getNewDataSetBuilder().getFile(); + File file = builder.getFile(); + return (file == null) ? "" : file.getName(); case UPLOAD_STATUS_COLUMN: return newDataSetInfo; } return null; } + /** + * If aString is null, make it a string + */ + private String untouchedStringOrEmpty(String aString) + { + return (aString == null) ? "" : aString; + } + @Override public Class<?> getColumnClass(int c) { 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 065b65b82411ad8d32c172b029fba414d0274bb3..3d7725a8d688fe24d55f43d3dd603bde31cea89c 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 @@ -53,7 +53,7 @@ public class UploadStatusTableCellRenderer implements TableCellRenderer private final JPanel retryPanel = new JPanel(); - private final JLabel completedLabel = new JLabel("Finished"); + private final JLabel completedLabel = new JLabel("Registered"); private final JPanel completedPanel = new JPanel();