Package sos.scheduler.editor.conf.listeners

Source Code of sos.scheduler.editor.conf.listeners.SchedulerListener

/********************************************************* begin of preamble
**
** Copyright (C) 2003-2010 Software- und Organisations-Service GmbH.
** All rights reserved.
**
** This file may be used under the terms of either the
**
**   GNU General Public License version 2.0 (GPL)
**
**   as published by the Free Software Foundation
**   http://www.gnu.org/licenses/gpl-2.0.txt and appearing in the file
**   LICENSE.GPL included in the packaging of this file.
**
** or the
** 
**   Agreement for Purchase and Licensing
**
**   as offered by Software- und Organisations-Service GmbH
**   in the respective terms of supply that ship with this file.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
** IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
** POSSIBILITY OF SUCH DAMAGE.
********************************************************** end of preamble*/
package sos.scheduler.editor.conf.listeners;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.jdom.Attribute;
import org.jdom.Element;

import sos.scheduler.editor.app.Editor;
import sos.scheduler.editor.app.MainWindow;
import sos.scheduler.editor.app.Options;
import sos.scheduler.editor.app.TreeData;
import sos.scheduler.editor.app.Utils;
import sos.scheduler.editor.conf.SchedulerDom;
import sos.scheduler.editor.conf.forms.BaseForm;
import sos.scheduler.editor.conf.forms.ClusterForm;
import sos.scheduler.editor.conf.forms.CommandsForm;
import sos.scheduler.editor.conf.forms.ConfigForm;
import sos.scheduler.editor.conf.forms.DateForm;
import sos.scheduler.editor.conf.forms.DaysForm;
import sos.scheduler.editor.conf.forms.ExecuteForm;
import sos.scheduler.editor.conf.forms.HttpAuthenticationForm;
import sos.scheduler.editor.conf.forms.HttpDirectoriesForm;
import sos.scheduler.editor.conf.forms.JobChainForm;
import sos.scheduler.editor.conf.forms.JobChainNestedNodesForm;
import sos.scheduler.editor.conf.forms.JobChainNodesForm;
import sos.scheduler.editor.conf.forms.JobChainsForm;
import sos.scheduler.editor.conf.forms.JobCommandForm;
import sos.scheduler.editor.conf.forms.JobCommandsForm;
import sos.scheduler.editor.conf.forms.JobDocumentationForm;
import sos.scheduler.editor.conf.forms.JobLockUseForm;
import sos.scheduler.editor.conf.forms.JobMainForm;
import sos.scheduler.editor.conf.forms.JobMainOptionForm;
import sos.scheduler.editor.conf.forms.JobOptionsForm;
import sos.scheduler.editor.conf.forms.JobsForm;
import sos.scheduler.editor.conf.forms.LocksForm;
import sos.scheduler.editor.conf.forms.MailForm;
import sos.scheduler.editor.conf.forms.OrderForm;
import sos.scheduler.editor.conf.forms.OrdersForm;
import sos.scheduler.editor.conf.forms.PeriodsForm;
import sos.scheduler.editor.conf.forms.ProcessClassesForm;
import sos.scheduler.editor.conf.forms.RunTimeForm;
import sos.scheduler.editor.conf.forms.SchedulerForm;
import sos.scheduler.editor.conf.forms.ScriptForm;
import sos.scheduler.editor.conf.forms.ScriptsForm;
import sos.scheduler.editor.conf.forms.SecurityForm;
import sos.scheduler.editor.conf.forms.SpecificWeekdaysForm;
import sos.scheduler.editor.conf.forms.WebserviceForm;
import sos.scheduler.editor.conf.forms.WebservicesForm;

/*
* jedes Treeitem muss folgende daten speichern, um die kopie und paste Funktion vollst�ndig zu gew�hrleisten:
*
* item.setData("copy_element", element); -> Element zum kopieren
* item.setData("key", "run_time"); -> name des Elements bzw. Pfad vom copy_element aus. Beispiel Element ist job, dann muss Parameter den key = params_@_param haben
* item.setData("override_attributes", "true"); -> optional: default ist false. Wenn true angegeben wird, dann werden die Attribute �berschrieben. z.B. runtime 
* item.setData("max_occur", "1"); -> Das Element darf max. einmal vorkommen: z.B. process_classes.
*
*/
public class SchedulerListener {
  private final String conClassName = "SchedulerListener";
  private SchedulerDom  _dom      = null;
  private SchedulerForm  _gui      = null;
  public static String  JOBS      = "Jobs";
  public static String  JOB        = "Job: ";
  public static String  JOB_CHAINS    = "Job Chains";
  public static String  HTTP_SERVER    = "Http Server";
  public static String  WEB_SERVICES  = "Web Services";
  public static String  SCHEDULES    = "Schedules";
  public static String  ORDERS      = "Orders";
  public static String  LOCKS      = "Locks";
  public static String  PROCESS_CLASSES  = "Process Classes";
  // public static String MONITOR = "Monitor";
  public static String  MONITOR      = "Pre-/Postprocessing";
  /** Aufruf erfolgt durch open Directory oder open Configurations*/
  private int        type      = -1;

  public SchedulerListener(SchedulerForm gui, SchedulerDom dom) {
    _gui = gui;
    _dom = dom;
  }

  public void treeFillMain(Tree tree, Composite c, int type_) {
    type = type_;
    if (_dom.isLifeElement())
      treeFillMainForLifeElement(tree, c);
    else
      treeFillMain(tree, c);
  }

