source: 3thparty/jmessenger/src/nu/fw/jeti/ui/models/RosterTreeModel.java @ 3952

Revision 3952, 7.4 KB checked in by alexandrecorreia, 13 years ago (diff)

Ticket #1710 - Adicao do codigo fonte java do componente jmessenger(jabberit_messenger)

  • Property svn:executable set to *
Line 
1package nu.fw.jeti.ui.models;
2
3import java.util.LinkedList;
4
5import javax.swing.SwingUtilities;
6import javax.swing.event.TreeModelEvent;
7import javax.swing.event.TreeModelListener;
8import javax.swing.tree.TreeModel;
9import javax.swing.tree.TreePath;
10
11import nu.fw.jeti.backend.roster.JIDStatusGroup;
12import nu.fw.jeti.backend.roster.JIDStatusTree;
13import nu.fw.jeti.backend.roster.PrimaryJIDStatus;
14import nu.fw.jeti.events.RosterListener;
15import nu.fw.jeti.jabber.JIDStatus;
16import nu.fw.jeti.util.I18N;
17
18/**
19 * A TreeModel implementation of the roster. If used as the
20 * TreeModel of a JTree the JTree will display the roster.
21 * @author E.S. de Boer
22 * @version 1.0
23 */
24
25public class RosterTreeModel implements TreeModel, RosterListener
26{//use invokeandwait because removing from roster will go wrong otherwise
27        private LinkedList treeModelListeners = new LinkedList();
28        private JIDStatusTree tree;
29       
30        //------------------ events------------------\\
31        public void rosterReplaced(final JIDStatusTree jidTree)
32        {
33                tree = jidTree;
34                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree});
35                for (int i = 0; i < treeModelListeners.size(); i++) {
36                        ((TreeModelListener)treeModelListeners.get(i)).treeStructureChanged(e);
37                }
38        }
39
40        public void groupAdded(JIDStatusGroup group,int index)
41        {
42        int len = treeModelListeners.size();
43                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree},new int[] {index}, new Object[]{group});
44                for (int i = 0; i < len; i++) {
45                        ((TreeModelListener)treeModelListeners.get(i)).treeNodesInserted(e);
46                }
47        }
48
49
50        public void groupDeleted(JIDStatusGroup group, int index)
51        {
52                int len = treeModelListeners.size();
53                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree},new int[] {index}, new Object[]{group});
54                for (int i = 0; i < len; i++) {
55                        ((TreeModelListener)treeModelListeners.get(i)).treeNodesRemoved(e);
56                }
57        }
58       
59        //TODO synchronization?
60        public void groupUpdated(JIDStatusGroup group,int index)
61        {
62                int len = treeModelListeners.size();
63                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree},new int[] {index}, new Object[]{group});
64                for (int i = 0; i < len; i++) {
65                        ((TreeModelListener)treeModelListeners.get(i)).treeNodesChanged(e);
66                }
67        }
68
69        public void primaryAdded(JIDStatusGroup jidGroup, PrimaryJIDStatus primary, int index)
70        {
71        int len = treeModelListeners.size();
72                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree, jidGroup},new int[] {index}, new Object[]{primary});
73                for (int i = 0; i < len; i++) {
74                        ((TreeModelListener)treeModelListeners.get(i)).treeNodesInserted(e);
75                }
76        }
77
78        public void primaryDeleted(JIDStatusGroup jidGroup,PrimaryJIDStatus primary, int index)
79        {
80                int len = treeModelListeners.size();
81                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree, jidGroup},new int[] {index}, new Object[]{primary});
82                for (int i = 0; i < len; i++) {
83                        ((TreeModelListener)treeModelListeners.get(i)).treeNodesRemoved(e);
84                }
85        }
86
87        public void primaryUpdated(JIDStatusGroup jidGroup,PrimaryJIDStatus primary, int index)
88        {
89                int len = treeModelListeners.size();
90                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree, jidGroup},new int[] {index}, new Object[]{primary});
91                for (int i = 0; i < len; i++) {
92                        ((TreeModelListener)treeModelListeners.get(i)).treeNodesChanged(e);
93                }
94        }
95       
96        public void jidStatusAdded(JIDStatusGroup jidGroup,PrimaryJIDStatus primary, JIDStatus jidStatus, int index)
97        {
98                int len = treeModelListeners.size();
99                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree,jidGroup, primary},new int[] {index}, new Object[]{jidStatus});
100                for (int i = 0; i < len; i++) {
101                        ((TreeModelListener)treeModelListeners.get(i)).treeNodesInserted(e);
102                }
103        }
104
105        public void jidStatusDeleted(JIDStatusGroup jidGroup,PrimaryJIDStatus primary, JIDStatus jidStatus, int index)
106        {
107                int len = treeModelListeners.size();
108                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree, jidGroup ,primary},new int[] {index}, new Object[]{jidStatus});
109                for (int i = 0; i < len; i++) {
110                        ((TreeModelListener)treeModelListeners.get(i)).treeNodesRemoved(e);
111                }
112        }
113
114        public void jidStatussenUpdated(JIDStatusGroup jidGroup,PrimaryJIDStatus primary)
115        {
116                int len = treeModelListeners.size();
117                TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree,jidGroup, primary});
118                for (int i = 0; i < len; i++) {
119                        ((TreeModelListener)treeModelListeners.get(i)).treeStructureChanged(e);
120                }
121        }
122       
123        public void add()
124        {//error message
125                if(tree!=null && !tree.existGroup(I18N.gettext("main.error.Error")))
126                {//cannont use groupAdded because that needs invokeAndWait for the roster to work
127                //this doesn't work with invokeAndWait because an error fired from the eventdispatch
128                //thread causes an deadlock   
129                        final JIDStatusGroup group = tree.getGroup(I18N.gettext("main.error.Error"));
130                        Runnable updateAComponent = new Runnable() {
131                        public void run()
132                                {
133                                        int len = treeModelListeners.size();
134                                        TreeModelEvent e = new TreeModelEvent(this,new Object[] {tree},new int[] {tree.indexOfGroup(group)}, new Object[]{group});
135                                        for (int i = 0; i < len; i++) {
136                                                ((TreeModelListener)treeModelListeners.get(i)).treeNodesInserted(e);
137                                        }
138                                }
139                        };
140                        try{
141                                SwingUtilities.invokeLater(updateAComponent);
142                        }catch (Exception e)
143                        {//not on error thread to prevent endless recursion
144                                System.out.println(e.getMessage());
145                        }
146                }
147        }
148       
149        public void remove()
150        {
151                if(tree!=null && tree.existGroup(I18N.gettext("main.error.Error")))
152                {
153                        JIDStatusGroup group = tree.getGroup(I18N.gettext("main.error.Error"));
154                        int index = tree.indexOfGroup(group);
155                        tree.removeGroup(group);
156                        groupDeleted(group,index);
157                }
158        }
159
160        //-------------------------------Treemodel implementation---------------------------
161
162        public Object getRoot()
163        {
164                return tree;
165        }
166
167        public Object getChild(Object parent, int index)
168        {
169                if(parent instanceof JIDStatusTree) return tree.get(index);  //root node
170                else if (parent instanceof JIDStatusGroup) return ((JIDStatusGroup)parent).getPrimaryJIDStatus(index);
171                else return ((PrimaryJIDStatus)parent).getJIDStatus(index);
172
173        }
174
175        public int getChildCount(Object parent)
176        {
177                if(parent instanceof JIDStatusTree) return tree.getSize();  //root node
178                if(parent instanceof JIDStatusGroup) return ((JIDStatusGroup)parent).size();
179                if(parent instanceof PrimaryJIDStatus) return ((PrimaryJIDStatus)parent).size();
180                System.out.println("no parent");
181                return 0; //hoort niet voor te komen
182        }
183
184        public boolean isLeaf(Object node)
185        {
186                if(node instanceof JIDStatusTree) return false;
187                if(node instanceof JIDStatusGroup) return false;
188                if(node instanceof PrimaryJIDStatus) return false;
189                return true;
190        }
191
192        public void valueForPathChanged(TreePath path, Object newValue)
193        {
194                /**@todo: Implement this javax.swing.tree.TreeModel method*/
195                throw new java.lang.UnsupportedOperationException("Method valueForPathChanged() not yet implemented");
196        }
197
198        public int getIndexOfChild(Object parent, Object child)
199        {//kijk na
200                if(parent instanceof JIDStatusTree) return ((JIDStatusTree)parent).indexOfGroup(child);
201                if(parent instanceof JIDStatusGroup) return ((JIDStatusGroup)parent).indexOfPrimaryJIDStatus(child);
202                else return ((PrimaryJIDStatus)parent).indexOfJIDStatus(child);
203        }
204
205        /**
206         * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener)
207         */
208        public void addTreeModelListener(TreeModelListener l)
209        {
210                treeModelListeners.add(l);
211        }
212
213        public void removeTreeModelListener(TreeModelListener l)
214        {
215                treeModelListeners.remove(l);
216        }
217}
218
219/*
220 * Overrides for emacs
221 * Local variables:
222 * tab-width: 4
223 * End:
224 */
Note: See TracBrowser for help on using the repository browser.