KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > search > SearchFolderFactory


1 package org.columba.mail.search;
2
3 import java.util.Enumeration JavaDoc;
4 import java.util.List JavaDoc;
5 import java.util.Vector JavaDoc;
6
7 import org.columba.core.filter.FilterCriteria;
8 import org.columba.core.filter.FilterRule;
9 import org.columba.mail.folder.IMailFolder;
10 import org.columba.mail.folder.IMailbox;
11 import org.columba.mail.folder.virtual.VirtualFolder;
12 import org.columba.mail.gui.tree.FolderTreeModel;
13
14 public class SearchFolderFactory {
15
16     /**
17      * Create search folder for simple search with a single criteria
18      */

19     public static VirtualFolder createSearchFolder(FilterCriteria c,
20             IMailFolder folder) throws Exception JavaDoc {
21
22         // create search folder
23
VirtualFolder searchFolder = createVirtualFolder(folder);
24
25         // add filter criteria
26
searchFolder.getFilter().getFilterRule().add(c);
27
28         return searchFolder;
29     }
30
31     /**
32      * Create new search folder but use existing virtual folder for an "search
33      * inside results" search
34      */

35     public static VirtualFolder prepareSearchFolder(FilterCriteria c,
36             IMailFolder folder) throws Exception JavaDoc {
37
38         // create search folder
39
VirtualFolder searchFolder = createVirtualFolder(folder);
40
41         // add filter criteria
42
searchFolder.getFilter().getFilterRule().add(c);
43
44         return searchFolder;
45     }
46
47     /**
48      * Create search for folder complex search with multiple criteria
49      */

50     public static VirtualFolder createSearchFolder(FilterRule rule,
51             IMailFolder folder) throws Exception JavaDoc {
52         // create search folder
53
VirtualFolder searchFolder = createVirtualFolder(folder);
54
55         searchFolder.getFilter().getFilterRule().setCondition(
56                 rule.getConditionInt());
57
58         for (int i = 0; i < rule.getChildCount(); i++) {
59             // add filter criteria
60
searchFolder.getFilter().getFilterRule().add(rule.get(i));
61         }
62
63         return searchFolder;
64     }
65
66     /**
67      * Update already existing virtual folder for an "search inside results"
68      * search
69      */

70     public static VirtualFolder prepareSearchFolder(FilterRule rule,
71             IMailFolder folder) throws Exception JavaDoc {
72
73         // create search folder
74
VirtualFolder searchFolder = createVirtualFolder(folder);
75
76         searchFolder.getFilter().getFilterRule().setCondition(
77                 rule.getConditionInt());
78
79         for (int i = 0; i < rule.getChildCount(); i++) {
80             // add filter criteria
81
searchFolder.getFilter().getFilterRule().add(rule.get(i));
82         }
83
84         return searchFolder;
85     }
86
87     /**
88      * Create virtual folder.
89      *
90      * @param folder
91      * @return
92      */

93     private static VirtualFolder createVirtualFolder(IMailFolder folder) {
94
95         VirtualFolder searchFolder = new VirtualFolder("Search Result", folder);
96
97         // remove old filters
98
searchFolder.getFilter().getFilterRule().removeAll();
99
100         // search in subfolders recursively
101
searchFolder.getConfiguration().setString("property",
102                 "include_subfolders", "true");
103
104         String JavaDoc uid = folder.getId();
105
106         // set source folder UID
107
searchFolder.getConfiguration()
108                 .setString("property", "source_uid", uid);
109
110         return searchFolder;
111     }
112
113     /**
114      * Return list of all source folders we going to query.
115      *
116      * @return list of source folders
117      */

118     public static List JavaDoc<IMailbox> getAllSourceFolders() {
119         IMailFolder rootFolder = (IMailFolder) FolderTreeModel.getInstance()
120                 .getRoot();
121
122         List JavaDoc<IMailbox> v = new Vector JavaDoc<IMailbox>();
123         getChildren(rootFolder, v);
124
125         return v;
126     }
127
128     private static void getChildren(IMailFolder parentFolder,
129             List JavaDoc<IMailbox> list) {
130         IMailFolder child;
131
132         for (Enumeration JavaDoc e = parentFolder.children(); e.hasMoreElements();) {
133             child = (IMailFolder) e.nextElement();
134
135             if (child instanceof IMailbox) {
136                 if (child.getName().equalsIgnoreCase("Inbox")) {
137                     list.add((IMailbox) child);
138                 }
139             }
140
141             getChildren(child, list);
142         }
143     }
144 }
145
Popular Tags