/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.gui.operation.schedule.resource; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.quartz.JobDetail; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.resource.Resource; import org.rhq.core.gui.util.FacesContextUtility; import org.rhq.enterprise.gui.operation.schedule.OperationScheduleUIBean; import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility; import org.rhq.core.domain.operation.bean.ResourceOperationSchedule; import org.rhq.enterprise.server.scheduler.SchedulerLocal; import org.rhq.enterprise.server.util.LookupUtil; import org.rhq.enterprise.server.util.QuartzUtil; public class ResourceOperationScheduleUIBean extends OperationScheduleUIBean { private Resource resource; public ResourceOperationScheduleUIBean() { } @Override public String getManagedBeanName() { return "ResourceOperationScheduleUIBean"; } @Override public List<ResourceOperationSchedule> getOperationScheduleList() { Subject subject = EnterpriseFacesContextUtility.getSubject(); Resource requestResource = EnterpriseFacesContextUtility.getResourceIfExists(); if (requestResource == null) { requestResource = resource; // request not associated with a resource - use the resource we used before } else { resource = requestResource; // request switched the resource this UI bean is using } List<ResourceOperationSchedule> results = null; try { results = manager.findScheduledResourceOperations(subject, requestResource.getId()); } catch (Exception e) { // throw up all known information to the caller for now throw new IllegalStateException(e.getMessage(), e); } return results; } @Override public void unscheduleOperation(Subject subject, String doomedJobId) throws Exception { if (resource == null) { resource = EnterpriseFacesContextUtility.getResource(); if (resource == null) { throw new IllegalStateException("Could not find resource from which to delete operation schedules"); } } manager.unscheduleResourceOperation(subject, doomedJobId, resource.getId()); } @Override public void scheduleOperation(Subject subject, String operationName, Configuration parameters, SimpleTrigger simpleTrigger, String description) throws Exception { if (resource == null) { resource = EnterpriseFacesContextUtility.getResource(); if (resource == null) { throw new IllegalStateException("Could not find resource against which to schedule operations"); } } manager.scheduleResourceOperation(subject, resource.getId(), operationName, parameters, simpleTrigger, description); } public String executeNow() throws Exception { Subject subject = EnterpriseFacesContextUtility.getSubject(); HttpServletRequest request = FacesContextUtility.getRequest(); String[] selectedItems = request.getParameterValues("selectedItems"); if (selectedItems == null || selectedItems.length == 0) { selectedItems = request.getParameterValues("jobId"); } if (selectedItems == null || selectedItems.length == 0) { throw new IllegalStateException("No job selected to execute"); } SchedulerLocal scheduler = LookupUtil.getSchedulerBean(); for (String jobIdString : selectedItems) { ResourceOperationSchedule resourceSchedule; try { resourceSchedule = manager.getResourceOperationSchedule(subject, jobIdString); } catch (SchedulerException se) { throw new IllegalStateException(se.getMessage(), se); } JobDetail jobDetail = scheduler.getJobDetail(resourceSchedule.getJobName(), resourceSchedule.getJobGroup()); scheduleOperation(subject, resourceSchedule.getOperationName(), resourceSchedule.getParameters(), (SimpleTrigger) QuartzUtil.getFireOnceImmediateTrigger(jobDetail), resourceSchedule.getDescription()); } return "viewOperationHistory"; } }