/** Creates Duty Elements in the Graphic. */
  private void createDienstElementGraphic() {

    // Sortierung des Planes
    ArrayList<String> orderList = new ArrayList<String>();
    ArrayList<Integer> listInt = new ArrayList<Integer>();
    ArrayList<Integer> match = new ArrayList<Integer>();
    ArrayList<Integer> orderedDuty = new ArrayList<Integer>();
    boolean idChange = true;
    String dutyBefore = null;

    for (int i = 0; i < this.dienstplan.getDutyelement().size(); i++) {
      if (idChange) {
        orderList.add(this.dienstplan.getDutyelement().get(i).getDepTime());
        dutyBefore = this.dienstplan.getDutyelement().get(i).getDutyID();
        idChange = false;
      }
      if (!this.dienstplan.getDutyelement().get(i).getDutyID().equals(dutyBefore)) {
        idChange = true;
        i = i - 1;
      }
    }

    for (int i = 0; i < orderList.size(); i++) {
      StringSplitter ss = new StringSplitter();
      int[] zeit = new int[2];
      zeit = ss.intParse(orderList.get(i));
      int startHour = zeit[0];
      int startMin = zeit[1];

      listInt.add((startHour * 100) + startMin);
      match.add((startHour * 100) + startMin);
    }
    // Sortierung (Bubble Sort)
    boolean unsortiert = true;
    int temp;
    while (unsortiert) {
      unsortiert = false;
      for (int i = 0; i < listInt.size() - 1; i++)
        if (listInt.get(i) > listInt.get(i + 1)) {
          temp = listInt.get(i);
          listInt.set(i, listInt.get(i + 1));
          listInt.set(i + 1, temp);
          unsortiert = true;
        }
    }

    for (int i = 0; i < listInt.size(); i++) {
      temp = listInt.get(i);
      for (int j = 0; j < match.size(); j++) {
        if (match.get(j) == temp) {
          int index = j;
          boolean auslassen = false;
          for (int j2 = 0; j2 < orderedDuty.size(); j2++) {
            if (index == orderedDuty.get(j2)) {
              auslassen = true;
            }
          }
          if (auslassen == false) {
            orderedDuty.add(j);
          }
        }
      }
    }

    double abstandNetz = (this.canvas.getWidth() - 30) / (this.endzeitVar - this.startzeitVar);

    // Auslesen der Blockanzahl
    for (int j = 0; j < this.dienstplan.getDuty().size(); j++) {

      // Variablen zur Prüfung der ersten Stunde
      int changeHour = 100;
      int changeMin = 100;
      Boolean anfangDienst = true;

      // Auslesen Blockelementanzahl
      for (int i = 0; i < this.dienstplan.getDutyelement().size(); i++) {

        // Abgleich mit den Werten
        if (dienstplan
            .getDutyelement()
            .get(i)
            .getDutyID()
            .equals(dienstplan.getDuty().get(orderedDuty.get(j)).getId())) {

          // Auslesen der Zeit als Integer
          StringSplitter ss = new StringSplitter();
          int[] zeit = new int[2];
          zeit = ss.intParse(this.dienstplan.getDutyelement().get(i).getDepTime());
          int startHour = zeit[0];
          int startMin = zeit[1];

          // Prüfung der ersten Stunde
          if (anfangDienst == true && startHour < changeHour) {
            changeHour = startHour;
            changeMin = startMin;
            anfangDienst = false;
          }
          if (startHour < changeHour) {
            startHour = startHour + 24;
          }
          if (startHour == changeHour && startMin < changeMin) {
            startHour = startHour + 24;
          }

          // Belegung der Pixelwerte
          if (this.startzeitVar <= startHour) {
            int stundenDifferenz = startHour - this.startzeitVar;
            int startPixelX =
                (int) ((stundenDifferenz * abstandNetz) + ((abstandNetz / 60) * startMin));

            int startPixelY = 15 + (j * this.breite);
            int fahrtDauer = 0;

            // Berrechnen der Dauer zwischen der Abfahrt und der
            // Ankunft

            String depTime = this.dienstplan.getDutyelement().get(i).getDepTime();
            String arrtime = this.dienstplan.getDutyelement().get(i).getArrTime();

            SimpleDateFormat format = new SimpleDateFormat("HH:mm");
            Date date1 = null;
            Date date2 = null;
            try {
              date1 = format.parse(depTime);
            } catch (ParseException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
            try {
              date2 = format.parse(arrtime);
            } catch (ParseException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
            long differenz = date2.getTime() - date1.getTime();

            // Über 0 Uhr
            if (date2.getTime() < date1.getTime()) {
              differenz = date2.getTime() - date1.getTime() + 86400000;
            }

            differenz = (differenz / 1000) / 60;

            fahrtDauer = (int) (differenz * (abstandNetz / 60));

            // Färben der Elemente

            switch (this.dienstplan.getDutyelement().get(i).getElementType()) {
              case 1:
                // Servicefahrt
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(0)));
                break;
              case 2:
                // Leerfahrt Haltestellen
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(1)));
                break;
              case 3:
                // Fahrt ins Depot
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(2)));
                break;
              case 4:
                // Fahrt aus dem Depot
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(3)));
                break;
              case 5:
                // Vorbereitung
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(4)));
                break;
              case 6:
                // Nachbereitung
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(5)));
                break;
              case 7:
                // Transfer
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(6)));
                break;
              case 8:
                // Pause
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(7)));
                break;
              case 9:
                // Warten
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(8)));
                break;
              case 10:
                // LayoverTime
                gc.setFill(javafx.scene.paint.Color.valueOf(this.colors.get(9)));
                break;
            }
            // Malen der Elemente

            this.gc.fillRoundRect(startPixelX, startPixelY, fahrtDauer, breite / 2, 20, 10);
            this.gc.strokeRoundRect(startPixelX, startPixelY, fahrtDauer, breite / 2, 20, 10);

            // Szenarien
            if (this.szenarienAktiv && dienstplan.getFahrplanID() == this.fahrplanID) {
              double delay;
              for (int k = 0; k < this.szenario.getPrimeDelay().size(); k++) {
                if (this.szenario
                    .getPrimeDelay()
                    .get(k)
                    .getServiceJourneyID()
                    .equals(dienstplan.getDutyelement().get(i).getServiceJourneyID())) {
                  delay =
                      (abstandNetz / 60) * (this.szenario.getPrimeDelay().get(k).getDelay() / 60);

                  gc.setStroke(Color.RED);
                  gc.setFill(Color.RED);
                  gc.setLineWidth(2);

                  gc.strokeRoundRect(
                      startPixelX,
                      startPixelY - breite / 10,
                      fahrtDauer + delay,
                      breite / 1.5,
                      20,
                      10);
                }
              }

              gc.setStroke(Color.BLACK);
              gc.setLineWidth(1);
            }

            // Beschriftet die Elemente
            if (beschriftungCheck) {
              if (fahrtDauer > 30) {
                this.gc.setFill(Color.BLACK);
                this.gc.setFont(new Font("Arial", 12));
                this.gc.fillText(
                    String.valueOf(dienstplan.getDutyelement().get(i).getId()),
                    startPixelX - 3 + (fahrtDauer / 5),
                    startPixelY + 1 + breite / 3);
              }
            }
          }
        }
      }
    }
  }
  public void setDienstplan(Dienstplan dienstplan) {
    this.dienstplan = dienstplan;

    // Auslesen der Startzeit

    ArrayList<String> startzeiten = new ArrayList<String>();
    ArrayList<String> endzeiten = new ArrayList<String>();

    for (int i = 0; i < this.dienstplan.getDuty().size(); i++) {
      boolean anfang = true;

      for (int j = 0; j < this.dienstplan.getDutyelement().size(); j++) {

        if (this.dienstplan
                .getDuty()
                .get(i)
                .getId()
                .equals(this.dienstplan.getDutyelement().get(j).getDutyID())
            && anfang == true) {
          startzeiten.add(this.dienstplan.getDutyelement().get(j).getDepTime());
          anfang = false;
          if (1 < startzeiten.size()) {
            endzeiten.add(this.dienstplan.getDutyelement().get(j - 1).getArrTime());
          }
        }
      }
      anfang = true;
    }

    endzeiten.add(
        this.dienstplan
            .getDutyelement()
            .get(this.dienstplan.getDutyelement().size() - 1)
            .getArrTime());

    for (int j = 0; j < startzeiten.size(); j++) {

      // Auslesen der Zeit als Integer
      StringSplitter ss = new StringSplitter();
      int[] zeit = new int[2];
      zeit = ss.intParse(startzeiten.get(j));
      int startHour = zeit[0];
      if (this.startzeitVar > startHour || j == 0) {
        this.startzeitVar = startHour;
      }
    }
    for (int j = 0; j < startzeiten.size(); j++) {

      // Auslesen der Zeit als Integer
      StringSplitter ss = new StringSplitter();
      int[] zeit = new int[2];
      zeit = ss.intParse(endzeiten.get(j));
      int endHour = zeit[0];
      if (endHour < 7) {
        endHour = endHour + 24;
      }
      if (this.endzeitVar < endHour || j == 0) {
        this.endzeitVar = endHour;
      }
    }
    this.endzeitVar = this.endzeitVar + 1;
  }
  /** Creates The Y - Scale. */
  private void createYScale() {

    // Sortierung des Planes
    ArrayList<String> orderList = new ArrayList<String>();
    ArrayList<Integer> listInt = new ArrayList<Integer>();
    ArrayList<Integer> match = new ArrayList<Integer>();
    ArrayList<Integer> orderedDuty = new ArrayList<Integer>();
    boolean idChange = true;
    String dutyBefore = null;

    for (int i = 0; i < this.dienstplan.getDutyelement().size(); i++) {
      if (idChange) {
        orderList.add(this.dienstplan.getDutyelement().get(i).getDepTime());
        dutyBefore = this.dienstplan.getDutyelement().get(i).getDutyID();
        idChange = false;
      }
      if (!this.dienstplan.getDutyelement().get(i).getDutyID().equals(dutyBefore)) {
        idChange = true;
        i = i - 1;
      }
    }

    for (int i = 0; i < orderList.size(); i++) {
      StringSplitter ss = new StringSplitter();
      int[] zeit = new int[2];
      zeit = ss.intParse(orderList.get(i));
      int startHour = zeit[0];
      int startMin = zeit[1];

      listInt.add((startHour * 100) + startMin);
      match.add((startHour * 100) + startMin);
    }
    // Sortierung (Bubble Sort)
    boolean unsortiert = true;
    int temp;
    while (unsortiert) {
      unsortiert = false;
      for (int i = 0; i < listInt.size() - 1; i++)
        if (listInt.get(i) > listInt.get(i + 1)) {
          temp = listInt.get(i);
          listInt.set(i, listInt.get(i + 1));
          listInt.set(i + 1, temp);
          unsortiert = true;
        }
    }

    for (int i = 0; i < listInt.size(); i++) {
      temp = listInt.get(i);
      for (int j = 0; j < match.size(); j++) {
        if (match.get(j) == temp) {
          int index = j;
          boolean auslassen = false;
          for (int j2 = 0; j2 < orderedDuty.size(); j2++) {
            if (index == orderedDuty.get(j2)) {
              auslassen = true;
            }
          }
          if (auslassen == false) {
            orderedDuty.add(j);
          }
        }
      }
    }

    // Hier wird das Skala Canvas erzeugt
    this.yCanvas = new Canvas(this.yPane.getWidth(), this.yPane.getHeight());

    // Hier der Graphic Context dazu erzeugt
    this.ygc = this.yCanvas.getGraphicsContext2D();
    this.ygc.clearRect(0, 0, this.yCanvas.getWidth(), this.yCanvas.getHeight());

    // Eigenschaften der Beschriftung
    this.ygc.setLineWidth(1);
    this.ygc.setFont(new Font("Arial", 12));
    this.ygc.setFill(Color.WHITE);
    this.ygc.setStroke(Color.BLACK);
    // Auslesen der Werte
    for (int j = 0; j < dienstplan.getDuty().size(); j++) {

      ygc.fillText(
          "" + dienstplan.getDuty().get(orderedDuty.get(j)).getHilfsID(),
          4,
          22 + (j * this.breite));
    }

    yPane.getChildren().add(this.yCanvas);
  }