/** * Copyright (c) 2009--2014 Red Hat, Inc. * * 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. */ package com.redhat.rhn.frontend.action.kickstart.cobbler; import com.redhat.rhn.common.validator.ValidatorException; import com.redhat.rhn.common.validator.ValidatorResult; import com.redhat.rhn.domain.kickstart.cobbler.CobblerSnippet; import com.redhat.rhn.frontend.action.common.BadParameterException; import com.redhat.rhn.frontend.struts.RequestContext; import com.redhat.rhn.frontend.struts.RhnAction; import com.redhat.rhn.frontend.struts.RhnHelper; import com.redhat.rhn.frontend.struts.RhnValidationHelper; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * CobblerSnippetDetailsAction * @version $Rev$ */ public class CobblerSnippetDetailsAction extends RhnAction { private static final Logger LOG = Logger.getLogger(CobblerSnippetDetailsAction.class); public static final String PREFIX = "prefix"; public static final String NAME = "name"; public static final String OLD_NAME = "oldName"; public static final String ORG = "org"; public static final String CONTENTS = "contents"; public static final String CREATE_MODE = "create_mode"; public static final String SNIPPET = "snippet"; private static final String VALIDATION_XSD = "/com/redhat/rhn/frontend/action/kickstart/" + "cobbler/validation/cobblerSnippetsForm.xsd"; /** {@inheritDoc} */ public ActionForward execute(ActionMapping mapping, ActionForm formIn, HttpServletRequest request, HttpServletResponse response) { DynaActionForm form = (DynaActionForm) formIn; RequestContext ctx = new RequestContext(request); request.setAttribute(mapping.getParameter(), Boolean.TRUE); if (ctx.isSubmitted()) { ValidatorResult result = RhnValidationHelper.validate(this.getClass(), makeValidationMap(form), null, VALIDATION_XSD); if (!result.isEmpty()) { getStrutsDelegate().saveMessages(request, result); RhnValidationHelper.setFailedValidation(request); } else { try { CobblerSnippet snip = submit(request, form); if (isCreateMode(request)) { createSuccessMessage(request, "cobblersnippet.create.success", snip.getName()); } else { createSuccessMessage(request, "cobblersnippet.update.success", snip.getName()); } request.removeAttribute(CREATE_MODE); setupSnippet(request, form, snip); return getStrutsDelegate().forwardParam(mapping.findForward("success"), NAME, snip.getName()); } catch (ValidatorException ve) { getStrutsDelegate().saveMessages(request, ve.getResult()); RhnValidationHelper.setFailedValidation(request); } } } setup(request, form); return mapping.findForward(RhnHelper.DEFAULT_FORWARD); } private Map makeValidationMap(DynaActionForm form) { Map map = new HashMap(); map.put(NAME, form.getString(NAME)); map.put(OLD_NAME, form.getString(OLD_NAME)); map.put(CONTENTS, form.getString(CONTENTS)); return map; } private boolean isCreateMode(HttpServletRequest request) { return Boolean.TRUE.equals(request.getAttribute(CREATE_MODE)); } private void setup(HttpServletRequest request, DynaActionForm form) { RequestContext context = new RequestContext(request); if (isCreateMode(request)) { request.setAttribute(PREFIX, CobblerSnippet.getPrefixFor( context.getCurrentUser().getOrg())); } else { String param = NAME; if (!isCreateMode(request) && RhnValidationHelper. getFailedValidation(request)) { param = OLD_NAME; } CobblerSnippet snip = loadEditableSnippet(request, param); setupSnippet(request, form, snip); } } /** * Helper method to get a cobbler snippet.. This code is in this * action because we need it to throw a "BadParameterException" * if the set up complains... Also it gets info from the request object * so this is the right place... * @param request the request * @param lookupParam the parameter to which the snippet name is bound.. * @return the cobbler snippet parameter "name" */ private static CobblerSnippet loadEditableSnippet(HttpServletRequest request, String lookupParam) { RequestContext context = new RequestContext(request); try { String name = context.getParam(lookupParam, true); return CobblerSnippet.loadEditable(name, context.getCurrentUser().getOrg()); } catch (ValidatorException ve) { LOG.error(ve); throw new BadParameterException( "The parameter " + NAME + " is required."); } } /** * Helper method to get a cobbler snippet.. This code is in this * action because we need it to throw a "BadParameterException" * if the set up complains... Also it gets info from the request object * so this is the right place... * @param request the request * @return the cobbler snippet parameter "name" */ static CobblerSnippet loadEditableSnippet(HttpServletRequest request) { return loadEditableSnippet(request, NAME); } private void setupSnippet(HttpServletRequest request, DynaActionForm form, CobblerSnippet snip) { request.setAttribute(PREFIX, snip.getPrefix()); form.set(NAME, snip.getName()); form.set(OLD_NAME, snip.getName()); form.set(CONTENTS, snip.getContents()); bindSnippet(request, snip); request.setAttribute(ORG, snip.getOrg().getName()); } /** * Method to bind the cobbler snippet to a request * @param request the servlet request * @param snip the snippet to bind */ public static void bindSnippet(HttpServletRequest request, CobblerSnippet snip) { request.setAttribute(SNIPPET, snip); } private CobblerSnippet submit(HttpServletRequest request, DynaActionForm form) { RequestContext context = new RequestContext(request); String name = isCreateMode(request) ? form.getString(NAME) : form.getString(OLD_NAME); CobblerSnippet snip = CobblerSnippet.createOrUpdate( isCreateMode(request), name, form.getString(CONTENTS), context.getCurrentUser().getOrg()); if (!isCreateMode(request) && !form.getString(NAME).equals(form.getString(OLD_NAME))) { snip.rename(form.getString(NAME)); } return snip; } }