Author: echatellier Date: 2010-03-05 11:56:46 +0100 (Fri, 05 Mar 2010) New Revision: 389 Log: Ajout du filtrage des arbres (filtrage par modele) Added: testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/FilterTreeModel.java testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/MyFilter.java Modified: testTreeTooltipSession/trunk/pom.xml testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/MainPanel.java testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/TreeFilter.java Modified: testTreeTooltipSession/trunk/pom.xml =================================================================== --- testTreeTooltipSession/trunk/pom.xml 2010-03-05 09:09:13 UTC (rev 388) +++ testTreeTooltipSession/trunk/pom.xml 2010-03-05 10:56:46 UTC (rev 389) @@ -99,6 +99,13 @@ <version>1.0.3</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>2.5</version> + <type>jar</type> + <scope>compile</scope> + </dependency> </dependencies> <repositories> Modified: testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/MainPanel.java =================================================================== --- testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/MainPanel.java 2010-03-05 09:09:13 UTC (rev 388) +++ testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/MainPanel.java 2010-03-05 10:56:46 UTC (rev 389) @@ -17,6 +17,7 @@ **/ package org.nuiton.test; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; @@ -34,6 +35,8 @@ import javax.swing.JTextField; import javax.swing.JToolTip; import javax.swing.JTree; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import net.java.balloontip.BalloonTip; import net.java.balloontip.styles.RoundedBalloonStyle; @@ -42,6 +45,8 @@ import org.nuiton.test.table.BasicTableModel; import org.nuiton.test.table.BasicTableRenderer; import org.nuiton.test.tree.BasicTreeModel; +import org.nuiton.test.tree.FilterTreeModel; +import org.nuiton.test.tree.MyFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +58,7 @@ * @author ceric35 * Date : 4 mars 2010 */ -public class MainPanel extends JPanel { +public class MainPanel extends JPanel implements DocumentListener { /** serialVersionUID. */ private static final long serialVersionUID = -4867848058485235754L; @@ -61,8 +66,14 @@ /** Logger */ private static Logger logger = LoggerFactory.getLogger(MainPanel.class); + protected FilterTreeModel filterModel; + + protected JTextField filterField; + public MainPanel() { + super(new BorderLayout()); + // label filter JPanel leftPanel = new JPanel(new GridBagLayout()); JLabel filterLabel = new JLabel("Filtre : "); @@ -71,7 +82,8 @@ new Insets(2, 2, 2, 2), 0, 0)); // field filter - JTextField filterField = new JTextField(); + filterField = new JTextField(); + filterField.getDocument().addDocumentListener(this); leftPanel.add(filterField, new GridBagConstraints(1, 0, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0)); @@ -80,8 +92,9 @@ try { BasicTreeModel treeModel = new BasicTreeModel(new File(".") .getCanonicalFile()); + filterModel = new FilterTreeModel(treeModel, new MyFilter("")); - JTree tree = new JTree(treeModel); + JTree tree = new JTree(filterModel); tree.setName("tree"); leftPanel.add(new JScrollPane(tree), new GridBagConstraints(0, 1, 2, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, @@ -162,50 +175,35 @@ JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rigthPanel); pane.setName("mainViewPane"); - add(pane); + add(pane, BorderLayout.CENTER); } - /*public static void main(String[] args) { - final MainFrame m = new MainFrame(); - m.setName("mainFrame"); + protected void updateFilter() { + String filterString = filterField.getText().trim(); + filterModel.setFilter(new MyFilter(filterString)); + } - // centering - centerWindow(m); + /* + * @see javax.swing.event.DocumentListener#insertUpdate(javax.swing.event.DocumentEvent) + */ + @Override + public void insertUpdate(DocumentEvent e) { + updateFilter(); + } - SafApplicationContext context = new SafApplicationContext(); - final SessionStorage sessionStorage = context.getSessionStorage(); - sessionStorage.restore(m, m.getName() + ".session.xml"); - - m.addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - try { - sessionStorage.save(m, m.getName() + ".session.xml"); - System.exit(0); - } catch (IOException ex) { - logger.error("Can't save frame session", ex); - } - } - }); - m.setVisible(true); + /* + * @see javax.swing.event.DocumentListener#removeUpdate(javax.swing.event.DocumentEvent) + */ + @Override + public void removeUpdate(DocumentEvent e) { + updateFilter(); } - protected static void centerWindow(Window root) { - // If the window's bounds don't appear to have been set, do it - if (root instanceof Window) { - Window window = (Window) root; - if (!root.isValid() || (root.getWidth() == 0) - || (root.getHeight() == 0)) { - window.pack(); - } - if (!window.isLocationByPlatform() && (root.getX() == 0) - && (root.getY() == 0)) { - Component owner = window.getOwner(); - //if (owner == null) { - // owner = (window != mainFrame) ? mainFrame : null; - //} - window.setLocationRelativeTo(owner); // center the window - } - } - }*/ + /* + * @see javax.swing.event.DocumentListener#changedUpdate(javax.swing.event.DocumentEvent) + */ + @Override + public void changedUpdate(DocumentEvent e) { + updateFilter(); + } } Added: testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/FilterTreeModel.java =================================================================== --- testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/FilterTreeModel.java (rev 0) +++ testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/FilterTreeModel.java 2010-03-05 10:56:46 UTC (rev 389) @@ -0,0 +1,139 @@ +/* *##% + * Copyright (C) 2010 Code Lutin, Chatellier Eric + * + * 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 org.nuiton.test.tree; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.event.TreeModelListener; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; + +import org.jdesktop.swingx.tree.TreeModelSupport; + +/** + * TODO add comment here. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + * + * Based on : http://forums.sun.com/thread.jspa?forumID=57&threadID=5378510 + */ +public class FilterTreeModel implements TreeModel { + + protected TreeModelSupport support; + + protected TreeModel delegateModel; + + protected TreeFilter treeFilter; + + public FilterTreeModel(TreeModel delegateModel, TreeFilter filter) { + this.delegateModel = delegateModel; + this.treeFilter = filter; + this.support = new TreeModelSupport(delegateModel); + } + + public void setFilter(TreeFilter treeFilter) { + this.treeFilter = treeFilter; + TreePath path = new TreePath(delegateModel.getRoot()); + support.fireTreeStructureChanged(path); + } + + @Override + public int getChildCount(Object parent) { + int realCount = delegateModel.getChildCount(parent); + int filterCount = 0; + + for (int i = 0; i < realCount; i++) { + Object child = delegateModel.getChild(parent, i); + if (treeFilter.include(delegateModel, child)) { + filterCount++; + } + } + return filterCount; + } + + @Override + public Object getChild(Object parent, int index) { + int cnt = -1; + for (int i = 0; i < delegateModel.getChildCount(parent); i++) { + Object child = delegateModel.getChild(parent, i); + if (treeFilter.include(delegateModel, child)) { + cnt++; + } + if (cnt == index) { + return child; + } + } + return null; + } + + /* + * @see javax.swing.tree.TreeModel#getRoot() + */ + @Override + public Object getRoot() { + return delegateModel.getRoot(); + } + + /* + * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object) + */ + @Override + public boolean isLeaf(Object node) { + return delegateModel.isLeaf(node); + } + + /* + * @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath, java.lang.Object) + */ + @Override + public void valueForPathChanged(TreePath path, Object newValue) { + delegateModel.valueForPathChanged(path, newValue); + } + + /* + * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object, java.lang.Object) + */ + @Override + public int getIndexOfChild(Object parent, Object child) { + return delegateModel.getIndexOfChild(parent, child); + } + + /* + * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener) + */ + @Override + public void addTreeModelListener(TreeModelListener l) { + delegateModel.addTreeModelListener(l); + support.addTreeModelListener(l); + } + + /* + * @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener) + */ + @Override + public void removeTreeModelListener(TreeModelListener l) { + delegateModel.removeTreeModelListener(l); + support.addTreeModelListener(l); + } +} Property changes on: testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/FilterTreeModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/MyFilter.java =================================================================== --- testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/MyFilter.java (rev 0) +++ testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/MyFilter.java 2010-03-05 10:56:46 UTC (rev 389) @@ -0,0 +1,61 @@ +/* *##% + * Copyright (C) 2010 Code Lutin, Chatellier Eric + * + * 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 org.nuiton.test.tree; + +import javax.swing.tree.TreeModel; + +import org.apache.commons.lang.StringUtils; + +/** + * TODO add comment here. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class MyFilter implements TreeFilter { + + protected String filterString; + + public MyFilter(String filterString) { + this.filterString = filterString; + } + + /* + * @see org.nuiton.test.tree.TreeFilter#pass(javax.swing.tree.TreeModel, java.lang.Object) + */ + @Override + public boolean include(TreeModel model, Object node) { + + boolean result = true; + + if (StringUtils.isNotEmpty(filterString)) { + if (node.toString().contains(filterString)) { + result = true; + } + else { + result = false; + } + } + + return result; + } +} Property changes on: testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/MyFilter.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/TreeFilter.java =================================================================== --- testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/TreeFilter.java 2010-03-05 09:09:13 UTC (rev 388) +++ testTreeTooltipSession/trunk/src/main/java/org/nuiton/test/tree/TreeFilter.java 2010-03-05 10:56:46 UTC (rev 389) @@ -17,6 +17,8 @@ **/ package org.nuiton.test.tree; +import javax.swing.tree.TreeModel; + /** * TreeFilter * @@ -26,6 +28,6 @@ * Date : 4 mars 2010 */ public interface TreeFilter { - - public boolean include(Object o); + + boolean include(TreeModel model, Object node); }