public Job getEditingJob() {
    Job job = new Job();

    job.setId(id);
    job.setName(jobNameTextField.getText());
    job.setEnabled(enabledCheckBox.isSelected());
    if (scheduledRadioButton.isSelected()) {
      job.setIntervalUnit(Job.getUnits()[intervalUnitComboBox.getSelectedIndex()]);
      job.setIntervalPeriod(parseInt(intervalFormattedTextField.getText()));
    }

    return job;
  }
  public void setJob(Job job) {
    jobNameTextField.setEnabled(false);
    enabledCheckBox.setEnabled(true);
    saveButton.setEnabled(true);

    id = job.getId();
    jobNameTextField.setText(job.getName());
    enabledCheckBox.setSelected(job.isEnabled());
    if (job.getIntervalUnit() == null) {
      onDemandRadioButton.setSelected(true);
    } else {
      scheduledRadioButton.setSelected(true);
      intervalFormattedTextField.setText(String.valueOf(job.getIntervalPeriod()));

      int index = 0;
      String[] units = Job.getUnits();
      for (int i = 0; i < units.length; i++) if (job.getIntervalUnit().equals(units[i])) index = i;

      intervalUnitComboBox.setSelectedIndex(index);
    }
  }
  public JobForm() {

    final JobForm form = this;

    this.setContentPane(mainPanel);
    this.setModal(true);
    saveButton.setEnabled(false);

    ButtonGroup group = new ButtonGroup();
    group.add(onDemandRadioButton);
    group.add(scheduledRadioButton);

    jobNameTextField.addKeyListener(
        new KeyAdapter() {
          @Override
          public void keyTyped(KeyEvent keyEvent) {
            super.keyTyped(keyEvent);

            saveButton.setEnabled(!jobNameTextField.getText().isEmpty());
          }
        });

    ActionListener radioActionListener =
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent actionEvent) {
            setEnabledOptions();
          }
        };

    scheduledRadioButton.addActionListener(radioActionListener);
    onDemandRadioButton.addActionListener(radioActionListener);

    intervalUnitComboBox.setModel(new DefaultComboBoxModel(Job.getUnits()));

    scheduledRadioButton.setSelected(true);
    intervalFormattedTextField.setText("15");
    setEnabledOptions();

    intervalFormattedTextField.setInputVerifier(
        new InputVerifier() {
          @Override
          public boolean verify(JComponent jComponent) {
            if (jComponent instanceof JFormattedTextField) {
              JFormattedTextField field = (JFormattedTextField) jComponent;

              try {
                parseInt(field.getText());
              } catch (NumberFormatException e) {
                return false;
              }

              return true;
            }

            return false;
          }
        });

    saveButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent actionEvent) {
            try {
              form.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

              String jobName = jobNameTextField.getText().trim();
              int interval =
                  onDemandRadioButton.isSelected()
                      ? 0
                      : parseInt(intervalFormattedTextField.getText());
              String unit =
                  onDemandRadioButton.isSelected()
                      ? "none"
                      : Job.getUnits()[intervalUnitComboBox.getSelectedIndex()];

              SimpleDateFormat ISO8601DATEFORMAT =
                  new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH);
              String now = ISO8601DATEFORMAT.format(new Date());

              if (!jobName.matches("^[A-Za-z][A-Za-z0-9_]+")) {
                form.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(
                    form,
                    "Invalid service name. Job name must start with a letter, \n"
                        + "contain only letters, numbers, and undercores.",
                    "Error creating the job",
                    JOptionPane.ERROR_MESSAGE);
                return;
              }

              if (existingJobNames == null) {
                existingJobNames = new ArrayList<String>();

                for (Job job :
                    AzureRestAPIManager.getManager().listJobs(subscriptionId, serviceName)) {
                  existingJobNames.add(job.getName().toLowerCase());
                }
              }

              if (existingJobNames.contains(jobName.toLowerCase())) {
                form.setCursor(Cursor.getDefaultCursor());
                JOptionPane.showMessageDialog(
                    form,
                    "Invalid job name. A job with that name already exists in this service.",
                    "Error creating the job",
                    JOptionPane.ERROR_MESSAGE);
                return;
              }

              if (id == null)
                AzureRestAPIManager.getManager()
                    .createJob(subscriptionId, serviceName, jobName, interval, unit, now);
              else {
                AzureRestAPIManager.getManager()
                    .updateJob(
                        subscriptionId,
                        serviceName,
                        jobName,
                        interval,
                        unit,
                        now,
                        enabledCheckBox.isSelected());
              }

              if (afterSave != null) afterSave.run();

              form.setCursor(Cursor.getDefaultCursor());

              form.setVisible(false);
              form.dispose();

            } catch (Throwable ex) {
              form.setCursor(Cursor.getDefaultCursor());
              UIHelper.showException("Error trying to save job", ex);
            }
          }
        });

    cancelButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent actionEvent) {
            form.setVisible(false);
            form.dispose();
          }
        });
  }