1 package org.columba.addressbook.gui.tree; 19 20 import java.util.Enumeration ; 21 22 import javax.swing.tree.DefaultTreeModel ; 23 import javax.swing.tree.TreeModel ; 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 implements TreeModel { 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 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 int uid = item.getInteger("uid"); 98 99 if (AddressbookTreeNode.getNextFolderUid() <= uid) 100 AddressbookTreeNode.setNextFolderUid(uid + 1); 101 102 String type = item.get("type"); 104 105 Object [] 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 ex) { 123 ex.printStackTrace(); 124 } 125 126 return folder; 127 128 } 129 130 public AddressbookTreeNode getFolder(String uid) { 131 AddressbookTreeNode root = (AddressbookTreeNode) getRoot(); 132 133 for (Enumeration e = root.breadthFirstEnumeration(); e 134 .hasMoreElements();) { 135 AddressbookTreeNode node = (AddressbookTreeNode) e.nextElement(); 136 137 if (node instanceof Root) { 138 continue; 139 } 140 141 String 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 name) { 152 AddressbookTreeNode root = (AddressbookTreeNode) getRoot(); 153 154 for (Enumeration 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 |