Author: tchemit Date: 2008-02-19 16:13:27 +0000 (Tue, 19 Feb 2008) New Revision: 1119 Added: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryUnconnectAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/HistoryAbstractAction.java Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryPreviousAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/UnconnectAction.java trunk/simexplorer-is/simexplorer-is-swing/src/resources/jaxx/simexplorer-is-swing-actions.properties Log: refactoring history actions. introduce atomics history actions (previous, next, but also unconnect (to remove all remote entries) and use it todo : introduce delete action (a elementwas remote froma server) Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java 2008-02-19 15:24:39 UTC (rev 1118) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java 2008-02-19 16:13:27 UTC (rev 1119) @@ -18,14 +18,10 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; -import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper; -import fr.cemagref.simexplorer.is.ui.swing.JDetailTab; -import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction; -import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; +import fr.cemagref.simexplorer.is.ui.swing.actions.util.HistoryAbstractAction; import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode; +import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel; -import java.awt.event.ActionEvent; - /** @author chemit */ @jaxx.runtime.builder.ActionConfig( actionCommand = "historyNext", @@ -36,37 +32,21 @@ mnemonic = 'N', hideActionText = true ) -public class HistoryNextAction extends SimExplorerAbstractTabAction { +public class HistoryNextAction extends HistoryAbstractAction { - DetailTabModel model; - private static final long serialVersionUID = 2165684159831076054L; public HistoryNextAction(String name) { super(name); } - @Override - protected boolean beforeAction(ActionEvent e) throws Exception { - if (!super.beforeAction(e)) { - return false; - } - model = (DetailTabModel) getModel(); - return model.getHistory().hasNext(); + protected boolean hasHistoryEntry(HistoryModel<EntityTreeNode> model) { + return model.hasNext(); } - @Override - protected void doAction(ActionEvent e) throws Exception { - EntityTreeNode node = model.getHistory().gotoNext(); - model.synch(node); - //model.setRemote(node.isRemote()); - //model.setRootNode((LoggableElement) node.getUserObject()); - DetailTabRefreshHelper.updateDetailNavigationTree((JDetailTab) getUI(), model.getHistory()); + protected EntityTreeNode getHistoryEntry(HistoryModel<EntityTreeNode> model) { + EntityTreeNode node; + node = model.gotoNext(); + return node; } - - @Override - protected void clear() { - super.clear(); - model = null; - } } \ No newline at end of file Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryPreviousAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryPreviousAction.java 2008-02-19 15:24:39 UTC (rev 1118) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryPreviousAction.java 2008-02-19 16:13:27 UTC (rev 1119) @@ -18,14 +18,10 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; -import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper; -import fr.cemagref.simexplorer.is.ui.swing.JDetailTab; -import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction; -import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; +import fr.cemagref.simexplorer.is.ui.swing.actions.util.HistoryAbstractAction; import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode; +import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel; -import java.awt.event.ActionEvent; - /** @author chemit */ @jaxx.runtime.builder.ActionConfig( actionCommand = "historyPrevious", @@ -36,35 +32,22 @@ mnemonic = 'N', hideActionText = true ) -public class HistoryPreviousAction extends SimExplorerAbstractTabAction { +public class HistoryPreviousAction extends HistoryAbstractAction { - DetailTabModel model; - private static final long serialVersionUID = 2165684159831076054L; public HistoryPreviousAction(String name) { super(name); } - @Override - protected boolean beforeAction(ActionEvent e) throws Exception { - if (!super.beforeAction(e)) { - return false; - } - model = (DetailTabModel) getModel(); - return model.getHistory().hasPrevious(); + protected boolean hasHistoryEntry(HistoryModel<EntityTreeNode> model) { + return model.hasPrevious(); } - @Override - protected void doAction(ActionEvent e) throws Exception { - EntityTreeNode node = model.getHistory().gotoPrevious(); - model.synch(node); - DetailTabRefreshHelper.updateDetailNavigationTree((JDetailTab) getUI(), model.getHistory()); + protected EntityTreeNode getHistoryEntry(HistoryModel<EntityTreeNode> model) { + EntityTreeNode node; + node = model.gotoPrevious(); + return node; } - @Override - protected void clear() { - super.clear(); - model = null; - } } \ No newline at end of file Copied: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryUnconnectAction.java (from rev 1113, trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java) =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryUnconnectAction.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryUnconnectAction.java 2008-02-19 16:13:27 UTC (rev 1119) @@ -0,0 +1,78 @@ +/* +* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin, +* Tony Chemit, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.ui.swing.actions; + +import fr.cemagref.simexplorer.is.ui.swing.actions.util.HistoryAbstractAction; +import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode; +import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel; + +import java.util.Iterator; +import java.util.List; + +/** @author chemit */ + at jaxx.runtime.builder.ActionConfig( + actionCommand = "historyUnconnect", + name = "simexplorer.action.historyUnconnect", + shortDescription = "simexplorer.action.historyUnconnect.tooltip", + longDescription = "simexplorer.action.historyUnconnect.help", + //smallIcon = "action/history-next.png", + //mnemonic = 'N', + hideActionText = true +) +public class HistoryUnconnectAction extends HistoryAbstractAction { + + private static final long serialVersionUID = 2165684159831076054L; + + public HistoryUnconnectAction(String name) { + super(name); + } + + protected boolean hasHistoryEntry(HistoryModel<EntityTreeNode> model) { + return !model.isEmpty(); + } + + protected EntityTreeNode getHistoryEntry(HistoryModel<EntityTreeNode> model) { + EntityTreeNode current = model.getCurrent(); + List<EntityTreeNode> datas = model.getData(); + for (Iterator<EntityTreeNode> it = datas.iterator(); it.hasNext();) { + if (it.next().isRemote()) { + it.remove(); + } + } + if (datas.isEmpty()) { + // pas de position + model.setCurrentIndex(null); + return null; + } + Integer pos; + if (!current.isRemote()) { + // on doit repositionner sur l'élément local courant + pos = datas.indexOf(current); + } else { + // on se met sur le dernier element + pos = datas.size() - 1; + } + // on repositionne sur le dernier element de l'historique + model.setCurrentIndex(pos); + EntityTreeNode node; + node = model.getCurrent(); + return node; + } + +} \ No newline at end of file Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/UnconnectAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/UnconnectAction.java 2008-02-19 15:24:39 UTC (rev 1118) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/UnconnectAction.java 2008-02-19 16:13:27 UTC (rev 1119) @@ -24,6 +24,7 @@ import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper; import fr.cemagref.simexplorer.is.ui.swing.SimExplorerMainUI; import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab; +import fr.cemagref.simexplorer.is.ui.swing.SimExplorerActionManager; import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractAction; import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel; @@ -32,8 +33,6 @@ import javax.swing.JTabbedPane; import java.awt.event.ActionEvent; -import java.util.Iterator; -import java.util.List; /** * Action pour se deconnecter du serveur distant @@ -71,37 +70,11 @@ getContext().setToken(null); //TODO disconnect from server ? // must clean the history of detail tab - DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel(); + //DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel(); - history = model.getHistory(); - if (history.isEmpty()) { - // nothing to do - return; - } - EntityTreeNode current = history.getCurrent(); + // remove all remote entries from history + SimExplorerActionManager.fireAction("historyUnconnect",e.getSource()); - List<EntityTreeNode> datas = history.getData(); - for (Iterator<EntityTreeNode> it = datas.iterator(); it.hasNext();) - { - if (it.next().isRemote()) { - it.remove(); - } - } - if (datas.isEmpty()) { - // pas de position - history.setCurrentIndex(null); - } else { - Integer pos; - if (!current.isRemote()) { - // on doit repositionner sur l'élément local courant - pos = datas.indexOf(current); - } else { - // on se met sur le dernier element - pos = datas.size() - 1; - } - // on repositionne sur le dernier element de l'historique - history.setCurrentIndex(pos); - } } /** @@ -136,19 +109,20 @@ // close tab SimExplorerTab.synchronize.closeTab(container); } - if (SimExplorerTab.detail.isTabVisible(container) && history != null) { + /*if (SimExplorerTab.detail.isTabVisible(container) && history != null) { if (history.isEmpty()) { // close tab, no more history SimExplorerTab.detail.closeTab(container); } else { // select current history element EntityTreeNode node = history.getCurrent(); + model.synch(node); //model.setRemote(node.isRemote()); //model.setRootNode((LoggableElement) node.getUserObject()); DetailTabRefreshHelper.updateDetailNavigationTree(tabUI, model.getHistory()); } - } + }*/ if (SimExplorerTab.detail.isTabVisible(container)) { DetailTabRefreshHelper.refreshSynchroniseAction(tabUI, model); Added: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/HistoryAbstractAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/HistoryAbstractAction.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/HistoryAbstractAction.java 2008-02-19 16:13:27 UTC (rev 1119) @@ -0,0 +1,105 @@ +/* +* ##% Copyright (C) 2007, 2008 Code Lutin, Tony Chemit, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.ui.swing.actions.util; + +import fr.cemagref.simexplorer.is.entities.metadata.MetaData; +import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper; +import fr.cemagref.simexplorer.is.ui.swing.JDetailTab; +import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab; +import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; +import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode; +import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel; + +import java.awt.event.ActionEvent; + +/** + * Action de base pour les actions d'historique + * + * @author chemit + */ +public abstract class HistoryAbstractAction extends SimExplorerAbstractTabAction { + + protected HistoryModel<EntityTreeNode> history; + + private static final long serialVersionUID = -2880632145083173463L; + + /** + * @param model le model d'historique non null + * @return <code>true</code> if il existe une entree adequate a l'action + * dans l'historique + */ + protected abstract boolean hasHistoryEntry(HistoryModel<EntityTreeNode> model); + + /** + * @param model lemodel d'historique, non null + * @return le noeud à partir de l'historique + */ + protected abstract EntityTreeNode getHistoryEntry(HistoryModel<EntityTreeNode> model); + + protected HistoryAbstractAction(String name) { + super(name); + } + + @Override + protected boolean beforeAction(ActionEvent e) throws Exception { + if (!super.beforeAction(e)) { + return false; + } + // le modele est statique pour le moment + setTab(SimExplorerTab.detail); + DetailTabModel model = (DetailTabModel) getModel(); + if (model == null) { + return false; + } + history = model.getHistory(); + return history != null && hasHistoryEntry(history); + } + + @Override + protected void doAction(ActionEvent e) throws Exception { + EntityTreeNode node = getHistoryEntry(history); + if (log.isDebugEnabled()) { + log.debug("current history entry " + node); + } + DetailTabModel model = (DetailTabModel) getModel(); + if (node == null) { + model.synch(model.isRemote(), (MetaData) null); + } else { + model.synch(node); + } + } + + @Override + public void updateUI() { + if (!history.isEmpty()) { + // select current history element + DetailTabRefreshHelper.updateDetailNavigationTree((JDetailTab) getUI(), history); + } else if (getTab().isTabVisible(getTabContainer())) { + // close tab, no more history + getTab().closeTab(getTabContainer()); + } + } + + @Override + protected void clear() { + super.clear(); + history = null; + // this should be after a multi-tab + setTab(null); + } +} Modified: trunk/simexplorer-is/simexplorer-is-swing/src/resources/jaxx/simexplorer-is-swing-actions.properties =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/resources/jaxx/simexplorer-is-swing-actions.properties 2008-02-19 15:24:39 UTC (rev 1118) +++ trunk/simexplorer-is/simexplorer-is-swing/src/resources/jaxx/simexplorer-is-swing-actions.properties 2008-02-19 16:13:27 UTC (rev 1119) @@ -64,6 +64,7 @@ action.detailToTree=fr.cemagref.simexplorer.is.ui.swing.actions.DetailToTreeAction # navigation history actions +action.historyUnconnect=fr.cemagref.simexplorer.is.ui.swing.actions.HistoryUnconnectAction action.historyNext=fr.cemagref.simexplorer.is.ui.swing.actions.HistoryNextAction action.historyPrevious=fr.cemagref.simexplorer.is.ui.swing.actions.HistoryPreviousAction