  public void treeFillMainForLifeElement(Tree tree, Composite c) {
    tree.removeAll();
    Element element = _dom.getRoot();
    TreeItem item = new TreeItem(tree, SWT.NONE);
    if (type == SchedulerDom.LIFE_JOB) {
      String name = "";
      if (_dom.getFilename() != null && new java.io.File(_dom.getFilename()).exists()) {
        name = new java.io.File(_dom.getFilename()).getName();
        name = name.substring(0, name.indexOf(".job.xml"));
        checkLifeAttributes(element, name);
        Utils.setAttribute("name", name, element);
      }
      else {
        name = Utils.getAttributeValue("name", element);
      }
      String job = "Job: " + name;
      job += !_dom.isEnabled(element) ? " (Disabled)" : "";
      item.setText(job);
      item.setData(new TreeData(Editor.JOB, element, Options.getHelpURL("job")));
      item.setData("key", "job");
      item.setData("copy_element", element);
      if (!Utils.isElementEnabled("job", _dom, element)) {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
      }
      else {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
      }
      treeFillJob(item, element, false);
      item.setExpanded(true);
    }
    else
      if (type == SchedulerDom.LIFE_JOB_CHAIN) {
        String name = "";
        if (_dom.getFilename() != null && new java.io.File(_dom.getFilename()).exists()) {
          name = new java.io.File(_dom.getFilename()).getName();
          name = name.substring(0, name.indexOf(".job_chain.xml"));
          checkLifeAttributes(element, name);
          Utils.setAttribute("name", name, element);
        }
        else {
          name = Utils.getAttributeValue("name", element);
        }
        String jobChainName = "Job Chain: " + name;
        item.setText(jobChainName);
        item.setData(new TreeData(Editor.JOB_CHAIN, element, Options.getHelpURL("job_chain")));
        item.setData("key", "job_chain");
        item.setData("copy_element", element);
        Utils.setAttribute("orders_recoverable", true, element);
        Utils.setAttribute("visible", true, element);
        if (!Utils.isElementEnabled("job_chain", _dom, element)) {
          item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
        }
        else {
          item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
        }
        // Job Chain Nodes
        TreeItem in = new TreeItem(item, SWT.NONE);
        in.setText("Nodes");
        in.setData(new TreeData(Editor.JOB_CHAIN_NODES, element, Options.getHelpURL("job_chain")));
        in.setData("key", "job_chain_node");
        in.setData("copy_element", element);
        // Job Chain Nested Nodes
        TreeItem iNestedNodes = new TreeItem(item, SWT.NONE);
        iNestedNodes.setText("Nested Job Chains");
        iNestedNodes.setData(new TreeData(Editor.JOB_CHAIN_NESTED_NODES, element, Options.getHelpURL("job_chain")));
        iNestedNodes.setData("key", "job_chain_node.job_chain");
        iNestedNodes.setData("copy_element", element);
        iNestedNodes.setExpanded(true);
      }
      else
        if (type == SchedulerDom.LIFE_PROCESS_CLASS) {
          String name = "";
          if (_dom.getFilename() != null && new java.io.File(_dom.getFilename()).exists()) {
            name = new java.io.File(_dom.getFilename()).getName();
            name = name.substring(0, name.indexOf(".process_class.xml"));
            checkLifeAttributes(element, name);
            Utils.setAttribute("name", name, element);
          }
          Element spooler = new Element("spooler");
          Element config = new Element("config");
          spooler.addContent(config);
          Element process_classes = new Element("process_classes");
          config.addContent(process_classes);
          process_classes.addContent((Element) element.clone());
          item.setData(new TreeData(Editor.PROCESS_CLASSES, config, Options.getHelpURL("process_classes"), "process_classes"));
          item.setData("key", "process_classes");
          item.setData("copy_element", element);
          item.setData("max_occur", "1");
          item.setText(PROCESS_CLASSES);
        }
        else
          if (type == SchedulerDom.LIFE_LOCK) {
            String name = "";
            if (_dom.getFilename() != null && new java.io.File(_dom.getFilename()).exists()) {
              name = new java.io.File(_dom.getFilename()).getName();
              name = name.substring(0, name.indexOf(".lock.xml"));
              checkLifeAttributes(element, name);
              Utils.setAttribute("name", name, element);
            }
            Element spooler = new Element("spooler");
            Element config = new Element("config");
            spooler.addContent(config);
            Element locks = new Element("locks");
            config.addContent(locks);
            locks.addContent((Element) element.clone());
            item.setData(new TreeData(Editor.LOCKS, config, Options.getHelpURL("locks"), "locks"));
            item.setData("key", "locks");
            item.setData("copy_element", element);
            // item.setText("Locks");
            item.setText(LOCKS);
          }
          else
            if (type == SchedulerDom.LIFE_ORDER || type == SchedulerDom.LIFE_ADD_ORDER) {
              String name = "";
              if (_dom.getFilename() != null && new java.io.File(_dom.getFilename()).exists()) {
                name = new java.io.File(_dom.getFilename()).getName();
                name = name.substring(0, name.indexOf(".order.xml"));
                checkLifeAttributes(element, name);
                Utils.setAttribute("job_chain", name.substring(0, name.indexOf(",")), element);
                Utils.setAttribute("id", name.substring(name.indexOf(",") + 1), element);
              }
              item.setText("Order: " + element.getAttributeValue("id"));
              item.setData(new TreeData(Editor.ORDER, element, Options.getHelpURL("orders")));
              item.setData("key", "commands_@_order");
              item.setData("copy_element", element);
              if (!Utils.isElementEnabled("commands", _dom, element)) {
                item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
              }
              else {
                item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
              }
              treeFillOrder(item, element, false);
            }
            else
              if (type == SchedulerDom.LIFE_SCHEDULE) {
                String name = "";
                if (_dom.getFilename() != null && new java.io.File(_dom.getFilename()).exists()) {
                  name = new java.io.File(_dom.getFilename()).getName();
                  name = name.substring(0, name.indexOf(".schedule.xml"));
                  checkLifeAttributes(element, name);
                  Utils.setAttribute("name", name, element);
                }
                else {
                  name = Utils.getAttributeValue("name", element);
                }
                treeFillRunTimes(item, element, false, Utils.getAttributeValue("name", element));
                List l = element.getChildren("month");
                for (int i = 0; i < l.size(); i++) {
                  Element e = (Element) l.get(i);
                  treeFillRunTimes(item.getItem(item.getItemCount() - 1).getItem(item.getItem(item.getItemCount() - 1).getItemCount() - 1),
                      e, false, Utils.getAttributeValue("month", e));
                }
                item.setExpanded(true);
              }
    tree.setSelection(new TreeItem[] { tree.getItem(0) });
    treeSelection(tree, c);
  }

