/**
* 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.configuration.files;
import com.redhat.rhn.common.util.DatePicker;
import com.redhat.rhn.domain.action.ActionChain;
import com.redhat.rhn.domain.action.ActionFactory;
import com.redhat.rhn.domain.action.ActionType;
import com.redhat.rhn.domain.config.ConfigRevision;
import com.redhat.rhn.domain.rhnset.RhnSet;
import com.redhat.rhn.domain.rhnset.RhnSetElement;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.action.configuration.ConfigActionHelper;
import com.redhat.rhn.frontend.struts.ActionChainHelper;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnListDispatchAction;
import com.redhat.rhn.manager.action.ActionChainManager;
import com.redhat.rhn.manager.rhnset.RhnSetDecl;
import com.redhat.rhn.manager.rhnset.RhnSetManager;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* GlobalRevisionDeployConfirmSubmit
* @version $Rev$
*/
public class GlobalRevisionDeployConfirmSubmit extends RhnListDispatchAction {
/**
* {@inheritDoc}
*/
protected void processParamMap(
ActionForm form, HttpServletRequest request, Map<String, Object> params) {
ConfigActionHelper.processParamMap(request, params);
}
/**
* {@inheritDoc}
*/
protected void processMethodKeys(Map<String, String> map) {
map.put("deployconfirm.jsp.deploybutton", "scheduleDeploy");
}
/**
* Actually schedules a deploy of the specified file, to the specified machines
* @param mapping structs action-mapping
* @param form form (it's a date-picker)
* @param request incoming request
* @param response outgoing response
* @return where we're supposed to go next, depending on whether we succeeded or failed
*/
public ActionForward scheduleDeploy(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
RequestContext requestContext = new RequestContext(request);
//schedule diff actions
User user = requestContext.getCurrentUser();
ConfigRevision cr = ConfigActionHelper.findRevision(request);
RhnSet systems = RhnSetDecl.CONFIG_FILE_DEPLOY_SYSTEMS.get(user);
int successes = 0;
Date earliest = getEarliestAction(form);
ActionChain actionChain = ActionChainHelper.readActionChain((DynaActionForm) form,
user);
//create the set needed for the action
Set revisions = new HashSet();
revisions.add(cr.getId());
ActionType deploy = ActionFactory.TYPE_CONFIGFILES_DEPLOY;
//go through all of the selected systems
Iterator itr = systems.getElements().iterator();
while (itr.hasNext()) {
// Each server-deploy should succeed or fail on its own merits (?)
Set servers = new HashSet();
//the current system
Long sid = ((RhnSetElement)itr.next()).getElement();
servers.add(sid);
//created the action. One action per server.
if (revisions.size() > 0 &&
!ActionChainManager.createConfigActions(user, revisions, servers, deploy,
earliest, actionChain).isEmpty()) {
successes++;
}
}
//create the message
if (successes > 0) {
RhnSetManager.remove(systems);
createSuccessMessage(successes, request, actionChain, "deployconfirm.jsp");
Map params = makeParamMap(form, request);
return getStrutsDelegate().forwardParams(
mapping.findForward("success"), params);
}
createFailureMessage(request, "deployconfirm.jsp");
Map params = makeParamMap(form, request);
return getStrutsDelegate().forwardParams(
mapping.findForward("failure"), params);
}
private Date getEarliestAction(ActionForm formIn) {
if (formIn == null) {
return new Date();
}
DynaActionForm form = (DynaActionForm) formIn;
return getStrutsDelegate().readDatePicker(form, "date",
DatePicker.YEAR_RANGE_POSITIVE);
}
private void createSuccessMessage(int successes, HttpServletRequest request,
ActionChain actionChain, String prefix) {
ActionMessages msg = new ActionMessages();
if (actionChain == null) {
if (successes == 1) {
msg.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage(prefix + ".success"));
}
else {
msg.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage(prefix + ".successes", new Integer(successes)));
}
}
else {
msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"message.addedtoactionchain", actionChain.getId(), actionChain.getLabel()));
}
getStrutsDelegate().saveMessages(request, msg);
}
private void createFailureMessage(HttpServletRequest request, String prefix) {
ActionMessages msg = new ActionMessages();
msg.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage(prefix + ".failure"));
getStrutsDelegate().saveMessages(request, msg);
}
}