KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > folder > GroupFolder


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.folder;
19
20 import java.util.Hashtable JavaDoc;
21 import java.util.Map JavaDoc;
22
23 import javax.swing.ImageIcon JavaDoc;
24
25 import org.columba.addressbook.config.FolderItem;
26 import org.columba.addressbook.facade.IContactItem;
27 import org.columba.addressbook.model.ContactModelFactory;
28 import org.columba.addressbook.model.ContactModelPartial;
29 import org.columba.addressbook.model.GroupModel;
30 import org.columba.addressbook.model.IContactModel;
31 import org.columba.addressbook.model.IContactModelPartial;
32 import org.columba.addressbook.model.IGroupModel;
33 import org.columba.api.command.IWorkerStatusController;
34 import org.columba.api.exception.StoreException;
35 import org.columba.core.resourceloader.IconKeys;
36 import org.columba.core.resourceloader.ImageLoader;
37 import org.columba.core.xml.XmlElement;
38
39 /**
40  * Group folder storing a list of contact indices.
41  * <p>
42  * This can be seen as a filtered view of a contact folder.
43  *
44  * @author fdietz
45  *
46  */

47 public class GroupFolder extends AbstractFolder implements IContactStorage, IGroupFolder {
48
49     private IGroupModel group;
50
51     private ImageIcon JavaDoc groupImageIcon = ImageLoader
52     .getSmallIcon(IconKeys.USER);
53
54     /**
55      * @param name
56      */

57     public GroupFolder(String JavaDoc name, String JavaDoc dir) {
58         super(name, dir);
59
60         group = new GroupModel();
61     }
62
63     /**
64      * @param item
65      */

66     public GroupFolder(FolderItem item) {
67         super(item);
68
69         XmlElement property = item.getElement("property");
70         XmlElement e = property.getElement("group");
71         if (e == null) {
72             e = new XmlElement("group");
73             property.addElement(e);
74         }
75
76         group = new GroupModel(e, getId());
77     }
78
79     public void createChildren(IWorkerStatusController worker) {
80     }
81
82     /**
83      * @see org.columba.addressbook.folder.IContactStorage#add(IContactModel)
84      */

85     public String JavaDoc add(IContactModel contact) throws StoreException {
86         String JavaDoc uid = contact.getId();
87
88         group.addMember(uid);
89
90         fireItemAdded(uid);
91
92         return uid;
93     }
94
95     /**
96      * @see org.columba.addressbook.folder.IContactStorage#count()
97      */

98     public int count() throws StoreException{
99
100         return group.count();
101     }
102
103     /**
104      * @see org.columba.addressbook.folder.IContactStorage#exists(java.lang.Object)
105      */

106     public boolean exists(String JavaDoc uid) throws StoreException{
107
108         return group.exists(uid);
109     }
110
111     /**
112      * @see org.columba.addressbook.folder.IContactStorage#get(java.lang.Object)
113      */

114     public IContactModel get(String JavaDoc uid) throws StoreException {
115
116         AbstractFolder parent = (AbstractFolder) getParent();
117
118         return parent.get(uid);
119     }
120
121     /**
122      * @see org.columba.addressbook.folder.IContactStorage#modify(java.lang.Object,
123      * IContactModel)
124      */

125     public void modify(String JavaDoc uid, IContactModel contact) throws StoreException {
126         AbstractFolder parent = (AbstractFolder) getParent();
127
128         parent.modify(uid, contact);
129
130         fireItemChanged(uid);
131
132     }
133
134     /**
135      * @see org.columba.addressbook.folder.IContactStorage#remove(java.lang.Object)
136      */

137     public void remove(String JavaDoc uid) throws StoreException {
138         group.remove(uid);
139
140         fireItemRemoved(uid);
141     }
142
143     /**
144      * @see org.columba.addressbook.folder.IContactStorage#getHeaderItemList()
145      */

146     public Map JavaDoc<String JavaDoc,IContactModelPartial> getContactItemMap() throws StoreException {
147         AbstractFolder parent = (AbstractFolder) getParent();
148
149         Map JavaDoc<String JavaDoc,IContactModelPartial> filter = new Hashtable JavaDoc<String JavaDoc,IContactModelPartial>();
150
151         String JavaDoc[] members = group.getMembers();
152         for (int i = 0; i < members.length; i++) {
153             IContactModel c = parent.get(members[i]);
154             if (c == null) {
155                 // contact doesn't exist in parent folder anymore
156
// -> remove it
157

158                 remove(members[i]);
159             } else {
160                 IContactModelPartial item = ContactModelFactory.createContactModelPartial(c, c.getId());
161                 
162                 filter.put(members[i], item);
163             }
164         }
165
166         return filter;
167     }
168
169     /**
170      * @return Returns the group.
171      */

172     public IGroupModel getGroup() {
173         return group;
174     }
175
176     /**
177      * @see org.columba.addressbook.folder.AddressbookTreeNode#getIcon()
178      */

179     public ImageIcon JavaDoc getIcon() {
180         return groupImageIcon;
181     }
182 }
Popular Tags