KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > sync4j > exchange > items > task > dao > TaskDAO


1 /**
2  * Copyright (C) 2003-2005 Funambol
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  */

18
19 package sync4j.exchange.items.task.dao;
20
21 import java.io.IOException JavaDoc;
22 import java.text.MessageFormat JavaDoc;
23 import java.util.ArrayList JavaDoc;
24
25 import sync4j.exchange.util.StringTools;
26
27 import sync4j.exchange.httptransport.WebDavHttpTransport;
28 import sync4j.exchange.items.task.model.Task;
29 import sync4j.exchange.items.common.dao.ItemDAO;
30 import sync4j.exchange.DataAccessException;
31 import sync4j.exchange.xml.XmlParseException;
32 import sync4j.exchange.xml.XmlParser;
33 import java.util.Date JavaDoc;
34 import java.text.SimpleDateFormat JavaDoc;
35 import java.util.TimeZone JavaDoc;
36
37
38 /*
39  * This class implements methods to access task data
40  * in exchange server datastore
41  *
42  * @version $Id: TaskDAO.java,v 1.20 2005/07/27 13:22:12 nichele Exp $
43  *
44  **/

45 public class TaskDAO extends ItemDAO {
46
47     //---------------------------------------------------------------- Constants
48

49     private static final String JavaDoc WEBDAV_MSG_SELECT_TASKS =
50     "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" +
51     "<D:searchrequest xmlns:D =\"DAV:\">\n" +
52     "<D:sql>\n" +
53     "Select " +
54     "\"urn:schemas:httpmail:textdescription\" AS textdescription, " +
55     "\"urn:schemas:httpmail:subject\" AS subject, " +
56     "\"urn:schemas:calendar:dtstart\" AS dtstart, " +
57     "\"urn:schemas:calendar:dtend\" AS dtend, " +
58     "\"http://schemas.microsoft.com/exchange/keywords-utf8\" AS categories, " +
59     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x8110\" as actualwork, " +
60     "\"http://schemas.microsoft.com/mapi/id/'{'00062008-0000-0000-C000-000000000046'}'/0x8535\" as billinginformation, " +
61     "\"http://schemas.microsoft.com/mapi/id/'{'00062008-0000-0000-C000-000000000046'}'/0x8539\" as companies, " +
62     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x811c\" as complete, " +
63     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x8104\" as date, " +
64     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x810F\" as datecompleted, " +
65     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x8105\" as duedate, " +
66     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x811F\" as owner, " +
67     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x8102\" as perc, " +
68     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x8101\" as status, " +
69     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x8103\" as TeamTask, " +
70     "\"http://schemas.microsoft.com/mapi/id/'{'00062003-0000-0000-C000-000000000046'}'/0x8111\" as TotalWork, " +
71     "\"http://schemas.microsoft.com/mapi/reminderset\" as reminderset, " +
72     "\"http://schemas.microsoft.com/mapi/remindertime\" as remindertime, " +
73     "\"urn:schemas:httpmail:importance\" as importance, " +
74     "\"http://schemas.microsoft.com/exchange/mileage\" as mileage, " +
75     "\"http://schemas.microsoft.com/mapi/sensitivity\" as sensitivity, " +
76     "\"http://schemas.microsoft.com/repl/repl-uid\" AS repluid, " +
77     "\"DAV:getlastmodified\" AS getlastmodified, " +
78      "\"DAV:isfolder\" AS isfolder " +
79     "FROM \"/{0}/{1}/{2}\" " +
80     "{3} " +
81     "</D:sql>\n" +
82     "</D:searchrequest>" ;
83
84     public static final String JavaDoc TAG_DATE = "date" ;
85     public static final String JavaDoc TAG_DESCRIPTION =
86         "textdescription" ;
87
88     public static final String JavaDoc TAG_RESPONSE = "a:response" ;
89     public static final String JavaDoc TAG_SUBJECT = "subject" ;
90
91     public static final String JavaDoc TAG_REPLUID = "repluid" ;
92
93     public static final String JavaDoc TAG_LAST_MODIFIED = "getlastmodified" ;
94
95     public static final String JavaDoc TAG_DUE_DATE = "duedate" ;
96
97
98     //------------------------------------------------------------- Private data
99

100     private WebDavHttpTransport webDavHttp = null ;
101
102     //------------------------------------------------------------- Costructors
103

104     public TaskDAO(String JavaDoc exchangeServerHost ,
105                    int exchangeServerPort)
106         throws DataAccessException {
107
108         this.webDavHttp = new WebDavHttpTransport(exchangeServerHost,
109                                                           exchangeServerPort);
110     }
111     //------------------------------------------------------------- Public methods
112

113     /**
114      * insert / update task
115      *
116      * @param task
117      * @param username
118      * @param credentials
119      * @param exchangeFolder
120      *
121      * @return new / updated task
122      *
123      * @throws sync4j.exchange.util.DataAccessException
124      **/

125     public Task setTask(Task task ,
126                         String JavaDoc username ,
127                         String JavaDoc credentials ,
128                         String JavaDoc exchangeFolder )
129         throws DataAccessException {
130
131
132         String JavaDoc response = null ;
133
134         String JavaDoc id = null ;
135
136         StringBuffer JavaDoc webDavTaskMsg = new StringBuffer JavaDoc();
137
138         String JavaDoc webDavHeaderMsg = null ;
139
140         String JavaDoc server = null ;
141         String JavaDoc resource = null ;
142
143         String JavaDoc tmp = null ;
144
145         server = getServerFromExchangeFolder (exchangeFolder );
146         resource = getResourceFromExchangeFolder (exchangeFolder );
147
148
149         webDavTaskMsg.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
150         webDavTaskMsg.append("<D:propertyupdate xmlns:D=\"DAV:\" ");
151         webDavTaskMsg.append("xmlns:EX=\"http://schemas.microsoft.com/exchange/\" ");
152         webDavTaskMsg.append("xmlns:HN=\"urn:schemas:httpmail:\" ");
153         webDavTaskMsg.append("xmlns:MAPI_ID_1=\"http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/\" ");
154         webDavTaskMsg.append("xmlns:MAPI_ID_2=\"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/\" ");
155         webDavTaskMsg.append("xmlns:MAPI=\"http://schemas.microsoft.com/mapi/\" ");
156         webDavTaskMsg.append("xmlns:x=\"xml:\" ");
157         webDavTaskMsg.append("xmlns:b=\"urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/\">\n");
158         webDavTaskMsg.append("<D:set>\n");
159         webDavTaskMsg.append(" <D:prop>\n");
160         webDavTaskMsg.append(" <D:contentclass>urn:content-classes:person</D:contentclass>\n");
161         webDavTaskMsg.append(" <EX:outlookmessageclass>IPM.Task</EX:outlookmessageclass>\n");
162
163         webDavTaskMsg.append("<MAPI_ID_1:0x8110 b:dt=\"int\">");
164         webDavTaskMsg.append(task.getActualWork());
165         webDavTaskMsg.append("</MAPI_ID_1:0x8110>");
166
167         tmp = dateToWebDavTag(task.getDate());
168         if (tmp != null && !tmp.equals("")) {
169             webDavTaskMsg.append("<MAPI_ID_1:0x8104 b:dt=\"dateTime.tz\">");
170             webDavTaskMsg.append(tmp);
171             webDavTaskMsg.append("</MAPI_ID_1:0x8104>");
172         }
173
174         tmp = dateToWebDavTag(task.getDateCompleted());
175         if (tmp != null && !tmp.equals("")) {
176             webDavTaskMsg.append("<MAPI_ID_1:0x810F b:dt=\"dateTime.tz\">");
177             webDavTaskMsg.append(tmp);
178             webDavTaskMsg.append("</MAPI_ID_1:0x810F>");
179         }
180
181         tmp = dateToWebDavTag(task.getDueDate());
182         if (tmp != null && !tmp.equals("")) {
183             webDavTaskMsg.append("<MAPI_ID_1:0x8105 b:dt=\"dateTime.tz\">");
184             webDavTaskMsg.append(tmp);
185             webDavTaskMsg.append("</MAPI_ID_1:0x8105>");
186         }
187
188         String JavaDoc billingInformation = task.getBillingInformation();
189         if (billingInformation != null) {
190             billingInformation = StringTools.escapeXml(billingInformation);
191             webDavTaskMsg.append("<MAPI_ID_2:0x8535>");
192             webDavTaskMsg.append(billingInformation);
193             webDavTaskMsg.append("</MAPI_ID_2:0x8535>");
194         }
195
196         String JavaDoc companies = task.getCompanies();
197         if (companies != null && companies.length() > 0) {
198
199             companies = StringTools.escapeXml(companies);
200
201             companies = XmlParser.
202                             fieldToMultipleTag
203                                 (companies);
204
205             webDavTaskMsg.append("<MAPI_ID_2:0x8539 b:dt=\"mv.string\">");
206             webDavTaskMsg.append(companies);
207             webDavTaskMsg.append("</MAPI_ID_2:0x8539>");
208         }
209
210         if (task.getImportance() != null) {
211             webDavTaskMsg.append("<HN:importance>");
212             webDavTaskMsg.append(task.getImportance());
213             webDavTaskMsg.append("</HN:importance>");
214         }
215
216         if (task.getMileage() != null) {
217             webDavTaskMsg.append("<EX:mileage>");
218             webDavTaskMsg.append(task.getMileage());
219             webDavTaskMsg.append("</EX:mileage>");
220         }
221
222         String JavaDoc owner = task.getOwner();
223         if (owner != null) {
224             owner = StringTools.escapeXml(owner);
225             webDavTaskMsg.append("<MAPI_ID_1:0x811F>");
226             webDavTaskMsg.append(owner);
227             webDavTaskMsg.append("</MAPI_ID_1:0x811F>");
228         }
229
230         String JavaDoc categories = task.getCategories();
231         if (categories != null && categories.length() > 0) {
232
233             categories = StringTools.escapeXml(categories);
234
235             categories = XmlParser.
236                             fieldToMultipleTag
237                                 (categories);
238
239             webDavTaskMsg.append("<EX:keywords-utf8>");
240             webDavTaskMsg.append(categories);
241             webDavTaskMsg.append("</EX:keywords-utf8>");
242         }
243
244         webDavTaskMsg.append("<MAPI:reminderset>");
245         webDavTaskMsg.append((task.getReminderSet() ? "1" : "0"));
246         webDavTaskMsg.append("</MAPI:reminderset>");
247
248         tmp = dateToWebDavTag(task.getReminderTime());
249         if (tmp != null && !tmp.equals("")) {
250             webDavTaskMsg.append("<MAPI:remindertime b:dt=\"dateTime.tz\">");
251             webDavTaskMsg.append(tmp);
252             webDavTaskMsg.append("</MAPI:remindertime>");
253         }
254
255         if (task.getSensitivity() != null) {
256             webDavTaskMsg.append("<MAPI:sensitivity>");
257             webDavTaskMsg.append(task.getSensitivity());
258             webDavTaskMsg.append("</MAPI:sensitivity>");
259         }
260
261         webDavTaskMsg.append("<MAPI_ID_1:0x811c b:dt=\"boolean\">");
262         webDavTaskMsg.append( (task.isComplete() ? "1" : "0") );
263         webDavTaskMsg.append("</MAPI_ID_1:0x811c>");
264
265
266         String JavaDoc sPerc = task.getPercentComplete();
267         String JavaDoc status = task.getStatus();
268
269         if (task.isComplete()) {
270             sPerc = "100";
271             status = "2"; // Completed
272
}
273
274         if (sPerc != null) {
275             float perc = Float.parseFloat(sPerc) / 100;
276             webDavTaskMsg.append("<MAPI_ID_1:0x8102 b:dt=\"float\">");
277             webDavTaskMsg.append(perc);
278             webDavTaskMsg.append("</MAPI_ID_1:0x8102>");
279         }
280
281         if (status != null) {
282             webDavTaskMsg.append("<MAPI_ID_1:0x8101 b:dt=\"int\">");
283             webDavTaskMsg.append(status);
284             webDavTaskMsg.append("</MAPI_ID_1:0x8101>");
285         }
286
287         String JavaDoc subject = task.getSubject();
288
289         if (subject != null) {
290             subject = StringTools.escapeXml(subject);
291             webDavTaskMsg.append("<HN:subject>");
292             webDavTaskMsg.append(subject);
293             webDavTaskMsg.append("</HN:subject>");
294         }
295
296         webDavTaskMsg.append("<MAPI_ID_1:0x8103 b:dt=\"boolean\">");
297         webDavTaskMsg.append( (task.isTeamTask() ? "1" : "0"));
298         webDavTaskMsg.append("</MAPI_ID_1:0x8103>");
299
300         String JavaDoc textDescription = task.getTextDescription();
301         if (textDescription != null) {
302             textDescription = StringTools.escapeXml(textDescription);
303             webDavTaskMsg.append("<HN:textdescription>");
304             webDavTaskMsg.append(textDescription);
305             webDavTaskMsg.append("</HN:textdescription>");
306         }
307
308         webDavTaskMsg.append("<MAPI_ID_1:0x8111 b:dt=\"int\">");
309         webDavTaskMsg.append(task.getTotalWork());
310         webDavTaskMsg.append("</MAPI_ID_1:0x8111>");
311
312         webDavTaskMsg.append(" </D:prop>\n");
313         webDavTaskMsg.append("</D:set>\n");
314         webDavTaskMsg.append("</D:propertyupdate>");
315
316         webDavHeaderMsg
317             = MessageFormat.format(ItemDAO.WEBDAV_HEADER_PROPPATCH,
318                 new Object JavaDoc[] {
319                     "/" +
320                         server +
321                         "/" +
322                         username +
323                         "/" +
324                         resource ,
325                     task.getHref()
326               }
327         );
328
329
330         try {
331              response = this.webDavHttp.sendRequest(webDavHeaderMsg,
332                                                     credentials,
333                                                     webDavTaskMsg.toString(),
334                                                     FILE_ENCODING);
335         } catch (Exception JavaDoc e) {
336             throw new DataAccessException("Error getting Exchange server response",
337                                           e);
338         }
339
340         try {
341             int s = getStatusFromResponse(response);
342             checkResponseStatus(s);
343         } catch (Exception JavaDoc e) {
344
345             throw new DataAccessException("USER " +
346                                           username +
347                                           " URI " +
348                                           exchangeFolder +
349                                           " setting exchange task" ,
350                                           e) ;
351
352         }
353
354         try {
355             id = XmlParser.getRuidFromResponse(response);
356         } catch (XmlParseException e) {
357             throw new DataAccessException("Error getting task id", e);
358         }
359
360         task.setId(id);
361
362         return task;
363
364     }
365
366     /**
367      * Delete a <i>Task</i> from Exchange server.
368      *
369      * @param task
370      * @param username
371      * @param credentials
372      * @param exchangeFolder
373      *
374      * @throws sync4j.exchange.util.DataAccessException
375      *
376      */

377     public void removeTask(Task task ,
378                            String JavaDoc username ,
379                            String JavaDoc credentials ,
380                            String JavaDoc exchangeFolder )
381         throws DataAccessException {
382
383         String JavaDoc webDavTaskMsg = null ;
384
385         String JavaDoc webDavHeaderMsg = null ;
386
387         String JavaDoc response = null ;
388
389         String JavaDoc server = null ;
390         String JavaDoc resource = null ;
391
392         server = getServerFromExchangeFolder (exchangeFolder );
393         resource = getResourceFromExchangeFolder (exchangeFolder );
394
395         webDavTaskMsg = "" ;
396
397         webDavHeaderMsg =
398             MessageFormat.format(ItemDAO.WEBDAV_HEADER_REMOVE,
399             new Object JavaDoc[] {
400                         "/" +
401                             server +
402                             "/" +
403                             username +
404                             "/" +
405                             resource ,
406                         task.getHref()
407             }
408         );
409
410         try {
411             response = this.webDavHttp.sendRequest(webDavHeaderMsg, credentials, webDavTaskMsg, FILE_ENCODING);
412         } catch (IOException JavaDoc e) {
413             throw new DataAccessException("Error getting Exchange server response",
414                                           e);
415         }
416
417         try {
418             int s = getStatusFromResponse(response);
419             checkResponseStatus(s);
420         } catch (Exception JavaDoc e) {
421
422             throw new DataAccessException("USER " +
423                                           username +
424                                           " URI " +
425                                           exchangeFolder +
426                                           " removing exchange task" ,
427                                           e) ;
428
429         }
430
431     }
432
433     /**
434      * get tasks from Exchange Server
435      *
436      * @param username
437      * @param credentials
438      * @param ids
439      * @param exchangeFolder
440      *
441      * @return array of find tasks
442      *
443      * @throws sync4j.exchange.util.DataAccessException
444      **/

445     public Task[] getTasks (String JavaDoc username ,
446                             String JavaDoc credentials ,
447                             String JavaDoc[] ids ,
448                             String JavaDoc exchangeFolder )
449         throws DataAccessException {
450
451         String JavaDoc clause = getClause(ids);
452         return getTasks(username, credentials, clause, exchangeFolder);
453     }
454
455
456     /**
457      * get task array from Exchange Server
458      *
459      * @param username
460      * @param credentials
461      * @param fields
462      * @param values
463      * @param exchangeFolder
464      * @return array of find tasks
465      *
466      * @throws sync4j.exchange.util.DataAccessException
467      **/

468     public Task[] getTasks(String JavaDoc username,
469                            String JavaDoc credentials,
470                            String JavaDoc fields[],
471                            Object JavaDoc values[],
472                            String JavaDoc exchangeFolder) throws DataAccessException {
473
474         String JavaDoc clause = null ;
475
476         clause = getClause(fields, values);
477
478         return getTasks(username, credentials, clause, exchangeFolder);
479     }
480
481     //------------------------------------------------------------- Private methods
482

483     /**
484      * Create a <i>Task</i> array object from WebDav msg.
485      *
486      * @param id
487      * @param webDavMsg
488      *
489      * @return a newly create <i>Task</i> object initialized with the
490      * fields in the result set
491      *
492      */

493     private Task[] getTasksFromWebDavMsg(String JavaDoc webDavMsg)
494     throws DataAccessException {
495
496         ArrayList JavaDoc tasks = null ;
497         String JavaDoc [] resps = null ;
498         String JavaDoc [] msg = null ;
499
500         String JavaDoc response = null ;
501         String JavaDoc id = null ;
502         String JavaDoc replUid = null ;
503
504         String JavaDoc isFolder = null ;
505         int count = 0 ;
506
507         msg = new String JavaDoc[] {webDavMsg};
508
509         tasks = new ArrayList JavaDoc();
510
511         try {
512
513             resps = XmlParser.getXMLTag(msg, TAG_RESPONSE);
514
515             for (int i = 0, l = resps.length; i < l; i++) {
516
517                 response = resps[i] ;
518                 replUid = XmlParser.getXMLInitTagValue(response, TAG_REPLUID);
519                 id = getIdFromReplUid(replUid) ;
520
521                 isFolder = XmlParser.getXMLInitTagValue(response,
522                                                             TAG_IS_FOLDER) ;
523                 if(PROP_NO_FOLDER.equals(isFolder)) {
524                     tasks.add(getTaskFromResponseTag(id, response));
525                     count ++;
526                 }
527
528             }
529
530         } catch (XmlParseException e) {
531             throw new DataAccessException("Error parsing task", e);
532         }
533
534         return (Task[])tasks.toArray(new Task[count]);
535
536     }
537
538     /**
539      * Create a <i>Task</i> object from response tag.
540      *
541      * @param id
542      * @param msgResponse
543      *
544      * @return a newly create <i>Task</i> object initialized with the
545      * fields in the result set
546      *
547      */

548     private Task getTaskFromResponseTag(String JavaDoc id, String JavaDoc msgResponse)
549     throws DataAccessException {
550
551         Task t = null ;
552         String JavaDoc lastUpdate = null ;
553         String JavaDoc date = null ;
554
555         String JavaDoc categories = null ;
556
557         String JavaDoc companies = null ;
558
559         String JavaDoc tmp = null ;
560
561         t = new Task(id);
562
563         try {
564
565             tmp = XmlParser.getXMLInitTagValue
566                         (msgResponse, "actualwork");
567
568             if (tmp != null && tmp.length() > 0) {
569                  t.setActualWork(Integer.parseInt(tmp));
570             }
571
572             t.setBillingInformation(XmlParser.getXMLInitTagValue
573                          (msgResponse, "billinginformation"));
574
575             t.setTextDescription(XmlParser.getXMLInitTagValue
576                                  (msgResponse, TAG_DESCRIPTION));
577
578             t.setSubject(XmlParser.getXMLInitTagValue
579                          (msgResponse, TAG_SUBJECT));
580
581             date = XmlParser.getXMLInitTagValue
582                    (msgResponse, TAG_DATE);
583
584             t.setDate(XmlParser.webDavTagToDate(date));
585
586             lastUpdate = XmlParser.getXMLInitTagValue
587                          (msgResponse, TAG_LAST_MODIFIED);
588
589             t.setLastModified(XmlParser.webDavTagToDate
590                               (lastUpdate));
591
592             t.setTextDescription(XmlParser.getXMLInitTagValue
593                                  (msgResponse, TAG_DESCRIPTION));
594
595             companies = XmlParser.getXMLInitTagValue
596                             (msgResponse, "companies");
597
598             if (companies != null) {
599
600                 try {
601                     companies = XmlParser.getFieldFromMultipleTag(companies);
602                 } catch (Exception JavaDoc e) {
603                     throw new DataAccessException(e.getMessage());
604                 }
605
606                 t.setCompanies(companies);
607
608             }
609
610             categories = XmlParser.getXMLInitTagValue
611                             (msgResponse, "categories");
612
613             if (categories != null) {
614
615                 try {
616                     categories = XmlParser.getFieldFromMultipleTag(categories);
617                 } catch (Exception JavaDoc e) {
618                     throw new DataAccessException(e.getMessage());
619                 }
620
621                 t.setCategories(categories);
622
623             }
624
625             t.setDueDate(XmlParser.webDavTagToDate(XmlParser.getXMLInitTagValue
626                                                    (msgResponse, "duedate")));
627
628             t.setDateCompleted(XmlParser.webDavTagToDate(XmlParser.getXMLInitTagValue
629                                                    (msgResponse, "datecompleted")));
630
631             t.setImportance(XmlParser.getXMLInitTagValue
632                             (msgResponse, "importance"));
633
634             t.setMileage(XmlParser.getXMLInitTagValue
635                          (msgResponse, "mileage"));
636
637             t.setOwner(XmlParser.getXMLInitTagValue
638                          (msgResponse, "owner"));
639
640             tmp = XmlParser.getXMLInitTagValue
641                                  (msgResponse, "perc");
642
643
644             int perc = 0;
645
646             if (tmp != null && tmp.length() > 0) {
647
648                 Float JavaDoc f = new Float JavaDoc(tmp);
649
650                 perc = (int) (f.floatValue() * 100.0);
651
652             }
653
654             t.setPercentComplete(String.valueOf(perc));
655
656             tmp = XmlParser.getXMLInitTagValue
657                              (msgResponse, "reminderset");
658
659             if ("1".equals(tmp)) {
660                 t.setReminderSet(true);
661             } else {
662                 t.setReminderSet(false);
663             }
664
665             t.setReminderTime(XmlParser.webDavTagToDate(XmlParser.getXMLInitTagValue
666                                                         (msgResponse, "remindertime")));
667
668             t.setSensitivity(XmlParser.getXMLInitTagValue
669                              (msgResponse, "sensitivity"));
670
671             t.setStatus(XmlParser.getXMLInitTagValue
672                         (msgResponse, "status"));
673
674             tmp = XmlParser.getXMLInitTagValue
675                              (msgResponse, "TeamTask");
676
677             if ("1".equals(tmp)) {
678                 t.setTeamTask(true);
679             } else {
680                 t.setTeamTask(false);
681             }
682
683             tmp = XmlParser.getXMLInitTagValue
684                         (msgResponse, "TotalWork");
685
686             if (tmp != null && tmp.length() > 0) {
687                  t.setTotalWork(Integer.parseInt(tmp));
688             }
689
690             tmp = XmlParser.getXMLInitTagValue(msgResponse, "complete");
691
692             if (tmp != null && tmp.equals("1")) {
693                 t.setComplete(true);
694             } else {
695                 t.setComplete(false);
696             }
697
698         } catch (XmlParseException e) {
699             throw new DataAccessException("Error parsing task item: ", e);
700         }
701
702         return t;
703
704     }
705
706     /**
707      * Build a clause
708      * to webdav select request
709      * between ids item array
710      *
711      * @param ids
712      * @return webdav select clause
713      **/

714     private static String JavaDoc getClause (String JavaDoc[] fields, Object JavaDoc[] values) {
715
716         StringBuffer JavaDoc clause = new StringBuffer JavaDoc();
717
718         int l = fields.length;
719
720         if (l == 0) {
721             return "";
722         }
723
724         clause.append("where ");
725
726         StringBuffer JavaDoc tmp = null;
727         String JavaDoc valueTmp = null;
728
729         for (int i = 0; i < l; i++) {
730             tmp = new StringBuffer JavaDoc();
731
732             valueTmp = "";
733
734             if (TAG_DATE.equals(fields[i])) {
735                 tmp.append("\"http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/0x8104\"");
736
737                 if (values[i] != null) {
738                     tmp.append("=CAST(\"");
739                     valueTmp = dateToWebDavTag((java.util.Date JavaDoc)values[i]);
740                     tmp.append(valueTmp).append("\" as 'dateTime')");
741                 } else {
742                     tmp.append(" is null ");
743                 }
744             }
745
746             if (TAG_DUE_DATE.equals(fields[i])) {
747                 tmp.append("\"http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/0x8105\"");
748
749                 if (values[i] != null) {
750                     tmp.append("=CAST(\"");
751                     valueTmp = dateToWebDavTag((java.util.Date JavaDoc)values[i]);
752                     tmp.append(valueTmp).append("\" as 'dateTime')");
753                 } else {
754                     tmp.append(" is null ");
755                 }
756             }
757
758
759             if (TAG_SUBJECT.equals(fields[i])) {
760                 tmp.append("\"urn:schemas:httpmail:subject\"");
761
762                 if (values[i] != null) {
763                     tmp.append("='");
764                     valueTmp = String.valueOf(values[i]);
765                     valueTmp = valueTmp.replaceAll("'","''");
766                     valueTmp = StringTools.escapeXml(valueTmp);
767                     tmp.append(valueTmp).append("'");
768                 } else {
769                     tmp.append(" is null ");
770                 }
771
772             }
773
774             if (i != 0 && tmp.length() != 0) {
775                 clause.append(" and ").append(tmp);
776             } else if (tmp.length() != 0) {
777                 clause.append(tmp);
778             }
779
780         }
781
782         clause.append("\r\n");
783
784         return clause.toString();
785
786     }
787
788     /**
789      * get tasks from Exchange Server with the given clause
790      *
791      * @param username
792      * @param credentials
793      * @param clause
794      * @param exchangeFolder
795      * @return array of find task
796      *
797      * @throws sync4j.exchange.util.DataAccessException
798      **/

799     private Task[] getTasks(String JavaDoc username,
800                             String JavaDoc credentials,
801                             String JavaDoc clause,
802                             String JavaDoc exchangeFolder) throws DataAccessException {
803
804         Task[] exchangeTasks = null;
805
806         String JavaDoc response = null;
807         String JavaDoc webDavTaskMsg = null;
808
809         String JavaDoc webDavHeaderMsg = null;
810
811         String JavaDoc server = null;
812         String JavaDoc resource = null;
813
814         server = getServerFromExchangeFolder(exchangeFolder);
815         resource = getResourceFromExchangeFolder(exchangeFolder);
816         webDavTaskMsg =
817                 MessageFormat.format(WEBDAV_MSG_SELECT_TASKS,
818                                      new Object JavaDoc[] {server, username, resource,
819                                      clause});
820
821         webDavHeaderMsg =
822                 MessageFormat.format(ItemDAO.WEBDAV_HEADER_SELECT,
823                                          new Object JavaDoc[] {
824                                              "/" +
825                                              server +
826                                              "/" +
827                                              username +
828                                              "/" +
829                                              resource
830                                          }
831                                      );
832
833         try {
834             response = this.webDavHttp.sendRequest(webDavHeaderMsg, credentials,
835                     webDavTaskMsg, FILE_ENCODING);
836         } catch (IOException JavaDoc e) {
837             throw new DataAccessException(
838                     "Error getting Exchange server response",
839                     e);
840         }
841
842         try {
843             int s = getStatusFromResponse(response);
844             checkResponseStatus(s);
845         } catch (Exception JavaDoc e) {
846
847             throw new DataAccessException("USER " +
848                                           username +
849                                           " URI " +
850                                           exchangeFolder +
851                                           " getting exchange task",
852                                           e);
853
854         }
855
856         exchangeTasks = getTasksFromWebDavMsg(response);
857
858         return exchangeTasks;
859     }
860
861 }
862
Popular Tags