Author: tchemit Date: 2008-02-08 16:23:29 +0000 (Fri, 08 Feb 2008) New Revision: 756 Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java Log: mise en place listenersur liste attachments Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java 2008-02-08 15:35:19 UTC (rev 755) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java 2008-02-08 16:23:29 UTC (rev 756) @@ -20,6 +20,7 @@ import fr.cemagref.simexplorer.is.attachment.Attachment; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; +import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.ui.SimExplorer; @@ -188,17 +189,18 @@ * Rafraichit les actions d'un node dans l'arbre de navigation * * @param ui l'onglet de détail + * @param model le model de d'onglet detail * @param node le node sélectionné dans l'arbre de navigation */ - public static void refreshDetailActions(JApplicationDetailTab ui, LoggableElementTreeNode node) { + public static void refreshDetailActions(JApplicationDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) { // refresh download LoggableElement button - refreshDownloadLoggableElementAction(ui, node); + refreshDownloadLoggableElementAction(ui, model,node); // refresh download Attachment button - refreshDownloadAttachmentAction(ui, node); + refreshDownloadAttachmentAction(ui, model); // refresh delete button - refreshDeleteAction(ui, node); + refreshDeleteAction(ui,model); // refresh export button - refreshExportAction(ui, node); + refreshExportAction(ui, model); // refresh tree buttons refreshTreeActions(ui, node); } @@ -213,29 +215,34 @@ updateButton(ui.getExpandAllApplication(), enabled, tooltip); } - protected static void refreshDownloadLoggableElementAction(JApplicationDetailTab ui, LoggableElementTreeNode node) { + protected static void refreshDownloadLoggableElementAction(JApplicationDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) { //TODO Use model instead of ui - boolean enabled = LoggableElementTreeHelper.isLoggableElement(node) || LoggableElementTreeHelper.canDownload(node); - String tooltip = !enabled?null:_("simexplorer.action.dowloadLoggableElement2", node.getUserObject()); + MetaData detail = model.getDetail(); + boolean enabled = detail !=null || LoggableElementTreeHelper.canDownload(node); + String tooltip = !enabled?null:_("simexplorer.action.dowloadLoggableElement2", detail==null?node.getUserObject():detail.getName()+" - "+model.getSelectedVersion()); updateButton(ui.getDownloadLoggableElement(), enabled, tooltip); } - protected static void refreshDownloadAttachmentAction(JApplicationDetailTab ui, LoggableElementTreeNode node) { - //TODO Use model instead of ui - boolean enabled = LoggableElementTreeHelper.isLoggableElement(node); - String tooltip = !enabled?null:_("simexplorer.action.dowloadAttachment2", node.getUserObject()); + public static void refreshDownloadAttachmentAction(JApplicationDetailTab ui, DetailTabModel model) { + Attachment attachment = model.getSelectedAttachment(); + MetaData detail = model.getDetail(); + boolean enabled = detail!=null && attachment !=null; + String tooltip = !enabled?null:_("simexplorer.action.dowloadAttachment2", attachment,detail.getName()+" - "+model.getSelectedVersion()); updateButton(ui.getDownloadAttachment(), enabled, tooltip); } - protected static void refreshDeleteAction(JApplicationDetailTab ui, LoggableElementTreeNode node) { - boolean enabled = LoggableElementTreeHelper.canDelete(node); - String tooltip = !enabled?null:_("simexplorer.action.delete2", node.getUserObject()); + protected static void refreshDeleteAction(JApplicationDetailTab ui, DetailTabModel model) { + MetaData detail = model.getDetail(); + boolean enabled = detail!=null; + String tooltip = !enabled?null:_("simexplorer.action.delete2", detail.getName()+" - "+model.getSelectedVersion()); updateButton(ui.getDelete(), enabled, tooltip); } - protected static void refreshExportAction(JApplicationDetailTab ui, LoggableElementTreeNode node) { - boolean enabled = LoggableElementTreeHelper.canExport(node); - String tooltip = !enabled?null:_("simexplorer.action.export2", node.getUserObject()); + protected static void refreshExportAction(JApplicationDetailTab ui, DetailTabModel model) { + MetaData detail = model.getDetail(); + LoggableElement sNode = model.getSelectedNode(); + boolean enabled = sNode!=null && sNode instanceof ExplorationApplication; + String tooltip = !enabled?null:_("simexplorer.action.export2", detail.getName()+" - "+model.getSelectedVersion()); updateButton(ui.getExportApplication(), enabled, tooltip); } Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-08 15:35:19 UTC (rev 755) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-08 16:23:29 UTC (rev 756) @@ -17,6 +17,7 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; +import fr.cemagref.simexplorer.is.attachment.Attachment; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; @@ -24,11 +25,13 @@ import fr.cemagref.simexplorer.is.ui.swing.SimExplorerUIRefreshHelper; import fr.cemagref.simexplorer.is.ui.swing.actions.util.ShowTabAbstractAction; import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; +import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeHelper; import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode; import fr.cemagref.simexplorer.is.ui.swing.tab.JApplicationDetailTab; import javax.swing.DefaultComboBoxModel; -import javax.swing.DefaultListModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; @@ -63,17 +66,22 @@ VersionSelectionListener versionListener; + AttachmentSelectionListener attachmentListener; + public ShowDetailTabAction(String name) { super(name); navigationListener = new NavigationSelectionListener(); versionListener = new VersionSelectionListener(); + attachmentListener = new AttachmentSelectionListener(); } protected void initFirstUsage(final JApplicationDetailTab ui, final DetailTabModel model) { // add a listener on navigation tree ui.getNavigationTree().addTreeSelectionListener(navigationListener); - // add a listener on version list + // add a listener on versions list ui.getDetailVersions().addItemListener(versionListener); + // add a listener on attachments list + ui.getDetailAttachments().addListSelectionListener(attachmentListener); } protected void initUI(JApplicationDetailTab ui, DetailTabModel model) { @@ -87,14 +95,11 @@ */ protected class NavigationSelectionListener implements TreeSelectionListener, PropertyChangeListener { - public NavigationSelectionListener() { - // only listen on SELECTED_VERSION_INDEX_PROPERTY_CHANGED - // to rebuild detail panel + public NavigationSelectionListener() { getTabModel().addPropertyChangeListener(DetailTabModel.Properties.SELECTED_NODE_PROPERTY_CHANGED, this); } public void valueChanged(TreeSelectionEvent e) { - JApplicationDetailTab ui = getTabUI(); DetailTabModel model = getTabModel(); TreePath path = e.getNewLeadSelectionPath(); @@ -114,13 +119,16 @@ LoggableElement element = node == null || !(node.getUserObject() instanceof LoggableElement) ? null : ((LoggableElement) node.getUserObject()); boolean history = element != null; Version selectedVersion; + Integer selectedAttachment; Version[] versions; if (!history) { versions = null; selectedVersion = null; + selectedAttachment=null; } else { versions = StorageServiceHelper.getVersions(getContext(), model.isRemote(), element.getMetaData().getUuid()); selectedVersion = element.getMetaData().getVersion(); + selectedAttachment=element.getMetaData().getAttachments().isEmpty()?null:0; } model.setVersions(versions); @@ -132,8 +140,9 @@ // on positionne la version selectionnee model.setSelectedVersion(selectedVersion); - // update actions on selected node - SimExplorerUIRefreshHelper.refreshDetailActions(ui, node); + // on positionne l'attachment selectionne + model.setSelectedAttachmentIndex(selectedAttachment); + } /** @@ -150,12 +159,18 @@ DefaultComboBoxModel historyModel = (DefaultComboBoxModel) ui.getDetailVersions().getModel(); boolean wasEnable = versionListener.isEnabled(); + boolean wasEnable2 = attachmentListener.isEnabled(); // disable version listener on selection (we already have updated model) versionListener.setEnabled(false); + attachmentListener.setEnabled(false); // refresh ui SimExplorerUIRefreshHelper.resetHistory(ui, model, historyModel); // push back previous state of version listener versionListener.setEnabled(wasEnable); + attachmentListener.setEnabled(wasEnable2); + // update actions on toolbar + LoggableElementTreeNode node = LoggableElementTreeHelper.getSelectedNodeOrRootNode(ui.getNavigationTree()); + SimExplorerUIRefreshHelper.refreshDetailActions(ui, model, node); } } @@ -182,18 +197,25 @@ if (selectedItem == null) { throw new NullPointerException("can not have a selectedItem null"); } + Integer selectedAttachment; Version selectedVersion = Version.valueOf(selectedItem.toString()); - log.debug("selected version (" + selectedVersion+ ") " + selectedItem); + log.debug("selected version (" + selectedVersion + ") " + selectedItem); metas = StorageServiceHelper.getMetaData( getContext(), model.isRemote(), model.getSelectedNode().getMetaData().getUuid(), selectedVersion.toString() ); + + selectedAttachment=metas.getAttachments().isEmpty()?null:0; + model.setDetail(metas); // finally change selectedIndex model.setSelectedVersion(selectedVersion); + + // on positionne l'attachment selectionne + model.setSelectedAttachmentIndex(selectedAttachment); } /** @@ -210,16 +232,24 @@ DetailTabModel model = getTabModel(); LoggableElement selectedNode = model.getSelectedNode(); boolean wasEnable = isEnabled(); + boolean wasEnable2 = attachmentListener.isEnabled(); // disable this listener, while updating list model, it will // change the selection, and we don't want the model to be updated // again setEnabled(false); + attachmentListener.setEnabled(false); + if (index == null || index == -1) { SimExplorerUIRefreshHelper.resetDetailPanel(ui); } else { SimExplorerUIRefreshHelper.updateDetailPanel(index, ui, model, selectedNode); } setEnabled(wasEnable); + attachmentListener.setEnabled(wasEnable2); + ui.getDetailAttachments().setSelectedIndex(0); + // update actions on toolbar + LoggableElementTreeNode node = LoggableElementTreeHelper.getSelectedNodeOrRootNode(ui.getNavigationTree()); + SimExplorerUIRefreshHelper.refreshDetailActions(ui, model, node); } public boolean isEnabled() { @@ -232,4 +262,59 @@ } + private class AttachmentSelectionListener implements PropertyChangeListener, ListSelectionListener { + + protected boolean enabled; + + public AttachmentSelectionListener() { + enabled = true; + getTabModel().addPropertyChangeListener(DetailTabModel.Properties.SELECTED_ATTACHMENT_INDEX_PROPERTY_CHANGED, this); + } + + public void valueChanged(ListSelectionEvent e) { + if (!isEnabled()) { + return; + } + JApplicationDetailTab ui = getTabUI(); + DetailTabModel model = getTabModel(); + Object selectedItem = ui.getDetailAttachments().getSelectedValue(); + if (selectedItem == null) { + throw new NullPointerException("can not have a attachment null"); + } + Attachment attachment = (Attachment) selectedItem; + log.debug("selected attachment (" + attachment + ") " + selectedItem); + + // finally change selectedIndex + model.setSelectedAttachmentIndex(ui.getDetailAttachments().getSelectedIndex()); + } + + /** + * When the model modifies his data, ui must be updated. + * <p/> + * Note : <b>Only used when the selectedVersion is not null.</b> + * + * @param evt property changed event + */ + public void propertyChange(PropertyChangeEvent evt) { + log.debug(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue()); + JApplicationDetailTab ui = getTabUI(); + DetailTabModel model = getTabModel(); + boolean wasEnable = isEnabled(); + // disable this listener, while updating list model, it will + // change the selection, and we don't want the model to be updated + // again + setEnabled(false); + SimExplorerUIRefreshHelper.refreshDownloadAttachmentAction(ui, model); + setEnabled(wasEnable); + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + } + } Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java 2008-02-08 15:35:19 UTC (rev 755) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java 2008-02-08 16:23:29 UTC (rev 756) @@ -75,6 +75,7 @@ * si la liste des versions est nulle) */ protected Integer selectedVersionIndex; + /** * l'index de l'attachment sélectionné dans la liste des attachments (ou * null si pas liste vide) @@ -87,11 +88,11 @@ */ protected MetaData detail; - public String getName() { return tab.name(); } + public boolean isRemote() { return remote; } @@ -112,7 +113,7 @@ return selectedAttachmentIndex; } - public Attachment getAttachment() { + public Attachment getSelectedAttachment() { return selectedAttachmentIndex == null || selectedAttachmentIndex == -1 ? null : getDetail().getAttachment(selectedAttachmentIndex); } @@ -158,7 +159,7 @@ public void setSelectedAttachmentIndex(Integer selectedAttachmentIndex) { Integer oldSelectedAttachmentIndex = this.selectedAttachmentIndex; this.selectedAttachmentIndex = selectedAttachmentIndex; - // ui must update detail panel for the selected node and version + // ui must update button downloadAttachment accessibility firePropertyChange(Properties.SELECTED_ATTACHMENT_INDEX_PROPERTY_CHANGED, oldSelectedAttachmentIndex, selectedAttachmentIndex); } @@ -192,11 +193,11 @@ versions = null; resetSelectedVersion(); detail = null; - selectedAttachmentIndex=null; } public void resetSelectedVersion() { selectedVersionIndex = null; + selectedAttachmentIndex=null; } protected PropertyChangeSupport changeSupport;
participants (1)
-
tchemit@users.labs.libre-entreprise.org