  public void treeFillMain(Tree tree, Composite c) {
    tree.removeAll();
    if (_dom.isLifeElement())
      sos.scheduler.editor.app.Utils.setResetElement(_dom.getRoot());
    else
      sos.scheduler.editor.app.Utils.setResetElement(_dom.getRoot().getChild("config"));
    Element config = _dom.getRoot().getChild("config");
    TreeItem item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.CONFIG, config, Options.getHelpURL("config")));
    item.setData("key", "config");
    item.setData("copy_element", config);
    item.setText("Config");
    if (type == SchedulerDom.DIRECTORY)
      item.dispose();
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.BASE, config, Options.getHelpURL("base")));
    item.setData("key", "base");
    item.setData("copy_element", config);
    item.setText("Base Files");
    if (type == SchedulerDom.DIRECTORY)
      item.dispose();
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.PARAMETER, config, Options.getHelpURL("parameter")));
    // item.setData("key", "params.param");
    item.setData("key", "params_@_param");
    item.setData("copy_element", config);
    item.setText("Parameter");
    if (type == SchedulerDom.DIRECTORY)
      item.dispose();
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.SECURITY, config, Options.getHelpURL("security"), "security"));
    item.setData("key", "security");
    item.setData("max_occur", "1");
    item.setData("copy_element", config);
    item.setText("Security");
    if (type == SchedulerDom.DIRECTORY)
      item.dispose();
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.CLUSTER, config, Options.getHelpURL("cluster"), "cluster"));
    item.setData("key", "cluster");
    item.setData("max_occur", "1");
    item.setData("copy_element", config);
    item.setText("Cluster");
    if (type == SchedulerDom.DIRECTORY)
      item.dispose();
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.PROCESS_CLASSES, config, Options.getHelpURL("process_classes"), "process_classes"));
    item.setData("key", "process_classes");
    item.setData("max_occur", "1");
    item.setData("copy_element", config);
    item.setText("Process Classes");
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.SCHEDULES, config, Options.getHelpURL("schedules"), "schedules"));
    item.setData("key", "schedules_@_schedule");
    item.setData("copy_element", config);
    item.setText(SCHEDULES);
    treeFillSchedules(item);
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.LOCKS, config, Options.getHelpURL("locks"), "locks"));
    item.setData("key", "locks");
    item.setData("copy_element", config);
    item.setText("Locks");
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.SCRIPT, config, Options.getHelpURL("start_script"), "script"));
    item.setData("key", "script");
    item.setData("copy_element", config);
    item.setText("Start Script");
    if (type == SchedulerDom.DIRECTORY)
      item.dispose();
    if (type != SchedulerDom.DIRECTORY) {
      TreeItem http_server = new TreeItem(tree, SWT.NONE);
      // http_server.setData(new TreeData(Editor.WEBSERVICES, config, Options.getHelpURL("http_server"), "http_server"));
      http_server.setData(new TreeData(Editor.HTTP_SERVER, config, Options.getHelpURL("http_server"), "http_server"));
      // http_server.setData("key", "http_server");
      ArrayList l = new ArrayList();
      l.add("http_server_@_web_service");
      l.add("http_server_@_http.authentication");
      l.add("http_server_@_http_directory");
      http_server.setData("key", l);
      http_server.setData("copy_element", config);
      http_server.setText(HTTP_SERVER);
      item = new TreeItem(http_server, SWT.NONE);
      item.setData(new TreeData(Editor.WEBSERVICES, config, Options.getHelpURL("http_server"), "http_server"));
      item.setData("key", "http_server_@_web_service");
      item.setData("copy_element", config);
      item.setText(WEB_SERVICES);
      treeFillWebServices(item);
      item = new TreeItem(http_server, SWT.NONE);
      item.setData(new TreeData(Editor.HTTP_AUTHENTICATION, config, Options.getHelpURL("http_authentication"), "http_server"));
      item.setData("key", "http_server_@_http.authentication");
      item.setData("copy_element", config);
      item.setText("Http Authentication");
      item = new TreeItem(http_server, SWT.NONE);
      item.setData(new TreeData(Editor.HTTPDIRECTORIES, config, Options.getHelpURL("http_directories"), "http_server"));
      item.setData("key", "http_server_@_http_directory");
      item.setData("copy_element", config);
      item.setText("Http Directories");
    }
    if (type != SchedulerDom.DIRECTORY) {
      item = new TreeItem(tree, SWT.NONE);
      item.setData(new TreeData(Editor.HOLIDAYS, config, Options.getHelpURL("holidays"), "holidays"));
      item.setData("key", "holidays");
      item.setData("copy_element", config);
      item.setText("Holidays");
      treeFillHolidays(item, config);
    }
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.JOBS, config, Options.getHelpURL("jobs"), "jobs"));
    item.setData("key", "jobs_@_job");
    item.setData("copy_element", config);
    item.setText(JOBS);
    treeFillJobs(item);
    item.setExpanded(true);
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.JOB_CHAINS, config, Options.getHelpURL("job_chains"), "job_chains"));
    item.setData("key", "job_chains_@_job_chain");
    item.setData("copy_element", config);
    item.setText(JOB_CHAINS);
    treeFillJobChains(item);
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.ORDERS, config, Options.getHelpURL("orders"), "orders"));
    item.setData("key", "commands_@_order");
    item.setData("copy_element", config);
    item.setText(ORDERS);
    treeFillOrders(item, true);
    item = new TreeItem(tree, SWT.NONE);
    item.setData(new TreeData(Editor.COMMANDS, config, Options.getHelpURL("commands"), "commands"));
    item.setData("key", "commands");
    item.setData("copy_element", config);
    item.setText("Commands");
    if (type == SchedulerDom.DIRECTORY)
      item.dispose();
    tree.setSelection(new TreeItem[] { tree.getItem(0) });
    treeSelection(tree, c);
  }

  public void treeFillOrders(TreeItem parent, boolean expand) {
    TreeItem orders = parent;
    if (!parent.getText().equals("Orders")) {
      Tree t = parent.getParent();
      for (int i = 0; i < t.getItemCount(); i++)
        if (t.getItem(i).getText().equals("Orders")) {
          orders = t.getItem(i);
        }
    }
    if (orders != null) {
      orders.removeAll();
      Element commands = _dom.getRoot().getChild("config").getChild("commands");
      if (commands != null) {
        List l = commands.getChildren("add_order");
        if (l != null) {
          Iterator it = l.iterator();
          while (it.hasNext()) {
            Element e = (Element) it.next();
            if (e.getName().equals("add_order") && e.getAttributeValue("id") != null) {
              TreeItem item = new TreeItem(orders, SWT.NONE);
              item.setText("Order: " + e.getAttributeValue("id"));
              item.setData(new TreeData(Editor.ORDER, e, Options.getHelpURL("orders")));
              item.setData("key", "commands_@_order");
              item.setData("copy_element", commands);
              if (!Utils.isElementEnabled("commands", _dom, e)) {
                item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
              }
              else {
                item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
              }
              treeFillOrder(item, e, false);
            }
          }
        }
        List lOrder = commands.getChildren("order");
        if (lOrder != null) {
          Iterator it = lOrder.iterator();
          while (it.hasNext()) {
            Element e = (Element) it.next();
            if (e.getName().equals("order") && e.getAttributeValue("id") != null) {
              TreeItem item = new TreeItem(orders, SWT.NONE);
              item.setText("Order: " + e.getAttributeValue("id"));
              item.setData(new TreeData(Editor.ORDER, e, Options.getHelpURL("orders")));
              item.setData("key", "commands_@_order");
              item.setData("copy_element", e);
              if (!Utils.isElementEnabled("commands", _dom, e)) {
                item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
              }
              else {
                item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
              }
              treeFillOrder(item, e, false);
            }
          }
        }
      }
    }
    orders.setExpanded(expand);
  }

  public void treeFillJobs(TreeItem parent) {
    parent.removeAll();
    Element jobs = _dom.getRoot().getChild("config").getChild("jobs");
    if (jobs == null) {
      TreeData data = (TreeData) (parent.getData());
      jobs = data.getElement().getChild("jobs");
    }
    if (jobs != null) {
      Iterator it = jobs.getChildren().iterator();
      while (it.hasNext()) {
        Object o = it.next();
        if (o instanceof Element) {
          Element element = (Element) o;
          if (type == SchedulerDom.DIRECTORY) {
            checkLifeAttributes(element, Utils.getAttributeValue("name", element));
          }
          TreeItem i = new TreeItem(parent, SWT.NONE);
          String name = Utils.getAttributeValue("name", element);
          String job = "Job: " + name;
          job += !_dom.isEnabled(element) ? " (Disabled)" : "";
          i.setText(job);
          i.setData(new TreeData(Editor.JOB, element, Options.getHelpURL("job")));
          i.setData("copy_element", element);
          i.setData("key", "jobs_@_job");
          if (!Utils.isElementEnabled("job", _dom, element)) {
            setDisabled(i); // .setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
          }
          else {
            setEnabled(i)// .setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
          }
          treeFillJob(i, element, false);
        }
      }
    }
    parent.setExpanded(true);
  }

  private void setDisabled(TreeItem pobjC) {
   
    @SuppressWarnings("unused")
    final String  conMethodName  = conClassName + "::setDisabled";
    // TODO Color as an global Option
    pobjC.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
   
  } // private void setDisabled
  private void setEnabled(TreeItem pobjC) {
   
    @SuppressWarnings("unused")
    final String  conMethodName  = conClassName + "::setEnabled";
    // TODO Color as an global Option
    pobjC.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
   
  } // private void setEnabled
  public void treeExpandJob(TreeItem parent, String job) {
    // if (parent.getText().equals("Jobs")) {
    for (int i = 0; i < parent.getItemCount(); i++)
      // if (parent.getItem(i).getText().equals("Job: "+job)) {
      if (parent.getItem(i).getText().equals(job)) {
        parent.getItem(i).setExpanded(true);
      }
    // }
  }

  public void treeExpandItem(TreeItem parent, String elem) {
    for (int i = 0; i < parent.getItemCount(); i++)
      if (parent.getItem(i).getText().equals(elem)) {
        parent.getItem(i).setExpanded(true);
      }
  }

  public void treeFillJob(TreeItem parent, Element job, boolean expand) {
    boolean disable = !Utils.isElementEnabled("job", _dom, job);
    parent.removeAll();
    ArrayList <String> l = new ArrayList <String>();
    /*
    //Job - Execute
    TreeItem item = new TreeItem(parent, SWT.NONE);
    item.setText("Execute" );       
    item.setData("max_occur", "1");
    item.setData(new TreeData(Editor.EXECUTE, job, Options.getHelpURL("job.execute")));
    ArrayList  l = new ArrayList();
    l.add("process");
    l.add("script");
    item.setData("key", l);
    item.setData("copy_element", job);
    if(disable) {
      item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
    }
    */
    // Options
    TreeItem item = new TreeItem(parent, SWT.NONE);
    item.setText("Options");
    item.setData("max_occur", "1");
    item.setData(new TreeData(Editor.JOB_OPTION, job, Options.getHelpURL("job")));
    item.setData("key", "job");
    item.setData("override_attributes", "true");
    item.setData("copy_element", job);
    if (disable) {
      item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
    }
    // Parameter
    item = new TreeItem(parent, SWT.NONE);
    item.setData(new TreeData(Editor.PARAMETER, job, Options.getHelpURL("parameter")));
    item.setData("key", "params_@_param");
    ArrayList ll = new ArrayList();
    ll.add("params_@_param");
    ll.add("params_@_include");
    // l.add("environment");
    item.setData("key", ll);
    item.setData("copy_element", job);
    item.setText("Parameter");
    // Mail
    item = new TreeItem(parent, SWT.NONE);
    item.setData(new TreeData(Editor.SETTINGS, job, Options.getHelpURL("settings")));
    item.setData("key", "settings");
    item.setData("copy_element", job);
    item.setText("Job Settings");
    item.setData("max_occur", "1");
    // Monitor
    item = new TreeItem(parent, SWT.NONE);
    item.setText(MONITOR);
    item.setData(new TreeData(Editor.MONITORS, job, Options.getHelpURL("job.monitor"), "monitor"));
    item.setData("key", "monitor");
    item.setData("copy_element", job);
    if (disable) {
      setDisabled(item)// .setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
    }
    treeFillScripts(item, job, disable);
    // RunOptions
    item = new TreeItem(parent, SWT.NONE);
    item.setText("Run Options");
    item.setData(new TreeData(Editor.OPTIONS, job, Options.getHelpURL("job.options")));
    l = new ArrayList<String>();
    l.add("start_when_directory_changed");
    l.add("delay_after_error");
    l.add("delay_order_after_setback");
    // item.setData("key", "job.options");
    item.setData("key", l);
    item.setData("copy_element", job);
    if (disable) {
      item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
    }
    item = new TreeItem(parent, SWT.NONE);
    item.setText("Locks ");
    item.setData(new TreeData(Editor.LOCKUSE, job, Options.getHelpURL("job.locks")));
    // item.setData("key", "job.locks");
    item.setData("key", "lock.use");
    item.setData("copy_element", job);
    if (disable) {
      item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
    }
    treeFillRunTimes(parent, job, disable, "run_time");
    /*List l = job.getChild("run_time").getChildren("month");      
    for(int i =0; i < l.size(); i++) {
      Element e = (Element)l.get(i);
      treeFillRunTimes(parent.getItem(parent.getItemCount()-1).getItem(parent.getItem(parent.getItemCount()-1).getItemCount()-1), e, !Utils.isElementEnabled("job", _dom, job), Utils.getAttributeValue("month", e), false);
    }*/
    List commands = job.getChildren("commands");
    item = new TreeItem(parent, SWT.NONE);
    item.setText("Commands");
    if (disable) {
      item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
    }
    if (commands != null)
      treeFillCommands(item, job, false);
    item.setData(new TreeData(Editor.JOB_COMMANDS, job, Options.getHelpURL("job.commands")));
    // item.setData("key", "job_@_commands");
    item.setData("key", "commands");
    item.setData("copy_element", job);
    parent.setExpanded(expand);
    // Documentation
    item = new TreeItem(parent, SWT.NONE);
    item.setText("Documentation");
    item.setData("max_occur", "1");
    item.setData(new TreeData(Editor.JOB_DOCUMENTATION, job, Options.getHelpURL("job")));
    // ArrayList l = new ArrayList();
    // l.add("process");
    // l.add("script");
    item.setData("key", "job_@_description");
    item.setData("copy_element", job);
    if (disable) {
      item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
    }
  }

  public void treeFillOrder(TreeItem parent, Element order, boolean expand) {
    parent.removeAll();
    // Element runtime = order.getChild("run_time");
    TreeItem item = new TreeItem(parent, SWT.NONE);
    item.setData(new TreeData(Editor.PARAMETER, order, Options.getHelpURL("parameter")));
    item.setData("key", "params_@_param");
    item.setData("copy_element", order);
    item.setText("Parameter");
    treeFillRunTimes(parent, order, false, "run_time");
    List l = order.getChild("run_time").getChildren("month");
    for (int i = 0; i < l.size(); i++) {
      Element e = (Element) l.get(i);
      treeFillRunTimes(parent.getItem(parent.getItemCount() - 1).getItem(parent.getItem(parent.getItemCount() - 1).getItemCount() - 1), e,
          !Utils.isElementEnabled("job", _dom, order), Utils.getAttributeValue("month", e));
    }
    parent.setExpanded(expand);
  }

  public void treeFillHolidays(TreeItem item, Element elem) {
    item = new TreeItem(item, SWT.NONE);
    item.setText("Weekdays");
    item.setData(new TreeData(Editor.WEEKDAYS, elem, Options.getHelpURL("job.run_time.weekdays"), "weekdays"));
    item.setData("key", "holidays_@_weekdays");
    item.setData("copy_element", elem);
    if (elem.getChild("holidays") != null) {
      treeFillDays(item, elem, 0, false);
    }
    // treeFillDays(item, elem.getChild("holidays"), 0, false);
    _gui.updateFont(item);
    // wurde zur�ckgestellt
    /*Element holidays = elem.getChild("holidays");
    if(holidays == null) {
      holidays = new Element("holidays");
      elem.addContent(holidays);                     
    }
    System.out.println(Utils.getElementAsString(_dom.getRoot()));
    if(holidays.getChild("run_time") == null) {     
      holidays.addContent(new Element("run_time"));
    }

    treeFillRunTimes(item, holidays, false, "run_time", false);       
   
    */
  }

  public void treeFillExitCodesCommands(TreeItem parent, Element elem, boolean expand) {
    parent.removeAll();
    treeFillExitCodesCommands(parent, elem.getChildren("order"));
    treeFillExitCodesCommands(parent, elem.getChildren("add_order"));
    treeFillExitCodesCommands(parent, elem.getChildren("start_job"));
  }

  private void treeFillExitCodesCommands(TreeItem parent, List cmdList) {
    for (int i = 0; i < cmdList.size(); i++) {
      Element cmdElem = (Element) cmdList.get(i);
      TreeItem item = new TreeItem(parent, SWT.NONE);
      String name = Utils.getAttributeValue("job_chain", cmdElem) != null && Utils.getAttributeValue("job_chain", cmdElem).length() > 0 ? Utils.getAttributeValue(
          "job_chain", cmdElem) : Utils.getAttributeValue("job", cmdElem);
      item.setText(cmdElem.getName() + ": " + name);
      item.setData(new TreeData(Editor.JOB_COMMAND, cmdElem, Options.getHelpURL("job.commands")));
      item.setExpanded(false);
      // PARAMETER
      item = new TreeItem(item, SWT.NONE);
      item.setData(new TreeData(Editor.PARAMETER, cmdElem, Options.getHelpURL("parameter")));
      item.setData("key", "params_@_param");
      item.setData("copy_element", cmdElem);
      item.setText("Parameter");
    }
  }

  public void treeFillCommands(TreeItem parent, Element job, boolean expand) {
    // new JobCommandListener(_dom, null, null).fillCommands(job, parent, expand);
    // fillCommands(job, parent, expand);
    List commands = job.getChildren("commands");
    java.util.ArrayList listOfReadOnly = _dom.getListOfReadOnlyFiles();
    if (commands != null) {
      Iterator it = commands.iterator();
      parent.removeAll();
      while (it.hasNext()) {
        Element e = (Element) it.next();
        if (e.getAttributeValue("on_exit_code") != null) {
          TreeItem item = new TreeItem(parent, SWT.NONE);
          item.setText(e.getAttributeValue("on_exit_code"));
          item.setData(new TreeData(Editor.JOB_COMMAND_EXIT_CODES, e, Options.getHelpURL("job.commands")));
          item.setData("key", "commands_@_order");
          item.setData("copy_element", e);
          if (listOfReadOnly != null && listOfReadOnly.contains(Utils.getAttributeValue("name", job))) {
            item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
          }
          else {
            item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
          }
          treeFillExitCodesCommands(item, e, false);
        }
      }
    }
    parent.setExpanded(expand);
  }

  public void treeFillDays(TreeItem parent, Element element, int type, boolean expand) {
    treeFillDays(parent, element, type, expand, null);
  }

  public void treeFillDays(TreeItem parent, Element element, int type, boolean expand, String name) {
    parent.removeAll();
    if (element != null) {
      if (type == DaysListener.WEEKDAYS || type == DaysListener.MONTHDAYS || type == DaysListener.ULTIMOS || type == DaysListener.SPECIFIC_MONTHS) {
        // if(element.getName().equals("config") && element.getChild("holidays") != null)
        // element = element.getChild("holidays");
        if (parent.getParentItem().getText().equals("Holidays")) {
          if (element.getChild("holidays") == null)
            element.addContent(new Element("holidays"));
          element = element.getChild("holidays");
          return;
        }
        // element = isHolidayWeeksdayParent(element);
        new DaysListener(_dom, element, type, (parent.getData("key") != null && parent.getData("key").equals("holidays_@_weekdays"))).fillTreeDays(
            parent, expand);
        if (type == DaysListener.SPECIFIC_MONTHS) {
          List l = element.getChildren("month");
          // TreeItem item = _gui.getTree().getSelection()[0];
          for (int i = 0; i < l.size(); i++) {
            Element e = (Element) l.get(i);
            // treeFillRunTimes(_gui.getTree().getSelection()[0], e, !Utils.isElementEnabled("job", _dom, element),
            // Utils.getAttributeValue("month", e), false);
            treeFillRunTimes(parent, e, !Utils.isElementEnabled("job", _dom, element), Utils.getAttributeValue("month", e));
          }
        }
      }
      else
        if (type == 4) {
          // new DateListener(_dom, element, 1).fillTreeDays(parent, expand);
        }
        else
          if (type == 6) {
            new DateListener(_dom, element, DateListener.DATE).fillTreeDays(parent, expand);
          }
          else {
            System.out.println("Invalid type = " + type + " for filling the days in the tree!");
          }
    }
  }

  public void treeFillSpecificWeekdays(TreeItem parent, Element element, boolean expand) {
    if (element != null) {
      new SpecificWeekdaysListener(_dom, element).fillTreeDays(parent, expand);
    }
  }

  public void treeFillJobChains(TreeItem parent) {
    parent.removeAll();
    // java.util.ArrayList listOfReadOnly = _dom.getListOfReadOnlyFiles();
    Element jobChains = _dom.getRoot().getChild("config").getChild("job_chains");
    if (jobChains != null) {
      Iterator it = jobChains.getChildren().iterator();
      while (it.hasNext()) {
        Object o = it.next();
        if (o instanceof Element) {
          Element element = (Element) o;
          TreeItem i = new TreeItem(parent, SWT.NONE);
          String name = Utils.getAttributeValue("name", element);
          String jobChainName = "Job Chain: " + name;
          i.setText(jobChainName);
          i.setData(new TreeData(Editor.JOB_CHAIN, element, Options.getHelpURL("job_chain")));
          i.setData("key", "job_chains_@_job_chain");
          i.setData("copy_element", element);
          // Job Chain Nodes
          TreeItem iNodes = new TreeItem(i, SWT.NONE);
          iNodes.setText("Nodes");
          iNodes.setData(new TreeData(Editor.JOB_CHAIN_NODES, element, Options.getHelpURL("job_chain")));
          // iNodes.setData("key", "job_chain_node");
          // iNodes.setData("key", "job_chain_node");
          iNodes.setData("key", "job_chain_node");
          iNodes.setData("copy_element", element);
          iNodes.setExpanded(true);
          // Job Chain Nested Nodes
          TreeItem iNestedNodes = new TreeItem(i, SWT.NONE);
          iNestedNodes.setText("Nested Job Chains");
          iNestedNodes.setData(new TreeData(Editor.JOB_CHAIN_NESTED_NODES, element, Options.getHelpURL("job_chain")));
          // iNestedNodes.setData("key", "job_chain_node.job_chain");
          iNestedNodes.setData("key", "job_chain_node.job_chain");
          // iNestedNodes.setData("key", "job_chain_node.job_chain");
          iNestedNodes.setData("copy_element", element);
          iNestedNodes.setExpanded(true);
          if (!Utils.isElementEnabled("job_chain", _dom, element)) {
            i.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
            iNodes.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
            iNestedNodes.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
          }
          else {
            i.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
            iNodes.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
            iNestedNodes.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
          }
        }
      }
    }
    parent.setExpanded(true);
  }

  public boolean treeSelection(Tree tree, Composite c) {
    try {
      if (tree.getSelectionCount() > 0) {
        // dispose the old form
        Control[] children = c.getChildren();
        for (int i = 0; i < children.length; i++) {
          if (!Utils.applyFormChanges(children[i]))
            return false;
          children[i].dispose();
        }
        TreeItem objSelectedTreeItem = tree.getSelection()[0];
        TreeData objTreeItemUserdata = (TreeData) objSelectedTreeItem.getData();
        if (objTreeItemUserdata != null) {
          _dom.setInit(true);
          switch (objTreeItemUserdata.getType()) {
            case Editor.CONFIG:
              new ConfigForm(c, SWT.NONE, _dom, _gui);
              break;
            case Editor.PARAMETER:
              int type = getType(objTreeItemUserdata.getElement());
              Attribute a = Utils.getJobElement(objTreeItemUserdata.getElement()).getAttribute("name");
              if (a == null) {
                new sos.scheduler.editor.conf.forms.ParameterForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui, type);
              }else {
                String jobname = a.getValue();
                new sos.scheduler.editor.conf.forms.ParameterForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui, type,jobname);
              }
              break;
            case Editor.SECURITY:
              new SecurityForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.CLUSTER:
              new ClusterForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.BASE:
              new BaseForm(c, SWT.NONE, _dom);
              break;
            case Editor.PROCESS_CLASSES:
              new ProcessClassesForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.LOCKS:
              new LocksForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.MONITORS:
              new ScriptsForm(c, SWT.NONE, _dom, _gui, objTreeItemUserdata.getElement());
              break;
            case Editor.MONITOR:
              // new ScriptForm(c, SWT.NONE, "Monitor", _dom, data.getElement(), data.getType(), _gui);
              new ScriptForm(c, SWT.NONE, MONITOR, _dom, objTreeItemUserdata.getElement(), objTreeItemUserdata.getType(), _gui);
              break;
            case Editor.SCRIPT:
              new ScriptForm(c, SWT.NONE, "Start Script", _dom, objTreeItemUserdata.getElement(), objTreeItemUserdata.getType(), _gui);
              break;
            case Editor.JOB:
              // new JobForm(c, SWT.NONE, _dom, data.getElement(), _gui);
              new JobMainForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.JOB_OPTION:
              new JobMainOptionForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.JOB_DOCUMENTATION:
              new JobDocumentationForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.EXECUTE:
              new ExecuteForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.SETTINGS:
              new MailForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.ORDERS:
              // new OrdersForm(c, SWT.NONE, _dom, _gui, this);
              new OrdersForm(c, SWT.NONE, _dom, _gui);
              break;
            case Editor.ORDER:
              new OrderForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.JOB_COMMAND_EXIT_CODES:
              new sos.scheduler.editor.conf.forms.JobCommandExitCodesForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.JOB_COMMAND:
              new JobCommandForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.JOB_COMMANDS:
              new JobCommandsForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui, this);
              break;
            case Editor.RUNTIME:
              new RunTimeForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.WEEKDAYS:
              new DaysForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui, DaysListener.WEEKDAYS, (objSelectedTreeItem.getData("key") != null && objSelectedTreeItem.getData("key")
                  .equals("holidays_@_weekdays")));
              break;
            case Editor.MONTHDAYS:
              new DaysForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui, DaysListener.MONTHDAYS, false);
              break;
            case Editor.SPECIFIC_MONTHS:
              new DaysForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui, DaysListener.SPECIFIC_MONTHS, false);
              break;
            case Editor.ULTIMOS:
              new DaysForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui, DaysListener.ULTIMOS, false);
              break;
            case Editor.EVERYDAY:
            case Editor.PERIODS:
              new PeriodsForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.JOBS:
              new JobsForm(c, SWT.NONE, _dom, _gui);
              break;
            case Editor.HOLIDAYS:
              new DateForm(c, SWT.NONE, DateListener.HOLIDAY, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.DAYS:
              new DateForm(c, SWT.NONE, DateListener.DATE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.SPECIFIC_WEEKDAYS:
              new SpecificWeekdaysForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui, DaysListener.MONTHDAYS);
              break;
            case Editor.WEBSERVICES:
              new WebservicesForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.WEBSERVICE:
              new WebserviceForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.HTTPDIRECTORIES:
              new HttpDirectoriesForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.HTTP_AUTHENTICATION:
              new HttpAuthenticationForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.OPTIONS:
              new JobOptionsForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.LOCKUSE:
              new JobLockUseForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              break;
            case Editor.JOB_CHAINS:
              new JobChainsForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              // JobChainsForm jc= new JobChainsForm(c, SWT.NONE, _dom, data.getElement(), _gui);
              // jc.setISchedulerUpdate(_gui);
              break;
            case Editor.JOB_CHAIN:
              JobChainForm jc_ = new JobChainForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              jc_.setISchedulerUpdate(_gui);
              break;
            case Editor.JOB_CHAIN_NODES:
              JobChainNodesForm jcn_ = new JobChainNodesForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              jcn_.setISchedulerUpdate(_gui);
              break;
            case Editor.JOB_CHAIN_NESTED_NODES:
              JobChainNestedNodesForm j = new JobChainNestedNodesForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement());
              j.setISchedulerUpdate(_gui);
              break;
            case Editor.COMMANDS:
              new CommandsForm(c, SWT.NONE, _dom, _gui);
              break;
            case Editor.SCHEDULES:
              new sos.scheduler.editor.conf.forms.SchedulesForm(c, SWT.NONE, _dom, _gui);
              break;
            case Editor.SCHEDULE:
              new sos.scheduler.editor.conf.forms.ScheduleForm(c, SWT.NONE, _dom, objTreeItemUserdata.getElement(), _gui);
              break;
            case Editor.HTTP_SERVER:
              break;
            default:
              System.out.println("no form found for " + objSelectedTreeItem.getText());
          }
        }
        c.layout();
      }
    }
    catch (Exception e) {
      try {
        new sos.scheduler.editor.app.ErrorLog("error in " + sos.util.SOSClassUtil.getMethodName(), e);
      }
      catch (Exception ee) {
        // tu nichts
      }
      e.printStackTrace();
      MainWindow.message(e.getMessage(), SWT.ICON_ERROR);
    }
    _dom.setInit(false);
    return true;
  }

  private void checkLifeAttributes(Element element, String name) {
    if (element.getName().equals("add_order") || element.getName().equals("order")) {
      if ((Utils.getAttributeValue("job_chain", element) + "," + Utils.getAttributeValue("id", element)).equalsIgnoreCase(name)) {
        // Attribut name ist ungleich der Dateiname
        ArrayList l = new ArrayList();
        if (_dom.getListOfChangeElementNames() != null)
          l = _dom.getListOfChangeElementNames();
        l.add(element.getName() + "_" + name);
        _dom.setListOfChangeElementNames(l);
      }
    }
    else {
      if (Utils.getAttributeValue("name", element).length() > 0 && !Utils.getAttributeValue("name", element).equalsIgnoreCase(name)) {
        // Attribut name ist ungleich der Dateiname
        ArrayList l = new ArrayList();
        if (_dom.getListOfChangeElementNames() != null)
          l = _dom.getListOfChangeElementNames();
        l.add(element.getName() + "_" + name);
        _dom.setListOfChangeElementNames(l);
        _dom.setChanged(true);
      }
      if (element.getName().equals("job") && Utils.getAttributeValue("spooler_id", element).length() > 0) {
        element.removeAttribute("spooler_id");
        ArrayList l = new ArrayList();
        if (_dom.getListOfChangeElementNames() != null)
          l = _dom.getListOfChangeElementNames();
        l.add(element.getName() + "_" + name);
        _dom.setListOfChangeElementNames(l);
        _dom.setChanged(true);
      }
    }
  }

  public void treeFillRunTimes(TreeItem item, Element job, boolean disable, String run_time) {
    Element runtime = null;
    Element _runtime = job.getChild("run_time");
    // create runtime tag
    if (_runtime == null && run_time.equals("run_time")) {
      _runtime = new Element(run_time);
      job.addContent(_runtime);
      runtime = _runtime;
    }
    else
      if (!run_time.equals("run_time") && job.getName().equals("month")) {
        // _runtime = Utils.getRunTimeParentElement(job);
        _runtime = job.getParentElement();
      }
      else
        if (job.getName().equals("schedule")) {
          runtime = job;
        }
        else {
          runtime = _runtime;
        }
    // Specific months: create month child tags (type=3)
    if (!run_time.equals("run_time") && !job.getName().equals("schedule")) {
      List _monthList = _runtime.getChildren("month");
      // List _monthList = job.getParentElement().getChildren("month");
      boolean monthFound = false;
      for (int i = 0; i < _monthList.size(); i++) {
        Element _month = (Element) _monthList.get(i);
        if (Utils.getAttributeValue("month", _month).equalsIgnoreCase(run_time)) {
          monthFound = true;
          job = _month;
          runtime = job;
        }
      }
      if (!monthFound) {
        Element newMonth = new Element("month");
        Utils.setAttribute("month", run_time, newMonth);
        // _runtime.addContent(newMonth);
        job.addContent(newMonth);
        job = newMonth;
        runtime = job;
      }
    }
    // test
    TreeItem run = null;
    boolean hasSchedulesAttribut = Utils.getAttributeValue("schedule", _runtime).trim().length() > 0;
    if (hasSchedulesAttribut) {
      for (int i = 0; i < item.getItemCount(); i++) {
        if (item.getItem(i).equals("Run Time")) {
          run = item.getItem(i);
        }
      }
    }
    if (item.getText().equals("Run Time")) {
      run = item;
    }
    // ende test
    // if(run == null) {
    if (runtime != null) {
      if (type == SchedulerDom.LIFE_SCHEDULE) {
        run = item;
      }
      else
        if (run == null) {
          run = new TreeItem(item, SWT.NONE);
        }
      run.setData("max_occur", "1");
      run.setText(run_time);
      if (run_time.equals("run_time")) {
        run.setText("Run Time");
      }
      else {
        run.setText(run_time);
      }
      if (run_time.equals("run_time")) {
        run.setData(new TreeData(Editor.RUNTIME, job, Options.getHelpURL("job.run_time"), "run_time"));
        run.setData("key", "run_time");
        run.setData("override_attributes", "true");
        run.setData("max_occur", "1");
        run.setData("copy_element", job);
        if (disable) {
          run.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
        }
        _gui.updateFont(run);
      }
      else
        if (job.getName().equals("schedule")) {
          run.setData(new TreeData(Editor.SCHEDULE, job, Options.getHelpURL("job.schedule"), "schedule"));
          run.setData("key", "schedules_@_schedule");
          run.setData("copy_element", job);
        }
      item = new TreeItem(run, SWT.NONE);
      item.setText("Everyday");
      item.setData(new TreeData(Editor.EVERYDAY, runtime, Options.getHelpURL("job.run_time.everyday")));
      // item.setData("key", "run_time_@_everyday");
      item.setData("key", "period");
      item.setData("copy_element", job.getChild("run_time"));
      if (disable) {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
      }
      _gui.updateFont(item);
      item = new TreeItem(run, SWT.NONE);
      item.setText("Weekdays");
      item.setData(new TreeData(Editor.WEEKDAYS, runtime, Options.getHelpURL("job.run_time.weekdays"), "weekdays"));
      item.setData("key", "weekdays");
      item.setData("override_attributes", "true");
      item.setData("max_occur", "1");
      item.setData("copy_element", job.getChild("run_time"));
      if (disable) {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
      }
      treeFillDays(item, runtime, 0, false);
      _gui.updateFont(item);
      item = new TreeItem(run, SWT.NONE);
      item.setText("Monthdays");
      item.setData(new TreeData(Editor.MONTHDAYS, runtime, Options.getHelpURL("job.run_time.monthdays"), "monthdays"));
      item.setData("key", "monthdays");
      item.setData("override_attributes", "true");
      item.setData("max_occur", "1");
      item.setData("copy_element", job.getChild("run_time"));
      if (disable) {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
      }
      treeFillDays(item, runtime, 1, false);
      _gui.updateFont(item);
      item = new TreeItem(run, SWT.NONE);
      item.setText("Ultimos");
      item.setData(new TreeData(Editor.ULTIMOS, runtime, Options.getHelpURL("job.run_time.ultimos"), "ultimos"));
      item.setData("key", "ultimos");
      item.setData("override_attributes", "true");
      item.setData("max_occur", "1");
      item.setData("copy_element", job.getChild("run_time"));
      if (disable) {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
      }
      treeFillDays(item, runtime, 2, false);
      _gui.updateFont(item);
      item = new TreeItem(run, SWT.NONE);
      item.setText("Specific Weekdays");
      item.setData(new TreeData(Editor.SPECIFIC_WEEKDAYS, runtime, Options.getHelpURL("job.run_time.monthdays"), "monthdays"));
      item.setData("key", "monthdays");
      item.setData("override_attributes", "true");
      item.setData("max_occur", "1");
      item.setData("copy_element", job.getChild("run_time"));
      if (disable) {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
      }
      treeFillSpecificWeekdays(item, runtime, false);
      _gui.updateFont(item);
      // Specific Days
      if (run_time.equals("run_time") || job.getName().equals("schedule")) {
        item = new TreeItem(run, SWT.NONE);
        item.setText("Specific Days");
        item.setData(new TreeData(Editor.DAYS, runtime, Options.getHelpURL("job.run_time.specific_days")));
        item.setData("key", "specific_days");
        item.setData("override_attributes", "true");
        item.setData("max_occur", "1");
        item.setData("copy_element", job.getChild("run_time"));
        treeFillDays(item, runtime, 6, false);
        // item.getParent().setSelection(new TreeItem[] {item});
        // setFontForRuntimeChild(item);
        _gui.updateFont(item);
      }
      if (disable) {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
      }
      // Specific Monthdays
      if (run_time.equals("run_time") || job.getName().equals("schedule")) {
        item = new TreeItem(run, SWT.NONE);
        item.setText("Specific Month");
        // item.setData(new TreeData(Editor.SPECIFIC_MONTHS, runtime,
        // Options.getHelpURL("job.run_time.monthdays"),"specific_monthdays"));
        item.setData(new TreeData(Editor.SPECIFIC_MONTHS, runtime, Options.getHelpURL("job.run_time.monthdays"), "month"));
        item.setData("key", "specific_monthdays");
        item.setData("override_attributes", "true");
        item.setData("max_occur", "1");
        item.setData("copy_element", job.getChild("run_time"));
        if (disable) {
          item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
        }
        treeFillDays(item, runtime, DaysListener.SPECIFIC_MONTHS, false);
        _gui.updateFont(item);
      }
      // holidays
      if (run_time.equals("run_time") || job.getName().equals("schedule")) {
        item = new TreeItem(run, SWT.NONE);
        item.setData(new TreeData(Editor.HOLIDAYS, runtime, Options.getHelpURL("holidays"), "holidays"));
        item.setData("key", "holidays");
        item.setData("override_attributes", "true");
        item.setData("max_occur", "1");
        item.setData("copy_element", job.getChild("run_time"));
        item.setText("Holidays");
        treeFillHolidays(item, runtime);
      }
      /*if (runtime != null)
        treeFillDays(item, runtime, 6, false);
      */
    }
  }

  /*public void fillCommands(Element job, TreeItem parent, boolean expand) {
      List commands = job.getChildren("commands");
      java.util.ArrayList listOfReadOnly = _dom.getListOfReadOnlyFiles();
      if (commands != null) {
          Iterator it = commands.iterator();
          parent.removeAll();

          while (it.hasNext()) {
              Element e = (Element) it.next();
              if (e.getAttributeValue("on_exit_code") != null) {
                  TreeItem item = new TreeItem(parent, SWT.NONE);
                  item.setText(e.getAttributeValue("on_exit_code"));
                  item.setData(new TreeData(Editor.JOB_COMMAND, e, Options.getHelpURL("job.commands")));

                  if (listOfReadOnly != null && listOfReadOnly.contains(Utils.getAttributeValue("name", job))) {
                    item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
                  } else {
                    item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
                  }
              }
          }
      }
      parent.setExpanded(expand);

  }
   */
  private int getType(Element elem) {
    if (elem.getName().equals("job"))
      return Editor.JOB;
    else
      if ((elem.getName().equals("order") || elem.getName().equals("add_order") || elem.getName().equals("start_job"))
          && Utils.getJobElement(elem).getName().equals("job"))
        return Editor.JOB_COMMANDS;
      else
        if ((elem.getName().equals("order") || elem.getName().equals("add_order"))
            && (_dom.isLifeElement() || (elem.getParentElement() != null && elem.getParentElement().getName().equals("commands"))))
          return Editor.COMMANDS;
        /*else if( (elem.getName().equals("order") || elem.getName().equals("add_order") || elem.getName().equals("start_job")) )
          return Editor.JOB_COMMANDS;
          */
        else
          if (elem.getName().equals("web_service"))
            return Editor.WEBSERVICE;
          else
            return Editor.CONFIG;
  }

  public void treeFillWebServices(TreeItem parent) {
    parent.removeAll();
    Element httpServer = null;
    Element config = _dom.getRoot().getChild("config");
    if (config != null)
      httpServer = _dom.getRoot().getChild("config").getChild("http_server");
    if (httpServer != null) {
      Iterator it = httpServer.getChildren("web_service").iterator();
      while (it.hasNext()) {
        Object o = it.next();
        if (o instanceof Element) {
          Element element = (Element) o;
          TreeItem item = new TreeItem(parent, SWT.NONE);
          item.setData(new TreeData(Editor.WEBSERVICE, element, Options.getHelpURL("http_server"), "http_server"));
          item.setData("key", "http_server_@_web_service");
          item.setData("copy_element", element);
          item.setText("Web Service: " + element.getAttributeValue("name"));
          TreeItem itemParam = new TreeItem(item, SWT.NONE);
          itemParam.setData(new TreeData(Editor.PARAMETER, element, Options.getHelpURL("parameter")));
          itemParam.setData("key", "params_@_param");
          item.setData("copy_element", element);
          itemParam.setText("Parameter");
        }
      }
    }
    parent.setExpanded(true);
  }

  public void treeFillSchedules(TreeItem parent) {
    parent.removeAll();
    Element schedules = _dom.getRoot().getChild("config").getChild("schedules");
    if (schedules != null) {
      Iterator it = schedules.getChildren().iterator();
      while (it.hasNext()) {
        Object o = it.next();
        if (o instanceof Element) {
          Element element = (Element) o;
          if (type == SchedulerDom.DIRECTORY) {
            checkLifeAttributes(element, Utils.getAttributeValue("name", element));
          }
          treeFillRunTimes(parent, element, false, Utils.getAttributeValue("name", element));
        }
      }
    }
    parent.setExpanded(true);
  }

  public void treeFillScripts(TreeItem parent, Element elem, boolean disable) {
    parent.removeAll();
    List l = elem.getChildren("monitor");
    for (int i = 0; i < l.size(); i++) {
      Element monitor = (Element) l.get(i);
      TreeItem item = new TreeItem(parent, SWT.NONE);
      // item.setText("Monitor: " + Utils.getAttributeValue("name", monitor));
      if (Utils.getAttributeValue("name", monitor).equals(""))
        item.setText("<empty>");
      else
        item.setText(Utils.getAttributeValue("name", monitor));
      item.setData(new TreeData(Editor.MONITOR, monitor, Options.getHelpURL("job.monitor"), "monitor"));
      item.setData("key", "monitor");
      // item.setData("copy_element", elem);
      item.setData("copy_element", monitor);
      if (disable) {
        item.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
      }
    }
    parent.setExpanded(true);
  }
}
TOP

Related Classes of sos.scheduler.editor.conf.listeners.SchedulerListener

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.