diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java index c2555a7b776c6388c1e35e165af9247125e8b065..0e000cfa8eb594dbece2aca3ae7b6d3a937f554b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataViewSection.java @@ -20,24 +20,24 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -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.Header; -import com.extjs.gxt.ui.client.widget.button.Button; -import com.extjs.gxt.ui.client.widget.form.CheckBox; +import com.extjs.gxt.ui.client.data.ModelData; +import com.extjs.gxt.ui.client.event.SelectionChangedEvent; +import com.extjs.gxt.ui.client.event.SelectionChangedListener; +import com.extjs.gxt.ui.client.widget.toolbar.LabelToolItem; import com.google.gwt.user.client.ui.Frame; 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.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.NonHierarchicalBaseModelData; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetReportGenerator; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.DataSetUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; @@ -45,110 +45,162 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; * Section panel presenting data from Data Store Server. * * @author Izabela Adamczyk + * @author Piotr Buczek */ public class DataViewSection extends SingleSectionPanel { + private static String FILES_SMART_VIEW = "Files (Smart View)"; + + private static String FILES_HOME_VIEW = "Files (Home)"; + public DataViewSection(final IViewContext<?> viewContext, final ExternalData dataset) { super(viewContext.getMessage(Dict.DATA_VIEW)); - Button topButton = new Button(viewContext.getMessage(Dict.BUTTON_TOP)); - final CheckBox autoResolveCheckbox = new CheckBox(); - autoResolveCheckbox.setBoxLabel(viewContext.getMessage(Dict.AUTO_RESOLVE_LABEL)); - autoResolveCheckbox.setValue(true); + final Frame iFrame = new Frame(); - final Frame iFrame = new Frame(createUrl(viewContext, dataset, autoResolveCheckbox)); + final DatastoreServiceViewerSelectionWidget serviceSelectionWidget = + new DatastoreServiceViewerSelectionWidget(viewContext, dataset); + getHeader().addTool(new LabelToolItem(serviceSelectionWidget.getFieldLabel() + ": ")); + getHeader().addTool(serviceSelectionWidget); + serviceSelectionWidget + .addSelectionChangedListener(new SelectionChangedListener<DatastoreServiceDescriptionModel>() + { - autoResolveCheckbox.addListener(Events.Change, new Listener<BaseEvent>() - { - public void handleEvent(BaseEvent be) - { - iFrame.setUrl(createUrl(viewContext, dataset, autoResolveCheckbox)); - } - }); - topButton.addSelectionListener(new SelectionListener<ButtonEvent>() - { - @Override - public void componentSelected(ButtonEvent ce) - { - autoResolveCheckbox.disableEvents(true); - autoResolveCheckbox.setValue(false); - autoResolveCheckbox.disableEvents(false); - iFrame.setUrl(createUrl(viewContext, dataset, autoResolveCheckbox)); - } - }); + @Override + public void selectionChanged( + SelectionChangedEvent<DatastoreServiceDescriptionModel> se) + { + final DatastoreServiceDescriptionModel selectedItem = + se.getSelectedItem(); + if (selectedItem != null) + { + DatastoreServiceDescription service = selectedItem.getBaseObject(); + + // TODO 2010-01-19, PTR: remove after testing with DS + System.err.println("selected " + service.getLabel()); + + if (service.getLabel().equals(FILES_SMART_VIEW)) + { + showDataSetFilesView(true); + } else if (service.getLabel().equals(FILES_HOME_VIEW)) + { + showDataSetFilesView(false); + } else + { + DisplayedOrSelectedDatasetCriteria criteria = + DisplayedOrSelectedDatasetCriteria + .createSelectedItems(Arrays.asList(dataset + .getCode())); + DataSetReportGenerator.generate(service, criteria, viewContext + .getCommonViewContext()); + } + } + + } + + private void showDataSetFilesView(boolean autoResolve) + { + // TODO 2010-01-19, PTR: remove after testing with DS + System.err.println("autoResolve " + autoResolve); + iFrame.setUrl(DataSetUtils.createDataViewUrl(dataset, viewContext + .getModel(), "simpleHtml", autoResolve)); + } + + }); - getHeader().addTool(autoResolveCheckbox); - getHeader().addTool(topButton); - viewContext.getCommonService().listDataStoreServices(DataStoreServiceKind.QUERIES, - new ReportPluginsCallback(viewContext, dataset, getHeader())); add(iFrame); } - private String createUrl(final IViewContext<?> viewContext, final ExternalData dataset, - CheckBox autoResolve) + private static class DatastoreServiceViewerSelectionWidget extends + DropDownList<DatastoreServiceDescriptionModel, DatastoreServiceDescription> + { + + private final IViewContext<?> viewContext; + + private final ExternalData dataset; + + public DatastoreServiceViewerSelectionWidget(final IViewContext<?> viewContext, + final ExternalData dataset) + { + super(viewContext, ("data-set_" + dataset.getCode() + "_viewer"), Dict.BUTTON_SHOW, + ModelDataPropertyNames.LABEL, "viewer", "viewers"); + this.viewContext = viewContext; + this.dataset = dataset; + setAutoSelectFirst(true); // TODO 2010-01-19, PTR: use saved display settings + } + + @Override + protected List<DatastoreServiceDescriptionModel> convertItems( + List<DatastoreServiceDescription> result) + { + List<DatastoreServiceDescriptionModel> models = + DatastoreServiceDescriptionModel.convert(result, dataset); + models.add(0, createServiceDescription(FILES_SMART_VIEW)); + models.add(1, createServiceDescription(FILES_HOME_VIEW)); + return models; + } + + @Override + protected void loadData(AbstractAsyncCallback<List<DatastoreServiceDescription>> callback) + { + viewContext.getCommonService().listDataStoreServices(DataStoreServiceKind.QUERIES, + callback); + } + + public DatabaseModificationKind[] getRelevantModifications() + { + return new DatabaseModificationKind[0]; // don't update + } + + } + + private static DatastoreServiceDescriptionModel createServiceDescription(String label) { - return DataSetUtils.createDataViewUrl(dataset, viewContext.getModel(), "simpleHtml", - autoResolve.getValue()); + final DatastoreServiceDescription service = + new DatastoreServiceDescription(null, label, null, null); + return new DatastoreServiceDescriptionModel(service); } /** - * Adds buttons with services relevant to given data set to the header. + * {@link ModelData} for {@link DatastoreServiceDescription}. * - * @author Izabela Adamczyk + * @author Piotr Buczek */ - static private final class ReportPluginsCallback extends - AbstractAsyncCallback<List<DatastoreServiceDescription>> + public static class DatastoreServiceDescriptionModel extends NonHierarchicalBaseModelData { - private final ExternalData dataset; - private final Header header; + private static final long serialVersionUID = 1L; - private ReportPluginsCallback(IViewContext<?> viewContext, ExternalData dataset, - Header header) + public DatastoreServiceDescriptionModel(final DatastoreServiceDescription description) { - super(viewContext); - this.dataset = dataset; - this.header = header; + set(ModelDataPropertyNames.OBJECT, description); + set(ModelDataPropertyNames.LABEL, description.getLabel()); } - @Override - protected void process(List<DatastoreServiceDescription> result) + public final static List<DatastoreServiceDescriptionModel> convert( + final List<DatastoreServiceDescription> services, final ExternalData dataset) { - List<DatastoreServiceDescription> relevant = - new ArrayList<DatastoreServiceDescription>(); - for (DatastoreServiceDescription service : result) + final List<DatastoreServiceDescriptionModel> result = + new ArrayList<DatastoreServiceDescriptionModel>(); + for (final DatastoreServiceDescription service : services) { if (service.getDatastoreCode().equals(dataset.getDataStore().getCode()) && (Arrays.asList(service.getDatasetTypeCodes())).contains(dataset .getDataSetType().getCode())) { - relevant.add(service); + result.add(new DatastoreServiceDescriptionModel(service)); } } - - for (final DatastoreServiceDescription service : relevant) - { - header.addTool(createServiceButton(service)); - } + return result; } - private Button createServiceButton(final DatastoreServiceDescription service) + public final DatastoreServiceDescription getBaseObject() { - return new Button(service.getLabel(), new SelectionListener<ButtonEvent>() - { - @Override - public void componentSelected(ButtonEvent ce) - { - DisplayedOrSelectedDatasetCriteria criteria = - DisplayedOrSelectedDatasetCriteria.createSelectedItems(Arrays - .asList(dataset.getCode())); - DataSetReportGenerator.generate(service, criteria, viewContext - .getCommonViewContext()); - } - }); + return get(ModelDataPropertyNames.OBJECT); } + } }