@Override public Element handle(Element request, Map<String, Object> context) throws ServiceException { ZimbraSoapContext zsc = getZimbraSoapContext(context); String action = request.getAttribute(AdminConstants.A_ACTION).toLowerCase(); Element content = request.getElement(MailConstants.E_CONTENT); String aid = content.getAttribute(MailConstants.A_ATTACHMENT_ID, null); boolean flushCache = request.getAttributeBool(AdminConstants.A_FLUSH, false); boolean synchronous = request.getAttributeBool(AdminConstants.A_SYNCHRONOUS, false); if (action.equals(AdminConstants.A_STATUS)) { // just print the status } else if (action.equals(AdminConstants.A_DEPLOYALL)) { for (Server server : Provisioning.getInstance().getAllServers()) { checkRight(zsc, context, server, Admin.R_deployZimlet); } deploy(zsc, aid, zsc.getRawAuthToken(), flushCache, synchronous); if (flushCache) { if (ZimbraLog.misc.isDebugEnabled()) { ZimbraLog.misc.debug("DeployZimlet: flushing zimlet cache"); } checkRight(zsc, context, Provisioning.getInstance().getLocalServer(), Admin.R_flushCache); FlushCache.sendFlushRequest(context, "/service", "/zimlet/res/all.js"); } } else if (action.equals(AdminConstants.A_DEPLOYLOCAL)) { Server localServer = Provisioning.getInstance().getLocalServer(); checkRight(zsc, context, localServer, Admin.R_deployZimlet); deploy(zsc, aid, null, false, synchronous); if (flushCache) { if (ZimbraLog.misc.isDebugEnabled()) { ZimbraLog.misc.debug("DeployZimlet: flushing zimlet cache"); } checkRight(zsc, context, localServer, Admin.R_flushCache); FlushCache.sendFlushRequest(context, "/service", "/zimlet/res/all.js"); } } else { throw ServiceException.INVALID_REQUEST("invalid action " + action, null); } Element response = zsc.createElement(AdminConstants.DEPLOY_ZIMLET_RESPONSE); Progress progress = (Progress) mProgressMap.get(aid); if (progress != null) progress.writeResponse(response); return response; }
private static void searchRemoteAccountCalendars( Element parent, SearchParams params, ZimbraSoapContext zsc, Account authAcct, Map<String, List<Integer>> accountFolders) throws ServiceException { String nominalTargetAcctId = null; // mail service soap requests want to see a target account StringBuilder queryStr = new StringBuilder(); for (Map.Entry<String, List<Integer>> entry : accountFolders.entrySet()) { String acctId = entry.getKey(); if (nominalTargetAcctId == null) nominalTargetAcctId = acctId; ItemIdFormatter ifmt = new ItemIdFormatter(authAcct.getId(), acctId, false); List<Integer> folderIds = entry.getValue(); for (int folderId : folderIds) { if (queryStr.length() > 0) queryStr.append(" OR "); // must quote the qualified folder id queryStr.append("inid:\"").append(ifmt.formatItemId(folderId)).append("\""); } } Element req = zsc.createElement(MailConstants.SEARCH_REQUEST); req.addAttribute(MailConstants.A_SEARCH_TYPES, MailItem.Type.toString(params.getTypes())); if (params.getSortBy() != null) { req.addAttribute(MailConstants.A_SORTBY, params.getSortBy().toString()); } req.addAttribute(MailConstants.A_QUERY_OFFSET, params.getOffset()); if (params.getLimit() != 0) req.addAttribute(MailConstants.A_QUERY_LIMIT, params.getLimit()); req.addAttribute(MailConstants.A_CAL_EXPAND_INST_START, params.getCalItemExpandStart()); req.addAttribute(MailConstants.A_CAL_EXPAND_INST_END, params.getCalItemExpandEnd()); req.addAttribute(MailConstants.E_QUERY, queryStr.toString(), Element.Disposition.CONTENT); Account target = Provisioning.getInstance().get(Key.AccountBy.id, nominalTargetAcctId); String pxyAuthToken = zsc.getAuthToken().getProxyAuthToken(); ZAuthToken zat = pxyAuthToken == null ? zsc.getRawAuthToken() : new ZAuthToken(pxyAuthToken); ZMailbox.Options zoptions = new ZMailbox.Options(zat, AccountUtil.getSoapUri(target)); zoptions.setTargetAccount(nominalTargetAcctId); zoptions.setTargetAccountBy(AccountBy.id); zoptions.setNoSession(true); ZMailbox zmbx = ZMailbox.getMailbox(zoptions); Element resp = zmbx.invoke(req); for (Element hit : resp.listElements()) { hit.detach(); parent.addElement(hit); } }