From 7865c69adfcd2441ae88db54d40e98f310aa1d45 Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Thu, 28 Jun 2012 09:55:46 +0000 Subject: [PATCH] SP-171 / BIS-90 : UI support for link data sets SVN: 25918 --- .../client/web/client/application/Dict.java | 7 ++ .../client/dto/ExternalDataGridColumnIDs.java | 6 + .../AbstractExternalDataProvider.java | 29 +++++ .../generic/server/business/bo/DataBO.java | 13 --- .../server/business/bo/DataSetTable.java | 15 --- .../generic/shared/basic/BasicConstant.java | 12 ++ .../shared/basic/URLMethodWithParameters.java | 5 +- .../shared/basic/dto/DssLinkTableCell.java | 2 +- .../shared/basic/dto/LinkDataSetUrl.java | 58 ++++++++++ .../shared/basic/dto/LinkTableCell.java | 104 ++++++++++++++++++ .../dto/TypedTableGridColumnDefinition.java | 4 + .../shared/translator/DataSetTranslator.java | 3 + .../dataset/DataSetPropertiesPanel.java | 17 ++- .../dataset/GenericDataSetEditForm.java | 90 ++++++++++++--- .../dataset/GenericDataSetViewer.java | 74 ++++++++----- .../dataset/LinkDataSetAnchor.java | 78 +++++++++++++ .../dataset/LinkDataViewSection.java | 62 +++++++++++ .../cisd/openbis/public/common-dictionary.js | 5 + .../cisd/openbis/public/css/openbis.css | 8 ++ .../basic/dto/DssLinkTableCellTest.java | 3 +- 20 files changed, 517 insertions(+), 78 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkDataSetUrl.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkTableCell.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataSetAnchor.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataViewSection.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java index 0facda34480..16fc8cf5dc0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java @@ -667,6 +667,11 @@ public abstract class Dict public static final String DATASET_NOT_AVAILABLE_MSG = "dataset_not_available_msg"; + public static final String LINKED_DATA_SET = "linked_data_set"; + + public static final String LINKED_DATA_SET_URL_NOT_AVAILABLE_MSG = + "linked_data_set_url_not_available"; + // // Sample Registration // @@ -782,6 +787,8 @@ public abstract class Dict // Data Set Edition // + public static final String EXTERNAL_CODE = "external_code"; + public static final String PARENTS = "parents"; public static final String PARENTS_EMPTY = "parents_empty"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java index 84745625c01..5206beb6940 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java @@ -23,6 +23,12 @@ public class ExternalDataGridColumnIDs { public static final String CODE = "CODE"; + public static final String EXTERNAL_CODE = "EXTERNAL_CODE"; + + public static final String EXTERNAL_DMS_CODE = "EXTERNAL_DMS_CODE"; + + public static final String EXTERNAL_DMS_LABEL = "EXTERNAL_DMS_LABEL"; + public static final String DATA_SET_TYPE = "DATA_SET_TYPE"; public static final String CONTAINER_DATASET = "CONTAINER_DATASET"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java index 1881fe29dcf..7b102894603 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java @@ -24,8 +24,11 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDat import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.DATA_STORE_CODE; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.EXPERIMENT; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.EXPERIMENT_TYPE; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.EXTERNAL_CODE; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.EXTERNAL_DATA_EXPERIMENT_IDENTIFIER; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.EXTERNAL_DATA_SAMPLE_IDENTIFIER; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.EXTERNAL_DMS_CODE; +import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.EXTERNAL_DMS_LABEL; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.FILE_FORMAT_TYPE; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.IS_COMPLETE; import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.IS_DELETED; @@ -57,7 +60,11 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSet; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSetUrl; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel; @@ -81,6 +88,7 @@ public abstract class AbstractExternalDataProvider extends List<ExternalData> dataSets = getDataSets(); TypedTableModelBuilder<ExternalData> builder = new TypedTableModelBuilder<ExternalData>(); builder.addColumn(CODE).withDefaultWidth(150); + builder.addColumn(EXTERNAL_CODE).withDefaultWidth(150).hideByDefault(); builder.addColumn(DATA_SET_TYPE).withDefaultWidth(200); builder.addColumn(CONTAINER_DATASET).withDefaultWidth(150).hideByDefault(); builder.addColumn(ORDER_IN_CONTAINER).withDefaultWidth(100).hideByDefault(); @@ -106,12 +114,33 @@ public abstract class AbstractExternalDataProvider extends builder.addColumn(PRODUCTION_DATE).withDefaultWidth(200).hideByDefault(); builder.addColumn(DATA_PRODUCER_CODE).hideByDefault(); builder.addColumn(DATA_STORE_CODE).hideByDefault(); + builder.addColumn(EXTERNAL_DMS_CODE).withDefaultWidth(150).hideByDefault(); + builder.addColumn(EXTERNAL_DMS_LABEL).withDefaultWidth(150).hideByDefault(); builder.addColumn(PERM_ID).hideByDefault(); builder.addColumn(SHOW_DETAILS_LINK).hideByDefault(); for (ExternalData dataSet : dataSets) { builder.addRow(dataSet); builder.column(CODE).addEntityLink(dataSet, dataSet.getCode()); + + LinkDataSet linkDataSet = dataSet.tryGetAsLinkDataSet(); + if (linkDataSet != null) + { + LinkTableCell externalCodeCell = new LinkTableCell(); + externalCodeCell.setText(linkDataSet.getExternalCode()); + externalCodeCell.setUrl(new LinkDataSetUrl(linkDataSet).toString()); + externalCodeCell.setOpenInNewWindow(true); + builder.column(EXTERNAL_CODE).addValue(externalCodeCell); + + ExternalDataManagementSystem externalDms = + linkDataSet.getExternalDataManagementSystem(); + if (externalDms != null) + { + builder.column(EXTERNAL_DMS_CODE).addString(externalDms.getCode()); + builder.column(EXTERNAL_DMS_LABEL).addString(externalDms.getLabel()); + } + } + builder.column(DATA_SET_TYPE).addString(dataSet.getDataSetType().getCode()); ContainerDataSet container = dataSet.tryGetContainer(); if (container != null) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java index 565239c837a..d510ade54a3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java @@ -558,19 +558,6 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO checkSameSpace(data.getContainer(), data); } - if (data.isLinkData()) - { - LinkDataPE linkData = data.tryAsLinkData(); - linkData.setExternalCode(updates.getExternalCode()); - - ExternalDataManagementSystemPE pe = - getExternalDataManagementSystemDAO() - .tryToFindExternalDataManagementSystemByCode( - updates.getExternalDataManagementSystemCode()); - - linkData.setExternalDataManagementSystem(pe); - } - setParents(data, asList(updates.getModifiedParentDatasetCodesOrNull())); updateComponents(updates.getModifiedContainedDatasetCodesOrNull()); checkSameSpace(data, data.getContainedDataSets()); // even if components were not changed diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java index 0a6a667a750..31b75536c77 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java @@ -66,9 +66,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; -import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE; -import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; @@ -966,19 +964,6 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements checkSameSpace(dataSet.getContainer(), dataSet); } - if (dataSet.isLinkData()) - { - LinkDataPE linkData = dataSet.tryAsLinkData(); - linkData.setExternalCode(dataSetUpdates.getExternalCode()); - - String externalSystemCode = dataSetUpdates.getExternalDataManagementSystemCode(); - ExternalDataManagementSystemPE externalSystem = - getExternalDataManagementSystemDAO() - .tryToFindExternalDataManagementSystemByCode(externalSystemCode); - - linkData.setExternalDataManagementSystem(externalSystem); - } - checkSameSpace(dataSet, dataSet.getContainedDataSets()); // even if components were not // changed diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java index 2e14c707553..99a2e7ab106 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java @@ -58,6 +58,18 @@ public class BasicConstant public static final String VOCABULARY_URL_TEMPLATE_TERM_PATTERN = VOCABULARY_URL_TEMPLATE_TERM_PART.replaceAll("\\$", "\\\\\\$"); + /** + * Template part of an external DMS URL that is replaced with an external data set code. + */ + public static final String EXTERNAL_DMS_URL_TEMPLATE_CODE_PART = "$code$"; + + /** + * Pattern for template part of an external DMS URL that is replaced with an external data set + * code. + */ + public static final String EXTERNAL_DMS_URL_TEMPLATE_CODE_PATTERN = + EXTERNAL_DMS_URL_TEMPLATE_CODE_PART.replaceAll("\\$", "\\\\\\$"); + /** * Canonical date format pattern used to save dates in DB. Holds date, time and time zone * information. It is less readable then the one used in GUI ( diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/URLMethodWithParameters.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/URLMethodWithParameters.java index b6aacaa3ea6..5c5f36073b5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/URLMethodWithParameters.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/URLMethodWithParameters.java @@ -132,7 +132,7 @@ public class URLMethodWithParameters implements IsSerializable } /** Creates HTML which displays a link. */ - public static String createEmbededLinkHtml(String linkText, String linkUrl) + public static String createEmbededLinkHtml(String linkText, String linkUrl, String linkAlign) { String linkStart = "", linkEnd = ""; if (linkUrl != null) @@ -141,6 +141,7 @@ public class URLMethodWithParameters implements IsSerializable linkEnd = "</a>"; } - return "<div align='center'>" + linkStart + linkText + linkEnd + "</div>"; + String align = linkAlign != null ? "align='" + linkAlign + "'" : ""; + return "<div " + align + ">" + linkStart + linkText + linkEnd + "</div>"; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DssLinkTableCell.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DssLinkTableCell.java index 0bf754c485d..23acb1d1a17 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DssLinkTableCell.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DssLinkTableCell.java @@ -89,7 +89,7 @@ public class DssLinkTableCell implements ISerializableComparable public String getHtmlString(String sessionId) { return URLMethodWithParameters.createEmbededLinkHtml(linkText, - getLinkUrl(linkModel, sessionId)); + getLinkUrl(linkModel, sessionId), "center"); } /** diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkDataSetUrl.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkDataSetUrl.java new file mode 100644 index 00000000000..7357f1a5690 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkDataSetUrl.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.basic.dto; + +import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; +import ch.systemsx.cisd.openbis.generic.shared.basic.BasicURLEncoder; + +/** + * @author pkupczyk + */ +public class LinkDataSetUrl +{ + + private LinkDataSet dataset; + + public LinkDataSetUrl(LinkDataSet dataset) + { + this.dataset = dataset; + } + + protected String maybeUnescape(String str) + { + return str; + } + + @Override + public String toString() + { + if (dataset.getExternalCode() != null && dataset.getExternalDataManagementSystem() != null + && dataset.getExternalDataManagementSystem().getUrlTemplate() != null) + { + String externalCode = maybeUnescape(dataset.getExternalCode()); + String urlTemplate = + maybeUnescape(dataset.getExternalDataManagementSystem().getUrlTemplate()); + + return urlTemplate.replaceAll(BasicConstant.EXTERNAL_DMS_URL_TEMPLATE_CODE_PATTERN, + BasicURLEncoder.encode(externalCode)); + } else + { + return null; + } + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkTableCell.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkTableCell.java new file mode 100644 index 00000000000..7d64ea7af82 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkTableCell.java @@ -0,0 +1,104 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.basic.dto; + +import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters; + +/** + * @author pkupczyk + */ +public class LinkTableCell implements ISerializableComparable +{ + private static final long serialVersionUID = ServiceVersionHolder.VERSION; + + private String text; + + private String url; + + private boolean openInNewWindow; + + public LinkTableCell() + { + } + + public void setText(String text) + { + this.text = text; + } + + public String getText() + { + return text; + } + + public void setUrl(String url) + { + this.url = url; + } + + public String getUrl() + { + return url; + } + + public void setOpenInNewWindow(boolean openInNewWindow) + { + this.openInNewWindow = openInNewWindow; + } + + public boolean isOpenInNewWindow() + { + return openInNewWindow; + } + + public String getHtmlString() + { + return URLMethodWithParameters.createEmbededLinkHtml(text, url, null); + } + + @Override + public int compareTo(ISerializableComparable o) + { + return toString().compareTo(String.valueOf(o)); + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + return true; + + if (!(obj instanceof LinkTableCell)) + return false; + + LinkTableCell other = (LinkTableCell) obj; + return other.toString().equals(toString()); + } + + @Override + public int hashCode() + { + return toString().hashCode(); + } + + @Override + public String toString() + { + return url != null ? url : ""; + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java index 9e1f1353b71..bba96e8f7ae 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java @@ -91,6 +91,10 @@ public class TypedTableGridColumnDefinition<T extends Serializable> implements { return ((DssLinkTableCell) cell).getHtmlString(sessionID); } + if (cell instanceof LinkTableCell) + { + return ((LinkTableCell) cell).getHtmlString(); + } return cell.toString(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java index 6073949fc6a..6255c7f16dd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java @@ -310,6 +310,9 @@ public class DataSetTranslator } else if (dataPE.isExternalData()) { result = new DataSet(); + } else if (dataPE.isLinkData()) + { + result = new LinkDataSet(); } else { assert dataPE.isPlaceholder() == true; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java index 2f1fa8041c0..64827ab52c5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java @@ -83,8 +83,23 @@ public class DataSetPropertiesPanel extends ContentPanel properties.put(messageProvider.getMessage(Dict.DATA_SET), new ExternalHyperlink(dataset.getPermId(), dataset.getPermlink())); - properties.put(messageProvider.getMessage(Dict.DATA_SET_TYPE), datasetType); + if (dataset.isLinkData()) + { + LinkDataSetAnchor anchor = + LinkDataSetAnchor.tryCreateWithExternalCodeAsText(dataset.tryGetAsLinkDataSet()); + + if (anchor != null) + { + properties.put(messageProvider.getMessage(Dict.LINKED_DATA_SET), anchor); + } else + { + properties.put(messageProvider.getMessage(Dict.LINKED_DATA_SET), dataset + .tryGetAsLinkDataSet().getExternalCode()); + } + } + + properties.put(messageProvider.getMessage(Dict.DATA_SET_TYPE), datasetType); properties.put(messageProvider.getMessage(Dict.SOURCE_TYPE), dataset.getSourceType()); properties.put(messageProvider.getMessage(Dict.DATA_PRODUCER_CODE), diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetEditForm.java index 96be00796f0..1dd565dfab7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetEditForm.java @@ -40,11 +40,13 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.Da import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.FileFormatTypeSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.FileFormatTypeSelectionWidget.FileFormatTypeModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CheckBoxField; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CodeField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField.ExperimentChooserFieldAdaptor; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.SampleChooserField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.SampleChooserField.SampleChooserFieldAdaptor; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetUpdates; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; @@ -58,6 +60,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.AbstractGenericEntityRegistrationForm; @@ -212,10 +215,7 @@ public final class GenericDataSetEditForm extends fields.add(wrapUnaware(sampleChooser.getField())); fields.add(wrapUnaware(experimentChooser.getField())); fields.add(wrapUnaware(parentsArea)); - for (DatabaseModificationAwareField<?> field : builder.getEntitySpecificFormFields()) - { - fields.add(field); - } + builder.addEntitySpecificFormFields(fields); return fields; } @@ -318,10 +318,17 @@ public final class GenericDataSetEditForm extends private void setOriginalData(ExternalData data) { this.originalDataSet = data; - this.builder = - data.isContainer() ? new ContainerDataSetEditFormBuilder( - data.tryGetAsContainerDataSet()) : new ExternalDataEditFormBuilder( - data.tryGetAsDataSet()); + + if (data.isContainer()) + { + this.builder = new ContainerDataSetEditFormBuilder(data.tryGetAsContainerDataSet()); + } else if (data.isLinkData()) + { + this.builder = new LinkDataSetEditFormBuilder(data.tryGetAsLinkDataSet()); + } else + { + this.builder = new ExternalDataEditFormBuilder(data.tryGetAsDataSet()); + } } @Override @@ -389,7 +396,7 @@ public final class GenericDataSetEditForm extends void fillUpdates(DataSetUpdates result); - List<DatabaseModificationAwareField<?>> getEntitySpecificFormFields(); + void addEntitySpecificFormFields(List<DatabaseModificationAwareField<?>> fields); void createEntitySpecificFormFields(); @@ -434,12 +441,9 @@ public final class GenericDataSetEditForm extends } @Override - public List<DatabaseModificationAwareField<?>> getEntitySpecificFormFields() + public void addEntitySpecificFormFields(List<DatabaseModificationAwareField<?>> fields) { - ArrayList<DatabaseModificationAwareField<?>> fields = - new ArrayList<DatabaseModificationAwareField<?>>(); fields.add(wrapUnaware(fileFormatTypeSelectionWidget)); - return fields; } @Override @@ -496,12 +500,9 @@ public final class GenericDataSetEditForm extends } @Override - public List<DatabaseModificationAwareField<?>> getEntitySpecificFormFields() + public void addEntitySpecificFormFields(List<DatabaseModificationAwareField<?>> fields) { - ArrayList<DatabaseModificationAwareField<?>> fields = - new ArrayList<DatabaseModificationAwareField<?>>(); fields.add(wrapUnaware(containedArea)); - return fields; } @Override @@ -547,4 +548,59 @@ public final class GenericDataSetEditForm extends } + /** {@link IDataSetEditorBuilder} implementation for {@link LinkDataSet}-s */ + private class LinkDataSetEditFormBuilder implements IDataSetEditorBuilder + { + private LinkDataSet dataSet; + + private CodeField externalCodeField; + + public LinkDataSetEditFormBuilder(LinkDataSet dataSet) + { + this.dataSet = dataSet; + } + + @Override + public void createEntitySpecificFormFields() + { + externalCodeField = + new CodeField(viewContext, viewContext.getMessage(Dict.EXTERNAL_CODE)); + externalCodeField.setId(getId() + "_externalCode"); + externalCodeField.setReadOnly(true); + externalCodeField.setHideTrigger(true); + externalCodeField.disable(); + } + + @Override + public void updateOriginalValues(DataSetUpdateResult result) + { + // nothing to do + } + + @Override + public void fillUpdates(DataSetUpdates result) + { + // nothing to do + } + + @Override + public void addEntitySpecificFormFields(List<DatabaseModificationAwareField<?>> fields) + { + fields.add(0, wrapUnaware(externalCodeField)); + } + + @Override + public void initializeFormFields() + { + externalCodeField.setValue(StringEscapeUtils.unescapeHtml(dataSet.getExternalCode())); + } + + @Override + public void loadDataInBackground() + { + // nothing to do + } + + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java index 1aa16f4e9d4..da2fe5b6673 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java @@ -84,6 +84,8 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl protected final TechId datasetId; + private boolean toolbarInitialized; + public static DatabaseModificationAwareComponent create( final IViewContext<IGenericClientServiceAsync> localViewContext, final IIdAndCodeHolder identifiable) @@ -108,7 +110,6 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl setLayout(new BorderLayout()); this.datasetId = TechId.create(identifiable); this.processButtonHolder = new ProcessButtonHolder(); - extendToolBar(); } private IViewContext<?> getViewContext() @@ -148,33 +149,45 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl super.fillBreadcrumbWidgets(widgets); } - private void extendToolBar() + private void extendToolBar(final ExternalData result) { - Button exportButton = new Button(viewContext.getMessage(Dict.BUTTON_UPLOAD_DATASETS)); - exportButton.addListener(Events.Select, new Listener<BaseEvent>() - { - @Override - public void handleEvent(BaseEvent be) + if (toolbarInitialized) + { + return; + } else + { + toolbarInitialized = true; + } + + if (result.isLinkData() == false) + { + Button exportButton = new Button(viewContext.getMessage(Dict.BUTTON_UPLOAD_DATASETS)); + exportButton.addListener(Events.Select, new Listener<BaseEvent>() { - TableModelRowWithObject<ExternalData> row = - new TableModelRowWithObject<ExternalData>(originalData, Arrays - .<ISerializableComparable> asList()); - @SuppressWarnings("unchecked") - final List<TableModelRowWithObject<ExternalData>> dataSets = - Arrays.<TableModelRowWithObject<ExternalData>> asList(row); - IDelegatedActionWithResult<SelectedAndDisplayedItems> action = - new IDelegatedActionWithResult<SelectedAndDisplayedItems>() - { - @Override - public SelectedAndDisplayedItems execute() + @Override + public void handleEvent(BaseEvent be) + { + TableModelRowWithObject<ExternalData> row = + new TableModelRowWithObject<ExternalData>(originalData, Arrays + .<ISerializableComparable> asList()); + @SuppressWarnings("unchecked") + final List<TableModelRowWithObject<ExternalData>> dataSets = + Arrays.<TableModelRowWithObject<ExternalData>> asList(row); + IDelegatedActionWithResult<SelectedAndDisplayedItems> action = + new IDelegatedActionWithResult<SelectedAndDisplayedItems>() { - return new SelectedAndDisplayedItems(dataSets, null, 1); - } - }; - new DataSetUploadConfirmationDialog(dataSets, action, 1, viewContext).show(); - } - }); - addToolBarButton(exportButton); + @Override + public SelectedAndDisplayedItems execute() + { + return new SelectedAndDisplayedItems(dataSets, null, 1); + } + }; + new DataSetUploadConfirmationDialog(dataSets, action, 1, viewContext) + .show(); + } + }); + addToolBarButton(exportButton); + } if (getViewContext().isSimpleOrEmbeddedMode()) { return; @@ -253,8 +266,13 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl container.addSection(panel); } // data - final TabContent dataSection = new DataViewSection(context, dataset); - container.addSection(dataSection); + if (dataset.isLinkData()) + { + container.addSection(new LinkDataViewSection(context, dataset.tryGetAsLinkDataSet())); + } else + { + container.addSection(new DataViewSection(context, dataset)); + } if (dataset.isContainer()) { @@ -306,6 +324,7 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl @Override protected final void process(final ExternalData result) { + genericDataSetViewer.extendToolBar(result); genericDataSetViewer.updateOriginalData(result); DataSet dataSet = result.tryGetAsDataSet(); if (dataSet != null && dataSet.getStatus().isAvailable() == false) @@ -322,7 +341,6 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl genericDataSetViewer.add(rightPanel, createRightBorderLayoutData()); genericDataSetViewer.layout(); - } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataSetAnchor.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataSetAnchor.java new file mode 100644 index 00000000000..bb020a8f31b --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataSetAnchor.java @@ -0,0 +1,78 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset; + +import com.google.gwt.user.client.ui.Anchor; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSet; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSetUrl; + +/** + * @author pkupczyk + */ +public class LinkDataSetAnchor extends Anchor +{ + + private LinkDataSetAnchor(String text, String url) + { + super(text, url); + setTarget("_blank"); + } + + public static final LinkDataSetAnchor tryCreateWithExternalCodeAsText(LinkDataSet dataset) + { + String url = new UnescapingLinkDataSetUrl(dataset).toString(); + + if (url != null) + { + return new LinkDataSetAnchor(StringEscapeUtils.unescapeHtml(dataset.getExternalCode()), + url); + } else + { + return null; + } + } + + public static final LinkDataSetAnchor tryCreateWithUrlAsText(LinkDataSet dataset) + { + String url = new UnescapingLinkDataSetUrl(dataset).toString(); + + if (url != null) + { + return new LinkDataSetAnchor(url, url); + } else + { + return null; + } + } + + private static class UnescapingLinkDataSetUrl extends LinkDataSetUrl + { + public UnescapingLinkDataSetUrl(LinkDataSet dataset) + { + super(dataset); + } + + @Override + protected String maybeUnescape(String str) + { + return StringEscapeUtils.unescapeHtml(str); + } + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataViewSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataViewSection.java new file mode 100644 index 00000000000..1a360f7f0ee --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataViewSection.java @@ -0,0 +1,62 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset; + +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Panel; +import com.google.gwt.user.client.ui.SimplePanel; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.TabContent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSet; + +/** + * @author pkupczyk + */ +public class LinkDataViewSection extends TabContent +{ + private final LinkDataSet dataset; + + public LinkDataViewSection(final IViewContext<?> viewContext, final LinkDataSet dataset) + { + super(viewContext.getMessage(Dict.DATA_VIEW), viewContext, dataset); + this.dataset = dataset; + setIds(DisplayTypeIDGenerator.DATA_SET_DATA_SECTION); + } + + @Override + protected void showContent() + { + Panel content = new SimplePanel(); + content.setStyleName("linkDataViewContent"); + + LinkDataSetAnchor anchor = LinkDataSetAnchor.tryCreateWithUrlAsText(dataset); + + if (anchor != null) + { + content.add(anchor); + } else + { + content.add(new Label(viewContext + .getMessage(Dict.LINKED_DATA_SET_URL_NOT_AVAILABLE_MSG))); + } + + add(content); + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js index e721802e263..79c67b3f7fe 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js @@ -732,6 +732,9 @@ var common = { confirm_dataset_upload_comment_field: "Comment", confirm_dataset_upload_user_field: "CIFEX user", confirm_dataset_upload_password_field: "CIFEX password", + external_code: "External Code", + external_dms_code: "External DMS Code", + external_dms_label: "External DMS Label", // // Data Set Viewer @@ -740,6 +743,8 @@ var common = { processing_info_title: "Processing", processing_info_msg: "'{0}' has been scheduled successfully. Email will be send to you when it is finished.", dataset_not_available_msg: "Data Set {0} is {1}. You can not perform any operation using its data.", + linked_data_set: "Linked Data Set", + linked_data_set_url_not_available: "A link to an external DMS is not available.", // // Material Browser diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css b/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css index 60d5c0fe340..a3797d82eab 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css @@ -297,3 +297,11 @@ body,div,td,.default-text { margin: 10px; margin-bottom: 0px; } + +/******************** + * Link data set + ********************/ + +.linkDataViewContent { + margin: 10px; +} diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DssLinkTableCellTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DssLinkTableCellTest.java index 1fc188e0f20..695db56ce65 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DssLinkTableCellTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DssLinkTableCellTest.java @@ -33,7 +33,8 @@ public class DssLinkTableCellTest extends AssertJUnit urlMethod.addParameter(LinkModel.SESSION_ID_PARAMETER_NAME, "sessionToken"); String basicHtml = - URLMethodWithParameters.createEmbededLinkHtml("linkText", urlMethod.toString()); + URLMethodWithParameters.createEmbededLinkHtml("linkText", urlMethod.toString(), + "center"); assertEquals(basicHtml, cellHtml); } } -- GitLab