public void enableTools() {
    List<Schedule> scheduleList = schedulesListCtrl.getSelectedSchedules();

    boolean suspendEnabled = false, resumeEnabled = false;

    boolean resolvedSuspended = false, resolvedEnabled = false;

    for (Schedule schedule : scheduleList) {
      if (!resolvedSuspended
          && !schedule.getTriggerState().equalsIgnoreCase(SUSPENDED_SCHEDULER_STATE)) {
        suspendEnabled = true;
        resolvedSuspended = true;
      }

      if (!resolvedEnabled
          && !schedule.getTriggerState().equalsIgnoreCase(NORMAL_SCHEDULER_STATE)) {
        resumeEnabled = true;
        resolvedEnabled = true;
      }
    }

    int numSelectedItems = scheduleList.size();

    enableWidget(schedulerToolbar.getCreateBtn(), true);
    enableWidget(schedulerToolbar.getUpdateBtn(), 1 == numSelectedItems);
    enableWidget(schedulerToolbar.getDeleteBtn(), numSelectedItems > 0);
    enableWidget(schedulerToolbar.getSuspendBtn(), suspendEnabled);
    enableWidget(schedulerToolbar.getResumeBtn(), resumeEnabled);
    enableWidget(schedulerToolbar.getRunNowBtn(), numSelectedItems > 0);
    enableWidget(schedulerToolbar.getRefreshBtn(), true);
  }
 private static List<Schedule> getSubscriptionSchedules(List<Schedule> schedList) {
   List<Schedule> list = new ArrayList<Schedule>();
   for (Schedule sched : schedList) {
     if (sched.isSubscriptionSchedule()) {
       list.add(sched);
     }
   }
   return list;
 }
 private int getNumSubscribers() {
   List<Schedule> schedList = schedulesListCtrl.getSelectedSchedules();
   int numSubscribers = 0;
   for (Schedule sched : schedList) {
     try {
       numSubscribers += Integer.parseInt(sched.getSubscriberCount());
     } catch (NumberFormatException ex) {
       // Do nothing, we'll return 0.
     }
   }
   return numSubscribers;
 }
  private void handleUpdateSchedule() {
    final SchedulerToolbarController localThis = this;

    scheduleCreatorDialog.setTitle(Messages.getString("scheduleEditor")); // $NON-NLS-1$
    final List<Schedule> scheduleList = schedulesListCtrl.getSelectedSchedules();
    if (!loadingInitialized) {
      scheduleCreatorDialog.setOkBtnEnabled(false);
    }
    scheduleCreatorDialog.setOnOkHandler(
        new ICallback<MessageDialog>() {
          public void onHandle(MessageDialog d) {
            localThis.updateScheduleWithNewScheduleType();
          }
        });
    this.scheduleCreatorDialog.setOnValidateHandler(
        new IResponseCallback<MessageDialog, Boolean>() {
          public Boolean onHandle(MessageDialog schedDlg) {
            return isUpdateScheduleCreatorDialogValid();
          }
        });
    // the update button should be enabled/disabled to guarantee that one and only one schedule is
    // selected
    assert scheduleList.size() == 1
        : "When clicking update, exactly one schedule should be selected."; //$NON-NLS-1$

    Schedule sched = scheduleList.get(0);
    try {
      initScheduleCreatorDialog(sched);
      scheduleCreatorDialog.center();
      scheduleCreatorDialog.getScheduleEditor().setFocus();
    } catch (CronParseException e) {
      final MessageDialog errorDialog =
          new MessageDialog(
              Messages.getString("error"), // $NON-NLS-1$
              Messages.getString(
                  "invalidCronInInitOfRecurrenceDialog",
                  sched.getCronString(),
                  e.getMessage())); // $NON-NLS-1$
      errorDialog.setOnOkHandler(
          new ICallback<MessageDialog>() {
            public void onHandle(MessageDialog messageDialog) {
              errorDialog.hide();
              scheduleCreatorDialog.center();
            }
          });
      errorDialog.center();
    }
  }
 private List<Schedule> getFilteredSchedulesList(List<Schedule> scheduleList) {
   List<Schedule> filteredList = null;
   String filterVal = schedulerToolbar.getFilterValue();
   if (!SchedulerToolbar.ALL_GROUPS_FILTER.equals(filterVal)) {
     filteredList = new ArrayList<Schedule>();
     for (int ii = 0; ii < scheduleList.size(); ++ii) {
       Schedule s = scheduleList.get(ii);
       if (s.getJobGroup().equals(filterVal)) {
         filteredList.add(s);
       }
     }
   } else {
     filteredList = scheduleList;
   }
   return filteredList;
 }
  @SuppressWarnings("fallthrough")
  private void updateScheduleWithNewScheduleType() {

    final List<Schedule> scheduleList = schedulesListCtrl.getSelectedSchedules();
    Schedule oldSchedule = scheduleList.get(0);

    AsyncCallback<Object> deleteScheduleCallback =
        new AsyncCallback<Object>() {
          public void onSuccess(Object o) {
            createSchedule();
          }

          public void onFailure(Throwable caught) {
            MessageDialogBox messageDialog =
                new MessageDialogBox(
                    ExceptionParser.getErrorHeader(caught.getMessage()),
                    ExceptionParser.getErrorMessage(caught.getMessage(), caught.getMessage()),
                    false,
                    false,
                    true);
            messageDialog.center();
          }
        };

    // TODO sbarkdull scheduleCreatorDialog -> scheduleEditorDialog
    DualModeScheduleEditor scheduleEditor = scheduleCreatorDialog.getScheduleEditor();

    ISchedulerServiceAsync schedSvc = null;
    if (oldSchedule.isSubscriptionSchedule() != scheduleEditor.isSubscriptionSchedule()) {
      // they are changing the schedule type, so delete it, and add a new one
      schedSvc =
          oldSchedule.isSubscriptionSchedule()
              ? PacServiceFactory.getSubscriptionService()
              : PacServiceFactory.getSchedulerService();
      List<Schedule> deleteList = new ArrayList<Schedule>();
      deleteList.add(oldSchedule);
      schedSvc.deleteJobs(deleteList, deleteScheduleCallback);
    } else {
      // they are NOT changing the schedule type, so just update the existing schedule.
      updateSchedule();
    }
  }
  private void initFilterList() {
    String currentFilter = schedulerToolbar.getFilterValue();
    currentFilter = (null == currentFilter) ? SchedulerToolbar.ALL_GROUPS_FILTER : currentFilter;

    Set<String> groupNames = new HashSet<String>();
    List<Schedule> scheduleList = schedulesModel.getScheduleList();
    for (int ii = 0; ii < scheduleList.size(); ++ii) {
      Schedule s = scheduleList.get(ii);
      String groupName = s.getJobGroup();
      if (!groupNames.contains(groupName)) {
        groupNames.add(groupName);
      }
    }
    schedulerToolbar.clearFilters();

    schedulerToolbar.addFilterItem(SchedulerToolbar.ALL_GROUPS_FILTER);
    for (String name : groupNames) {
      schedulerToolbar.addFilterItem(name);
    }
    schedulerToolbar.setFilterValue(currentFilter);
  }
 private void initSolutionRepositoryActionSequenceEditor(Schedule sched) {
   solRepActionSequenceEditorController.init(sched.getActionsList());
 }
  private void initScheduleEditor(Schedule sched) throws CronParseException {
    DualModeScheduleEditor scheduleEditor = scheduleCreatorDialog.getScheduleEditor();

    scheduleEditor.setSubscriptionSchedule(sched.isSubscriptionSchedule());
    scheduleEditor.setName(sched.getJobName());
    scheduleEditor.setGroupName(sched.getJobGroup());
    scheduleEditor.setDescription(sched.getDescription());

    String repeatIntervalInMillisecs = sched.getRepeatInterval();
    if (sched.isCronSchedule()) {
      scheduleEditor.setCronString(sched.getCronString()); // throws CronParseException
    } else if (sched.isRepeatSchedule()) {
      long repeatIntervalInSecs =
          TimeUtil.millsecondsToSecs(Long.parseLong(repeatIntervalInMillisecs));
      if (0 == repeatIntervalInSecs) {
        // run once
        scheduleEditor.setScheduleType(ScheduleEditor.ScheduleType.RUN_ONCE);
      } else {
        // run multiple
        scheduleEditor.setRepeatInSecs((int) repeatIntervalInSecs);
      }
    } else {
      throw new RuntimeException(
          Messages.getString("illegalStateMissingCronAndRepeat")); // $NON-NLS-1$
    }

    String timePart = null;
    String strDate = sched.getStartDate();
    if (null != strDate) {
      Date startDate = TimeUtil.getDate(strDate);
      if (sched.isRepeatSchedule()) {
        timePart = TimeUtil.getTimePart(startDate);
        scheduleEditor.setStartTime(timePart);
        startDate = TimeUtil.zeroTimePart(startDate);
      }
      scheduleEditor.setStartDate(startDate);
    }
    //    scheduleEditor.getRunOnceEditor().setStartTime(strTime)
    //    scheduleEditor.getRunOnceEditor().setStartDate(strTime)

    strDate = sched.getEndDate();
    if (null != strDate) {
      scheduleEditor.setEndBy();
      Date endDate = TimeUtil.getDate(strDate);
      if (sched.isRepeatSchedule()) {
        endDate = TimeUtil.zeroTimePart(endDate);
      }
      scheduleEditor.setEndDate(endDate);
    } else {
      scheduleEditor.setNoEndDate();
    }
  }
  private void updateSchedule() {

    AsyncCallback<Object> updateScheduleResponseCallback =
        new AsyncCallback<Object>() {
          public void onSuccess(Object o) {
            scheduleCreatorDialog.hide();
            loadJobsTable();
          }

          public void onFailure(Throwable caught) {
            MessageDialogBox messageDialog =
                new MessageDialogBox(
                    ExceptionParser.getErrorHeader(caught.getMessage()),
                    ExceptionParser.getErrorMessage(caught.getMessage(), caught.getMessage()),
                    false,
                    false,
                    true);
            messageDialog.center();
          }
        };
    final List<Schedule> scheduleList = schedulesListCtrl.getSelectedSchedules();
    Schedule oldSchedule = scheduleList.get(0);
    DualModeScheduleEditor scheduleEditor = scheduleCreatorDialog.getScheduleEditor();

    ISchedulerServiceAsync schedSvc =
        scheduleEditor.isSubscriptionSchedule()
            ? PacServiceFactory.getSubscriptionService()
            : PacServiceFactory.getSchedulerService();

    String cronStr = scheduleEditor.getCronString();
    Date startDate = scheduleEditor.getStartDate();
    Date endDate = scheduleEditor.getEndDate();

    if (null == cronStr) { // must be a repeating schedule
      String startTime =
          scheduleEditor
              .getStartTime(); // format of string should be: HH:MM:SS AM/PM, e.g. 7:12:28 PM
      startDate = TimeUtil.getDateTime(startTime, startDate);
      endDate = (null != endDate) ? TimeUtil.getDateTime(startTime, endDate) : null;
    }

    ScheduleEditor.ScheduleType rt = scheduleEditor.getScheduleType();
    switch (rt) {
      case RUN_ONCE:
        schedSvc.updateRepeatSchedule(
            oldSchedule.getJobName(),
            oldSchedule.getJobGroup(),
            oldSchedule.getSchedId(),
            scheduleEditor.getName().trim(),
            scheduleEditor.getGroupName().trim(),
            scheduleEditor.getDescription().trim(),
            startDate,
            endDate,
            "0" /*repeat count*/, //$NON-NLS-1$
            "0" /*repeat time*/, //$NON-NLS-1$
            scheduleCreatorDialog
                .getSolutionRepositoryActionSequenceEditor()
                .getActionsAsString()
                .trim(),
            updateScheduleResponseCallback);
        break;
      case SECONDS: // fall through
      case MINUTES: // fall through
      case HOURS: // fall through
      case DAILY: // fall through
      case WEEKLY: // fall through
      case MONTHLY: // fall through
      case YEARLY:
        if (null == cronStr) {
          String repeatInterval =
              Long.toString(TimeUtil.secsToMillisecs(scheduleEditor.getRepeatInSecs()));
          schedSvc.updateRepeatSchedule(
              oldSchedule.getJobName(),
              oldSchedule.getJobGroup(),
              oldSchedule.getSchedId(),
              scheduleEditor.getName().trim(),
              scheduleEditor.getGroupName().trim(),
              scheduleEditor.getDescription().trim(),
              startDate,
              endDate,
              null /*repeat count*/,
              repeatInterval.trim(),
              scheduleCreatorDialog
                  .getSolutionRepositoryActionSequenceEditor()
                  .getActionsAsString()
                  .trim(),
              updateScheduleResponseCallback);
          break;
        } else {
          // fall through to case CRON
        }
      case CRON:
        schedSvc.updateCronSchedule(
            oldSchedule.getJobName(),
            oldSchedule.getJobGroup(),
            oldSchedule.getSchedId(),
            scheduleEditor.getName().trim(),
            scheduleEditor.getGroupName().trim(),
            scheduleEditor.getDescription().trim(),
            startDate,
            endDate,
            cronStr.trim(),
            scheduleCreatorDialog
                .getSolutionRepositoryActionSequenceEditor()
                .getActionsAsString()
                .trim(),
            updateScheduleResponseCallback);
        break;
      default:
        throw new RuntimeException(
            Messages.getString("invalidRunType", rt.toString())); // $NON-NLS-1$
    }
  }