KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > gui > tree > AddressbookTreeModel


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.addressbook.gui.tree;
19
20 import java.util.Enumeration JavaDoc;
21
22 import javax.swing.tree.DefaultTreeModel JavaDoc;
23 import javax.swing.tree.TreeModel JavaDoc;
24
25 import org.columba.addressbook.config.AddressbookConfig;
26 import org.columba.addressbook.config.FolderItem;
27 import org.columba.addressbook.folder.AddressbookTreeNode;
28 import org.columba.addressbook.folder.IFolder;
29 import org.columba.addressbook.folder.Root;
30 import org.columba.addressbook.gui.tree.util.ISelectFolderDialog;
31 import org.columba.addressbook.gui.tree.util.SelectAddressbookFolderDialog;
32 import org.columba.addressbook.plugin.IExtensionHandlerKeys;
33 import org.columba.api.plugin.IExtension;
34 import org.columba.api.plugin.IExtensionHandler;
35 import org.columba.api.plugin.PluginHandlerNotFoundException;
36 import org.columba.core.config.DefaultXmlConfig;
37 import org.columba.core.gui.dialog.ErrorDialog;
38 import org.columba.core.plugin.PluginManager;
39 import org.columba.core.xml.XmlElement;
40
41
42 public class AddressbookTreeModel extends DefaultTreeModel JavaDoc implements TreeModel JavaDoc {
43
44     protected DefaultXmlConfig folderXmlConfig;
45
46     private static AddressbookTreeModel instance = new AddressbookTreeModel(
47             AddressbookConfig.getInstance().get("tree").getElement("/tree"));
48
49     public AddressbookTreeModel(XmlElement root) {
50         super(new Root(root));
51
52         createDirectories(((AddressbookTreeNode) getRoot()).getNode(),
53                 (AddressbookTreeNode) getRoot());
54     }
55
56     public static AddressbookTreeModel getInstance() {
57         return instance;
58     }
59
60     public ISelectFolderDialog getSelectAddressbookFolderDialog() {
61         ISelectFolderDialog dialog = new SelectAddressbookFolderDialog(this);
62
63         return dialog;
64     }
65
66     public void createDirectories(XmlElement parentTreeNode,
67             AddressbookTreeNode parentFolder) {
68         int count = parentTreeNode.count();
69
70         XmlElement child;
71
72         for (int i = 0; i < count; i++) {
73             child = parentTreeNode.getElement(i);
74
75             String JavaDoc name = child.getName();
76
77             if (name.equals("folder")) {
78                 AddressbookTreeNode folder = add(child, parentFolder);
79
80                 if (folder != null) {
81                     createDirectories(child, folder);
82                 }
83             }
84         }
85     }
86
87     public AddressbookTreeNode add(XmlElement childNode,
88             AddressbookTreeNode parentFolder) {
89         FolderItem item = new FolderItem(childNode);
90
91         if (item == null) {
92             return null;
93         }
94
95         
96         // XmlElement.printNode(item.getRoot(), "");
97
int uid = item.getInteger("uid");
98
99         if (AddressbookTreeNode.getNextFolderUid() <= uid)
100             AddressbookTreeNode.setNextFolderUid(uid + 1);
101
102         // now instanciate the folder classes
103
String JavaDoc type = item.get("type");
104
105         Object JavaDoc[] args = { item };
106
107         IExtensionHandler handler = null;
108
109         try {
110             handler = PluginManager.getInstance()
111                     .getExtensionHandler(IExtensionHandlerKeys.ORG_COLUMBA_CONTACT_FOLDER);
112         } catch (PluginHandlerNotFoundException ex) {
113             ErrorDialog.createDialog(ex.getMessage(), ex);
114         }
115
116         AddressbookTreeNode folder = null;
117
118         try {
119             IExtension extension = handler.getExtension(type);
120             folder = (AddressbookTreeNode) extension.instanciateExtension(args);
121             parentFolder.add(folder);
122         } catch (Exception JavaDoc ex) {
123             ex.printStackTrace();
124         }
125
126         return folder;
127
128     }
129
130     public AddressbookTreeNode getFolder(String JavaDoc uid) {
131         AddressbookTreeNode root = (AddressbookTreeNode) getRoot();
132
133         for (Enumeration JavaDoc e = root.breadthFirstEnumeration(); e
134                 .hasMoreElements();) {
135             AddressbookTreeNode node = (AddressbookTreeNode) e.nextElement();
136
137             if (node instanceof Root) {
138                 continue;
139             }
140
141             String JavaDoc id = node.getId();
142
143             if (uid.equals(id)) {
144                 return node;
145             }
146         }
147
148         return null;
149     }
150
151     public IFolder getFolderByName(String JavaDoc name) {
152         AddressbookTreeNode root = (AddressbookTreeNode) getRoot();
153
154         for (Enumeration JavaDoc e = root.breadthFirstEnumeration(); e
155                 .hasMoreElements();) {
156             AddressbookTreeNode node = (AddressbookTreeNode) e.nextElement();
157
158             if (node.getName().equals(name))
159                 return node;
160
161         }
162
163         return null;
164     }
165
166 }
Popular Tags