/**
* 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.ssm;
import com.redhat.rhn.common.util.DatePicker;
import com.redhat.rhn.common.validator.ValidatorError;
import com.redhat.rhn.domain.action.Action;
import com.redhat.rhn.domain.kickstart.KickstartData;
import com.redhat.rhn.domain.kickstart.KickstartFactory;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.server.ServerFactory;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.action.kickstart.ScheduleKickstartWizardAction;
import com.redhat.rhn.frontend.dto.SystemOverview;
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.taglibs.list.ListTagHelper;
import com.redhat.rhn.frontend.taglibs.list.helper.ListHelper;
import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
import com.redhat.rhn.manager.kickstart.KickstartLister;
import com.redhat.rhn.manager.kickstart.KickstartManager;
import com.redhat.rhn.manager.kickstart.SSMScheduleCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper;
import com.redhat.rhn.manager.profile.ProfileManager;
import org.apache.commons.lang.StringUtils;
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 org.cobbler.Profile;
import java.util.Collections;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* ScheduleKickstartAction
* @version $Rev$
*/
public class SsmKSScheduleAction extends RhnAction implements Listable {
private static final String SCHEDULE_TYPE_IP = "isIP";
public static final String USE_IPV6_GATEWAY = "useIpv6Gateway";
private boolean isIP(HttpServletRequest request) {
return Boolean.TRUE.equals(request.getAttribute(SCHEDULE_TYPE_IP));
}
/**
* ${@inheritDoc}
*/
public ActionForward execute(ActionMapping mapping, ActionForm formIn,
HttpServletRequest request, HttpServletResponse response) throws Exception {
RequestContext context = new RequestContext(request);
User user = context.getCurrentUser();
DynaActionForm form = (DynaActionForm)formIn;
if ("ip".equals(mapping.getParameter())) {
request.setAttribute(SCHEDULE_TYPE_IP, Boolean.TRUE);
}
if (context.wasDispatched("kickstart.schedule.button2.jsp")) {
List list = schedule(request, form, context);
ActionMessages msg = new ActionMessages();
String[] params = {list.size() + ""};
msg.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("ssm.provision.scheduled",
params));
getStrutsDelegate().saveMessages(context.getRequest(), msg);
return mapping.findForward("success");
}
ListHelper helper = new ListHelper(this, request);
helper.execute();
ScheduleKickstartWizardAction.setupProxyInfo(context);
form.set(ScheduleKickstartWizardAction.SYNCH_PACKAGES,
ProfileManager.listProfileOverviews(user.getOrg().getId()));
// create and prepopulate the date picker.
getStrutsDelegate().prepopulateDatePicker(
request, form, "date", DatePicker.YEAR_RANGE_POSITIVE);
return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
}
private List<Action> schedule(HttpServletRequest request, ActionForm form,
RequestContext context) {
SSMScheduleCommand com = null;
User user = context.getCurrentUser();
DynaActionForm dynaForm = (DynaActionForm) form;
DatePicker picker = getStrutsDelegate().prepopulateDatePicker(context.getRequest(),
dynaForm, "date", DatePicker.YEAR_RANGE_POSITIVE);
List<SystemOverview> systems =
KickstartManager.getInstance().kickstartableSystemsInSsm(user);
if (isIP(request)) {
com = SSMScheduleCommand.initIPKickstart(user,
systems, picker.getDate());
}
else {
ListHelper helper = new ListHelper(this, request);
String cobblerId = ListTagHelper.getRadioSelection(helper.getListName(),
request);
KickstartData data = KickstartFactory.lookupKickstartDataByCobblerIdAndOrg(
user.getOrg(), cobblerId);
if (data == null) {
Profile prof = Profile.lookupById(CobblerXMLRPCHelper.getConnection(user),
cobblerId);
com = SSMScheduleCommand.initCobblerOnly(user, systems,
picker.getDate(), prof.getName());
}
else {
com = SSMScheduleCommand.init(user, systems, picker.getDate(), data);
}
}
if (dynaForm.getString(USE_IPV6_GATEWAY).equals("1")) {
com.setIpv6Gateway();
}
String proxyId = dynaForm.getString(
ScheduleKickstartWizardAction.PROXY_HOST);
if (!StringUtils.isEmpty(proxyId)) {
Server proxy = ServerFactory.lookupById(Long.parseLong(proxyId));
com.setProxy(proxy);
}
com.setProfileType(dynaForm.getString(
ScheduleKickstartWizardAction.TARGET_PROFILE_TYPE));
com.setServerProfileId((Long) dynaForm.get("targetServerProfile"));
com.setPackageProfileId((Long) dynaForm.get("targetProfile"));
//do kernel params
com.setKernelParamType(dynaForm.getString(
ScheduleKickstartWizardAction.KERNEL_PARAMS_TYPE));
com.setCustomKernelParams(dynaForm.getString(
ScheduleKickstartWizardAction.KERNEL_PARAMS));
//do post kernel params
com.setPostKernelParamType(dynaForm.getString(
ScheduleKickstartWizardAction.POST_KERNEL_PARAMS_TYPE));
com.setCustomPostKernelParams(dynaForm.getString(
ScheduleKickstartWizardAction.POST_KERNEL_PARAMS));
com.setNetworkDevice(dynaForm.getString(ScheduleKickstartWizardAction.NETWORK_TYPE),
dynaForm.getString(
ScheduleKickstartWizardAction.NETWORK_INTERFACE));
List<ValidatorError> errors = com.store();
return com.getScheduledActions();
}
/**
* {@inheritDoc}
*/
public List getResult(RequestContext ctx) {
if (isIP(ctx.getRequest())) {
return Collections.EMPTY_LIST;
}
User user = ctx.getCurrentUser();
List profiles = KickstartLister.getInstance().listProfilesForSsm(user);
if (profiles.isEmpty()) {
addMessage(ctx.getRequest(), "kickstart.schedule.noprofiles");
}
else {
ctx.getRequest().setAttribute(ScheduleKickstartWizardAction.HAS_PROFILES,
Boolean.TRUE);
}
return profiles;
}
}