use of com.zimbra.cs.service.formatter.VCard in project zm-mailbox by Zimbra.
the class AddressbookCollection method handlePost.
@Override
public void handlePost(DavContext ctxt) throws DavException, IOException, ServiceException {
Provisioning prov = Provisioning.getInstance();
DavResource rs = null;
try {
String user = ctxt.getUser();
Account account = prov.get(AccountBy.name, user);
if (account == null) {
// Anti-account name harvesting.
ZimbraLog.dav.info("Failing POST to Addressbook - no such account '%s'", user);
throw new DavException("Request denied", HttpServletResponse.SC_NOT_FOUND, null);
}
VCard vcard = AddressObject.uploadToVCard(ctxt);
String baseName = new StringBuilder(vcard.uid).append(AddressObject.VCARD_EXTENSION).toString();
rs = UrlNamespace.getResourceAt(ctxt, ctxt.getUser(), relativeUrlForChild(ctxt.getUser(), baseName));
if (rs != null) {
// name based on uid already taken - choose another.
baseName = new StringBuilder(UUIDUtil.generateUUID()).append(AddressObject.VCARD_EXTENSION).toString();
}
rs = AddressObject.create(ctxt, baseName, this, vcard, false);
if (rs.isNewlyCreated()) {
ctxt.getResponse().setHeader("Location", rs.getHref());
ctxt.setStatus(HttpServletResponse.SC_CREATED);
} else {
ctxt.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
if (rs.hasEtag()) {
ctxt.getResponse().setHeader(DavProtocol.HEADER_ETAG, rs.getEtag());
ctxt.getResponse().setHeader(ETagHeaderFilter.ZIMBRA_ETAG_HEADER, rs.getEtag());
}
} catch (ServiceException e) {
if (e.getCode().equals(ServiceException.FORBIDDEN)) {
throw new DavException(e.getMessage(), HttpServletResponse.SC_FORBIDDEN, e);
} else {
throw new DavException("cannot create vcard item", HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
}
}
}
Aggregations