Author: tchemit Date: 2008-02-20 13:50:41 +0000 (Wed, 20 Feb 2008) New Revision: 1135 Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java Log: refactoring model d'onglet de synchronisation Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java 2008-02-20 13:49:46 UTC (rev 1134) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java 2008-02-20 13:50:41 UTC (rev 1135) @@ -19,9 +19,9 @@ package fr.cemagref.simexplorer.is.ui.swing; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; -import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode; import fr.cemagref.simexplorer.is.ui.swing.model.SynchronizeTabModel; +import javax.swing.JTabbedPane; import javax.swing.JTree; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; @@ -43,60 +43,66 @@ public class SynchronizeTabRefreshHelper { protected static void refreshSynchronizeTab(JSynchronizeTab ui, SynchronizeTabModel model) { - SynchronizeTabRefreshHelper.refreshTreeLocalActions(ui, null); - SynchronizeTabRefreshHelper.refreshTreeRemoteActions(ui, null); - SynchronizeTabRefreshHelper.refreshExportElement(ui, model, true); - SynchronizeTabRefreshHelper.refreshExportElement(ui, model, false); - SynchronizeTabRefreshHelper.refreshRootNodes(ui, model); + EntityTreeNodeHelper.refreshTreeActions(ui.getCollapseButton(false), ui.getExpandButton(false), null); + EntityTreeNodeHelper.refreshTreeActions(ui.getCollapseButton(true), ui.getExpandButton(true), null); + + refreshExportElement(ui, model, true); + refreshExportElement(ui, model, false); + + refreshRootNode(ui, model, false); + refreshRootNode(ui, model, true); } - public static void refreshRootNodes(JSynchronizeTab ui, SynchronizeTabModel model) { + public static void updateTree(JTabbedPane container, LoggableElement oldLocalRoot, LoggableElement oldRemoteRoot) { - boolean remote = model.isRemote(); - TreeNode sourceRoot = EntityTreeNodeHelper.build(model.getSource(), remote); - TreeNode destinationRoot = model.getDestination() == null ? null : EntityTreeNodeHelper.build(model.getDestination(), !remote); + SimExplorerTab tab = SimExplorerTab.synchronize; - JTree sourceTree, destinationTree; - if (remote) { - // source is remote - sourceTree = ui.getContentTreeRemote(); - destinationTree = ui.getContentTreeLocal(); - } else { - // source is local - sourceTree = ui.getContentTreeLocal(); - destinationTree = ui.getContentTreeRemote(); + SynchronizeTabModel model = (SynchronizeTabModel) tab.getModel(); + if (model.getRootNode(false) == null && model.getRootNode(true) == null) { + // on doit supprimer la vue + tab.closeTab(container); } - ((DefaultTreeModel) sourceTree.getModel()).setRoot(sourceRoot); - ((DefaultTreeModel) destinationTree.getModel()).setRoot(destinationRoot); - if (sourceRoot == null) { - sourceTree.getSelectionModel().clearSelection(); - } else { - sourceTree.setSelectionRow(0); + JSynchronizeTab ui = (JSynchronizeTab) tab.getUI(); + + if (model.getRootNode(false) != oldLocalRoot) { + // rebuild node ? + refreshRootNode(ui, model, false); } - if (destinationRoot == null) { - destinationTree.getSelectionModel().clearSelection(); + if (model.getRootNode(true) != oldRemoteRoot) { + // rebuild node ? + refreshRootNode(ui, model, true); + } + } + + protected static void refreshRootNode(JSynchronizeTab ui, SynchronizeTabModel model, boolean remote) { + + LoggableElement element; + TreeNode root = null; + + element = model.getRootNode(remote); + if (element != null) { + root = EntityTreeNodeHelper.build(element, remote); + } + + JTree tree = ui.getTree(remote); + + ((DefaultTreeModel) tree.getModel()).setRoot(root); + + if (root == null) { + tree.getSelectionModel().clearSelection(); } else { - destinationTree.setSelectionRow(0); + tree.setSelectionRow(0); } } public static void refreshExportElement(JSynchronizeTab ui, SynchronizeTabModel model, boolean remote) { LoggableElement sNode = model.getSelectedNode(remote); - MainUIRefreshHelper.refreshExportElement(remote ? ui.getExportElementToLocal() : ui.getExportElementToRemote(), remote, sNode); + MainUIRefreshHelper.refreshExportElement(ui.getExportButton(remote), remote, sNode); } - public static void refreshTreeLocalActions(JSynchronizeTab ui, EntityTreeNode node) { - EntityTreeNodeHelper.refreshTreeActions(ui.getCollapseAllLocal(), ui.getExpandAllLocal(), node); - } - - public static void refreshTreeRemoteActions(JSynchronizeTab ui, EntityTreeNode node) { - EntityTreeNodeHelper.refreshTreeActions(ui.getCollapseAllRemote(), ui.getExpandAllRemote(), node); - } - - protected SynchronizeTabRefreshHelper() { // do not instanciate me please } Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java 2008-02-20 13:49:46 UTC (rev 1134) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java 2008-02-20 13:50:41 UTC (rev 1135) @@ -19,84 +19,133 @@ package fr.cemagref.simexplorer.is.ui.swing.model; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; +import fr.cemagref.simexplorer.is.entities.metadata.Version; +import fr.cemagref.simexplorer.is.ui.SimExplorerContext; +import fr.cemagref.simexplorer.is.ui.StorageServiceHelper; /** - * Le model pour un Tab contenant 2 listes d'applications + * Le model pour un Tab contenant 2 arbres de navigation de LE * * @author chemit */ public class SynchronizeTabModel extends SimExplorerTabModel { + public static final String ROOT_LOCAL_NODE_PROPERTY_CHANGED = "rootLocalNodePropertyChanged"; + + public static final String ROOT_REMOTE_NODE_PROPERTY_CHANGED = "rootRemoteNodePropertyChanged"; + public static final String SELECTED_LOCAL_NODE_PROPERTY_CHANGED = "selectedLocalNodePropertyChanged"; public static final String SELECTED_REMOTE_NODE_PROPERTY_CHANGED = "selectedRemoteNodePropertyChanged"; private static final long serialVersionUID = -3623331875470531459L; - /** l'élément source de la demande de synchronisation */ - protected LoggableElement destination; + /** la racine de l'arbre de nivation local. */ + protected LoggableElement localRootNode; - /** l'élément destination de la demande de synchronisation */ - protected LoggableElement source; + /** la racine de l'abre de navigation distant. */ + protected LoggableElement remoteRootNode; - /** l'élément dans l'arbre de navigation sélectionné dans l'abre distant */ - protected LoggableElement remoteSelectedNode; - - /** l'élément dans l'arbre de navigation sélectionné dans l'abre local */ + /** l'élément dans l'arbre de navigation local sélectionné */ protected LoggableElement localSelectedNode; - public LoggableElement getSource() { - return source; - } + /** l'élément de l'arbre de navigation distant sélectionné */ + protected LoggableElement remoteSelectedNode; - public LoggableElement getDestination() { - return destination; + /** + * @param remote flag pour indiquer sur quel arbre on travaille + * @return le LE encapsulé dans le root de l'arbre de navigation, ou null + */ + public LoggableElement getRootNode(boolean remote) { + return remote ? remoteRootNode : localRootNode; } - public LoggableElement getLocalSelectedNode() { - return localSelectedNode; + /** + * @param remote flag pour indiquer sur quel arbre on travaille + * @return le LE encapsulé dans le noeud sélection de l'arbre de navigation, ou null + */ + public LoggableElement getSelectedNode(boolean remote) { + return remote ? remoteSelectedNode : localSelectedNode; } - public LoggableElement getRemoteSelectedNode() { - return remoteSelectedNode; + public String getRootProperty(boolean remote) { + return remote ? ROOT_REMOTE_NODE_PROPERTY_CHANGED : ROOT_LOCAL_NODE_PROPERTY_CHANGED; } - public LoggableElement getSelectedNode(boolean remote) { - return remote ? getRemoteSelectedNode() : getLocalSelectedNode(); + public String getSelectedProperty(boolean remote) { + return remote ? SELECTED_REMOTE_NODE_PROPERTY_CHANGED : SELECTED_LOCAL_NODE_PROPERTY_CHANGED; } - public LoggableElement getRootNode(boolean remote) { + public void setRootNode(LoggableElement source, boolean remote) { + String property = getRootProperty(remote); + LoggableElement oldRootNode = getRootNode(remote); if (remote) { - return isRemote() ? getLocalSelectedNode() : getRemoteSelectedNode(); + remoteRootNode = source; } else { - return isRemote() ? getRemoteSelectedNode() : getLocalSelectedNode(); + localRootNode = source; } + firePropertyChange(property, oldRootNode, source); } - public void setSource(LoggableElement source) { - this.source = source; + public void setSelectedNode(LoggableElement source, boolean remote) { + String property = getSelectedProperty(remote); + LoggableElement oldSelectedNode = getSelectedNode(remote); + if (remote) { + remoteSelectedNode = source; + } else { + localSelectedNode = source; + } + firePropertyChange(property, oldSelectedNode, source); } - public void setDestination(LoggableElement destination) { - this.destination = destination; - } + public void updateTabModel(SimExplorerContext context, DataEntityModel selected) { - public void setLocalSelectedNode(LoggableElement localSelectedNode) { - LoggableElement oldSelectedNode = this.localSelectedNode; - this.localSelectedNode = localSelectedNode; - firePropertyChange(SELECTED_LOCAL_NODE_PROPERTY_CHANGED, oldSelectedNode, localSelectedNode); - } + // on nettoye le model avant tout + reset(); - public void setRemoteSelectedNode(LoggableElement remoteSelectedNode) { - LoggableElement oldSelectedNode = this.remoteSelectedNode; - this.remoteSelectedNode = remoteSelectedNode; - firePropertyChange(SELECTED_REMOTE_NODE_PROPERTY_CHANGED, oldSelectedNode, remoteSelectedNode); + if (selected == null) { + // rien de plus à faire + return; + } + + boolean remote = selected.isRemote(); + String uuid = selected.getUuid(); + + // l'élément selectionné est bien la source + setSelectedItem(selected); + + DataEntityModel save = getSelectedItem(); + LoggableElement source = save.getLe(context); + + setSelectedItem(null); + + // recuperation des versions de l'element destination + Version[] versions = StorageServiceHelper.getVersions(context, !remote, uuid); + Version requiredVersion = null; + if (versions.length != 0) { + // on prend la dernière version disponible dans la base (i.e + // la première de la liste des versions :)) + requiredVersion = versions[0]; + } + + synch(!remote, uuid, requiredVersion); + + LoggableElement destination = getSelectedItem().getLe(context); + + // sauvegarde de la source + setRootNode(source, remote); + + // sauvegarde de la destination + setRootNode(destination, !remote); + + setSelectedItem(save); } + @Override public void reset() { super.reset(); localSelectedNode = remoteSelectedNode = null; - source = destination = null; + localRootNode = remoteRootNode = null; } } \ No newline at end of file
participants (1)
-
tchemit@users.labs.libre-entreprise.org