From 599c0de815978c0674d33cd3035b098ea0b9d857 Mon Sep 17 00:00:00 2001 From: mguessan Date: Wed, 13 Jun 2012 22:16:22 +0000 Subject: [PATCH] Caldav: implement full contact folder dump at /users//contacts/ git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1970 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/caldav/CaldavConnection.java | 13 +++++++++- .../davmail/exchange/ExchangeSession.java | 2 +- src/test/davmail/caldav/TestCaldav.java | 24 ++++++++++++++++--- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/java/davmail/caldav/CaldavConnection.java b/src/java/davmail/caldav/CaldavConnection.java index 2ef2698a..ec2f1d94 100644 --- a/src/java/davmail/caldav/CaldavConnection.java +++ b/src/java/davmail/caldav/CaldavConnection.java @@ -297,7 +297,18 @@ public class CaldavConnection extends AbstractConnection { String folderPath = request.getFolderPath(); ExchangeSession.Folder folder = session.getFolder(folderPath); if (folder.isContact()) { - sendHttpResponse(HttpStatus.SC_OK, buildEtagHeader(folder.etag), "text/vcard", (byte[]) null, true); + List contacts = session.getAllContacts(folderPath); + ChunkedResponse response = new ChunkedResponse(HttpStatus.SC_OK, "text/vcard;charset=UTF-8"); + + for (ExchangeSession.Contact contact : contacts) { + String contactBody = contact.getBody(); + if (contactBody != null) { + response.append(contactBody); + response.append("\n"); + } + } + response.close(); + } else if (folder.isCalendar() || folder.isTask()) { List events = session.getAllEvents(folderPath); ChunkedResponse response = new ChunkedResponse(HttpStatus.SC_OK, "text/calendar;charset=UTF-8"); diff --git a/src/java/davmail/exchange/ExchangeSession.java b/src/java/davmail/exchange/ExchangeSession.java index 40d9ce5a..d3ba208f 100644 --- a/src/java/davmail/exchange/ExchangeSession.java +++ b/src/java/davmail/exchange/ExchangeSession.java @@ -2556,7 +2556,7 @@ public abstract class ExchangeSession { * @throws IOException on error */ public List getAllContacts(String folderPath) throws IOException { - return searchContacts(folderPath, getItemProperties(), isEqualTo("outlookmessageclass", "IPM.Contact"), 0); + return searchContacts(folderPath, ExchangeSession.CONTACT_ATTRIBUTES, isEqualTo("outlookmessageclass", "IPM.Contact"), 0); } diff --git a/src/test/davmail/caldav/TestCaldav.java b/src/test/davmail/caldav/TestCaldav.java index 1eae767c..a0a1846c 100644 --- a/src/test/davmail/caldav/TestCaldav.java +++ b/src/test/davmail/caldav/TestCaldav.java @@ -28,6 +28,7 @@ import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.RequestEntity; +import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.httpclient.util.URIUtil; import org.apache.jackrabbit.webdav.DavException; import org.apache.jackrabbit.webdav.MultiStatus; @@ -135,13 +136,19 @@ public class TestCaldav extends AbstractDavMailTestCase { assertEquals(HttpStatus.SC_OK, method.getStatusCode()); } - public void testPropfindCalendar() throws IOException { - //Settings.setLoggingLevel("httpclient.wire", Level.DEBUG); - PropFindMethod method = new PropFindMethod("/users/" + session.getAlias() + "/calendar/", null, 1); + public void testGetContacts() throws IOException { + GetMethod method = new GetMethod("/users/" + session.getEmail() + "/contacts/"); httpClient.executeMethod(method); assertEquals(HttpStatus.SC_OK, method.getStatusCode()); } + public void testPropfindCalendar() throws IOException { + Settings.setLoggingLevel("httpclient.wire", Level.DEBUG); + PropFindMethod method = new PropFindMethod("/users/" + session.getEmail() + "/calendar/", null, 1); + httpClient.executeMethod(method); + assertEquals(HttpStatus.SC_MULTI_STATUS, method.getStatusCode()); + } + public void testGetOtherUserCalendar() throws IOException { Settings.setLoggingLevel("httpclient.wire", Level.DEBUG); @@ -372,4 +379,15 @@ public class TestCaldav extends AbstractDavMailTestCase { method.getResponseBodyAsMultiStatus(); } + public void testPropfindAddressBook() throws IOException, DavException { + DavPropertyNameSet davPropertyNameSet = new DavPropertyNameSet(); + //davPropertyNameSet.add(DavPropertyName.create("getctag", Namespace.getNamespace("http://calendarserver.org/ns/"))); + davPropertyNameSet.add(DavPropertyName.create("getetag", Namespace.getNamespace("DAV:"))); + PropFindMethod method = new PropFindMethod("/users/" + session.getEmail()+"/addressbook/", davPropertyNameSet, 1); + httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT, "Address%20Book/883 CFNetwork/454.12.4 Darwin/10.8.0 (i386) (MacBookPro3%2C1)"); + httpClient.executeMethod(method); + assertEquals(HttpStatus.SC_MULTI_STATUS, method.getStatusCode()); + method.getResponseBodyAsMultiStatus(); + } + }