/** * Copyright (c) 2014 SUSE LLC * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ /** * Copyright (c) 2014 Red Hat, Inc. */ package com.redhat.rhn.frontend.struts; import com.redhat.rhn.common.localization.LocalizationService; import com.redhat.rhn.common.util.DatePicker; import com.redhat.rhn.domain.action.ActionChain; import com.redhat.rhn.domain.action.ActionChainFactory; import com.redhat.rhn.domain.user.User; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts.action.DynaActionForm; import org.stringtree.json.JSONWriter; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; /** * Provides helper methods to deal with Action Chains. See also * schedule-options.jspf. * * @author Silvio Moioli <smoioli@suse.de> */ public class ActionChainHelper { /** Name of the form field for the Action Chain label. */ public static final String LABEL_PROPERTY_NAME = "action_chain"; /** Name of the parameter for existing Action Chains data field. */ public static final String EXISTING_ACTION_CHAINS_PROPERTY_NAME = "existingActionChains"; /** Logger instance */ private static Logger log = Logger.getLogger(ActionChainHelper.class); /** * Default constructor. */ private ActionChainHelper() { } /** * Looks in the form contents and returns a (new or existing) ActionChain iff * user has selected one in schedule-options.jspf. * * @param form the form object * @param user the user * @return the action chain */ public static ActionChain readActionChain(DynaActionForm form, User user) { if (Boolean.FALSE.equals(form.get(DatePicker.USE_DATE))) { String label = sanitizeLabel((String) form.get(LABEL_PROPERTY_NAME)); if (!StringUtils.isBlank(label)) { log.debug("Reading Action Chain from label " + label); return ActionChainFactory.getOrCreateActionChain(label, user); } } return null; } /** * Adds parameters needed to display action chains in schedule-options.jspf * to request. * @param request the request */ public static void prepopulateActionChains(HttpServletRequest request) { log.debug("Prepopulating Action Chains"); List<Map<String, String>> result = new LinkedList<Map<String, String>>(); User u = new RequestContext(request).getCurrentUser(); List<ActionChain> actionChains = ActionChainFactory .getActionChainsByModificationDate(u); for (ActionChain actionChain : actionChains) { populateActionChain(result, actionChain.getLabel()); } if (result.isEmpty()) { String placeholder = LocalizationService.getInstance().getMessage( "schedule-options.placeholder"); populateActionChain(result, placeholder); } String json = new JSONWriter().write(result); request.setAttribute(EXISTING_ACTION_CHAINS_PROPERTY_NAME, json); } /** * Adds an Action Chain label to a result map. * @param result a result map * @param label an Action Chain label */ private static void populateActionChain(List<Map<String, String>> result, String label) { Map<String, String> map = new HashMap<String, String>(); map.put("id", label); map.put("text", label); result.add(map); } /** * Removes illegal characters from an Action Chain label string. * @param label the label * @return the sanitized label */ public static String sanitizeLabel(String label) { return label.replaceAll("[,\"]", ""); } }