From c21ae0a2cf738a0dca4cbdbd40732a07631ec971 Mon Sep 17 00:00:00 2001 From: izabel <izabel> Date: Wed, 10 Nov 2010 12:39:19 +0000 Subject: [PATCH] [LMS-1875] merge add/edit scripts; open add/edit script in new tab SVN: 18620 --- .../web/client/ICommonClientService.java | 4 + .../web/client/ICommonClientServiceAsync.java | 6 +- .../client/web/client/application/Dict.java | 2 + .../framework/ComponentProvider.java | 42 +++++- .../ui/field/ScriptChooserField.java | 2 +- .../AbstractScriptEditRegisterForm.java} | 132 +++++++++++------ .../application/ui/script/ScriptEditForm.java | 134 ++++++++++++++++++ .../ui/{ => script}/ScriptGrid.java | 119 ++++++++-------- .../ui/script/ScriptRegistrationForm.java | 96 +++++++++++++ .../web/server/CommonClientService.java | 14 ++ .../openbis/generic/server/CommonServer.java | 7 + .../generic/server/CommonServerLogger.java | 5 + .../openbis/generic/shared/ICommonServer.java | 7 + .../cisd/openbis/public/common-dictionary.js | 2 + 14 files changed, 466 insertions(+), 106 deletions(-) rename openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/{AddScriptDialog.java => script/AbstractScriptEditRegisterForm.java} (52%) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptEditForm.java rename openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/{ => script}/ScriptGrid.java (78%) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptRegistrationForm.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java index cf4045233cd..ee73c558613 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java @@ -925,4 +925,8 @@ public interface ICommonClientService extends IClientService public LinkModel retrieveLinkFromDataSet(DatastoreServiceDescription serviceDescription, String dataSetCode); + /** + * Returns script with given {@link TechId}. + */ + public Script getScriptInfo(TechId scriptId) throws UserFailureException; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java index dd6cd442a08..c05f4598351 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java @@ -817,5 +817,9 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync public void retrieveLinkFromDataSet(DatastoreServiceDescription serviceDescription, String dataSetCode, AsyncCallback<LinkModel> callback); - // -- + /** + * @see ICommonClientService#getScriptInfo(TechId) + */ + public void getScriptInfo(TechId scriptId, AsyncCallback<Script> scriptInfoCallback); + } 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 327c9ce294b..80e0cdf04b1 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 @@ -334,6 +334,8 @@ public abstract class Dict public static final String SCRIPT = "script"; + public static final String SCRIPT_REGISTRATION = "script_registration"; + public static final String PROPERTY_TYPE = "property_type"; public static final String PROPERTY_TYPE_CODE = "property_type_code"; 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 63540ffcb2b..8890e9f0b44 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 @@ -28,7 +28,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpP import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AuthorizationGroupGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.PersonGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.RoleAssignmentGrid; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.ScriptGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.LinkExtractor; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetBatchUpdatePanel; @@ -55,6 +54,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample. 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; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.script.ScriptGrid; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.script.ScriptRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.VocabularyGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.VocabularyRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.log.LoggingConsole; @@ -796,6 +797,45 @@ public final class ComponentProvider }; } + public final AbstractTabItemFactory getScriptRegistration(final EntityKind entityKindOrNull) + { + return new AbstractTabItemFactory() + { + @Override + public ITabItem create() + { + Component component = + ScriptRegistrationForm.create(viewContext, entityKindOrNull); + return DefaultTabItem.createUnaware(getTabTitle(), component, true); + } + + @Override + public String getId() + { + return ScriptRegistrationForm.createId(); + } + + @Override + public HelpPageIdentifier getHelpPageIdentifier() + { + return new HelpPageIdentifier(HelpPageDomain.SCRIPT, HelpPageAction.REGISTER); + } + + @Override + public String getTabTitle() + { + return getMessage(Dict.SCRIPT_REGISTRATION); + } + + @Override + public String tryGetLink() + { + return null; + } + + }; + } + public final AbstractTabItemFactory getVocabularyBrowser() { return new AbstractTabItemFactory() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ScriptChooserField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ScriptChooserField.java index 187c1046a69..84c9517a68c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ScriptChooserField.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/ScriptChooserField.java @@ -21,8 +21,8 @@ import com.extjs.gxt.ui.client.event.ComponentEvent; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; 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.ui.ScriptGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableEntityChooser; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.script.ScriptGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddScriptDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/AbstractScriptEditRegisterForm.java similarity index 52% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddScriptDialog.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/AbstractScriptEditRegisterForm.java index 1dbe6bff702..823e2a5c15d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddScriptDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/AbstractScriptEditRegisterForm.java @@ -1,5 +1,5 @@ /* - * Copyright 2008 ETH Zuerich, CISD + * 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. @@ -14,65 +14,71 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui; +package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.script; -import com.extjs.gxt.ui.client.widget.Window; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction; import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; import com.extjs.gxt.ui.client.widget.form.TextField; -import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.Element; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; 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.ui.AbstractRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DescriptionField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ScriptField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.VarcharField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; /** - * {@link Window} containing script registration form. + * {@link AbstractRegistrationForm} for registering and editing scripts. * * @author Izabela Adamczyk */ -public class AddScriptDialog extends AbstractRegistrationDialog +abstract public class AbstractScriptEditRegisterForm extends AbstractRegistrationForm { - private final IViewContext<ICommonClientServiceAsync> viewContext; - private final TextField<String> nameField; + protected final IViewContext<ICommonClientServiceAsync> viewContext; - private final DescriptionField descriptionField; + protected final TextField<String> nameField; - private final MultilineVarcharField scriptField; + protected final DescriptionField descriptionField; - private SimpleComboBox<String> entityKindField; + protected final MultilineVarcharField scriptField; - public AddScriptDialog(final IViewContext<ICommonClientServiceAsync> viewContext, - final IDelegatedAction postRegistrationCallback, EntityKind entityKindOrNull) - { - super(viewContext, viewContext.getMessage(Dict.ADD_SCRIPT_TITLE), postRegistrationCallback); - this.viewContext = viewContext; - this.nameField = new VarcharField(viewContext.getMessage(Dict.NAME), true); - addField(nameField); + protected SimpleComboBox<String> entityKindField; - this.entityKindField = createEntityKindOrAllField(entityKindOrNull); - addField(entityKindField); + abstract protected void saveScript(); - this.descriptionField = createDescriptionField(viewContext); - addField(descriptionField); + abstract protected void setValues(); + protected AbstractScriptEditRegisterForm( + final IViewContext<ICommonClientServiceAsync> viewContext, EntityKind entityKindOrNull) + { + this(viewContext, null, entityKindOrNull); + } + + protected AbstractScriptEditRegisterForm( + final IViewContext<ICommonClientServiceAsync> viewContext, TechId scriptIdOrNull, + EntityKind entityKindOrNull) + { + super(viewContext, createId(scriptIdOrNull), DEFAULT_LABEL_WIDTH + 20, DEFAULT_FIELD_WIDTH); + this.viewContext = viewContext; + this.nameField = new VarcharField(viewContext.getMessage(Dict.NAME), true); + this.entityKindField = createEntityKindOrAllField(entityKindOrNull, scriptIdOrNull == null); + this.descriptionField = AbstractRegistrationDialog.createDescriptionField(viewContext); this.scriptField = createScriptField(viewContext); - new MultilineVarcharField(viewContext.getMessage(Dict.SCRIPT), true, 20); - addField(scriptField); } - private SimpleComboBox<String> createEntityKindOrAllField(EntityKind entityKindOrNull) + private SimpleComboBox<String> createEntityKindOrAllField(EntityKind entityKindOrNull, + boolean enabled) { SimpleComboBox<String> options = new SimpleComboBox<String>(); options.add(GenericConstants.ALL_ENTITY_KINDS); @@ -92,6 +98,7 @@ public class AddScriptDialog extends AbstractRegistrationDialog options.setEditable(false); options.setAllowBlank(false); FieldUtil.markAsMandatory(options); + options.setEnabled(enabled); return options; } @@ -103,20 +110,65 @@ public class AddScriptDialog extends AbstractRegistrationDialog return field; } + public static String createId(TechId id) + { + String editOrRegister = (id == null) ? "register" : ("edit_" + id); + return GenericConstants.ID_PREFIX + "script-" + editOrRegister + "_form"; + } + @Override - protected void register(AsyncCallback<Void> registrationCallback) + protected void resetPanel() { - Script newScript = new Script(); - newScript.setDescription(descriptionField.getValue()); - newScript.setName(nameField.getValue()); - newScript.setScript(scriptField.getValue()); - EntityKind kind = null; - String selectedEntityKind = entityKindField.getValue().getValue(); - if (selectedEntityKind.equals(GenericConstants.ALL_ENTITY_KINDS) == false) - { - kind = EntityKind.valueOf(selectedEntityKind); - } - newScript.setEntityKind(kind); - viewContext.getService().registerScript(newScript, registrationCallback); + super.resetPanel(); + nameField.reset(); + } + + private final void addFormFields() + { + formPanel.add(nameField); + formPanel.add(entityKindField); + formPanel.add(descriptionField); + formPanel.add(scriptField); + redefineSaveListeners(); } + + void redefineSaveListeners() + { + saveButton.removeAllListeners(); + saveButton.addSelectionListener(new SelectionListener<ButtonEvent>() + { + @Override + public final void componentSelected(final ButtonEvent ce) + { + if (formPanel.isValid()) + { + saveScript(); + } + } + }); + } + + @Override + protected final void submitValidForm() + { + } + + @Override + protected final void onRender(final Element target, final int index) + { + super.onRender(target, index); + setLoading(true); + loadForm(); + } + + protected abstract void loadForm(); + + protected void initGUI() + { + addFormFields(); + setValues(); + setLoading(false); + layout(); + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptEditForm.java new file mode 100644 index 00000000000..3027fc9db0a --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptEditForm.java @@ -0,0 +1,134 @@ +/* + * 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.generic.client.web.client.application.ui.script; + +import com.extjs.gxt.ui.client.widget.Component; + +import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; +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.ui.AbstractRegistrationForm; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; + +/** + * {@link AbstractScriptEditRegisterForm} extension for editing scripts. + * + * @author Izabela Adamczyk + */ +public class ScriptEditForm extends AbstractScriptEditRegisterForm +{ + + private Script originalScript; + + private TechId scriptId; + + protected ScriptEditForm(IViewContext<ICommonClientServiceAsync> viewContext, TechId scriptId) + { + super(viewContext, scriptId, null); + this.scriptId = scriptId; + } + + @Override + protected void saveScript() + { + Script script = new Script(); + script.setId(scriptId.getId()); + script.setDescription(descriptionField.getValue()); + script.setScript(scriptField.getValue()); + script.setName(nameField.getValue()); + viewContext.getService().updateScript(script, new ScriptEditCallback(viewContext)); + } + + @Override + protected void setValues() + { + descriptionField.setValue(originalScript.getDescription());// FIXME: unescape? + scriptField.setValue(originalScript.getScript()); + nameField.setValue(originalScript.getName()); + String entityKind = + originalScript.getEntityKind() == null ? GenericConstants.ALL_ENTITY_KINDS + : originalScript.getEntityKind().name(); + entityKindField.setSimpleValue(entityKind); + } + + public void updateOriginalValues() + { + descriptionField.setOriginalValue(descriptionField.getValue()); + scriptField.setOriginalValue(scriptField.getValue()); + nameField.setOriginalValue(nameField.getValue()); + entityKindField.setOriginalValue(entityKindField.getValue()); + } + + @Override + protected void loadForm() + { + viewContext.getService().getScriptInfo(scriptId, new ScriptInfoCallback(viewContext)); + } + + void setOriginalScript(Script script) + { + this.originalScript = script; + } + + private final class ScriptEditCallback extends + AbstractRegistrationForm.AbstractRegistrationCallback<Void> + { + ScriptEditCallback(final IViewContext<?> viewContext) + { + super(viewContext); + } + + @Override + protected void process(final Void result) + { + // originalScript.setModificationDate(result); + updateOriginalValues(); + super.process(result); + } + + @Override + protected String createSuccessfullRegistrationInfo(Void result) + { + return "Script <b>" + originalScript.getName() + "</b> successfully updated."; + } + } + + private final class ScriptInfoCallback extends AbstractAsyncCallback<Script> + { + + private ScriptInfoCallback(final IViewContext<ICommonClientServiceAsync> viewContext) + { + super(viewContext); + } + + @Override + protected final void process(final Script result) + { + setOriginalScript(result); + initGUI(); + } + } + + public static Component create(IViewContext<ICommonClientServiceAsync> viewContext, + TechId scriptId) + { + return new ScriptEditForm(viewContext, scriptId); + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/ScriptGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptGrid.java similarity index 78% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/ScriptGrid.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptGrid.java index efa1dd0d7f2..76791456202 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/ScriptGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptGrid.java @@ -14,39 +14,38 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui; +package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.script; import java.util.List; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; +import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.Dialog; -import com.extjs.gxt.ui.client.widget.Window; import com.extjs.gxt.ui.client.widget.button.Button; -import com.extjs.gxt.ui.client.widget.form.TextField; -import com.google.gwt.user.client.rpc.AsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; 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.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.DefaultTabItem; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.ScriptColDefKind; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DescriptionField; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ScriptField; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.VarcharField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableEntityChooser; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListDeletionConfirmationDialog; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListScriptsCriteria; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; @@ -76,8 +75,6 @@ public class ScriptGrid extends AbstractSimpleBrowserGrid<Script> public static final String EDIT_BUTTON_ID = BROWSER_ID + "-edit-button"; - private final IDelegatedAction postRegistrationCallback; - private final EntityKind entityKindOrNull; public static DisposableEntityChooser<Script> create( @@ -93,7 +90,6 @@ public class ScriptGrid extends AbstractSimpleBrowserGrid<Script> { super(viewContext, BROWSER_ID, GRID_ID, DisplayTypeIDGenerator.SCRIPTS_BROWSER_GRID); this.entityKindOrNull = entityKindOrNull; - postRegistrationCallback = createRefreshGridAction(); } private void extendBottomToolbar() @@ -107,10 +103,8 @@ public class ScriptGrid extends AbstractSimpleBrowserGrid<Script> @Override public void componentSelected(ButtonEvent ce) { - AddScriptDialog dialog = - new AddScriptDialog(viewContext, createRefreshGridAction(), - entityKindOrNull); - dialog.show(); + DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext) + .getScriptRegistration(entityKindOrNull)); } }); addScriptButton.setId(ADD_BUTTON_ID); @@ -123,8 +117,7 @@ public class ScriptGrid extends AbstractSimpleBrowserGrid<Script> public void invoke(BaseEntityModel<Script> selectedItem, boolean keyPressed) { - Script script = selectedItem.getBaseObject(); - createEditDialog(script).show(); + openEditor(selectedItem, keyPressed); } }); editButton.setId(EDIT_BUTTON_ID); @@ -143,53 +136,11 @@ public class ScriptGrid extends AbstractSimpleBrowserGrid<Script> } }); addButton(deleteButton); - allowMultipleSelection(); // we allow deletion of multiple projects + allowMultipleSelection(); addEntityOperationsSeparator(); } - private Window createEditDialog(final Script script) - { - final String name = script.getName(); - final String description = script.getDescription(); - final String title = - viewContext.getMessage(Dict.EDIT_TITLE, viewContext.getMessage(Dict.SCRIPT), name); - - return new AbstractRegistrationDialog(viewContext, title, postRegistrationCallback) - { - private final TextField<String> nameField; - - private final DescriptionField descriptionField; - - private final MultilineVarcharField scriptField; - - { - this.nameField = new VarcharField(viewContext.getMessage(Dict.NAME), true); - this.nameField.setValue(StringEscapeUtils.unescapeHtml(script.getName())); - addField(nameField); - - descriptionField = createDescriptionField(viewContext); - descriptionField.setValue(StringEscapeUtils.unescapeHtml(description)); - addField(descriptionField); - - this.scriptField = new ScriptField(viewContext); - // new MultilineVarcharField(viewContext.getMessage(Dict.SCRIPT), true, 20); - this.scriptField.setValue(StringEscapeUtils.unescapeHtml(script.getScript())); - addField(scriptField); - } - - @Override - protected void register(AsyncCallback<Void> registrationCallback) - { - script.setDescription(descriptionField.getValue()); - script.setScript(scriptField.getValue()); - script.setName(nameField.getValue()); - - viewContext.getService().updateScript(script, registrationCallback); - } - }; - } - @Override protected IColumnDefinitionKind<Script>[] getStaticColumnsDefinition() { @@ -244,6 +195,48 @@ public class ScriptGrid extends AbstractSimpleBrowserGrid<Script> DatabaseModificationKind.edit(ObjectKind.SCRIPT) }; } + private void openEditor(BaseEntityModel<Script> selectedItem, boolean keyPressed) + { + final Script script = selectedItem.getBaseObject(); + final TechId scriptId = TechId.create(script); + AbstractTabItemFactory tabFactory = new AbstractTabItemFactory() + { + @Override + public ITabItem create() + { + Component component = ScriptEditForm.create(viewContext, scriptId); + return DefaultTabItem.createUnaware(getTabTitle(), component, true); + } + + @Override + public String getId() + { + return ScriptEditForm.createId(scriptId); + } + + @Override + public String getTabTitle() + { + return viewContext.getMessage(Dict.EDIT_TITLE, + viewContext.getMessage(Dict.SCRIPT), ""); + } + + @Override + public HelpPageIdentifier getHelpPageIdentifier() + { + return new HelpPageIdentifier(HelpPageDomain.SCRIPT, HelpPageAction.EDIT); + } + + @Override + public String tryGetLink() + { + return null; + } + }; + tabFactory.setInBackground(keyPressed); + DispatcherHelper.dispatchNaviEvent(tabFactory); + } + private static final class ScriptListDeletionConfirmationDialog extends AbstractDataListDeletionConfirmationDialog<Script> { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptRegistrationForm.java new file mode 100644 index 00000000000..d9a9bf82b73 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/script/ScriptRegistrationForm.java @@ -0,0 +1,96 @@ +/* + * 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.generic.client.web.client.application.ui.script; + +import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; +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.ui.AbstractRegistrationForm; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; + +/** + * @author Izabela Adamczyk + */ +public class ScriptRegistrationForm extends AbstractScriptEditRegisterForm +{ + + public static ScriptRegistrationForm create( + IViewContext<ICommonClientServiceAsync> viewContext, EntityKind entityKindOrNull) + { + return new ScriptRegistrationForm(viewContext, entityKindOrNull); + } + + protected ScriptRegistrationForm(IViewContext<ICommonClientServiceAsync> viewContext, + EntityKind entityKindOrNull) + { + super(viewContext, entityKindOrNull); + } + + @Override + protected void saveScript() + { + Script newScript = new Script(); + newScript.setDescription(descriptionField.getValue()); + newScript.setName(nameField.getValue()); + newScript.setScript(scriptField.getValue()); + EntityKind kind = null; + String selectedEntityKind = entityKindField.getValue().getValue(); + if (selectedEntityKind.equals(GenericConstants.ALL_ENTITY_KINDS) == false) + { + kind = EntityKind.valueOf(selectedEntityKind); + } + newScript.setEntityKind(kind); + viewContext.getService().registerScript(newScript, + new ScriptRegistrationCallback(viewContext, newScript)); + } + + private final class ScriptRegistrationCallback extends + AbstractRegistrationForm.AbstractRegistrationCallback<Void> + { + private final Script script; + + ScriptRegistrationCallback(final IViewContext<?> viewContext, final Script script) + { + super(viewContext); + this.script = script; + } + + @Override + protected String createSuccessfullRegistrationInfo(Void result) + { + return "Script <b>" + script.getName().toUpperCase() + "</b> successfully registered."; + } + } + + public static String createId() + { + return AbstractScriptEditRegisterForm.createId(null); + } + + @Override + protected void setValues() + { + } + + @Override + protected void loadForm() + { + initGUI(); + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java index f70246f49c3..9a038e63373 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java @@ -2584,4 +2584,18 @@ public final class CommonClientService extends AbstractClientService implements } } + public Script getScriptInfo(TechId scriptId) + throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException + { + try + { + final String sessionToken = getSessionToken(); + final Script script = commonServer.getScriptInfo(sessionToken, scriptId); + return script; + } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e) + { + throw UserFailureExceptionTranslator.translate(e); + } + } + } 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 d793c1adace..20db614b3cd 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 @@ -2037,4 +2037,11 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt serviceDescription.getDatastoreCode(), dataSetCode); } + public Script getScriptInfo(String sessionToken, TechId scriptId) + { + getSession(sessionToken); + ScriptPE script = getDAOFactory().getScriptDAO().getByTechId(scriptId); + return ScriptTranslator.translate(script); + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java index dde64968fe4..bdf87d86ab5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java @@ -915,4 +915,9 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe } } + public Script getScriptInfo(String sessionToken, TechId scriptId) + { + logAccess(sessionToken, "getScriptInfo", "SCRIPT(%s)", scriptId); + return null; + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java index f4a6024706e..c696c72ecc1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java @@ -1156,4 +1156,11 @@ public interface ICommonServer extends IServer DatastoreServiceDescription serviceDescription, @AuthorizationGuard(guardClass = DataSetCodePredicate.class) String dataSetCode); + /** + * For given {@link TechId} returns the corresponding {@link Script}. + */ + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) + public Script getScriptInfo(String sessionToken, TechId scriptId); + } 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 e38c31b5b5e..7c83dc625da 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 @@ -1,3 +1,4 @@ + // Common dictionary var common = { @@ -692,6 +693,7 @@ add_script_title: "Add a new script", title_choose_script: "Choose a Script", script_browser: "Scripts", ADMINISTRATION_MENU_SCRIPTS: "Scripts", +script_registration: "Script Registration", // LAST LINE: KEEP IT AT THE END lastline: "" // we need a line without a comma -- GitLab