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 c0c56d49087a7fd9d6d4e3e1d9e4cecfbb7c32fb..d5a060450b26732d31f6313466c80d416f2cc490 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 @@ -1366,12 +1366,13 @@ public final class ComponentProvider public AbstractTabItemFactory getSampleTypeBrowser() { + final ComponentProvider componentProvider = this; return new AbstractTabItemFactory() { @Override public ITabItem create() { - IDisposableComponent component = SampleTypeGrid.create(viewContext); + IDisposableComponent component = SampleTypeGrid.create(viewContext, componentProvider); return createTab(getTabTitle(), component); } @@ -1404,12 +1405,13 @@ public final class ComponentProvider public AbstractTabItemFactory getMaterialTypeBrowser() { + final ComponentProvider componentProvider = this; return new AbstractTabItemFactory() { @Override public ITabItem create() { - IDisposableComponent component = MaterialTypeGrid.create(viewContext); + IDisposableComponent component = MaterialTypeGrid.create(viewContext, componentProvider); return createTab(getTabTitle(), component); } @@ -1442,26 +1444,20 @@ public final class ComponentProvider public AbstractTabItemFactory getNewEntityTypeForm(final EntityKind kind, final EntityType type) { + final ComponentProvider componentProvider = this; return new AbstractTabItemFactory() { @Override public ITabItem create() { - DatabaseModificationAwareComponent component = NewEntityTypeForm.create(kind, type, viewContext); + DatabaseModificationAwareComponent component = NewEntityTypeForm.create(kind, type, viewContext, componentProvider); return createRegistrationTab(getTabTitle(), component); } @Override public String getId() { - if (type == null) // Create new entity option - { - return NewEntityTypeForm.BROWSER_ID + "-" + kind.name() + "-" + System.currentTimeMillis(); - } else - // Edit existing entity option - { - return NewEntityTypeForm.BROWSER_ID + "-" + kind.name() + "-" + type.getCode(); - } + return NewEntityTypeForm.getTabId(kind, type); } @Override @@ -1493,12 +1489,13 @@ public final class ComponentProvider public AbstractTabItemFactory getExperimentTypeBrowser() { + final ComponentProvider componentProvider = this; return new AbstractTabItemFactory() { @Override public ITabItem create() { - IDisposableComponent component = ExperimentTypeGrid.create(viewContext); + IDisposableComponent component = ExperimentTypeGrid.create(viewContext, componentProvider); return createTab(getTabTitle(), component); } @@ -1531,12 +1528,13 @@ public final class ComponentProvider public AbstractTabItemFactory getDataSetTypeBrowser() { + final ComponentProvider componentProvider = this; return new AbstractTabItemFactory() { @Override public ITabItem create() { - IDisposableComponent component = DataSetTypeGrid.create(viewContext); + IDisposableComponent component = DataSetTypeGrid.create(viewContext, componentProvider); return createTab(getTabTitle(), component); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java index 7bf476cc33aab15300d0947dcabb020b9af707cf..d78631375550e2e7432258b862dd8c91fa44c43e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java @@ -23,6 +23,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs 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.ComponentProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DataSetKindSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid; @@ -64,15 +65,15 @@ public class DataSetTypeGrid extends AbstractEntityTypeGrid<DataSetType> public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX; public static IDisposableComponent create( - final IViewContext<ICommonClientServiceAsync> viewContext) + final IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider) { - final DataSetTypeGrid grid = new DataSetTypeGrid(viewContext); + final DataSetTypeGrid grid = new DataSetTypeGrid(viewContext, componentProvider); return grid.asDisposableWithoutToolbar(); } - private DataSetTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext) + private DataSetTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider) { - super(viewContext, BROWSER_ID, GRID_ID); + super(viewContext, componentProvider, BROWSER_ID, GRID_ID); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java index 2ca54a1c2c225050f3ebb97882d2141ff8909021..8a84955cb71f7573bdd683efa9e1cb0327d0fba3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java @@ -61,13 +61,18 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed { protected IDelegatedAction postRegistrationCallback; + protected ComponentProvider componentProvider; + abstract protected void register(T entityType, AsyncCallback<Void> registrationCallback); protected AbstractEntityTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, + ComponentProvider componentProvider, String browserId, String gridId) { super(viewContext, browserId, true, DisplayTypeIDGenerator.TYPE_BROWSER_GRID); + this.componentProvider = componentProvider; postRegistrationCallback = createRefreshGridAction(); + extendBottomToolbar(); allowMultipleSelection(); } @@ -94,7 +99,7 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed @Override public void componentSelected(ButtonEvent ce) { - DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext).getNewEntityTypeForm(entityKind, null)); + DispatcherHelper.dispatchNaviEvent(componentProvider.getNewEntityTypeForm(entityKind, null)); } }); buttonAddNew.setId("add-entity-type-new-" + getEntityKindOrNull()); @@ -107,7 +112,7 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed public void invoke(BaseEntityModel<TableModelRowWithObject<T>> selectedItem, boolean keyPressed) { T entityType = selectedItem.getBaseObject().getObjectOrNull(); - DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext).getNewEntityTypeForm(entityKind, entityType)); + DispatcherHelper.dispatchNaviEvent(componentProvider.getNewEntityTypeForm(entityKind, entityType)); } }); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java index 771012fa71b30cc4529ce4f1f2a7f2b84ae18480..8830e65e04a5e57dbf306c15256d817225d9e6ab 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java @@ -6,8 +6,10 @@ import java.util.List; 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.framework.ComponentProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CompositeDatabaseModificationObserver; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.MainTabPanel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.DataSetKindModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.BorderLayoutDataFactory; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DataSetKindSelectionWidget; @@ -44,6 +46,7 @@ import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.MessageBox; +import com.extjs.gxt.ui.client.widget.TabItem; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.button.ButtonBar; import com.extjs.gxt.ui.client.widget.form.Field; @@ -67,6 +70,8 @@ public class NewEntityTypeForm extends ContentPanel private NewETNewPTAssigments newTypeWithAssigments; + private final ComponentProvider componentProvider; + // // Entity Form Related // @@ -77,11 +82,13 @@ public class NewEntityTypeForm extends ContentPanel // // Form Creation // - private NewEntityTypeForm(EntityKind kind, EntityType entityToEdit, IViewContext<ICommonClientServiceAsync> viewContext) + private NewEntityTypeForm(EntityKind kind, EntityType entityToEdit, IViewContext<ICommonClientServiceAsync> viewContext, + ComponentProvider componentProvider) { this.kind = kind; this.entityToEdit = entityToEdit; this.viewContext = viewContext; + this.componentProvider = componentProvider; // Main panel setLayout(new BorderLayout()); @@ -89,19 +96,20 @@ public class NewEntityTypeForm extends ContentPanel this.setBorders(false); this.setBodyBorder(false); - initForm(false); + initForm(); } public static DatabaseModificationAwareComponent create( EntityKind kind, EntityType entityToEdit, - final IViewContext<ICommonClientServiceAsync> viewContext) + final IViewContext<ICommonClientServiceAsync> viewContext, + ComponentProvider componentProvider) { - NewEntityTypeForm form = new NewEntityTypeForm(kind, entityToEdit, viewContext); + NewEntityTypeForm form = new NewEntityTypeForm(kind, entityToEdit, viewContext, componentProvider); return new DatabaseModificationAwareComponent(form, new CompositeDatabaseModificationObserver()); } - private void initForm(boolean isRefresh) + private void initForm() { // Cleanup for the form and for the in memory structure removeAll(); @@ -110,7 +118,7 @@ public class NewEntityTypeForm extends ContentPanel // Top panel initEntityTypeForm(); - if (entityToEdit == null || isRefresh) + if (entityToEdit == null) { initCreateEntity(); } else @@ -143,19 +151,19 @@ public class NewEntityTypeForm extends ContentPanel switch (kind) { case SAMPLE: - typeGrid = (SampleTypeGrid) SampleTypeGrid.create(viewContext).getComponent(); + typeGrid = (SampleTypeGrid) SampleTypeGrid.create(viewContext, componentProvider).getComponent(); dialog = ((SampleTypeGrid) typeGrid).getNewDialog((SampleType) new SampleType()); break; case DATA_SET: - typeGrid = (DataSetTypeGrid) DataSetTypeGrid.create(viewContext).getComponent(); + typeGrid = (DataSetTypeGrid) DataSetTypeGrid.create(viewContext, componentProvider).getComponent(); dialog = ((DataSetTypeGrid) typeGrid).getNewDialog((DataSetType) new DataSetType()); break; case EXPERIMENT: - typeGrid = (ExperimentTypeGrid) ExperimentTypeGrid.create(viewContext).getComponent(); + typeGrid = (ExperimentTypeGrid) ExperimentTypeGrid.create(viewContext, componentProvider).getComponent(); dialog = ((ExperimentTypeGrid) typeGrid).getNewDialog((ExperimentType) new ExperimentType()); break; case MATERIAL: - typeGrid = (MaterialTypeGrid) MaterialTypeGrid.create(viewContext).getComponent(); + typeGrid = (MaterialTypeGrid) MaterialTypeGrid.create(viewContext, componentProvider).getComponent(); dialog = (AddEntityTypeDialog<MaterialType>) ((MaterialTypeGrid) typeGrid) .getNewDialog((MaterialType) new MaterialType()); break; @@ -408,6 +416,18 @@ public class NewEntityTypeForm extends ContentPanel } } + public static String getTabId(EntityKind kind, EntityType type) + { + if (type == null) // Create new entity option + { + return NewEntityTypeForm.BROWSER_ID + "-" + kind.name() + "-New"; + } else + // Edit existing entity option + { + return NewEntityTypeForm.BROWSER_ID + "-" + kind.name() + "-" + type.getCode(); + } + } + private class AsyncCallbackEntityType implements AsyncCallback<String> { @Override @@ -433,11 +453,16 @@ public class NewEntityTypeForm extends ContentPanel if (entityToEdit == null) { MessageBox.alert("Success", "Registration Successful.", null); - initForm(true); } else { MessageBox.alert("Success", "Update Successful.", null); } + + // Close Tab + MainTabPanel tabPanel = (MainTabPanel) componentProvider.tryGetMainTabPanel(); + String getTabId = getTabId(kind, entityToEdit) + MainTabPanel.TAB_SUFFIX; + TabItem item = tabPanel.getItemByItemId(getTabId); + item.close(); } } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeGrid.java index 2594baa367a6522a7ddb034c9d845794adc4b26a..3277126a9af908e8fe2b1c9a7fbeb0cddce1857f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeGrid.java @@ -22,6 +22,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs 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.framework.ComponentProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEntityTypeGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddEntityTypeDialog; @@ -49,15 +50,15 @@ public class ExperimentTypeGrid extends AbstractEntityTypeGrid<ExperimentType> public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX; public static IDisposableComponent create( - final IViewContext<ICommonClientServiceAsync> viewContext) + final IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider) { - final ExperimentTypeGrid grid = new ExperimentTypeGrid(viewContext); + final ExperimentTypeGrid grid = new ExperimentTypeGrid(viewContext, componentProvider); return grid.asDisposableWithoutToolbar(); } - private ExperimentTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext) + private ExperimentTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider) { - super(viewContext, BROWSER_ID, GRID_ID); + super(viewContext, componentProvider, BROWSER_ID, GRID_ID); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeGrid.java index eb4d0c7a7b0bbf329c2c2edc107059df00646d65..07b95842148d2d59e97156753ee275c155754777 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeGrid.java @@ -22,6 +22,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs 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.framework.ComponentProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEntityTypeGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddEntityTypeDialog; @@ -49,15 +50,15 @@ public class MaterialTypeGrid extends AbstractEntityTypeGrid<MaterialType> public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX; public static IDisposableComponent create( - final IViewContext<ICommonClientServiceAsync> viewContext) + final IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider) { - final MaterialTypeGrid grid = new MaterialTypeGrid(viewContext); + final MaterialTypeGrid grid = new MaterialTypeGrid(viewContext, componentProvider); return grid.asDisposableWithoutToolbar(); } - private MaterialTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext) + private MaterialTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider) { - super(viewContext, BROWSER_ID, GRID_ID); + super(viewContext, componentProvider, BROWSER_ID, GRID_ID); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java index 31537ecd706804278d5b1d1245d5102c0a4e4945..4be35136b985fac97a2d9cf16a361afc0856daac 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java @@ -23,6 +23,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs 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.ComponentProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEditEntityTypeDialog; @@ -74,15 +75,15 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType> private static final Boolean DEFAULT_SHOW_PARENTS_VALUE = true; public static IDisposableComponent create( - final IViewContext<ICommonClientServiceAsync> viewContext) + final IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider) { - final SampleTypeGrid grid = new SampleTypeGrid(viewContext); + final SampleTypeGrid grid = new SampleTypeGrid(viewContext, componentProvider); return grid.asDisposableWithoutToolbar(); } - private SampleTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext) + private SampleTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider) { - super(viewContext, BROWSER_ID, GRID_ID); + super(viewContext, componentProvider, BROWSER_ID, GRID_ID); } @Override