/** 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); }