1 19 package org.columba.addressbook.gui.frame; 20 21 import java.awt.BorderLayout ; 22 import java.io.File ; 23 import java.io.FileInputStream ; 24 import java.io.IOException ; 25 import java.io.InputStream ; 26 27 import javax.swing.BorderFactory ; 28 import javax.swing.JPanel ; 29 import javax.swing.JScrollPane ; 30 import javax.swing.event.ListSelectionEvent ; 31 import javax.swing.event.ListSelectionListener ; 32 import javax.swing.event.TreeSelectionEvent ; 33 import javax.swing.event.TreeSelectionListener ; 34 35 import org.columba.addressbook.config.AddressbookConfig; 36 import org.columba.addressbook.folder.AddressbookTreeNode; 37 import org.columba.addressbook.folder.IContactStorage; 38 import org.columba.addressbook.gui.table.FilterToolbar; 39 import org.columba.addressbook.gui.table.TableController; 40 import org.columba.addressbook.gui.tagging.ContactTagList; 41 import org.columba.addressbook.gui.tree.TreeController; 42 import org.columba.addressbook.model.IContactModel; 43 import org.columba.addressbook.util.AddressbookResourceLoader; 44 import org.columba.api.gui.frame.IContainer; 45 import org.columba.api.gui.frame.IDock; 46 import org.columba.api.gui.frame.IDockable; 47 import org.columba.core.config.ViewItem; 48 import org.columba.core.context.base.api.IStructureValue; 49 import org.columba.core.context.semantic.api.ISemanticContext; 50 import org.columba.core.gui.frame.DockFrameController; 51 import org.columba.core.gui.tagging.TagList; 52 import org.columba.core.gui.tagging.TagPopupMenu; 53 import org.columba.core.io.DiskIO; 54 55 60 public class AddressbookFrameController extends DockFrameController implements 61 AddressbookFrameMediator, TreeSelectionListener , ListSelectionListener { 62 63 protected TreeController tree; 64 65 protected TableController table; 66 67 protected FilterToolbar filterToolbar; 68 69 private IDockable contactListPanel; 70 71 private IDockable treePanel; 72 73 private IDockable tagListDockable; 74 75 78 public AddressbookFrameController(ViewItem viewItem) { 79 super(viewItem); 80 81 tree = new TreeController(this); 82 table = new TableController(this); 83 filterToolbar = new FilterToolbar(table); 84 85 tree.getView().addTreeSelectionListener(table); 87 88 tree.getView().addTreeSelectionListener(this); 90 91 93 registerDockables(); 94 95 table.getView().getSelectionModel().addListSelectionListener(this); 96 97 } 99 100 private void registerDockables() { 101 102 JScrollPane treeScrollPane = new JScrollPane (tree.getView()); 103 treeScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 104 105 treePanel = registerDockable("addressbook_foldertree", 106 AddressbookResourceLoader.getString("global", 107 "dockable_foldertree"), treeScrollPane, null); 108 109 JPanel p = new JPanel (); 110 p.setLayout(new BorderLayout ()); 111 JScrollPane tableScrollPane = new JScrollPane (table.getView()); 112 tableScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 113 p.add(tableScrollPane, BorderLayout.CENTER); 114 p.add(filterToolbar, BorderLayout.NORTH); 115 116 contactListPanel = registerDockable("addressbook_contactlist", 117 AddressbookResourceLoader.getString("global", 118 "dockable_contactlist"), p, null); 119 120 126 132 } 133 134 137 public TableController getTable() { 138 return table; 139 } 140 141 144 public TreeController getTree() { 145 return tree; 146 } 147 148 151 public void addTableSelectionListener(ListSelectionListener listener) { 152 getTable().getView().getSelectionModel().addListSelectionListener( 153 listener); 154 } 155 156 159 public void addTreeSelectionListener(TreeSelectionListener listener) { 160 getTree().getView().addTreeSelectionListener(listener); 161 } 162 163 167 public String getString(String sPath, String sName, String sID) { 168 return AddressbookResourceLoader.getString(sPath, sName, sID); 169 } 170 171 174 public void valueChanged(TreeSelectionEvent arg0) { 175 AddressbookTreeNode selectedFolder = (AddressbookTreeNode) arg0 176 .getPath().getLastPathComponent(); 177 178 if (selectedFolder != null) { 179 fireTitleChanged(selectedFolder.getName()); 180 } 181 } 182 183 public void loadDefaultPosition() { 184 super.dock(contactListPanel, IDock.REGION.CENTER); 185 super.dock(treePanel, contactListPanel, IDock.REGION.WEST, 0.3f); 186 187 super.setSplitProportion(treePanel, 0.3f); 188 super.setSplitProportion(contactListPanel, 0.35f); 189 } 190 191 192 193 public void extendMenu(IContainer container) { 194 try { 195 InputStream is = DiskIO 196 .getResourceStream("org/columba/addressbook/action/menu.xml"); 197 container.extendMenu(this, is); 198 199 } catch (IOException e) { 200 e.printStackTrace(); 201 } 202 } 203 204 public void extendToolBar(IContainer container) { 205 try { 206 File configDirectory = AddressbookConfig.getInstance() 207 .getConfigDirectory(); 208 InputStream is2 = new FileInputStream (new File (configDirectory, 209 "main_toolbar.xml")); 210 container.extendToolbar(this, is2); 211 } catch (IOException e) { 212 e.printStackTrace(); 213 } 214 } 215 216 public void valueChanged(ListSelectionEvent event) { 217 if (event.getValueIsAdjusting()) { 219 return; 220 } 221 222 Object [] uids = getTable().getUids(); 223 224 if (uids.length == 1) { 225 String id = (String ) uids[0]; 226 227 IContactStorage store = getTree().getSelectedFolder(); 229 if (store == null) 230 return; 231 IContactModel model = store.get(id); 233 if (model == null) 234 return; 235 236 String lastname = model.getFamilyName(); 237 String firstname = model.getGivenName(); 238 String displayname = model.getSortString(); 239 String email = model.getPreferredEmail(); 240 241 IStructureValue value = getSemanticContext().createValue(); 243 244 IStructureValue identity = value.addChild( 246 ISemanticContext.CONTEXT_NODE_IDENTITY, 247 ISemanticContext.CONTEXT_NAMESPACE_CORE); 248 if (displayname.toString() != null) 249 identity.setString(ISemanticContext.CONTEXT_ATTR_DISPLAY_NAME, 250 ISemanticContext.CONTEXT_NAMESPACE_CORE, displayname); 251 if (email != null) 252 identity.setString(ISemanticContext.CONTEXT_ATTR_EMAIL_ADDRESS, 253 ISemanticContext.CONTEXT_NAMESPACE_CORE, email); 254 if (firstname != null) 255 identity.setString(ISemanticContext.CONTEXT_ATTR_FIRST_NAME, 256 ISemanticContext.CONTEXT_NAMESPACE_CORE, firstname); 257 if (lastname != null) 258 identity.setString(ISemanticContext.CONTEXT_ATTR_LAST_NAME, 259 ISemanticContext.CONTEXT_NAMESPACE_CORE, lastname); 260 } 261 } 262 263 } | Popular Tags |