Caldav: implement update folder
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1784 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
485a43f789
commit
3486940ec5
|
@ -675,10 +675,15 @@ public class CaldavConnection extends AbstractConnection {
|
||||||
}
|
}
|
||||||
CaldavResponse response = new CaldavResponse(HttpStatus.SC_MULTI_STATUS);
|
CaldavResponse response = new CaldavResponse(HttpStatus.SC_MULTI_STATUS);
|
||||||
response.startMultistatus();
|
response.startMultistatus();
|
||||||
// just ignore calendar folder proppatch (color not supported in Exchange)
|
// ical calendar folder proppatch
|
||||||
if (request.hasProperty("calendar-color")) {
|
if (hasIcalProperties) {
|
||||||
response.startPropstat();
|
response.startPropstat();
|
||||||
response.appendProperty("x1:calendar-color", "x1=\"http://apple.com/ns/ical/\"", null);
|
if (request.hasProperty("calendar-color")) {
|
||||||
|
response.appendProperty("x1:calendar-color", "x1=\"http://apple.com/ns/ical/\"", null);
|
||||||
|
}
|
||||||
|
if (request.hasProperty("calendar-order")) {
|
||||||
|
response.appendProperty("x1:calendar-order", "x1=\"http://apple.com/ns/ical/\"", null);
|
||||||
|
}
|
||||||
response.endPropStatOK();
|
response.endPropStatOK();
|
||||||
}
|
}
|
||||||
response.endMultistatus();
|
response.endMultistatus();
|
||||||
|
|
|
@ -1322,6 +1322,16 @@ public abstract class ExchangeSession {
|
||||||
*/
|
*/
|
||||||
public abstract int createFolder(String folderName, String folderClass, Map<String, String> properties) throws IOException;
|
public abstract int createFolder(String folderName, String folderClass, Map<String, String> properties) throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update Exchange folder properties.
|
||||||
|
*
|
||||||
|
* @param folderName logical folder name
|
||||||
|
* @param properties folder properties
|
||||||
|
* @return status
|
||||||
|
* @throws IOException on error
|
||||||
|
*/
|
||||||
|
public abstract int updateFolder(String folderName, Map<String, String> properties) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete Exchange folder.
|
* Delete Exchange folder.
|
||||||
*
|
*
|
||||||
|
@ -1404,6 +1414,16 @@ public abstract class ExchangeSession {
|
||||||
* recent count
|
* recent count
|
||||||
*/
|
*/
|
||||||
public int recent;
|
public int recent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calendar color
|
||||||
|
*/
|
||||||
|
public String calendarColor;
|
||||||
|
/**
|
||||||
|
* Calendar order
|
||||||
|
*/
|
||||||
|
public String calendarOrder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Folder message list, empty before loadMessages call.
|
* Folder message list, empty before loadMessages call.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -556,7 +556,7 @@ public class DavExchangeSession extends ExchangeSession {
|
||||||
// Exchange 2003
|
// Exchange 2003
|
||||||
serverVersion = "Exchange2003";
|
serverVersion = "Exchange2003";
|
||||||
fixClientHost(method);
|
fixClientHost(method);
|
||||||
checkPublicFolder(method);
|
checkPublicFolder();
|
||||||
try {
|
try {
|
||||||
buildEmail(method.getURI().getHost());
|
buildEmail(method.getURI().getHost());
|
||||||
} catch (URIException uriException) {
|
} catch (URIException uriException) {
|
||||||
|
@ -571,7 +571,7 @@ public class DavExchangeSession extends ExchangeSession {
|
||||||
fixClientHost(method);
|
fixClientHost(method);
|
||||||
getEmailAndAliasFromOptions();
|
getEmailAndAliasFromOptions();
|
||||||
|
|
||||||
checkPublicFolder(method);
|
checkPublicFolder();
|
||||||
|
|
||||||
// failover: try to get email through Webdav and Galfind
|
// failover: try to get email through Webdav and Galfind
|
||||||
if (alias == null || email == null) {
|
if (alias == null || email == null) {
|
||||||
|
@ -749,7 +749,7 @@ public class DavExchangeSession extends ExchangeSession {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void checkPublicFolder(HttpMethod method) {
|
protected void checkPublicFolder() {
|
||||||
|
|
||||||
Cookie[] currentCookies = httpClient.getState().getCookies();
|
Cookie[] currentCookies = httpClient.getState().getCookies();
|
||||||
// check public folder access
|
// check public folder access
|
||||||
|
@ -1837,6 +1837,27 @@ public class DavExchangeSession extends ExchangeSession {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int updateFolder(String folderPath, Map<String, String> properties) throws IOException {
|
||||||
|
Set<PropertyValue> propertyValues = new HashSet<PropertyValue>();
|
||||||
|
if (properties != null) {
|
||||||
|
for (Map.Entry<String, String> entry : properties.entrySet()) {
|
||||||
|
propertyValues.add(Field.createPropertyValue(entry.getKey(), entry.getValue()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// standard MkColMethod does not take properties, override PropPatchMethod instead
|
||||||
|
ExchangePropPatchMethod method = new ExchangePropPatchMethod(URIUtil.encodePath(getFolderPath(folderPath)), propertyValues);
|
||||||
|
int status = DavGatewayHttpClientFacade.executeHttpMethod(httpClient, method);
|
||||||
|
if (status == HttpStatus.SC_MULTI_STATUS) {
|
||||||
|
status = method.getResponseStatusCode();
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -924,6 +924,21 @@ public class EwsExchangeSession extends ExchangeSession {
|
||||||
return HttpStatus.SC_CREATED;
|
return HttpStatus.SC_CREATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int updateFolder(String folderPath, Map<String, String> properties) throws IOException {
|
||||||
|
ArrayList<FieldUpdate> updates = new ArrayList<FieldUpdate>();
|
||||||
|
for (Map.Entry<String,String> entry:properties.entrySet()) {
|
||||||
|
updates.add(new FieldUpdate(Field.get(entry.getKey()), entry.getValue()));
|
||||||
|
}
|
||||||
|
UpdateFolderMethod updateFolderMethod = new UpdateFolderMethod(internalGetFolder(folderPath).folderId, updates);
|
||||||
|
|
||||||
|
executeMethod(updateFolderMethod);
|
||||||
|
return HttpStatus.SC_CREATED;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue