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 e2f8ab3d6ef52de97670acc099b3147730b70986..71920841472296870af405a3adf402e33117bb8f 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 @@ -603,7 +603,7 @@ public abstract class Dict public static final String CONFIRM_ROLE_REMOVAL_TITLE = "confirm_role_removal_title"; // - // Experiment Registration + // Experiment Registration/Update // public static final String EXPERIMENT_REGISTRATION = "experiment_registration"; @@ -613,6 +613,8 @@ public abstract class Dict public static final String SAMPLES_LIST = "samples_list"; public static final String EXPERIMENT_IMPORT = "experiment_import"; + + public static final String EXPERIMENT_BATCH_UPDATE = "experiment_batch_update"; // // Data Set Edition 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 321ccad3d9a240515e3073a4181e7e16ba91ffea..d1f76d659809ce7bf5f71d926f0b7e4cc854058e 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 @@ -513,6 +513,46 @@ public final class ComponentProvider }; } + public final AbstractTabItemFactory getExperimentBatchUpdate() + { + return new AbstractTabItemFactory() + { + @Override + public ITabItem create() + { + DatabaseModificationAwareComponent component = + ExperimentBatchRegistrationPanel.create(viewContext, true); + return createRegistrationTab(getTabTitle(), component); + } + + @Override + public String getId() + { + return ExperimentBatchRegistrationPanel.getId(true); + } + + @Override + public HelpPageIdentifier getHelpPageIdentifier() + { + return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT, + HelpPageAction.BATCH_UPDATE); + } + + @Override + public String getTabTitle() + { + return getMessage(Dict.EXPERIMENT_BATCH_UPDATE); + } + + @Override + public String tryGetLink() + { + return null; + } + + }; + } + public final AbstractTabItemFactory getExperimentRegistration() { return getExperimentRegistration(new ActionContext()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java index f5b70219aab2c18526fbabf554bff51e55e1ad35..328612bb57a0c587bcad9c7457d43b60b94e33a2 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java @@ -60,7 +60,8 @@ public class TopMenu extends LayoutContainer DATA_SET_MENU_SEARCH, DATA_SET_MENU_TYPES, DATA_SET_MENU_FILE_FORMATS, DATA_SET_MENU_UPLOAD, DATA_SET_MENU_MASS_UPDATE, - EXPERIMENT_MENU_BROWSE, EXPERIMENT_MENU_NEW, EXPERIMENT_MENU_IMPORT, EXPERIMENT_MENU_TYPES, + EXPERIMENT_MENU_BROWSE, EXPERIMENT_MENU_NEW, EXPERIMENT_MENU_IMPORT, + EXPERIMENT_MENU_MASS_UPDATE, EXPERIMENT_MENU_TYPES, MATERIAL_MENU_BROWSE, MATERIAL_MENU_IMPORT, MATERIAL_MENU_MASS_UPDATE, MATERIAL_MENU_TYPES, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/experiment/ExperimentMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/experiment/ExperimentMenu.java index 7be9709bef91df5fd84bd7250f9ca6d223fa9002..3cb307838d5ff6778da9c19f011d284bac4ea2e4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/experiment/ExperimentMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/experiment/ExperimentMenu.java @@ -43,6 +43,8 @@ public class ExperimentMenu extends TopMenuItem componentProvider.getExperimentRegistration())); submenu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_IMPORT, messageProvider, componentProvider.getExperimentBatchRegistration())); + submenu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_MASS_UPDATE, messageProvider, + componentProvider.getExperimentBatchUpdate())); submenu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_TYPES, messageProvider, componentProvider.getExperimentTypeBrowser())); setMenu(submenu); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java index a0b051b6b7c5405531b6172e6411f34284dbfb87..6c1fd910443a4b3284b8d147c0c6c5bfa0c38e48 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java @@ -1601,6 +1601,10 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt break; case EXPERIMENT: columns.add(NewSample.IDENTIFIER_COLUMN); + if (operationKind == BatchOperationKind.UPDATE) + { + columns.add("project"); + } addProperties(columns, ((ExperimentTypePE) entityType).getExperimentTypePropertyTypes()); break; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java index 1c34c0a57a526543e01e03e379682a08d1d71118..fcd6cd75f10c2431e53274cf486879b0782b37f7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java @@ -53,6 +53,7 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dat import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.GenericDataSetEditForm; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.GenericDataSetViewer; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentBatchRegistrationForm; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentBatchUpdateForm; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentEditForm; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentRegistrationForm; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment.GenericExperimentViewer; @@ -413,6 +414,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener return new GenericExperimentBatchRegistrationForm(getViewContext(), type); } + @Override + public Widget createBatchUpdateForEntityType(ExperimentType entityType) + { + return new GenericExperimentBatchUpdateForm(getViewContext(), entityType); + } + @Override public AbstractTabItemFactory createEntityEditor(final IIdAndCodeHolder identifiable) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractExperimentBatchRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractExperimentBatchRegistrationForm.java index 1546858fdd23c0cabd59cd9b885046fba1d97673..5cfeaac41915e64eacdf1eef22b3135daeb05de8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractExperimentBatchRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/AbstractExperimentBatchRegistrationForm.java @@ -18,20 +18,34 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.ex import static ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField.wrapUnaware; +import java.util.List; + import com.extjs.gxt.ui.client.Style.Scroll; +import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.form.Field; import com.extjs.gxt.ui.client.widget.form.FileUploadField; -import com.extjs.gxt.ui.client.widget.form.FormPanel; +import com.extjs.gxt.ui.client.widget.form.LabelField; import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.Event; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.generic.client.web.client.application.FormPanelListener; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.UrlParamsHelper; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.file.BasicFileFieldManager; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WindowUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.BatchRegistrationResult; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchOperationKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync; /** * The <i>abstract</i> experiment batch registration panel. @@ -50,10 +64,20 @@ public abstract class AbstractExperimentBatchRegistrationForm extends AbstractRe private final String sessionKey; - public AbstractExperimentBatchRegistrationForm(final IMessageProvider messageProvider, + protected final IViewContext<IGenericClientServiceAsync> viewContext; + + protected final ExperimentType type; + + private final BatchOperationKind batchOperationKind; + + public AbstractExperimentBatchRegistrationForm(IViewContext<IGenericClientServiceAsync> viewContext, + ExperimentType type, BatchOperationKind batchOperationKind, String sessionKey) { - super(messageProvider, createId(sessionKey)); + super(viewContext.getCommonViewContext(), createId(sessionKey)); + this.viewContext = viewContext; + this.type = type; + this.batchOperationKind = batchOperationKind; this.sessionKey = sessionKey; fileFieldsManager = new BasicFileFieldManager(sessionKey, DEFAULT_NUMBER_OF_FILES, FIELD_LABEL_TEMPLATE); @@ -67,12 +91,6 @@ public abstract class AbstractExperimentBatchRegistrationForm extends AbstractRe */ abstract protected void save(); - /** - * Adds additional fields to the form panel. File upload field will be added automatically after - * specific fields. - */ - protected abstract void addSpecificFormFields(FormPanel form); - /** * Returns session key defined for given form. */ @@ -107,9 +125,26 @@ public abstract class AbstractExperimentBatchRegistrationForm extends AbstractRe return GenericConstants.ID_PREFIX + sessionKey; } + private LabelField createTemplateField() + { + LabelField result = + new LabelField(LinkRenderer.renderAsLink(viewContext + .getMessage(Dict.FILE_TEMPLATE_LABEL))); + result.sinkEvents(Event.ONCLICK); + result.addListener(Events.OnClick, new Listener<BaseEvent>() + { + public void handleEvent(BaseEvent be) + { + WindowUtils.openWindow(UrlParamsHelper.createTemplateURL(EntityKind.EXPERIMENT, + type, false, false, batchOperationKind)); + } + }); + return result; + } + private final void addFormFields() { - addSpecificFormFields(formPanel); + formPanel.add(createTemplateField()); for (FileUploadField attachmentField : fileFieldsManager.getFields()) { formPanel.add(wrapUnaware((Field<?>) attachmentField).get()); @@ -154,4 +189,28 @@ public abstract class AbstractExperimentBatchRegistrationForm extends AbstractRe }); } + final class RegisterExperimentsCallback extends + AbstractRegistrationForm.AbstractRegistrationCallback<List<BatchRegistrationResult>> + { + RegisterExperimentsCallback(final IViewContext<IGenericClientServiceAsync> viewContext) + { + super(viewContext); + } + + @Override + protected String createSuccessfullRegistrationInfo( + final List<BatchRegistrationResult> result) + { + final StringBuilder builder = new StringBuilder(); + for (final BatchRegistrationResult batchRegistrationResult : result) + { + builder.append("<b>" + batchRegistrationResult.getFileName() + "</b>: "); + builder.append(batchRegistrationResult.getMessage()); + builder.append("<br />"); + } + return builder.toString(); + } + + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentBatchRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentBatchRegistrationForm.java index 55731b7be4703d8d3d295d11ec1936854c79c86f..3f4db895e77d8fd9366ef782821199894214f4a8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentBatchRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentBatchRegistrationForm.java @@ -16,24 +16,8 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment; -import java.util.List; - -import com.extjs.gxt.ui.client.event.BaseEvent; -import com.extjs.gxt.ui.client.event.Events; -import com.extjs.gxt.ui.client.event.Listener; -import com.extjs.gxt.ui.client.widget.form.FormPanel; -import com.extjs.gxt.ui.client.widget.form.LabelField; -import com.google.gwt.user.client.Event; - -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.UrlParamsHelper; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WindowUtils; -import ch.systemsx.cisd.openbis.generic.client.web.client.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchOperationKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync; @@ -45,74 +29,20 @@ import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientS public final class GenericExperimentBatchRegistrationForm extends AbstractExperimentBatchRegistrationForm { - private static final String SESSION_KEY = "experiment-batch-registration"; - private final ExperimentType experimentType; - - private final IViewContext<IGenericClientServiceAsync> viewContext; - public GenericExperimentBatchRegistrationForm( final IViewContext<IGenericClientServiceAsync> viewContext, - final ExperimentType sampleType) + final ExperimentType type) { - super(viewContext.getCommonViewContext(), SESSION_KEY); - this.viewContext = viewContext; - this.experimentType = sampleType; + super(viewContext, type, BatchOperationKind.REGISTRATION, SESSION_KEY); } @Override protected void save() { - viewContext.getService().registerExperiments(experimentType, getSessionKey(), + viewContext.getService().registerExperiments(type, getSessionKey(), new RegisterExperimentsCallback(viewContext)); } - @Override - protected void addSpecificFormFields(FormPanel form) - { - form.add(createTemplateField()); - } - - private LabelField createTemplateField() - { - LabelField result = - new LabelField(LinkRenderer.renderAsLink(viewContext - .getMessage(Dict.FILE_TEMPLATE_LABEL))); - result.sinkEvents(Event.ONCLICK); - result.addListener(Events.OnClick, new Listener<BaseEvent>() - { - public void handleEvent(BaseEvent be) - { - WindowUtils.openWindow(UrlParamsHelper.createTemplateURL(EntityKind.EXPERIMENT, - experimentType, false, false, BatchOperationKind.REGISTRATION)); - } - }); - return result; - } - - private final class RegisterExperimentsCallback extends - AbstractRegistrationForm.AbstractRegistrationCallback<List<BatchRegistrationResult>> - { - RegisterExperimentsCallback(final IViewContext<IGenericClientServiceAsync> viewContext) - { - super(viewContext); - } - - @Override - protected String createSuccessfullRegistrationInfo( - final List<BatchRegistrationResult> result) - { - final StringBuilder builder = new StringBuilder(); - for (final BatchRegistrationResult batchRegistrationResult : result) - { - builder.append("<b>" + batchRegistrationResult.getFileName() + "</b>: "); - builder.append(batchRegistrationResult.getMessage()); - builder.append("<br />"); - } - return builder.toString(); - } - - } - } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentBatchUpdateForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentBatchUpdateForm.java new file mode 100644 index 0000000000000000000000000000000000000000..a725679983ebc9ff464969d66e165bf62e17733a --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentBatchUpdateForm.java @@ -0,0 +1,46 @@ +/* + * Copyright 2010 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.experiment; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchOperationKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class GenericExperimentBatchUpdateForm extends AbstractExperimentBatchRegistrationForm +{ + private static final String SESSION_KEY = "experiment-batch-update"; + + public GenericExperimentBatchUpdateForm( + final IViewContext<IGenericClientServiceAsync> viewContext, + final ExperimentType type) + { + super(viewContext, type, BatchOperationKind.UPDATE, SESSION_KEY); + } + + @Override + protected void save() + { + viewContext.getService().updateExperiments(type, getSessionKey(), + new RegisterExperimentsCallback(viewContext)); + } +} 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 8a3a4e99e532766719cfad51de29dbd7f4c2f2d0..6d67c78d86a9d4cd0e3ba3f74b2c19fdbe0477fc 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 @@ -307,6 +307,7 @@ var common = { EXPERIMENT_MENU_BROWSE: "Browse", EXPERIMENT_MENU_NEW: "New", EXPERIMENT_MENU_IMPORT: "Batch Import", + EXPERIMENT_MENU_MASS_UPDATE: "Batch Update", EXPERIMENT_MENU_TYPES: "Types", menu_material: "Material", @@ -373,6 +374,7 @@ var common = { vocabulary_registration: "Vocabulary Registration", sample_batch_registration: "Sample Batch Registration", sample_batch_update: "Sample Batch Update", + experiment_batch_update: "Experiment Batch Update", material_batch_update: "Material Batch Update", sample_registration: "Sample Registration", sample_broser: "Sample Browser",