/** * Updates the assets in the given bundle with the publish/expire dates and destination * environments and set them ready to be pushed * * @param request HttpRequest * @param response HttpResponse * @throws WorkflowActionFailureException If fails trying to Publish the bundle contents */ public void pushBundle(HttpServletRequest request, HttpServletResponse response) throws WorkflowActionFailureException, IOException { response.setContentType("text/plain"); try { PublisherAPI publisherAPI = PublisherAPI.getInstance(); // Read the form values String bundleId = request.getParameter("assetIdentifier"); String _contentPushPublishDate = request.getParameter("remotePublishDate"); String _contentPushPublishTime = request.getParameter("remotePublishTime"); String _contentPushExpireDate = request.getParameter("remotePublishExpireDate"); String _contentPushExpireTime = request.getParameter("remotePublishExpireTime"); String _iWantTo = request.getParameter("iWantTo"); String whoToSendTmp = request.getParameter("whoToSend"); List<String> whereToSend = Arrays.asList(whoToSendTmp.split(",")); List<Environment> envsToSendTo = new ArrayList<Environment>(); // Lists of Environments to push to for (String envId : whereToSend) { Environment e = APILocator.getEnvironmentAPI().findEnvironmentById(envId); if (e != null && APILocator.getPermissionAPI() .doesUserHavePermission(e, PermissionAPI.PERMISSION_USE, getUser())) { envsToSendTo.add(e); } } if (envsToSendTo.isEmpty()) { response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } // Put the selected environments in session in order to have the list of the last selected // environments request.getSession().setAttribute(WebKeys.SELECTED_ENVIRONMENTS, envsToSendTo); // Clean up the selected bundle request.getSession().removeAttribute(WebKeys.SELECTED_BUNDLE); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-H-m"); Date publishDate = dateFormat.parse(_contentPushPublishDate + "-" + _contentPushPublishTime); Bundle bundle = APILocator.getBundleAPI().getBundleById(bundleId); APILocator.getBundleAPI().saveBundleEnvironments(bundle, envsToSendTo); if (_iWantTo.equals(RemotePublishAjaxAction.DIALOG_ACTION_PUBLISH)) { bundle.setPublishDate(publishDate); APILocator.getBundleAPI().updateBundle(bundle); publisherAPI.publishBundleAssets(bundle.getId(), publishDate); } else if (_iWantTo.equals(RemotePublishAjaxAction.DIALOG_ACTION_EXPIRE)) { if ((!"".equals(_contentPushExpireDate.trim()) && !"".equals(_contentPushExpireTime.trim()))) { Date expireDate = dateFormat.parse(_contentPushExpireDate + "-" + _contentPushExpireTime); bundle.setExpireDate(expireDate); APILocator.getBundleAPI().updateBundle(bundle); publisherAPI.unpublishBundleAssets(bundle.getId(), expireDate); } } else if (_iWantTo.equals(RemotePublishAjaxAction.DIALOG_ACTION_PUBLISH_AND_EXPIRE)) { if ((!"".equals(_contentPushExpireDate.trim()) && !"".equals(_contentPushExpireTime.trim()))) { Date expireDate = dateFormat.parse(_contentPushExpireDate + "-" + _contentPushExpireTime); bundle.setPublishDate(publishDate); bundle.setExpireDate(expireDate); APILocator.getBundleAPI().updateBundle(bundle); publisherAPI.publishAndExpireBundleAssets( bundle.getId(), publishDate, expireDate, getUser()); } } } catch (Exception e) { Logger.error(RemotePublishAjaxAction.class, e.getMessage(), e); response.sendError( HttpStatus.SC_INTERNAL_SERVER_ERROR, "Error Push Publishing Bundle: " + e.getMessage()); } }
@Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Map<String, String> map = getURIParams(); String cmd = map.get("cmd"); Method dispatchMethod = null; User user = getUser(); try { // Check permissions if the user has access to the CMS Maintenance Portlet if (user == null) { String userName = map.get("u") != null ? map.get("u") : map.get("user") != null ? map.get("user") : null; String password = map.get("p") != null ? map.get("p") : map.get("passwd") != null ? map.get("passwd") : null; LoginFactory.doLogin(userName, password, false, request, response); user = (User) request.getSession().getAttribute(WebKeys.CMS_USER); // Set the logged user in order to make it available from this action using the getUser() // method if (user != null) { setUser(user); } if (user == null) { setUser(request); user = getUser(); } if (user == null) { response.sendError(401); return; } } } catch (Exception e) { Logger.error(this.getClass(), e.getMessage()); response.sendError(401); return; } if (null != cmd) { try { dispatchMethod = this.getClass() .getMethod(cmd, new Class[] {HttpServletRequest.class, HttpServletResponse.class}); } catch (Exception e) { try { dispatchMethod = this.getClass() .getMethod( "action", new Class[] {HttpServletRequest.class, HttpServletResponse.class}); } catch (Exception e1) { Logger.error(this.getClass(), "Trying to get method:" + cmd); Logger.error(this.getClass(), e1.getMessage(), e1.getCause()); throw new DotRuntimeException(e1.getMessage()); } } try { dispatchMethod.invoke(this, new Object[] {request, response}); } catch (Exception e) { Logger.error(this.getClass(), "Trying to invoke method:" + cmd); Logger.error(this.getClass(), e.getMessage(), e.getCause()); throw new DotRuntimeException(e.getMessage()); } } }
/** * Adds to an specific given bundle a given asset. <br> * If the given bundle does not exist a new onw will be created with that name * * @param request HttpRequest * @param response HttpResponse */ public void addToBundle(HttpServletRequest request, HttpServletResponse response) throws IOException { PublisherAPI publisherAPI = PublisherAPI.getInstance(); String _assetId = request.getParameter("assetIdentifier"); String _contentFilterDate = request.getParameter("remoteFilterDate"); String bundleName = request.getParameter("bundleName"); String bundleId = request.getParameter("bundleSelect"); try { Bundle bundle; if (bundleId == null || bundleName.equals(bundleId)) { // if the user has a unsent bundle with that name just add to it bundle = null; for (Bundle b : APILocator.getBundleAPI() .getUnsendBundlesByName(getUser().getUserId(), bundleName, 1000, 0)) { if (b.getName().equalsIgnoreCase(bundleName)) { bundle = b; } } if (bundle == null) { bundle = new Bundle(bundleName, null, null, getUser().getUserId()); APILocator.getBundleAPI().saveBundle(bundle); } } else { bundle = APILocator.getBundleAPI().getBundleById(bundleId); } // Put the selected bundle in session in order to have last one selected request.getSession().setAttribute(WebKeys.SELECTED_BUNDLE, bundle); List<String> ids; if (_assetId.startsWith("query_")) { // Support for lucene queries String luceneQuery = _assetId.replace("query_", ""); List<String> queries = new ArrayList<String>(); queries.add(luceneQuery); ids = PublisherUtil.getContentIds(queries); } else { String[] _assetsIds = _assetId.split(","); // Support for multiple ids in the assetIdentifier parameter List<String> assetsIds = Arrays.asList(_assetsIds); ids = getIdsToPush(assetsIds, _contentFilterDate, new SimpleDateFormat("yyyy-MM-dd-H-m")); } Map<String, Object> responseMap = publisherAPI.saveBundleAssets(ids, bundle.getId(), getUser()); // If we have errors lets return them in order to feedback the user if (responseMap != null && !responseMap.isEmpty()) { // Error messages JSONArray jsonErrors = new JSONArray((ArrayList) responseMap.get("errorMessages")); // Prepare the Json response JSONObject jsonResponse = new JSONObject(); jsonResponse.put("errorMessages", jsonErrors.toArray()); jsonResponse.put("errors", responseMap.get("errors")); jsonResponse.put("total", responseMap.get("total")); // And send it back to the user response.getWriter().println(jsonResponse.toString()); } } catch (Exception e) { Logger.error(RemotePublishAjaxAction.class, e.getMessage(), e); response.sendError( HttpStatus.SC_INTERNAL_SERVER_ERROR, "Error Adding content to Bundle: " + e.getMessage()); } }
/** * Send to the publisher queue a list of assets for a given Operation (Publish/Unpublish) and * {@link Environment Environment} * * @param request HttpRequest * @param response HttpResponse * @throws WorkflowActionFailureException If fails adding the content for Publish * @see com.dotcms.publisher.business.PublisherQueueJob * @see Environment */ public void publish(HttpServletRequest request, HttpServletResponse response) throws IOException, WorkflowActionFailureException { try { PublisherAPI publisherAPI = PublisherAPI.getInstance(); // Read the form values String _assetId = request.getParameter("assetIdentifier"); String _contentPushPublishDate = request.getParameter("remotePublishDate"); String _contentPushPublishTime = request.getParameter("remotePublishTime"); String _contentPushExpireDate = request.getParameter("remotePublishExpireDate"); String _contentPushExpireTime = request.getParameter("remotePublishExpireTime"); String _contentFilterDate = request.getParameter("remoteFilterDate"); String _iWantTo = request.getParameter("iWantTo"); String whoToSendTmp = request.getParameter("whoToSend"); String forcePushStr = request.getParameter("forcePush"); boolean forcePush = (forcePushStr != null && forcePushStr.equals("true")); List<String> whereToSend = Arrays.asList(whoToSendTmp.split(",")); List<Environment> envsToSendTo = new ArrayList<Environment>(); // Lists of Environments to push to for (String envId : whereToSend) { Environment e = APILocator.getEnvironmentAPI().findEnvironmentById(envId); if (e != null) { envsToSendTo.add(e); } } // Put the selected environments in session in order to have the list of the last selected // environments request.getSession().setAttribute(WebKeys.SELECTED_ENVIRONMENTS, envsToSendTo); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-H-m"); Date publishDate = dateFormat.parse(_contentPushPublishDate + "-" + _contentPushPublishTime); List<String> ids; if (_assetId.startsWith("query_")) { // Support for lucene queries String luceneQuery = _assetId.replace("query_", ""); List<String> queries = new ArrayList<String>(); queries.add(luceneQuery); ids = PublisherUtil.getContentIds(queries); } else { String[] _assetsIds = _assetId.split(","); // Support for multiple ids in the assetIdentifier parameter List<String> assetsIds = Arrays.asList(_assetsIds); ids = getIdsToPush(assetsIds, _contentFilterDate, dateFormat); } // Response map with the status of the addContents operation (error messages and counts ) Map<String, Object> responseMap = null; if (_iWantTo.equals(RemotePublishAjaxAction.DIALOG_ACTION_PUBLISH) || _iWantTo.equals(RemotePublishAjaxAction.DIALOG_ACTION_PUBLISH_AND_EXPIRE)) { Bundle bundle = new Bundle(null, publishDate, null, getUser().getUserId(), forcePush); APILocator.getBundleAPI().saveBundle(bundle, envsToSendTo); responseMap = publisherAPI.addContentsToPublish(ids, bundle.getId(), publishDate, getUser()); } if (_iWantTo.equals(RemotePublishAjaxAction.DIALOG_ACTION_EXPIRE) || _iWantTo.equals(RemotePublishAjaxAction.DIALOG_ACTION_PUBLISH_AND_EXPIRE)) { if ((!"".equals(_contentPushExpireDate.trim()) && !"".equals(_contentPushExpireTime.trim()))) { Date expireDate = dateFormat.parse(_contentPushExpireDate + "-" + _contentPushExpireTime); Bundle bundle = new Bundle(null, publishDate, expireDate, getUser().getUserId(), forcePush); APILocator.getBundleAPI().saveBundle(bundle, envsToSendTo); responseMap = publisherAPI.addContentsToUnpublish(ids, bundle.getId(), expireDate, getUser()); } } // If we have errors lets return them in order to feedback the user if (responseMap != null && !responseMap.isEmpty()) { // Error messages JSONArray jsonErrors = new JSONArray((ArrayList) responseMap.get("errorMessages")); // Prepare the Json response JSONObject jsonResponse = new JSONObject(); jsonResponse.put("errorMessages", jsonErrors.toArray()); jsonResponse.put("errors", responseMap.get("errors")); jsonResponse.put("total", responseMap.get("total")); jsonResponse.put("bundleId", responseMap.get("bundleId")); // And send it back to the user response.getWriter().println(jsonResponse.toString()); } } catch (Exception e) { Logger.error(RemotePublishAjaxAction.class, e.getMessage(), e); response.sendError( HttpStatus.SC_INTERNAL_SERVER_ERROR, "Error Publishing Bundle: " + e.getMessage()); } }