Author: tchemit Date: 2008-02-14 15:33:45 +0000 (Thu, 14 Feb 2008) New Revision: 965 Removed: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java Log: introduction d'une classe pour les refresh de chaque onglet + mutualisation code. Deleted: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java 2008-02-14 15:33:29 UTC (rev 964) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java 2008-02-14 15:33:45 UTC (rev 965) @@ -1,311 +0,0 @@ -/* -* ##% 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; - -import fr.cemagref.simexplorer.is.entities.data.LoggableElement; -import fr.cemagref.simexplorer.is.entities.metadata.MetaData; -import fr.cemagref.simexplorer.is.ui.SimExplorer; -import fr.cemagref.simexplorer.is.ui.swing.actions.util.ChangeI18nAbstractAction; -import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; -import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; -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.model.PaginationModel; -import fr.cemagref.simexplorer.is.ui.swing.model.SynchronizeTabModel; -import org.codelutin.i18n.CountryEnum; -import static org.codelutin.i18n.I18n._; -import org.codelutin.i18n.LanguageEnum; - -import javax.swing.AbstractButton; -import javax.swing.JComboBox; -import javax.swing.JTabbedPane; -import javax.swing.JTree; -import javax.swing.SwingUtilities; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeNode; -import java.text.SimpleDateFormat; -import java.util.regex.Matcher; - -/** - * Cette classe contient les méthodes utiles et réutilisables pour rafraichit - * les ui. - * <p/> - * Les méthodes utilisent les données stockées dans les modèles pour rafraichir - * les uis concernées. - * <p/> - * Note : <b>Dans toutes ces méthodes, NOS modèles ne doivent en aucun cas être modifiés</b> - * <p/> - * Par contre les modèles des ui peuvent être modifiés (par exemple modèle d'arbre, de liste) - * mais uniquement à partir de nos modèles. - * - * @author chemit - */ -public class SimExplorerUIRefreshHelper { - - public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS"); - - /** - * Rafraichit un onglet de type liste à partir de son modèle. - * - * @param ui l'onglet de liste à utiliser - * @param model le modèle de liste à utiliser - */ - public static void refreshListTabUI(final JListTab ui, final ListTabModel model) { - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - - // refresh search text - ui.getSearchText().setText(model.getQuery()); - - // refresh search actions - refreshSearchActions(ui, model); - - // refresh changePage combobox - refreshChangePageCombo(ui, model); - - // refresh changeSizor combo - refreshChangeSizorCombo(ui, model); - - // refresh pagination buttons - refreshPagination(ui, model.getPagination()); - - // table data model may have changed, must revalidate - ui.getTable().invalidate(); - - // parent must be repaint (will revalidate layout for table) - ui.repaint(); - } - }); - } - - public static void refreshListTablePopupMenu(final JListTab ui, final ListTabModel model) { - int index = model.getSelectedIndex(); - if (index == -1) { - // disable popupmenu - ui.getTablePopupMenu().setEnabled(false); - return; - } - ui.getTablePopupMenu().setEnabled(true); - MetaData data = model.get(index); - - String text = data.getName() + " [" + data.getVersion() + "]"; - - String tooltip = _("simexplorer.action.downloadLoggableElement.tooltip", text); - updateButton(ui.getDownloadElement(), true, tooltip); - - tooltip = _("simexplorer.action.deleteLoggableElement.tooltip", text); - updateButton(ui.getDeleteElement(), true, tooltip); - - tooltip = _("simexplorer.action.export.tooltip", text); - updateButton(ui.getExportElement(), true, tooltip); - - tooltip = _("simexplorer.action.synchronize.tooltip", text); - updateButton(ui.getShowTab_synchronize(), true, tooltip); - } - - /** - * Rafraichit les actions i18n dans le menu en fonction de la locale - * actuellement utilisée. - * - * @param ui l'ui principale - */ - public static void refreshI18nActions(SimExplorerMainUI ui) { - LanguageEnum language = SimExplorer.getContext().getConfig().getUserLanguage(); - CountryEnum country = SimExplorer.getContext().getConfig().getUserCountry(); - String[] actions = SimExplorerActionManager.getFactory().getActionNames(); - for (String actionName : actions) { - Matcher matcher = ChangeI18nAbstractAction.PATTERN_NAME.matcher(actionName); - if (!matcher.matches()) { - continue; - } - AbstractButton button = (AbstractButton) ui.getObjectById(actionName); - ChangeI18nAbstractAction action = (ChangeI18nAbstractAction) button.getAction(); - boolean enable = !action.equalsLocale(language, country); - button.setEnabled(enable); - } - } - - /** - * Rafraichit les actions de recherche d'un onglet de type liste. - * - * @param ui l'onglet de liste à utiliser - * @param model le modèle de liste à utiliser - */ - public static void refreshSearchActions(JListTab ui, ListTabModel model) { - String text = ui.getSearchText().getText(); - ui.getSearch().setEnabled(model.hasQuery() || !text.isEmpty()); - ui.getResetSearch().setEnabled(model.hasQuery() || !text.isEmpty()); - } - - /** - * Rafraichit les uis après un changement de status de connexion de l'utilisateur. - * <p/> - * Si l'utilisateur est déconnecté, alors toutes les ui et actions liées au - * mode remote sont fermées et les actions correspondantes sont rendues - * inaccessibles. - * - * @param ui l'ui principale - * @param isConnected flag pour indique si l'utiliseur est connecté - */ - public static void refreshConnnectState(SimExplorerMainUI ui, final boolean isConnected) { - - //SwingUtilities.invokeLater(new Runnable() { - // public void run() { - ui.getConnect().setEnabled(!isConnected); - ui.getUnconnect().setEnabled(isConnected); - ui.getShowTab_remote().setEnabled(isConnected); - ui.getToggleTab_remote().setEnabled(isConnected); - - if (!isConnected) { - // close all connected ui - JTabbedPane container = ui.getContent(); - - if (SimExplorerTab.remote.isTabVisible(container)) { - // close tab - SimExplorerTab.remote.closeTab(container); - } - if (SimExplorerTab.synchronize.isTabVisible(container)) { - // close tab - SimExplorerTab.synchronize.closeTab(container); - } - if (SimExplorerTab.detail.isTabVisible(container)) { - DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel(); - if (model.isRemote()) { - // close tab - SimExplorerTab.detail.closeTab(container); - } - } - } - // } - //}); - } - - public static void refreshExportElementToRemoteAction(JSynchronizeTab ui, SynchronizeTabModel model) { - LoggableElement sNode = model.getLocalSelectedNode(); - boolean enabled = sNode != null; - String tooltip = !enabled ? null : _("simexplorer.action.exportToRemote.tooltip", sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]"); - updateButton(ui.getExportElementToRemote(), enabled, tooltip); - } - - public static void refreshExportElementToLocalAction(JSynchronizeTab ui, SynchronizeTabModel model) { - LoggableElement sNode = model.getRemoteSelectedNode(); - boolean enabled = sNode != null; - String tooltip = !enabled ? null : _("simexplorer.action.exportToLocal.tooltip", sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]"); - updateButton(ui.getExportElementToLocal(), enabled, tooltip); - } - - public static void refreshTreeLocalActions(JSynchronizeTab ui, LoggableElementTreeNode node) { - String tooltip; - boolean enabled = node != null && !node.isLeaf() && node.getChildCount() > 0; - tooltip = !enabled ? null : _("simexplorer.action.collapseAll.tooltip", node.getUserObject()); - updateButton(ui.getCollapseAllLocal(), enabled, tooltip); - tooltip = !enabled ? null : _("simexplorer.action.expandAll.tooltip", node.getUserObject()); - updateButton(ui.getExpandAllLocal(), enabled, tooltip); - } - - public static void refreshTreeRemoteActions(JSynchronizeTab ui, LoggableElementTreeNode node) { - String tooltip; - boolean enabled = node != null && !node.isLeaf() && node.getChildCount() > 0; - tooltip = !enabled ? null : _("simexplorer.action.collapseAll.tooltip", node.getUserObject()); - updateButton(ui.getCollapseAllRemote(), enabled, tooltip); - tooltip = !enabled ? null : _("simexplorer.action.expandAll.tooltip", node.getUserObject()); - updateButton(ui.getExpandAllRemote(), enabled, tooltip); - } - - public static void updateSynchronizeNavigationTrees(JSynchronizeTab ui, SynchronizeTabModel model) { - - TreeNode sourceRoot = LoggableElementTreeHelper.buildLoggableElementNode(model.getSource()); - TreeNode destinationRoot = model.getDestination() == null ? null : LoggableElementTreeHelper.buildLoggableElementNode(model.getDestination()); - - JTree sourceTree, destinationTree; - if (model.isRemote()) { - // source is remote - sourceTree = ui.getContentTreeRemote(); - destinationTree = ui.getContentTreeLocal(); - } else { - // source is local - sourceTree = ui.getContentTreeLocal(); - destinationTree = ui.getContentTreeRemote(); - } - - ((DefaultTreeModel) sourceTree.getModel()).setRoot(sourceRoot); - ((DefaultTreeModel) destinationTree.getModel()).setRoot(destinationRoot); - - // by default select the root node - sourceTree.setSelectionRow(0); - if (destinationRoot == null) { - destinationTree.getSelectionModel().clearSelection(); - - } else { - destinationTree.setSelectionRow(0); - } - //sourceTree.invalidate(); - //destinationTree.invalidate(); - //ui.repaint(); - } - - protected static void refreshPagination(JListTab ui, PaginationModel pagination) { - int page = pagination.getCurrentPage(); - boolean notLast = page + 1 < pagination.getNbPages(); - ui.getGoNextPage().setEnabled(notLast); - ui.getGoLastPage().setEnabled(notLast); - } - - protected static void refreshChangeSizorCombo(JListTab ui, ListTabModel model) { - JComboBox combo = ui.getChangeSizor(); - String s = model.getPagination().getWidth() + ""; - if (!s.equals(String.valueOf(combo.getSelectedItem()))) { - combo.setEnabled(false); - combo.setSelectedItem(s); - combo.setEnabled(true); - } - } - - protected static void refreshChangePageCombo(JListTab ui, ListTabModel model) { - JComboBox combo = ui.getGoPage(); - long size = model.getPagination().getNbPages(); - combo.setEnabled(false); - //System.out.println("page old size : " + combo.getItemCount() + " new size : " + size); - if (size < combo.getItemCount()) { - while (size < combo.getItemCount()) { - combo.removeItemAt(combo.getItemCount() - 1); - } - } else { - while (size > combo.getItemCount()) { - combo.addItem(combo.getItemCount()); - } - } - //System.out.println("new page size : " + combo.getItemCount()); - - combo.setSelectedIndex(model.getPagination().getCurrentPage()); - boolean b = combo.getItemCount() > 1; - combo.setEnabled(b); - ui.getCurrentPage().setEnabled(b); - } - - protected static void updateButton(AbstractButton button, boolean enabled, String tooltip) { - button.setEnabled(enabled); - button.setToolTipText(tooltip); - } - - protected SimExplorerUIRefreshHelper() { - // do not instanciate me please - } -}