Package com.blazebit.web.monitor.quartz.bean

Source Code of com.blazebit.web.monitor.quartz.bean.JobBean

/*
* Copyright 2011 Blazebit
*/
package com.blazebit.web.monitor.quartz.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.inject.Named;

import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped;
import org.quartz.JobDetail;
import org.quartz.ObjectAlreadyExistsException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

import com.blazebit.quartz.JobUtil;
import com.blazebit.quartz.job.GenericJob;
import com.blazebit.quartz.job.JobParameter;
import com.blazebit.quartz.job.http.HttpGetInvokerJob;
import com.blazebit.quartz.job.http.HttpPostInvokerJob;
import com.blazebit.quartz.job.mail.SimpleSendMailJob;
import com.blazebit.web.monitor.quartz.model.Property;

/**
*
* @author Christian Beikov
*/
@Named("jobBean")
@ViewAccessScoped
public class JobBean implements Serializable {

  private static final long serialVersionUID = 1L;
  private Scheduler scheduler;
  private String jobName;
  private String jobGroup;
  private Class<? extends GenericJob> jobType;
  private JobDetail selectedJob;
  private List<JobDetail> jobs;
  private List<Trigger> jobTriggers;
  private List<Class<? extends GenericJob>> jobTypes;
  private Map<Class<? extends GenericJob>, List<JobParameter>> propertyMap;
  private List<Property> jobDataMap;

  public JobBean() {
    jobTypes = new ArrayList<Class<? extends GenericJob>>();
    jobTypes.add(SimpleSendMailJob.class);
    jobTypes.add(HttpGetInvokerJob.class);
    jobTypes.add(HttpPostInvokerJob.class);
    jobType = SimpleSendMailJob.class;

    propertyMap = new HashMap<Class<? extends GenericJob>, List<JobParameter>>();
    propertyMap.put(SimpleSendMailJob.class,
        new SimpleSendMailJob().getParameters());
    propertyMap.put(HttpGetInvokerJob.class,
        new HttpGetInvokerJob().getParameters());
    propertyMap.put(HttpPostInvokerJob.class,
        new HttpPostInvokerJob().getParameters());
    jobDataMap = getCopiedProperties(jobType);
  }

  public void preRender() throws SchedulerException {
    jobs = JobUtil.getJobs(scheduler);

    if (selectedJob != null) {
      jobTriggers = JobUtil.getTriggers(scheduler, selectedJob);
    }
  }

  private List<Property> getCopiedProperties(
      Class<? extends GenericJob> jobClass) {
    List<Property> copyList = new ArrayList<Property>();

    if (jobTypes.contains(jobClass)) {
      for (JobParameter p : propertyMap.get(jobClass)) {
        copyList.add(new Property(p.getName(), "", p.isRequired(), p
            .getType(), p.getDescription()));
      }
    }

    return copyList;
  }

  private Map<String, Object> getAsMap(List<Property> properties) {
    Map<String, Object> map = new HashMap<String, Object>();

    for (Property p : properties) {
      if (p.getName() != null
          && !p.getName().isEmpty()
          && p.getValue() != null
          && (((p.getValue() instanceof String) && !((String) p
              .getValue()).isEmpty()) || !(p.getValue() instanceof String))) {
        map.put(p.getName(), p.getValue());
      }
    }

    return map;
  }

  public List<Property> getSelectedJobDataMap() {
    if (selectedJob == null) {
      return Collections.emptyList();
    }
    List<Property> dataMap = new ArrayList<Property>();

    for (Map.Entry<String, Object> entry : selectedJob.getJobDataMap()
        .entrySet()) {
      dataMap.add(new Property(entry.getKey(), entry.getValue()));
    }

    return dataMap;
  }

  public void addParameter(ActionEvent event) {
    jobDataMap.add(new Property("", "", false, String.class, ""));
  }

  public String addJob() throws SchedulerException {
    try {
      JobUtil.add(scheduler, jobType, jobName, jobGroup,
          getAsMap(jobDataMap));
    } catch (ObjectAlreadyExistsException ex) {
      FacesContext
          .getCurrentInstance()
          .addMessage(
              null,
              new FacesMessage(
                  FacesMessage.SEVERITY_ERROR,
                  "Job mit diesem Namen und dieser Gruppe existiert bereits!",
                  null));
    } catch (SchedulerException ex) {
      throw ex;
    }
    selectedJob = null;
    jobType = SimpleSendMailJob.class;
    jobName = null;
    jobGroup = null;
    jobDataMap = getCopiedProperties(jobType);
    return "";
  }

  public String deleteJob(JobDetail job) throws SchedulerException {
    JobUtil.delete(scheduler, job);
    selectedJob = null;

    return "";
  }

  public String triggerJob(JobDetail job) throws SchedulerException {
    JobUtil.trigger(scheduler, job);
    return "";
  }

  public String pauseJob(JobDetail job) throws SchedulerException {
    JobUtil.pause(scheduler, job);
    return "";
  }

  public String resumeJob(JobDetail job) throws SchedulerException {
    JobUtil.resume(scheduler, job);
    return "";
  }

  public List<JobDetail> getJobs() {
    return jobs;
  }

  public void setJobs(List<JobDetail> jobs) {
    this.jobs = jobs;
  }

  public List<Trigger> getJobTriggers() {
    return jobTriggers;
  }

  public void setJobTriggers(List<Trigger> jobTriggers) {
    this.jobTriggers = jobTriggers;
  }

  public JobDetail getSelectedJob() {
    return selectedJob;
  }

  public void setSelectedJob(JobDetail selectedJob) {
    this.selectedJob = selectedJob;
  }

  public String getJobGroup() {
    return jobGroup;
  }

  public void setJobGroup(String jobGroup) {
    this.jobGroup = jobGroup;
  }

  public String getJobName() {
    return jobName;
  }

  public void setJobName(String jobName) {
    this.jobName = jobName;
  }

  public Class<? extends GenericJob> getJobType() {
    return jobType;
  }

  @SuppressWarnings("unchecked")
  public void jobTypeChanged(ValueChangeEvent event) {
    jobDataMap = getCopiedProperties((Class<? extends GenericJob>) event
        .getNewValue());
  }

  public void setJobType(Class<? extends GenericJob> jobType) {
    this.jobType = jobType;
  }

  public List<Class<? extends GenericJob>> getJobTypes() {
    return jobTypes;
  }

  public void setJobTypes(List<Class<? extends GenericJob>> jobTypes) {
    this.jobTypes = jobTypes;
  }

  public List<Property> getJobDataMap() {
    return jobDataMap;
  }

  public void setJobDataMap(List<Property> jobDataMap) {
    this.jobDataMap = jobDataMap;
  }

  public String getSchedulerName() throws SchedulerException {
    return scheduler == null ? null : scheduler.getSchedulerName();
  }

  public void setSchedulerName(String schedulerName)
      throws SchedulerException {
    this.scheduler = new StdSchedulerFactory().getScheduler(schedulerName);

    if (this.scheduler == null) {
      throw new IllegalArgumentException("Scheduler can not be found!");
    }
  }
}
TOP

Related Classes of com.blazebit.web.monitor.quartz.bean.JobBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.