r1023 - in trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing: . actions actions/util model
Author: tchemit Date: 2008-02-16 15:14:13 +0000 (Sat, 16 Feb 2008) New Revision: 1023 Added: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java Removed: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeHelper.java Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java 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/actions/ChangePageAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/CollapseAllAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DetailToTreeAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DownloadAttachmentAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExpandAllAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportToLocalAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportToRemoteAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java Log: utilisation visiteur pour contruire les arbres de navigation : le code est lineaire :) utilisation EntityHelper renommage model Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -18,8 +18,8 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing; -import fr.cemagref.simexplorer.is.attachment.Attachment; -import fr.cemagref.simexplorer.is.entities.EntitiesAction; +import fr.cemagref.simexplorer.is.entities.attachment.Attachment; +import fr.cemagref.simexplorer.is.entities.EntityHelper; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; @@ -85,16 +85,14 @@ public static void refreshDownloadElementAction(JDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) { MetaData detail = model.getDetail(); - //boolean enabled = detail != null || LoggableElementTreeHelper.canDownload(node); - boolean enabled = EntitiesAction.DOWNLOAD.accept(node); + boolean enabled = EntityHelper.Action.DOWNLOAD.accept(node); String tooltip = !enabled ? null : _("simexplorer.action.downloadLoggableElement.tooltip", detail == null ? node.getUserObject() : detail.getName() + " [" + model.getSelectedVersion() + "]"); MainUIRefreshHelper.updateButton(ui.getDownloadElement(), enabled, tooltip); } protected static void refreshDeleteAction(JDetailTab ui, DetailTabModel model) { MetaData detail = model.getDetail(); - //boolean enabled = detail != null; - boolean enabled = EntitiesAction.DELETE.accept(detail); + boolean enabled = EntityHelper.Action.DELETE.accept(detail); String tooltip = !enabled ? null : _("simexplorer.action.deleteLoggableElement.tooltip", detail.getName() + " [" + model.getSelectedVersion() + "]"); MainUIRefreshHelper.updateButton(ui.getDeleteElement(), enabled, tooltip); } @@ -134,14 +132,14 @@ MetaData detail = model.getDetail(); LoggableElement sNode = model.getSelectedNode(); //boolean enabled = sNode != null && SimExplorer.getContext().isConnected() && sNode instanceof ExplorationApplication; - boolean enabled = SimExplorer.getContext().isConnected() && EntitiesAction.EXPORT.accept(sNode); + boolean enabled = SimExplorer.getContext().isConnected() && EntityHelper.Action.EXPORT.accept(sNode); - String text=null; + String text = null; if (enabled) { text = detail.getName() + " [" + model.getSelectedVersion() + "]"; } - MainUIRefreshHelper.refreshExportAction(enabled,model.isRemote(),text,ui.getExportElement()); - + MainUIRefreshHelper.refreshExportAction(enabled, model.isRemote(), text, ui.getExportElement()); + } public static void resetHistory(JDetailTab ui, DetailTabModel model, DefaultComboBoxModel historyModel) { @@ -187,9 +185,9 @@ ui.getNavigationTree().setSelectionRow(0); boolean enabled; enabled = model.size() > 1 && model.hasPrevious(); - MainUIRefreshHelper.updateButton(ui.getHistoryPrevious(), enabled, !enabled?null:_("simexplorer.action.historyPrevious.tooltip", model.getPrevious())); - enabled= model.size() > 1 && model.hasNext(); - MainUIRefreshHelper.updateButton(ui.getHistoryNext(), enabled, !enabled?null:_("simexplorer.action.historyNext.tooltip", model.getNext())); + MainUIRefreshHelper.updateButton(ui.getHistoryPrevious(), enabled, !enabled ? null : _("simexplorer.action.historyPrevious.tooltip", model.getPrevious())); + enabled = model.size() > 1 && model.hasNext(); + MainUIRefreshHelper.updateButton(ui.getHistoryNext(), enabled, !enabled ? null : _("simexplorer.action.historyNext.tooltip", model.getNext())); } public static void updateDetailPanel(Integer index, final JDetailTab ui, DetailTabModel model, LoggableElement selectedNode) { @@ -198,7 +196,7 @@ ui.getDetailVersions().setSelectedIndex(index); ui.getDetailHeader().setText(selectedNode.getMetaData().getName()); ui.getDetailDescriptorsHeader().setText(_("simexplorer.node.descriptors", detail.getDescriptors().size())); - ui.getDetailType().setText(detail.getType()); + ui.getDetailType().setText(EntityHelper.Type.getLibelle(detail)); String s = detail.getDescription(); String tooltip = s; if (s.length() > 32) { @@ -226,7 +224,8 @@ ui.getScrollAttachments().setVisible(false); nbAttachmentRows = 0; } else { - ui.getDetailAttachmentsHeader().setText(_("simexplorer.node.attachments", attachments.size())); + ui.getDetailAttachmentsHeader().setText(EntityHelper.Type.Attachment.getLibelles() + " (" + attachments.size() + ")"); + //ui.getDetailAttachmentsHeader().setText(_("simexplorer.node.attachments", attachments.size())); for (Attachment attachment : attachments) { listModel.addElement(attachment); } Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -18,7 +18,7 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing; -import fr.cemagref.simexplorer.is.entities.EntitiesAction; +import fr.cemagref.simexplorer.is.entities.EntityHelper; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.ui.SimExplorer; import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; @@ -92,13 +92,13 @@ String text = data.getName() + " [" + data.getVersion() + "]"; String tooltip = _("simexplorer.action.downloadLoggableElement.tooltip", text); - MainUIRefreshHelper.updateButton(ui.getDownloadElement(), EntitiesAction.DOWNLOAD.accept(data), tooltip); + MainUIRefreshHelper.updateButton(ui.getDownloadElement(), EntityHelper.Action.DOWNLOAD.accept(data), tooltip); tooltip = _("simexplorer.action.deleteLoggableElement.tooltip", text); - MainUIRefreshHelper.updateButton(ui.getDeleteElement(), EntitiesAction.DELETE.accept(data), tooltip); + MainUIRefreshHelper.updateButton(ui.getDeleteElement(), EntityHelper.Action.DELETE.accept(data), tooltip); boolean isConnected = SimExplorer.getContext().isConnected(); - boolean enabled = isConnected && EntitiesAction.EXPORT.accept(data); + boolean enabled = isConnected && EntityHelper.Action.EXPORT.accept(data); MainUIRefreshHelper.refreshExportAction(enabled,model.isRemote(),text,ui.getExportElement()); Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -30,6 +30,8 @@ import javax.swing.AbstractButton; import javax.swing.JTabbedPane; +import javax.swing.JTree; +import javax.swing.tree.TreePath; import java.util.regex.Matcher; /** @@ -159,4 +161,49 @@ } updateButton(button, enabled, tooltip); } + + public static LoggableElementTreeNode getSelectedNodeOrRootNode(JTree tree) { + TreePath path = tree.getSelectionPath(); + LoggableElementTreeNode node = null; + if (path != null) { + Object o = path.getLastPathComponent(); + if (o != null && !(o instanceof LoggableElementTreeNode)) { + return null; + } + node = (LoggableElementTreeNode) o; + } + if (node == null) { + // take the root node + Object root = tree.getModel().getRoot(); + if (root == null || !(root instanceof LoggableElementTreeNode)) { + return null; + } + node = (LoggableElementTreeNode) root; + } + return node; + } + + public static LoggableElementTreeNode getSelectedNode(JTree tree) { + TreePath path = tree.getSelectionPath(); + LoggableElementTreeNode node = null; + if (path != null) { + Object o = path.getLastPathComponent(); + if (o != null && !(o instanceof LoggableElementTreeNode)) { + return null; + } + node = (LoggableElementTreeNode) o; + } + return node; + } + + public static LoggableElementTreeNode getRootNode(JTree tree) { + LoggableElementTreeNode node; + // take the root node + Object root = tree.getModel().getRoot(); + if (root == null || !(root instanceof LoggableElementTreeNode)) { + return null; + } + node = (LoggableElementTreeNode) root; + return node; + } } 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-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -18,11 +18,11 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing; -import fr.cemagref.simexplorer.is.entities.EntitiesAction; +import fr.cemagref.simexplorer.is.entities.EntityHelper; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; -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.SynchronizeTabModel; +import fr.cemagref.simexplorer.is.ui.swing.model.TreeNodeBuilder; import javax.swing.JTree; import javax.swing.tree.DefaultTreeModel; @@ -46,7 +46,7 @@ public static void refreshExportElementToRemoteAction(JSynchronizeTab ui, SynchronizeTabModel model) { LoggableElement sNode = model.getLocalSelectedNode(); - boolean enabled = EntitiesAction.EXPORT.accept(sNode); + boolean enabled = EntityHelper.Action.EXPORT.accept(sNode); String text = null; if (enabled) { text = sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]"; @@ -56,7 +56,7 @@ public static void refreshExportElementToLocalAction(JSynchronizeTab ui, SynchronizeTabModel model) { LoggableElement sNode = model.getRemoteSelectedNode(); - boolean enabled = EntitiesAction.EXPORT.accept(sNode); + boolean enabled = EntityHelper.Action.EXPORT.accept(sNode); String text = null; if (enabled) { text = sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]"; @@ -74,11 +74,12 @@ public static void updateSynchronizeNavigationTrees(JSynchronizeTab ui, SynchronizeTabModel model) { - TreeNode sourceRoot = LoggableElementTreeHelper.buildLoggableElementNode(model.getSource(), model.isRemote()); - TreeNode destinationRoot = model.getDestination() == null ? null : LoggableElementTreeHelper.buildLoggableElementNode(model.getDestination(), !model.isRemote()); - + boolean remote = model.isRemote(); + TreeNode sourceRoot = TreeNodeBuilder.build(model.getSource(), remote); + TreeNode destinationRoot = model.getDestination() == null ? null : TreeNodeBuilder.build(model.getDestination(), !remote); + JTree sourceTree, destinationTree; - if (model.isRemote()) { + if (remote) { // source is remote sourceTree = ui.getContentTreeRemote(); destinationTree = ui.getContentTreeLocal(); Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -22,7 +22,7 @@ import fr.cemagref.simexplorer.is.ui.swing.JListTab; import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper; import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction; -import fr.cemagref.simexplorer.is.ui.swing.model.JApplicationTableModel; +import fr.cemagref.simexplorer.is.ui.swing.model.ListTableModel; import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; import fr.cemagref.simexplorer.is.ui.swing.model.PaginationModel; @@ -88,7 +88,7 @@ // update table model JListTab container = (JListTab) getUI(); JTable table = container.getTable(); - JApplicationTableModel modelTab = (JApplicationTableModel) table.getModel(); + ListTableModel modelTab = (ListTableModel) table.getModel(); modelTab.setData(model.getList()); // refresh ui Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -19,7 +19,7 @@ package fr.cemagref.simexplorer.is.ui.swing.actions; import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction; -import fr.cemagref.simexplorer.is.ui.swing.model.JApplicationTableModel; +import fr.cemagref.simexplorer.is.ui.swing.model.ListTableModel; import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; import fr.cemagref.simexplorer.is.ui.swing.model.PaginationModel; import fr.cemagref.simexplorer.is.ui.swing.JListTab; @@ -85,7 +85,7 @@ // save in TableModel JListTab container = (JListTab) getUI(); JTable jApplicationTable = container.getTable(); - JApplicationTableModel modelTab = (JApplicationTableModel) jApplicationTable.getModel(); + ListTableModel modelTab = (ListTableModel) jApplicationTable.getModel(); modelTab.setData(model.getList()); // refresh ui Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/CollapseAllAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/CollapseAllAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/CollapseAllAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -20,12 +20,11 @@ import fr.cemagref.simexplorer.is.ui.swing.JDetailTab; import fr.cemagref.simexplorer.is.ui.swing.JSynchronizeTab; +import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper; import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction; -import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeHelper; import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode; import javax.swing.JTree; -import javax.swing.SwingUtilities; import java.awt.event.ActionEvent; /** @@ -73,7 +72,7 @@ // arbre non trouvé (cela devrait souleve une exception !) return false; } - node = LoggableElementTreeHelper.getSelectedNodeOrRootNode(tree); + node = MainUIRefreshHelper.getSelectedNodeOrRootNode(tree); boolean result; result = !(node == null || node.isLeaf()); return result; Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DetailToTreeAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DetailToTreeAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DetailToTreeAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -25,8 +25,8 @@ 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.model.LoggableElementTreeHelper; import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode; +import fr.cemagref.simexplorer.is.ui.swing.model.TreeNodeBuilder; import java.awt.event.ActionEvent; @@ -74,8 +74,8 @@ @Override protected void doAction(ActionEvent e) throws Exception { model.setRootNode(element); - // create navigation tree - LoggableElementTreeNode root = LoggableElementTreeHelper.buildLoggableElementNode(model.getRootNode(), model.isRemote()); + // create navigation tree + LoggableElementTreeNode root = TreeNodeBuilder.build(model.getRootNode(), model.isRemote()); model.getHistory().add(root); // push it in tree DetailTabRefreshHelper.updateDetailNavigationTree((JDetailTab) getUI(), model.getHistory()); Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DownloadAttachmentAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DownloadAttachmentAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DownloadAttachmentAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -18,7 +18,7 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; -import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.entities.attachment.Attachment; import fr.cemagref.simexplorer.is.ui.StorageServiceHelper; import fr.cemagref.simexplorer.is.ui.swing.actions.util.DownloadAbstractAction; import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExpandAllAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExpandAllAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExpandAllAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -20,8 +20,8 @@ import fr.cemagref.simexplorer.is.ui.swing.JDetailTab; import fr.cemagref.simexplorer.is.ui.swing.JSynchronizeTab; +import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper; import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction; -import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeHelper; import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode; import javax.swing.JTree; @@ -74,7 +74,7 @@ return false; } - node = LoggableElementTreeHelper.getSelectedNodeOrRootNode(tree); + node = MainUIRefreshHelper.getSelectedNodeOrRootNode(tree); boolean result; result = !(node == null || node.isLeaf()); return result; Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -18,7 +18,7 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; -import fr.cemagref.simexplorer.is.entities.EntitiesAction; +import fr.cemagref.simexplorer.is.entities.EntityHelper; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.service.StorageService; @@ -85,7 +85,7 @@ return true; } boolean result; - result = remote != null && version != null && uuid != null && EntitiesAction.EXPORT.accept(element); + result = remote != null && version != null && uuid != null && EntityHelper.Action.EXPORT.accept(element); return result; } Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportToLocalAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportToLocalAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportToLocalAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -18,7 +18,7 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; -import fr.cemagref.simexplorer.is.entities.EntitiesAction; +import fr.cemagref.simexplorer.is.entities.EntityHelper; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; import fr.cemagref.simexplorer.is.ui.swing.model.SynchronizeTabModel; @@ -54,7 +54,7 @@ SynchronizeTabModel model = (SynchronizeTabModel) getModel(); LoggableElement element = model.getRemoteSelectedNode(); boolean result; - if (result = EntitiesAction.EXPORT.accept(element)) { + if (result = EntityHelper.Action.EXPORT.accept(element)) { uuid = element.getMetaData().getUuid(); version = element.getMetaData().getVersion(); remote = true; Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportToRemoteAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportToRemoteAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportToRemoteAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -18,7 +18,7 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; -import fr.cemagref.simexplorer.is.entities.EntitiesAction; +import fr.cemagref.simexplorer.is.entities.EntityHelper; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; import fr.cemagref.simexplorer.is.ui.swing.model.SynchronizeTabModel; @@ -54,7 +54,7 @@ SynchronizeTabModel model = (SynchronizeTabModel) getModel(); LoggableElement element = model.getLocalSelectedNode(); boolean result; - if (result = EntitiesAction.EXPORT.accept(element)) { + if (result = EntityHelper.Action.EXPORT.accept(element)) { uuid = element.getMetaData().getUuid(); version = element.getMetaData().getVersion(); remote = false; Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -19,7 +19,7 @@ package fr.cemagref.simexplorer.is.ui.swing.actions; import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction; -import fr.cemagref.simexplorer.is.ui.swing.model.JApplicationTableModel; +import fr.cemagref.simexplorer.is.ui.swing.model.ListTableModel; import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; import fr.cemagref.simexplorer.is.ui.swing.JListTab; import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper; @@ -83,7 +83,7 @@ // update table model in ui JListTab container = (JListTab) getUI(); JTable table = container.getTable(); - JApplicationTableModel modelTab = (JApplicationTableModel) table.getModel(); + ListTableModel modelTab = (ListTableModel) table.getModel(); modelTab.setData(model.getList()); // refresh ui Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -20,7 +20,7 @@ import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction; import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; -import fr.cemagref.simexplorer.is.ui.swing.model.JApplicationTableModel; +import fr.cemagref.simexplorer.is.ui.swing.model.ListTableModel; import fr.cemagref.simexplorer.is.ui.swing.JListTab; import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper; @@ -75,7 +75,7 @@ // update table model in ui JListTab container = (JListTab) getUI(); JTable table = container.getTable(); - JApplicationTableModel modelTab = (JApplicationTableModel) table.getModel(); + ListTableModel modelTab = (ListTableModel) table.getModel(); modelTab.setData(model.getList()); // refresh ui Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -17,17 +17,18 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; -import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.entities.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; import fr.cemagref.simexplorer.is.ui.StorageServiceHelper; import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper; import fr.cemagref.simexplorer.is.ui.swing.JDetailTab; +import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper; 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.model.TreeNodeBuilder; import javax.swing.DefaultComboBoxModel; import javax.swing.event.ListSelectionEvent; @@ -86,8 +87,8 @@ protected void initUI(JDetailTab ui, DetailTabModel model) { DetailTabRefreshHelper.refreshTreeDetailActions(ui, null); - // create navigation tree - LoggableElementTreeNode root = LoggableElementTreeHelper.buildLoggableElementNode(model.getRootNode(), model.isRemote()); + // create navigation tree + LoggableElementTreeNode root = TreeNodeBuilder.build(model.getRootNode(), model.isRemote()); model.getHistory().add(root); DetailTabRefreshHelper.updateDetailNavigationTree(ui, model.getHistory()); } @@ -177,10 +178,10 @@ versionListener.setEnabled(wasEnable); attachmentListener.setEnabled(wasEnable2); // update actions on toolbar - LoggableElementTreeNode node = LoggableElementTreeHelper.getSelectedNode(ui.getNavigationTree()); + LoggableElementTreeNode node = MainUIRefreshHelper.getSelectedNode(ui.getNavigationTree()); DetailTabRefreshHelper.refreshDetailActions(ui, model, node); - LoggableElementTreeNode rootNode = LoggableElementTreeHelper.getRootNode(ui.getNavigationTree()); + LoggableElementTreeNode rootNode = MainUIRefreshHelper.getRootNode(ui.getNavigationTree()); if (model.getDetail() != null && !node.equals(rootNode)) { // refresh detail to tree button only if required DetailTabRefreshHelper.refreshDetailToTreeAction(ui, model); @@ -264,7 +265,7 @@ attachmentListener.setEnabled(wasEnable2); ui.getDetailAttachments().setSelectedIndex(0); // update actions on toolbar - LoggableElementTreeNode node = LoggableElementTreeHelper.getSelectedNodeOrRootNode(ui.getNavigationTree()); + LoggableElementTreeNode node = MainUIRefreshHelper.getSelectedNodeOrRootNode(ui.getNavigationTree()); DetailTabRefreshHelper.refreshDetailActions(ui, model, node); } Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -29,7 +29,7 @@ import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper; import fr.cemagref.simexplorer.is.ui.swing.actions.ShowSynchronizeTabAction; import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; -import fr.cemagref.simexplorer.is.ui.swing.model.JApplicationTableModel; +import fr.cemagref.simexplorer.is.ui.swing.model.ListTableModel; import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; import jaxx.runtime.swing.JAXXTab; @@ -168,7 +168,7 @@ }); //TODO Est-ce vraiment le bon endroit pour faire ça ? // push model into tableModel - JApplicationTableModel modelTab = (JApplicationTableModel) ui.getTable().getModel(); + ListTableModel modelTab = (ListTableModel) ui.getTable().getModel(); modelTab.setData(model.getList()); } Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -18,7 +18,7 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.model; -import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.entities.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; Deleted: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeHelper.java 2008-02-16 15:12:14 UTC (rev 1022) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeHelper.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -1,245 +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.model; - -import fr.cemagref.simexplorer.is.entities.data.Code; -import fr.cemagref.simexplorer.is.entities.data.Component; -import fr.cemagref.simexplorer.is.entities.data.Constant; -import fr.cemagref.simexplorer.is.entities.data.ConstantValue; -import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; -import fr.cemagref.simexplorer.is.entities.data.ExplorationData; -import fr.cemagref.simexplorer.is.entities.data.Library; -import fr.cemagref.simexplorer.is.entities.data.LoggableElement; -import fr.cemagref.simexplorer.is.entities.data.Result; -import fr.cemagref.simexplorer.is.entities.data.Structure; -import fr.cemagref.simexplorer.is.exceptions.SimExplorerRuntimeException; -import static org.codelutin.i18n.I18n._; - -import javax.swing.JTree; -import javax.swing.tree.TreePath; - -/** - * Une classe d'utilitaire pour construire les arbres de LoggableElement - * - * @author chemit - * @see LoggableElementTreeNode - */ -public class LoggableElementTreeHelper { - - public enum TypeNode { - explorationApplication(ExplorationApplication.class), - explorationData(ExplorationData.class), - component(Component.class), - result(Result.class), - library(Library.class); - - private Class<?> klass; - - TypeNode(Class<?> aClass) { - this.klass = aClass; - } - - public Class<?> getKlass() { - return klass; - } - } - - public static LoggableElementTreeNode getSelectedNodeOrRootNode(JTree tree) { - TreePath path = tree.getSelectionPath(); - LoggableElementTreeNode node = null; - if (path != null) { - Object o = path.getLastPathComponent(); - if (o != null && !(o instanceof LoggableElementTreeNode)) { - return null; - } - node = (LoggableElementTreeNode) o; - } - if (node == null) { - // take the root node - Object root = tree.getModel().getRoot(); - if (root == null || !(root instanceof LoggableElementTreeNode)) { - return null; - } - node = (LoggableElementTreeNode) root; - } - return node; - } - - public static LoggableElementTreeNode getSelectedNode(JTree tree) { - TreePath path = tree.getSelectionPath(); - LoggableElementTreeNode node = null; - if (path != null) { - Object o = path.getLastPathComponent(); - if (o != null && !(o instanceof LoggableElementTreeNode)) { - return null; - } - node = (LoggableElementTreeNode) o; - } - return node; - } - - public static LoggableElementTreeNode getRootNode(JTree tree) { - LoggableElementTreeNode node; - // take the root node - Object root = tree.getModel().getRoot(); - if (root == null || !(root instanceof LoggableElementTreeNode)) { - return null; - } - node = (LoggableElementTreeNode) root; - return node; - } - - public static LoggableElementTreeNode buildLoggableElementNode(LoggableElement element, boolean remote) { - if (element instanceof ExplorationApplication) { - return buildExplorationApplicationNode(null, (ExplorationApplication) element, remote); - } - if (element instanceof Component) { - return buildComponentNode(null, (Component) element, remote); - } - if (element instanceof ExplorationData) { - return buildExplorationDataNode(null, (ExplorationData) element, remote); - } - - if (element instanceof Library) { - return buildLibraryNode(null, (Library) element, remote); - } - throw new SimExplorerRuntimeException("could not foud a builder for " + element); - - } - - public static LoggableElementTreeNode buildExplorationApplicationNode(LoggableElementTreeNode parent, ExplorationApplication element, boolean remote) { - LoggableElementTreeNode result = new LoggableElementTreeNode(parent, element, remote, true); - LoggableElementTreeNode tmpNode; - // build components node and his childs - tmpNode = new LoggableElementTreeNode(result, _("simexplorer.node.components"), remote, true); - if (element.getComponents() != null) { - for (Component component : element.getComponents()) { - buildComponentNode(tmpNode, component, remote); - } - } - - // build explorations node and his childs - tmpNode = new LoggableElementTreeNode(result, _("simexplorer.node.explorations"), remote, true); - if (element.getExplorations() != null) { - for (ExplorationData explorationData : element.getExplorations()) { - buildExplorationDataNode(tmpNode, explorationData, remote); - } - } - return result; - } - - public static LoggableElementTreeNode buildComponentNode(LoggableElementTreeNode parent, Component element, boolean remote) { - - LoggableElementTreeNode result = new LoggableElementTreeNode(parent, element, remote, true); - LoggableElementTreeNode tmpNode; - - // build constantes nodes - tmpNode = new LoggableElementTreeNode(result, _("simexplorer.node.constants"), remote, true); - if (element.getConstants() != null) { - for (Constant constante : element.getConstants()) { - buildConstantNode(tmpNode, constante, remote); - } - } - - // build structures nodes - tmpNode = new LoggableElementTreeNode(result, _("simexplorer.node.structures"), remote, true); - if (element.getStructures() != null) { - for (Structure structure : element.getStructures()) { - buildStructureNode(tmpNode, structure, remote); - } - } - - // build Codes nodes - tmpNode = new LoggableElementTreeNode(result, _("simexplorer.node.codes"), remote, true); - if (element.getCodes() != null) { - for (Code code : element.getCodes()) { - buildCodeNode(tmpNode, code, remote); - } - } - - // build libraries nodes - tmpNode = new LoggableElementTreeNode(result, _("simexplorer.node.libraries"), remote, true); - if (element.getLibraries() != null) { - for (Library library : element.getLibraries()) { - buildLibraryNode(tmpNode, library, remote); - } - } - - return result; - } - - public static LoggableElementTreeNode buildExplorationDataNode(LoggableElementTreeNode parent, ExplorationData element, boolean remote) { - LoggableElementTreeNode result = new LoggableElementTreeNode(parent, element, remote, true); - LoggableElementTreeNode tmpNode; - // build constant values nodes - tmpNode = new LoggableElementTreeNode(result, _("simexplorer.node.constantvalues"), remote, true); - if (element.getValuesMap() != null) { - for (ConstantValue library : element.getValuesMap()) { - buildConstantValueNode(tmpNode, library, remote); - } - } - // build result node - if (element.getResult() != null) { - buildResultNode(result, element.getResult(), remote); - } - return result; - } - - public static LoggableElementTreeNode buildLibraryNode(LoggableElementTreeNode parent, Library element, boolean remote) { - LoggableElementTreeNode result; - result = new LoggableElementTreeNode(parent, element, remote, false); - return result; - } - - public static LoggableElementTreeNode buildCodeNode(LoggableElementTreeNode parent, Code element, boolean remote) { - LoggableElementTreeNode result; - result = new LoggableElementTreeNode(parent, element, remote, false); - return result; - } - - public static LoggableElementTreeNode buildStructureNode(LoggableElementTreeNode parent, Structure element, boolean remote) { - LoggableElementTreeNode result; - result = new LoggableElementTreeNode(parent, element, remote, false); - return result; - } - - public static LoggableElementTreeNode buildConstantNode(LoggableElementTreeNode parent, Constant element, boolean remote) { - LoggableElementTreeNode result; - result = new LoggableElementTreeNode(parent, element, remote, false); - return result; - } - - - public static LoggableElementTreeNode buildConstantValueNode(LoggableElementTreeNode parent, ConstantValue element, boolean remote) { - LoggableElementTreeNode result; - result = new LoggableElementTreeNode(parent, element.getConstant().getName(), remote, true); - result.add(new LoggableElementTreeNode(result, element.getValue(), remote, false)); - return result; - } - - public static LoggableElementTreeNode buildResultNode(LoggableElementTreeNode parent, Result element, boolean remote) { - LoggableElementTreeNode result; - result = new LoggableElementTreeNode(parent, element, remote, false); - return result; - } - - protected LoggableElementTreeHelper() { - // no instance please - } -} Added: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java 2008-02-16 15:14:13 UTC (rev 1023) @@ -0,0 +1,278 @@ +/* +* ##% 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.model; + +import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Code; +import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Component; +import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Constant; +import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.ConstantValue; +import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.ExplorationData; +import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Library; +import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Structure; +import fr.cemagref.simexplorer.is.entities.EntityVisitable; +import fr.cemagref.simexplorer.is.entities.SimpleEntityVisitor; +import fr.cemagref.simexplorer.is.entities.metadata.MetaData; +import fr.cemagref.simexplorer.is.entities.data.Code; +import fr.cemagref.simexplorer.is.entities.data.Component; +import fr.cemagref.simexplorer.is.entities.data.Constant; +import fr.cemagref.simexplorer.is.entities.data.ConstantValue; +import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; +import fr.cemagref.simexplorer.is.entities.data.ExplorationData; +import fr.cemagref.simexplorer.is.entities.data.Library; +import fr.cemagref.simexplorer.is.entities.data.LoggableElement; +import fr.cemagref.simexplorer.is.entities.data.Result; +import fr.cemagref.simexplorer.is.entities.data.Structure; + +import java.util.Collection; + +/** + * La classe responsable de la création des arbres de {@link LoggableElementTreeNode} + * à partir de {@link LoggableElement} . + * <p/> + * La classe possède une instance cachée par thread qui délègue la construction + * del'arbre de navigation à un visiteur de {@link LoggableElement}. + * <p/> + * + * @author chemit + */ +public class TreeNodeBuilder extends SimpleEntityVisitor { + + /** L'instance cachée par Thread. */ + protected static final ThreadLocal<TreeNodeBuilder> instance = + new ThreadLocal<TreeNodeBuilder>() { + @Override + protected TreeNodeBuilder initialValue() { + return new TreeNodeBuilder(); + } + }; + + /** le visiteur */ + protected LoggableElementVisitorBuilder visitor; + + /** + * Construit un arbre de navigation à partir d'un {@link LoggableElement}. + * + * @param v la donnée à visiter + * @param remote flag pour indiquer si on travaille sur des données locales + * ou en remote. + * @return le noeud parent de l'arbre de nivation construit. + */ + public static LoggableElementTreeNode build(LoggableElement v, boolean remote) { + TreeNodeBuilder instance; + synchronized (instance = TreeNodeBuilder.instance.get()) { + LoggableElementTreeNode result; + // walk + result = instance.visitor.visit(v, remote); + return result; + } + } + + /** Protected scope to disable instanciation, use cached instance instead. */ + protected TreeNodeBuilder() { + visitor = new LoggableElementVisitorBuilder(); + } + + /** + * Lazy visitor getter. + * + * @return the cached visitor instance + */ + public LoggableElementVisitorBuilder getVisitor() { + if (visitor == null) { + visitor = new LoggableElementVisitorBuilder(); + } + return visitor; + } + + + /** + * Implantation de {@link SimpleEntityVisitor} pour construire l'arbre + * de navigation d'un {@link LoggableElement}. + * <p/> + * Cette classe est stateless, tous ces états internes doivent être nettoyé + * après une visite, en utilisant la méthode {@link #reset()}. + * <p/> + */ + public static class LoggableElementVisitorBuilder extends SimpleEntityVisitor { + + /** + * le noeud parent de tous les autres. + * <p/> + * Ce noeud est positionné par la méthode + * {@link #markRootNode(LoggableElementTreeNode)}. + */ + protected LoggableElementTreeNode rootNode; + + /** + * flag qui indique si on travaille sur des objet locaux ou distants. + * <p/> + * Cette information est conservé dans les nodes pour permettre de gérer + * de manière transparent des objet locaux ou distants. + */ + protected Boolean remote; + + /** les nodes internes utilisés pendant la visite. */ + protected LoggableElementTreeNode explorationApplication, + component, + explorationData, + components, + explorationDatas, + libraries, + constants, + strutures, + codes, + constantValues; + + public LoggableElementTreeNode visit(EntityVisitable v, boolean remote) { + reset(); + try { + this.remote = remote; + super.visit(v); + return this.rootNode; + } finally { + reset(); + } + } + + @Override + public void visitMetaData(MetaData v) { + // do not visit meta data (for the moment we dont need thoses + // informations in navigation tree), but it could be interresting + // for example to display attchments here ? + } + + @Override + public void visitExplorationApplication(ExplorationApplication v) { + markRootNode(explorationApplication = new LoggableElementTreeNode(explorationDatas, v, remote, true)); + super.visitExplorationApplication(v); + } + + @Override + public void visitComponent(Component v) { + markRootNode(component = new LoggableElementTreeNode(components, v, remote, true)); + super.visitComponent(v); + } + + @Override + public void visitExplorationData(ExplorationData v) { + markRootNode(explorationData = new LoggableElementTreeNode(explorationDatas, v, remote, true)); + super.visitExplorationData(v); + } + + @Override + public void visitCodes(Collection<Code> vs) { + codes = new LoggableElementTreeNode(component, Code.getLibelles(), remote, true); + super.visitCodes(vs); + } + + @Override + public void visitComponents(Collection<Component> vs) { + components = new LoggableElementTreeNode(explorationApplication, Component.getLibelles(), remote, true); + super.visitComponents(vs); + } + + @Override + public void visitConstants(Collection<Constant> vs) { + constants = new LoggableElementTreeNode(component, Constant.getLibelles(), remote, true); + super.visitConstants(vs); + } + + @Override + public void visitConstantValues(Collection<ConstantValue> vs) { + constantValues = new LoggableElementTreeNode(explorationData, ConstantValue.getLibelles(), remote, true); + super.visitConstantValues(vs); + } + + @Override + public void visitExplorationDatas(Collection<ExplorationData> vs) { + explorationDatas = new LoggableElementTreeNode(explorationApplication, ExplorationData.getLibelles(), remote, true); + super.visitExplorationDatas(vs); + } + + @Override + public void visitLibraries(Collection<Library> vs) { + libraries = new LoggableElementTreeNode(component, Library.getLibelles(), remote, true); + super.visitLibraries(vs); + } + + @Override + public void visitStructures(Collection<Structure> vs) { + strutures = new LoggableElementTreeNode(component, Structure.getLibelles(), remote, true); + super.visitStructures(vs); + } + + @Override + public void visitConstant(Constant v) { + markRootNode(new LoggableElementTreeNode(constants, v, remote, false)); + } + + @Override + public void visitLibrary(Library v) { + markRootNode(new LoggableElementTreeNode(libraries, v, remote, false)); + } + + @Override + public void visitResult(Result v) { + markRootNode(new LoggableElementTreeNode(explorationData, v, remote, false)); + } + + @Override + public void visitCode(Code v) { + new LoggableElementTreeNode(codes, v, remote, false); + } + + @Override + public void visitConstantValue(ConstantValue v) { + new LoggableElementTreeNode( + new LoggableElementTreeNode(constantValues, v.getConstant().getName(), remote, true), + v.getValue(), remote, false); + } + + @Override + public void visitStructure(Structure v) { + new LoggableElementTreeNode(strutures, v, remote, false); + } + + /** + * Tente de marquerle node donné comme noeud ancêtre de tous les autres. + * <p/> + * Le positionnement n'a lieu que si on a pas encore de rootNode. + * + * @param node le node a positionner comme rootNode (si nessecaire) + */ + protected void markRootNode(LoggableElementTreeNode node) { + if (rootNode == null) { + rootNode = node; + } + } + + /** + * La méthode pour réinitialiser les états interne de la classe. + * <p/> + * Cette méthode doit être appeler après chaque visite, afin d'assurer + * la propriété stateless de la classe. + */ + protected void reset() { + remote = null; + rootNode = explorationApplication = explorationDatas = explorationData + = components = component = constants = codes = libraries + = constantValues = null; + } + } +}
participants (1)
-
tchemit@users.labs.libre-entreprise.org