diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java index 6c7aad01fe97e35f28122eb4b4455e99eff15028..2eaa07227b295dd18515ee4b1f27a0a8f8724d6a 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java @@ -16,7 +16,9 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.server; +import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.annotation.Resource; @@ -24,6 +26,7 @@ import org.springframework.stereotype.Component; import ch.rinn.restrictions.Private; import ch.systemsx.cisd.common.servlet.IRequestContextProvider; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.GenericTableRowColumnDefinition; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig; @@ -33,8 +36,10 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureE import ch.systemsx.cisd.openbis.generic.client.web.server.AbstractClientService; import ch.systemsx.cisd.openbis.generic.client.web.server.translator.UserFailureExceptionTranslator; import ch.systemsx.cisd.openbis.generic.shared.IServer; +import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableColumnHeader; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleParentWithDerived; @@ -175,10 +180,38 @@ public final class ScreeningClientService extends AbstractClientService implemen { PlateMetadataProvider dataProvider = new PlateMetadataProvider(server, getSessionToken(), sampleId); + // This is a different kind of query because the criteria does not define which columns + // are available -- the provider does. Thus, inform the criteria which columns are + // available. + updateResultSetColumnsFromProvider(criteria, dataProvider); ResultSet<GenericTableRow> resultSet = listEntities(criteria, dataProvider); return new GenericTableResultSet(resultSet, dataProvider.getHeaders()); } + /** + * In the plate metadata query, the result set does not define which columns are available -- + * the provider does. This method informs the result set about the columns availible in the + * provider. + */ + private void updateResultSetColumnsFromProvider( + IResultSetConfig<String, GenericTableRow> criteria, PlateMetadataProvider dataProvider) + { + Set<IColumnDefinition<GenericTableRow>> columns = criteria.getAvailableColumns(); + Set<String> identifiers = new HashSet<String>(); + for (IColumnDefinition<GenericTableRow> colDef : columns) + { + identifiers.add(colDef.getIdentifier()); + } + + List<GenericTableColumnHeader> headers = dataProvider.getHeaders(); + for (GenericTableColumnHeader header : headers) + { + // the header's code is the same as the definition's identifier + if (!identifiers.contains(header.getCode())) + columns.add(new GenericTableRowColumnDefinition(header, header.getTitle())); + } + } + public String prepareExportPlateMetadata(TableExportCriteria<GenericTableRow> criteria) throws UserFailureException {