diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/IChosenEntitiesProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/IChosenEntitiesProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..df450af5195a7494de57177dcf1f2a2d1bf0be78 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/IChosenEntitiesProvider.java @@ -0,0 +1,29 @@ +/* + * 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.field; + +import java.util.List; + +/** + * @author pkupczyk + */ +public interface IChosenEntitiesProvider<T> +{ + + public List<T> getEntities(); + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MetaprojectChooserButton.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MetaprojectChooserButton.java index 438126063acdd1d30095220dd74145f394bcf826..47d6afa993dadfcfd5c275553992a76aa5b105b6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MetaprojectChooserButton.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MetaprojectChooserButton.java @@ -48,7 +48,8 @@ public class MetaprojectChooserButton extends Button implements private final List<IChosenEntitiesListener<TableModelRowWithObject<Metaproject>>> listeners = new ArrayList<IChosenEntitiesListener<TableModelRowWithObject<Metaproject>>>(); - public MetaprojectChooserButton(final IViewContext<?> viewContext, final String idPrefix) + public MetaprojectChooserButton(final IViewContext<?> viewContext, final String idPrefix, + final IChosenEntitiesProvider<String> chosenProvider) { super(viewContext.getMessage(Dict.ADD_METAPROJECT)); @@ -60,7 +61,7 @@ public class MetaprojectChooserButton extends Button implements public void componentSelected(ButtonEvent ce) { DisposableEntityChooser<TableModelRowWithObject<Metaproject>> chooserGrid = - MetaprojectGrid.createChooser(viewContext); + MetaprojectGrid.createChooser(viewContext, chosenProvider); new EntityChooserDialog<TableModelRowWithObject<Metaproject>>(chooserGrid, MetaprojectChooserButton.this, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/metaproject/MetaprojectGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/metaproject/MetaprojectGrid.java index 1c8d215640f487c20031158010663a3576d3de54..b217957202ad145aae666f1070797eedce561c7b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/metaproject/MetaprojectGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/metaproject/MetaprojectGrid.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.metaproject; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; @@ -24,6 +25,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericCon import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.IChosenEntitiesProvider; 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.dto.DefaultResultSetConfig; @@ -43,23 +45,26 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject public class MetaprojectGrid extends TypedTableGrid<Metaproject> { + private IChosenEntitiesProvider<String> chosenProvider; + public static final String METAPROJECT_CHOOSER_GRID_ID = GenericConstants.ID_PREFIX + "metaproject-chooser" + TypedTableGrid.GRID_POSTFIX; public static DisposableEntityChooser<TableModelRowWithObject<Metaproject>> createChooser( - final IViewContext<?> viewContext) + final IViewContext<?> viewContext, IChosenEntitiesProvider<String> chosenProvider) { final MetaprojectGrid grid = new MetaprojectGrid(viewContext, METAPROJECT_CHOOSER_GRID_ID, - DisplayTypeIDGenerator.METAPROJECT_CHOOSER_GRID); + DisplayTypeIDGenerator.METAPROJECT_CHOOSER_GRID, chosenProvider); grid.allowMultipleSelection(); return grid.asDisposableWithoutToolbar(); } private MetaprojectGrid(IViewContext<?> viewContext, String gridId, - DisplayTypeIDGenerator gridDisplayTypeId) + DisplayTypeIDGenerator gridDisplayTypeId, IChosenEntitiesProvider<String> chosenProvider) { super(viewContext.getCommonViewContext(), gridId, true, gridDisplayTypeId); + this.chosenProvider = chosenProvider; } @Override @@ -83,9 +88,16 @@ public class MetaprojectGrid extends TypedTableGrid<Metaproject> DefaultResultSetConfig<String, TableModelRowWithObject<Metaproject>> resultSetConfig, AbstractAsyncCallback<TypedTableResultSet<Metaproject>> callback) { - ListMetaprojectsCriteria criteria = new ListMetaprojectsCriteria(); - criteria.copyPagingConfig(resultSetConfig); - viewContext.getService().listMetaprojects(criteria, callback); + ListMetaprojectsCriteria listCriteria = new ListMetaprojectsCriteria(); + List<String> chosenMetaprojects = chosenProvider.getEntities(); + + if (chosenMetaprojects != null) + { + listCriteria.setBlacklist(new HashSet<String>(chosenMetaprojects)); + } + + listCriteria.copyPagingConfig(resultSetConfig); + viewContext.getService().listMetaprojects(listCriteria, callback); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListMetaprojectsCriteria.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListMetaprojectsCriteria.java index d9c426bad6b4e07efe6b13aa78f46f6c42fa2de0..87890322d380561c11dc43b5288b1e43683b4e10 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListMetaprojectsCriteria.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListMetaprojectsCriteria.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.dto; +import java.util.Set; + import com.google.gwt.user.client.rpc.IsSerializable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; @@ -29,8 +31,16 @@ public class ListMetaprojectsCriteria extends IsSerializable { - public ListMetaprojectsCriteria() + private Set<String> blacklist; + + public Set<String> getBlacklist() + { + return blacklist; + } + + public void setBlacklist(Set<String> blacklist) { + this.blacklist = blacklist; } } 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 da39af9a86c4f23649b1a1ae0cc6284a7afc1cac..d05cb4e2dee55783a20f26f36a5dcb944abf3ef7 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 @@ -694,7 +694,7 @@ public final class CommonClientService extends AbstractClientService implements throws UserFailureException { MetaprojectProvider metaprojectProvider = - new MetaprojectProvider(commonServer, getSessionToken()); + new MetaprojectProvider(commonServer, getSessionToken(), criteria); return listEntities(metaprojectProvider, criteria); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/MetaprojectProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/MetaprojectProvider.java index 13dc090607767e44b82e26b9c674a85bf75ea746..18f6004c0c32145032590d5ff631789544c48f5f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/MetaprojectProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/MetaprojectProvider.java @@ -22,6 +22,7 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.Metaproject import java.util.List; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListMetaprojectsCriteria; import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel; @@ -33,9 +34,13 @@ import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder; public class MetaprojectProvider extends AbstractCommonTableModelProvider<Metaproject> { - public MetaprojectProvider(ICommonServer commonServer, String sessionToken) + private ListMetaprojectsCriteria criteria; + + public MetaprojectProvider(ICommonServer commonServer, String sessionToken, + ListMetaprojectsCriteria criteria) { super(commonServer, sessionToken); + this.criteria = criteria; } @Override @@ -46,13 +51,19 @@ public class MetaprojectProvider extends AbstractCommonTableModelProvider<Metapr builder.addColumn(NAME); builder.addColumn(DESCRIPTION); builder.addColumn(CREATION_DATE).withDefaultWidth(300); + for (Metaproject metaproject : metaprojects) { - builder.addRow(metaproject); - builder.column(NAME).addString(metaproject.getName()); - builder.column(DESCRIPTION).addString(metaproject.getDescription()); - builder.column(CREATION_DATE).addDate(metaproject.getCreationDate()); + if (criteria.getBlacklist() == null + || criteria.getBlacklist().contains(metaproject.getName()) == false) + { + builder.addRow(metaproject); + builder.column(NAME).addString(metaproject.getName()); + builder.column(DESCRIPTION).addString(metaproject.getDescription()); + builder.column(CREATION_DATE).addDate(metaproject.getCreationDate()); + } } + return builder.getModel(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/AbstractGenericEntityRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/AbstractGenericEntityRegistrationForm.java index 39436dee985d98c50e247052f1400832f0450119..2706e21bd0880e0c00602782f1ff3f73b298f8a1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/AbstractGenericEntityRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/AbstractGenericEntityRegistrationForm.java @@ -39,6 +39,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CodeFieldWithGenerator; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.IChosenEntitiesListener; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.IChosenEntitiesProvider; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MetaprojectArea; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MetaprojectChooserButton; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations; @@ -226,7 +227,18 @@ public abstract class AbstractGenericEntityRegistrationForm<T extends EntityType } metaprojectArea = new MetaprojectArea(viewContext, getId()); - metaprojectChooserButton = new MetaprojectChooserButton(viewContext, getId()); + metaprojectChooserButton = + new MetaprojectChooserButton(viewContext, getId(), + new IChosenEntitiesProvider<String>() + { + @Override + public List<String> getEntities() + { + String[] metaprojects = metaprojectArea.tryGetMetaprojects(); + return metaprojects != null ? Arrays.asList(metaprojects) + : null; + } + }); metaprojectChooserButton .addChosenEntityListener(new IChosenEntitiesListener<TableModelRowWithObject<Metaproject>>() {