@Override public Element handle(Element request, Map<String, Object> context) throws ServiceException { ZimbraSoapContext zsc = getZimbraSoapContext(context); Mailbox mbox = getRequestedMailbox(zsc); OperationContext octxt = getOperationContext(zsc, context); ItemIdFormatter ifmt = new ItemIdFormatter(zsc); Element doc = request.getElement(MailConstants.E_DOC); String id = doc.getAttribute(MailConstants.A_ID); int version = (int) doc.getAttributeLong(MailConstants.A_VERSION, -1); int count = (int) doc.getAttributeLong(MailConstants.A_COUNT, 1); Element response = zsc.createElement(MailConstants.LIST_DOCUMENT_REVISIONS_RESPONSE); Document item; ItemId iid = new ItemId(id, zsc); item = mbox.getDocumentById(octxt, iid.getId()); if (version < 0) { version = item.getVersion(); } MailItem.Type type = item.getType(); HashSet<Account> accounts = new HashSet<Account>(); Provisioning prov = Provisioning.getInstance(); while (version > 0 && count > 0) { item = (Document) mbox.getItemRevision(octxt, iid.getId(), type, version); if (item != null) { ToXML.encodeDocument(response, ifmt, octxt, item); Account a = prov.getAccountByName(item.getCreator()); if (a != null) accounts.add(a); } version--; count--; } for (Account a : accounts) { Element user = response.addElement(MailConstants.A_USER); user.addAttribute(MailConstants.A_ID, a.getId()); user.addAttribute(MailConstants.A_EMAIL, a.getName()); user.addAttribute(MailConstants.A_NAME, a.getDisplayName()); } return response; }
@Override public Element handle(Element request, Map<String, Object> context) throws ServiceException { if (true) throw WikiServiceException.ERROR("Deprecated"); ZimbraSoapContext zsc = getZimbraSoapContext(context); OperationContext octxt = getOperationContext(zsc, context); Element msgElem = request.getElement(MailConstants.E_WIKIWORD); String subject = msgElem.getAttribute(MailConstants.A_NAME, null); String id = msgElem.getAttribute(MailConstants.A_ID, null); int ver = (int) msgElem.getAttributeLong(MailConstants.A_VERSION, 0); int itemId; if (id == null) { itemId = 0; } else { ItemId iid = new ItemId(id, zsc); itemId = iid.getId(); } ItemId fid = getRequestedFolder(request, zsc); ByteArrayInputStream is = null; try { byte[] rawData = msgElem.getText().getBytes("UTF-8"); is = new ByteArrayInputStream(rawData); } catch (IOException ioe) { throw ServiceException.FAILURE("can't get the content", ioe); } Mailbox mbox = MailboxManager.getInstance().getMailboxByAccountId(zsc.getRequestedAccountId()); Document wikiItem = null; WikiPage.WikiContext ctxt = new WikiPage.WikiContext(octxt, zsc.getAuthToken()); if (itemId == 0) { // create a new page wikiItem = mbox.createDocument( octxt, fid.getId(), subject, WikiItem.WIKI_CONTENT_TYPE, getAuthor(zsc), null, true, is, MailItem.TYPE_WIKI); } else { // add a new revision WikiPage oldPage = WikiPage.findPage(ctxt, zsc.getRequestedAccountId(), itemId); if (oldPage == null) throw new WikiServiceException.NoSuchWikiException("page id=" + id + " not found"); if (oldPage.getLastVersion() != ver) { throw MailServiceException.MODIFY_CONFLICT( new Argument(MailConstants.A_NAME, subject, Argument.Type.STR), new Argument(MailConstants.A_ID, oldPage.getId(), Argument.Type.IID), new Argument(MailConstants.A_VERSION, oldPage.getLastVersion(), Argument.Type.NUM)); } wikiItem = mbox.addDocumentRevision(octxt, itemId, getAuthor(zsc), subject, null, true, is); } Element response = zsc.createElement(MailConstants.SAVE_WIKI_RESPONSE); Element m = response.addElement(MailConstants.E_WIKIWORD); m.addAttribute(MailConstants.A_ID, new ItemIdFormatter(zsc).formatItemId(wikiItem)); m.addAttribute(MailConstants.A_VERSION, wikiItem.getVersion()); return response; }