diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ActionContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ActionContext.java index 40738d32b374af1a7ea044d06582b84cf2826fe4..d574737e543a03ad83616f034b073a30fe48aaca 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ActionContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ActionContext.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; /** @@ -38,6 +39,8 @@ public class ActionContext private ExperimentType experimentTypeOrNull; + private Sample parent; + public ActionContext() { } @@ -49,6 +52,16 @@ public class ActionContext this.spaceCodeOrNull = projectOrNull.getSpace().getCode(); } + public Sample getParent() + { + return parent; + } + + public void setParent(Sample parent) + { + this.parent = parent; + } + public Experiment tryGetExperiment() { return experimentOrNull; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java index b0cfd181c80044302debf7482913578af0e78551..392f8bcb424254a55f2f6bad3de867713140f806 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java @@ -55,7 +55,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.propert import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.PropertyTypeRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleBatchRegisterUpdatePanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleBrowserGrid; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleRegistrationConfig; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleRegistrationTypeFilter; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleRegistrationPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleSearchHitGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleTypeGrid; @@ -415,7 +415,7 @@ public final class ComponentProvider } public final AbstractTabItemFactory getSampleRegistration(final ActionContext context, - final SampleRegistrationConfig config) + final SampleRegistrationTypeFilter filter) { AbstractTabItemFactory tab = new AbstractTabItemFactory() { @@ -423,7 +423,7 @@ public final class ComponentProvider public ITabItem create() { DatabaseModificationAwareComponent component = - SampleRegistrationPanel.create(viewContext, context, config); + SampleRegistrationPanel.create(viewContext, context, filter); return createRegistrationTab(getTabTitle(), component); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SampleRegistrationLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SampleRegistrationLocatorResolver.java index 17cf2b5b4c3bbe745c51a1e35901e34a98cad697..a56b8e97eca8d10ae26c873748da881cda734079 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SampleRegistrationLocatorResolver.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SampleRegistrationLocatorResolver.java @@ -21,7 +21,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ActionCont import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleRegistrationConfig; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleRegistrationTypeFilter; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; /** @@ -44,9 +44,9 @@ public class SampleRegistrationLocatorResolver extends AbstractViewLocatorResolv @Override public void resolve(final ViewLocator locator) throws UserFailureException { - SampleRegistrationConfig config = new SampleRegistrationConfig(); - config.setFilterPattern(locator.getParameters().get(PATTERN)); + String pattern = locator.getParameters().get(PATTERN); + SampleRegistrationTypeFilter filter = new SampleRegistrationTypeFilter(pattern, true); DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext) - .getSampleRegistration(new ActionContext(), config)); + .getSampleRegistration(new ActionContext(), filter)); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationConfig.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationConfig.java deleted file mode 100644 index ac053f2b56548e0fdf7589a2df5d880048ec19f4..0000000000000000000000000000000000000000 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationConfig.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.client.web.client.application.ui.sample; - -/** - * @author pkupczyk - */ -public class SampleRegistrationConfig -{ - - private String filterPattern; - - public String getFilterPattern() - { - return filterPattern; - } - - public void setFilterPattern(String filterPattern) - { - this.filterPattern = filterPattern; - } - -} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationPanel.java index 0d9df4f0285fc02d1ef005b408342fabb1034060..9f7b40ec4e61d3b622eb31a8ec1ebb79a534d6b4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationPanel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationPanel.java @@ -44,32 +44,29 @@ public final class SampleRegistrationPanel extends public static final DatabaseModificationAwareComponent create( final IViewContext<ICommonClientServiceAsync> viewContext, final ActionContext context, - final SampleRegistrationConfig config) + final SampleRegistrationTypeFilter filter) { - SampleRegistrationPanel panel = new SampleRegistrationPanel(viewContext, context, config); + SampleRegistrationPanel panel = new SampleRegistrationPanel(viewContext, context, filter); panel.setId("registration-panel"); return new DatabaseModificationAwareComponent(panel, panel); } private SampleRegistrationPanel(final IViewContext<ICommonClientServiceAsync> viewContext, - final ActionContext context, final SampleRegistrationConfig config) + final ActionContext context, final SampleRegistrationTypeFilter filter) { super(viewContext, EntityKind.SAMPLE, createSampleTypeSelectionWidget(viewContext, context, - config), context); + filter), context); } private static SampleTypeSelectionWidget createSampleTypeSelectionWidget( final IViewContext<ICommonClientServiceAsync> viewContext, final ActionContext context, - final SampleRegistrationConfig config) + final SampleRegistrationTypeFilter filter) { SampleTypeSelectionWidget widget = new SampleTypeSelectionWidget(viewContext, EntityRegistrationPanel.createId(EntityKind.SAMPLE), false, SampleTypeDisplayID.SAMPLE_REGISTRATION, context.tryGetSampleTypeCode()); - if (config != null) - { - widget.setFilterPattern(config.getFilterPattern()); - } + widget.setFilter(filter); return widget; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationTypeFilter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationTypeFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..5866fa37553ba84ada06d26012c4be8ed0bd361a --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleRegistrationTypeFilter.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.generic.client.web.client.application.ui.sample; + +import java.util.Iterator; +import java.util.List; + +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; + +/** + * @author pkupczyk + */ +public class SampleRegistrationTypeFilter +{ + + private String filterPattern; + + private boolean showParentsFlagIgnored; + + public SampleRegistrationTypeFilter(String pattern, boolean showParentsFlagIgnored) + { + filterPattern = pattern; + this.showParentsFlagIgnored = showParentsFlagIgnored; + + } + + public void filter(List<SampleType> sampleTypes) + { + for (Iterator<SampleType> iterator = sampleTypes.iterator(); iterator.hasNext();) + { + SampleType type = iterator.next(); + if (pass(type) == false) + { + iterator.remove(); + } + } + } + + private boolean pass(SampleType sampleType) + { + if (filterPattern != null && sampleType.getCode().matches(filterPattern) == false) + { + return false; + } + return showParentsFlagIgnored || sampleType.isShowParents(); + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeSelectionWidget.java index 3a07ed134bde23503e4790560153e0338ae04b32..e2de610801eca2d41f66581ee6ac0bd95a7f9a06 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeSelectionWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeSelectionWidget.java @@ -19,7 +19,6 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample 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 java.util.Iterator; import java.util.List; import com.extjs.gxt.ui.client.event.SelectionChangedEvent; @@ -58,7 +57,7 @@ public class SampleTypeSelectionWidget extends DropDownList<SampleTypeModel, Sam private final String initialCodeOrNull; - private String filterPattern; + private SampleRegistrationTypeFilter filter; public SampleTypeSelectionWidget(final IViewContext<?> viewContext, final String idSuffix, final boolean onlyListable, final boolean withAll, final boolean withTypeInFile, @@ -120,9 +119,9 @@ public class SampleTypeSelectionWidget extends DropDownList<SampleTypeModel, Sam return super.tryGetSelected(); } - public void setFilterPattern(String filterPattern) + public void setFilter(SampleRegistrationTypeFilter filter) { - this.filterPattern = filterPattern; + this.filter = filter; } @Override @@ -142,28 +141,20 @@ public class SampleTypeSelectionWidget extends DropDownList<SampleTypeModel, Sam public DatabaseModificationKind[] getRelevantModifications() { return new DatabaseModificationKind[] - { createOrDelete(ObjectKind.SAMPLE_TYPE), edit(ObjectKind.SAMPLE_TYPE), - createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), - edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT) }; + { createOrDelete(ObjectKind.SAMPLE_TYPE), edit(ObjectKind.SAMPLE_TYPE), + createOrDelete(ObjectKind.PROPERTY_TYPE_ASSIGNMENT), + edit(ObjectKind.PROPERTY_TYPE_ASSIGNMENT) }; } /** - * Filters sample types returned from server. By default it filters out all the types that do - * not match the filterPattern. If the filterPattern is null then it leaves the original list of - * types untouched. Behavior of this method can be overwritten in subclasses. + * Filters sample types returned from server. By default it filters out all the types that do not match the filterPattern. If the filterPattern is + * null then it leaves the original list of types untouched. Behavior of this method can be overwritten in subclasses. */ protected void filterTypes(List<SampleType> types) { - if (filterPattern != null) + if (filter != null) { - for (Iterator<SampleType> iterator = types.iterator(); iterator.hasNext();) - { - SampleType type = iterator.next(); - if (!type.getCode().matches(filterPattern)) - { - iterator.remove(); - } - } + filter.filter(types); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityLinkMessageElement.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityLinkMessageElement.java index a61a24f49fa41705b40036a96c9342c6e77c5a3a..940cbf70a9967f0058c5704de064da2e3002a19e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityLinkMessageElement.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/EntityLinkMessageElement.java @@ -54,13 +54,18 @@ public class EntityLinkMessageElement implements IMessageElement return 0; } + @Override + public Widget render(int maxLength) + { + return render(); + } + @Override public Widget render() { Anchor linkElement = new Anchor(label); linkElement.addClickHandler(new ClickHandler() { - @Override public void onClick(ClickEvent event) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/HtmlMessageElement.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/HtmlMessageElement.java index 8e2819dfed4268ab7b91118cfb0db6fea6311e17..58951a8dea3e08052a3d72dacf013780c9b2984c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/HtmlMessageElement.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/HtmlMessageElement.java @@ -16,18 +16,21 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget; -import com.extjs.gxt.ui.client.widget.Html; +import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; /** * Message element for a HTML. * * @author anttil - */public class HtmlMessageElement implements IMessageElement + */ +public class HtmlMessageElement implements IMessageElement { private final String content; + private static final String TRUNCATE_SUFFIX = "..."; + public HtmlMessageElement(String content) { this.content = content; @@ -43,7 +46,34 @@ import com.google.gwt.user.client.ui.Widget; @Override public Widget render() { - return new Html(content); + return createHTMLWidget(content); + } + + @Override + public Widget render(int maxLength) + { + return createHTMLWidget(truncate(content, maxLength)); + } + + private Widget createHTMLWidget(String truncatedContent) + { + return new HTML(truncatedContent); + } + + private String truncate(String text, int maxLength) + { + if (shouldTruncate(text, maxLength)) + { + return text.substring(0, maxLength) + TRUNCATE_SUFFIX; + } else + { + return text; + } + } + + private boolean shouldTruncate(String text, int maxLength) + { + return text != null && text.length() > maxLength; } public String getHtml() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/IInfoHandler.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/IInfoHandler.java index 16629ba9c7aa461ab5d7c1b3ccabfd73554bf1bd..f726a5c08cfee12e1c488b87bd9676a5ce9d5e10 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/IInfoHandler.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/IInfoHandler.java @@ -29,21 +29,21 @@ public interface IInfoHandler /** * Display given <var>text</var> as <i>error</i> text. */ - public abstract void displayError(final String text); + public void displayError(final String text); /** * Display given <var>text</var> as <i>info</i> text. */ - public abstract void displayInfo(final String text); + public void displayInfo(final String text); /** * Display given <var>text</var> as <i>info</i> text. */ - public abstract void displayInfo(final List<? extends IMessageElement> elements); + public void displayInfo(final List<? extends IMessageElement> elements); /** * Display given <var>text</var> as <i>progress</i> text. */ - public abstract void displayProgress(final String text); + public void displayProgress(final String text); } \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/IMessageElement.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/IMessageElement.java index 818d3e25d6966871c72adf9aac48f966796731ca..53fc32420ef82ed61e888054af6c729df02563a6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/IMessageElement.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/IMessageElement.java @@ -29,4 +29,5 @@ public interface IMessageElement public Widget render(); + public Widget render(int maxLength); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/InfoBox.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/InfoBox.java index 5431f670fdbf84332b11f2dc96c8bcb086f2227d..77b24d999955515fcd27b06cf9b62200fd69592c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/InfoBox.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/InfoBox.java @@ -21,11 +21,11 @@ import java.util.List; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.MessageBox; -import com.extjs.gxt.ui.client.widget.layout.HBoxLayout; -import com.extjs.gxt.ui.client.widget.layout.HBoxLayoutData; +import com.extjs.gxt.ui.client.widget.layout.FlowData; import com.extjs.gxt.ui.client.widget.layout.TableLayout; import com.google.gwt.dom.client.Style; import com.google.gwt.dom.client.Style.BorderStyle; +import com.google.gwt.dom.client.Style.Display; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -36,6 +36,7 @@ import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasHorizontalAlignment.HorizontalAlignmentConstant; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; import ch.systemsx.cisd.common.shared.basic.string.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; @@ -50,8 +51,6 @@ public final class InfoBox extends Composite implements IInfoHandler { private static final int TRUNCATE_THRESHOLD = 200; - private static final String TRUNCATE_SUFFIX = "..."; - private static final String WHITE = "#ffffff"; private Panel mainPanel; @@ -79,8 +78,7 @@ public final class InfoBox extends Composite implements IInfoHandler public InfoBox(final IMessageProvider messageProvider, final HorizontalAlignmentConstant alignment) { - HBoxLayout messageLayout = new HBoxLayout(); - message = new LayoutContainer(messageLayout); + message = new LayoutContainer(); showFullMessageLink = new Anchor(messageProvider.getMessage(Dict.INFO_BOX_SHOW_FULL_MESSAGE)); @@ -137,21 +135,56 @@ public final class InfoBox extends Composite implements IInfoHandler public void displayInfo(List<? extends IMessageElement> elements) { setInfoBoxStyle(InfoType.INFO); - + boolean nonHtmlMessageElements = containsNonHtmlMessageElements(elements); + int currentLength = 0; + StringBuilder builder = new StringBuilder(); for (IMessageElement element : elements) { - message.add(element.render(), new HBoxLayoutData(new Margins(0, 5, 0, 0))); + if (builder.length() > 0) + { + builder.append(' '); + } + builder.append(element); + Widget widget; + FlowData layoutData = new FlowData(new Margins(0, 5, 0, 0)); + if (nonHtmlMessageElements) + { + widget = element.render(); + widget.getElement().getStyle().setDisplay(Display.INLINE); + message.add(widget, layoutData); + } else if (TRUNCATE_THRESHOLD >= currentLength) + { + widget = element.render(TRUNCATE_THRESHOLD - currentLength); + widget.getElement().getStyle().setDisplay(Display.INLINE); + currentLength += element.length(); + message.add(widget, layoutData); + } } - message.layout(true); + fullMessage = builder.toString(); + showFullMessageLink.setVisible(nonHtmlMessageElements == false && TRUNCATE_THRESHOLD < currentLength); + message.layout(false); getElement().scrollIntoView(); } + private boolean containsNonHtmlMessageElements(List<? extends IMessageElement> elements) + { + for (IMessageElement element : elements) + { + if (element instanceof HtmlMessageElement == false) + { + return true; + } + } + return false; + } + private void setInfoBoxStyle(InfoType type) { Style mainPanelStyle = mainPanel.getElement().getStyle(); mainPanelStyle.setColor("#000000"); mainPanelStyle.setBackgroundColor(type.getBackgroundColor()); mainPanelStyle.setBorderColor(type.getBorderColor()); + messageType = type; } /** @@ -177,7 +210,7 @@ public final class InfoBox extends Composite implements IInfoHandler dots = "..."; } - addHtmlToMessage(truncate(text) + dots); + setHtmlMessage(text + dots); } }; progressTimer.run(); @@ -199,17 +232,8 @@ public final class InfoBox extends Composite implements IInfoHandler setInfoBoxStyle(type); fullMessage = text; - messageType = type; - - if (shouldTruncate(text)) - { - addHtmlToMessage(truncate(text)); - showFullMessageLink.setVisible(true); - } else - { - addHtmlToMessage(text); - showFullMessageLink.setVisible(false); - } + setHtmlMessage(text); + showFullMessageLink.setVisible(shouldTruncate(text)); if (fullMessageDialog != null) { @@ -220,10 +244,10 @@ public final class InfoBox extends Composite implements IInfoHandler } } - private void addHtmlToMessage(String messageElement) + private void setHtmlMessage(String messageElement) { message.removeAll(); - message.add(new HtmlMessageElement(messageElement).render()); + message.add(new HtmlMessageElement(messageElement).render(TRUNCATE_THRESHOLD)); message.layout(true); } @@ -263,15 +287,4 @@ public final class InfoBox extends Composite implements IInfoHandler return text != null && text.length() > TRUNCATE_THRESHOLD; } - private String truncate(String text) - { - if (shouldTruncate(text)) - { - return text.substring(0, TRUNCATE_THRESHOLD) + TRUNCATE_SUFFIX; - } else - { - return text; - } - } - } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SampleRegistrationLinkMessageElement.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SampleRegistrationLinkMessageElement.java new file mode 100644 index 0000000000000000000000000000000000000000..9fa52b7687e2986b1a29da47ed9a38e1535c3bba --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/SampleRegistrationLinkMessageElement.java @@ -0,0 +1,107 @@ +/* + * Copyright 2013 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.client.web.client.application.ui.widget; + +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.Widget; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ActionContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleRegistrationTypeFilter; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; + +/** + * A message element linking to sample registration tab. + * + * @author anttil + */ +public class SampleRegistrationLinkMessageElement implements IMessageElement +{ + private static final String LABEL = "Register child"; + + private final Sample sample; + + private final IViewContext<?> viewContext; + + public SampleRegistrationLinkMessageElement(IViewContext<?> viewContext, Sample sample) + { + this.viewContext = viewContext; + this.sample = sample; + } + + @Override + public int length() + { + return 0; + } + + @Override + public Widget render() + { + Anchor linkElement = new Anchor(LABEL); + linkElement.addClickHandler(new ClickHandler() + { + @Override + public void onClick(ClickEvent event) + { + ComponentProvider componentProvider = new ComponentProvider(viewContext.getCommonViewContext()); + ActionContext context = createActionContext(); + SampleRegistrationTypeFilter filter = new SampleRegistrationTypeFilter(null, false); + AbstractTabItemFactory sampleRegistration = componentProvider.getSampleRegistration(context, filter); + DispatcherHelper.dispatchNaviEvent(sampleRegistration); + } + }); + return linkElement; + } + + @Override + public Widget render(int maxLength) + { + return render(); + } + + @Override + public String toString() + { + return LABEL; + } + + private ActionContext createActionContext() + { + ActionContext context = new ActionContext(); + context.setParent(sample); + Experiment experiment = sample.getExperiment(); + if (experiment != null) + { + context.setExperiment(experiment); + } + Space space = sample.getSpace(); + if (space != null) + { + context.setSpaceCode(space.getCode()); + } + return context; + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/IGenericClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/IGenericClientService.java index 9c8af0f5a4d9195694111ea397c07133c7ba0e8e..096da450d60a3215c76959a73d66bfd7428613aa 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/IGenericClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/IGenericClientService.java @@ -28,6 +28,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetUpdateResult; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdates; @@ -117,7 +118,7 @@ public interface IGenericClientService extends IClientService /** * Registers a new experiment. */ - public void registerExperiment(final String attachmentsSessionKey, + public Experiment registerExperiment(final String attachmentsSessionKey, final String samplesSessionKey, final NewExperiment experiment) throws UserFailureException; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/IGenericClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/IGenericClientServiceAsync.java index 6c0c356f3e47e17cc61fb905d76efa5f602c9575..6df4773da99bfc4e277c7a493c2aba370e85bbb7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/IGenericClientServiceAsync.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/IGenericClientServiceAsync.java @@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetUpdateResult; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdates; @@ -99,7 +100,7 @@ public interface IGenericClientServiceAsync extends IClientServiceAsync * @see IGenericClientService#registerExperiment(String,String,NewExperiment) */ public void registerExperiment(final String attachmentsSessionKey, String samplesSessionKey, - NewExperiment newExp, AsyncCallback<Void> assyncCallback) throws UserFailureException; + NewExperiment newExp, AsyncCallback<Experiment> assyncCallback) throws UserFailureException; /** * @see IGenericClientService#registerMaterials(MaterialType, boolean, String, boolean, String) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationForm.java index 53ea81e8a5b48db615c4e5d800b89197fddc68a4..37b8aac362fe796716037b721dfcd8e1032d3bee 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationForm.java @@ -16,7 +16,7 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -26,7 +26,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs import ch.systemsx.cisd.openbis.generic.client.web.client.application.ActionContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.EntityLinkMessageElement; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.HtmlMessageElement; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IMessageElement; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; @@ -78,7 +82,7 @@ public final class GenericExperimentRegistrationForm extends } private final class RegisterExperimentCallback extends - AbstractRegistrationForm.AbstractRegistrationCallback<Void> + AbstractRegistrationForm.AbstractRegistrationCallback<Experiment> { RegisterExperimentCallback(final IViewContext<?> viewContext) @@ -87,9 +91,13 @@ public final class GenericExperimentRegistrationForm extends } @Override - protected List<HtmlMessageElement> createSuccessfullRegistrationInfo(Void result) + protected List<IMessageElement> createSuccessfullRegistrationInfo(Experiment experiment) { - return Arrays.asList(new HtmlMessageElement("Experiment <b>" + createExperimentIdentifier() + "</b> successfully registered")); + List<IMessageElement> message = new ArrayList<IMessageElement>(); + message.add(new HtmlMessageElement("Experiment")); + message.add(new EntityLinkMessageElement(viewContext, createExperimentIdentifier(), EntityKind.EXPERIMENT, experiment.getPermId())); + message.add(new HtmlMessageElement("successfully registered")); + return message; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java index 1d5689206fad06cb378aa5dc8dca6fc7983e6845..dc10e92d301d4370f12950716e6d0e8db378f7a5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sa import static ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField.wrapUnaware; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -109,6 +110,8 @@ abstract public class AbstractGenericSampleRegisterEditForm extends private Button saveUploadButton; + private Sample parentOrNull; + protected AbstractGenericSampleRegisterEditForm( IViewContext<IGenericClientServiceAsync> viewContext, Map<String, List<IManagedInputWidgetDescription>> inputWidgetDescriptions, @@ -144,6 +147,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends { this.initialExperimentIdentifierOrNull = tryGetExperimentIdentifier(context); this.initialGroupCodeOrNull = tryGetSpaceCode(context); + parentOrNull = context.getParent(); } private ExperimentIdentifier tryGetExperimentIdentifier(ActionContext context) @@ -323,6 +327,10 @@ abstract public class AbstractGenericSampleRegisterEditForm extends SampleTypeDisplayID.SAMPLE_REGISTRATION_PARENT_CHOOSER .withSuffix(getSampleTypeCode()), true); parentsArea = new ParentSamplesArea(viewContext, getId()); + if (parentOrNull != null) + { + parentsArea.setSamples(Arrays.asList(parentOrNull)); + } SampleChooserButton parentChooserButton = parentButton.getChooserButton(); parentChooserButton .addChosenEntityListener(new IChosenEntitiesListener<TableModelRowWithObject<Sample>>() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java index fee833025372960b063915ae6445f921e4b20aa8..e8ca6e3b81b0906f9b613a85ca0cdb14ccab495d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java @@ -28,6 +28,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceSe import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.EntityLinkMessageElement; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.HtmlMessageElement; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IMessageElement; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.SampleRegistrationLinkMessageElement; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; @@ -82,14 +83,15 @@ public final class GenericSampleRegistrationForm extends AbstractGenericSampleRe { result.add(new HtmlMessageElement("Shared sample")); result.add(new EntityLinkMessageElement(viewContext, code, EntityKind.SAMPLE, sample.getPermId())); - result.add(new HtmlMessageElement("successfully registered")); + result.add(new HtmlMessageElement("successfully registered.")); } else { result.add(new HtmlMessageElement("Sample")); result.add(new EntityLinkMessageElement(viewContext, code, EntityKind.SAMPLE, sample.getPermId())); result.add(new HtmlMessageElement("successfully registered in space <b>" - + selectedGroup.getCode() + "</b>")); + + selectedGroup.getCode() + "</b>.")); } + result.add(new SampleRegistrationLinkMessageElement(viewContext, sample)); return result; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java index 857dcad478ca0b1803817ba26b520fac8a67508e..9bc73d0126c38c3c447ad02d35f49ad9b9262480 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java @@ -49,6 +49,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; 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.EntityType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdates; @@ -308,7 +309,7 @@ public class GenericClientService extends AbstractClientService implements IGene } @Override - public void registerExperiment(final String attachmentsSessionKey, + public Experiment registerExperiment(final String attachmentsSessionKey, final String samplesSessionKey, final NewExperiment experiment) { final String sessionToken = getSessionToken(); @@ -326,14 +327,19 @@ public class GenericClientService extends AbstractClientService implements IGene experiment.setNewSamples(result.getSamples()); experiment.setSamples(result.getCodes()); } - new AttachmentRegistrationHelper() + class ExperimentRegistrationHelper extends AttachmentRegistrationHelper + { + Experiment exp; + + @Override + public void register(Collection<NewAttachment> attachments) { - @Override - public void register(Collection<NewAttachment> attachments) - { - genericServer.registerExperiment(sessionToken, experiment, attachments); - } - }.process(attachmentsSessionKey, getHttpSession(), experiment.getAttachments()); + exp = genericServer.registerExperiment(sessionToken, experiment, attachments); + } + } + ExperimentRegistrationHelper helper = new ExperimentRegistrationHelper(); + helper.process(attachmentsSessionKey, getHttpSession(), experiment.getAttachments()); + return helper.exp; } private BatchSamplesOperation parseSamples(final SampleType sampleType, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java index fadc4f9fbd53c9a504ecd9542310e8f84908b4c0..ab1fbe5222ed358c7077d34fd0daefd6899c0135 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java @@ -78,6 +78,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListOrSearchSampleCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialBatchUpdateResultMessage; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewBasicExperiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewDataSet; @@ -600,7 +601,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen @Override @RolesAllowed(RoleWithHierarchy.SPACE_USER) @Capability("WRITE_EXPERIMENT_SAMPLE") - public void registerExperiment(String sessionToken, + public Experiment registerExperiment(String sessionToken, @AuthorizationGuard(guardClass = NewExperimentPredicate.class) final NewExperiment newExperiment, final Collection<NewAttachment> attachments) throws UserFailureException @@ -653,6 +654,10 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen sampleBO.setExperiment(experiment); } } + + return ExperimentTranslator + .translate(experiment, session.getBaseIndexURL(), new HashSet<Metaproject>(), managedPropertyEvaluatorFactory); + } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerLogger.java index a30ab7b1c6257c9c03e202501d3d625c52cbca8e..ebcb4e75207540945b8cc6c6048aaea34aa080b8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerLogger.java @@ -31,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentWithContent; 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.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; @@ -104,12 +105,13 @@ final class GenericServerLogger extends AbstractServerLogger implements IGeneric } @Override - public void registerExperiment(String sessionToken, NewExperiment experiment, + public Experiment registerExperiment(String sessionToken, NewExperiment experiment, final Collection<NewAttachment> attachments) { logTracking(sessionToken, "register_experiment", "EXPERIMENT_TYPE(%s) EXPERIMENT(%S) ATTACHMENTS(%S)", experiment.getExperimentTypeCode(), experiment.getIdentifier(), attachments.size()); + return null; } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/shared/IGenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/shared/IGenericServer.java index 05b5500337f70ca21c77a0b9a3b0c8b5864dbf41..54371687b318ae78d81886b9c929c6af61521b91 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/shared/IGenericServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/shared/IGenericServer.java @@ -32,6 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentWithContent; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; @@ -154,7 +155,7 @@ public interface IGenericServer extends IServer @DatabaseCreateOrDeleteModification(value = { ObjectKind.EXPERIMENT, ObjectKind.SAMPLE }) @DatabaseUpdateModification(value = ObjectKind.SAMPLE) - public void registerExperiment(String sessionToken, final NewExperiment experiment, + public Experiment registerExperiment(String sessionToken, final NewExperiment experiment, final Collection<NewAttachment> attachments) throws UserFailureException; /**