FLEET MANAGEMENT Wirtschaftsinformatik Projekt WS Benny Brand | Paul Fuchs | Gui Rong Ko | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld
Gliederung Fleet Management Xtreme Programming Aufbau Java MVC, Singleton- Patterns Funktionen Fahrzeuge Reservierungen Werkstatt Statistiken PDF-Generator Testfälle (J-Unit-Tests) Web-Applikation (PHP) Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 2
Fleet Management Tool Einfach Möglichkeit den firmeninternen Fuhrpark zu verwalten – Ausleihe – Reservierung – Mitarbeiterverwaltung – Statistiken – Zusätzliche Weboberfläche Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 3
ER-Model Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 4
Xtreme Programming Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 5 RollenAufgabenBeispiel ProduktbesitzerHat Verantwortung, setzt Prioritäten, Entscheider für bestes ROI Produktmanagement, Marketing, ein Benutzer, Kunde, Manager des Benutzers, Analyst, Sponsor KundeEntscheidet, was gemacht wird, gibt Rückmeldung, Auftraggeber Auftraggeber, kann auch Produktbesitzer sein EntwicklerEntwickelt das ProduktProgrammierer, Tester, DB- Experte, Architekt, Designer ProjektmanagerFührung des TeamsNormalerweise Produktbesitzer, kann auch Entwickler sein BenutzerWird das zu erstellende Produkt nutzen Nutzer des Produkts Quelle:
User Stories Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 6
Pair-Programming Wechselnde Paare Höherer Wissenstransfer Anfänger kommen schneller rein Ständiger Codereview Ziel: Bessere Codequalität Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 7
MySQL: Stored Procedures Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 8 Termin für Reparatur vereinbaren Status
MySQL: Stored Procedures Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 9
MySQL: Stored Procedures Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 10
MySQL: Stored Procedures Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 11
MySQL: Function Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 12
MySQL: Function Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 13
MySQL: Function Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 14
Aufbau Java MVC und Singleton Pattern Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 15
MVC MVC Pattern – Flexible Programmierung Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld ViewControllerModel DAO
Singleton Singleton Pattern – Nur ein Objekt der Klasse darf existieren Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 17 Singleton -instance: Singleton -Singleton() + getInstance(): Singleton
Singleton Beispiel: package com.hsulm.wf5.fleetmanagement.model; public class FahrzeugDAO implements InterfaceDAO { private Ausstattung ausstattung; // Singleton// nur ein Objekt der Klasse kann erzeugt werden private static FahrzeugDAO instance = new FahrzeugDAO(); Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 18
Fahrzeuge Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 19
Fahrzeuge Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 20
Fahrzeuge Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 21
package com.hsulm.wf5.fleetmanagement.view.FahrzeugBearbeiten.java JButton btnHinzufgen = new JButton("Hinzuf\u00FCgen"); btnHinzufgen.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) { String kennzeichen = kennzeichenTextField.getText(); String standort = standortTextField.getText(); String farbe = farbeTextField.getText(); String erstzulassung = erstzulassungTextField.getText(); String kraftstoffart = kraftstoffartTextField.getText(); int sitzplaetze = Integer.parseInt(sitzplaetzeTextField.getText()); DateFormat formater = new SimpleDateFormat(); Date vertragsbeginn = null; String tuev = null; try { vertragsbeginn = (Date) formater.parse(vertragsbeginnTextField.getText()); } catch (ParseException e) { e.printStackTrace(); return; } tuev = tuevTextField.getText(); int serviceintervall = Integer.parseInt(serviceintervallTextField.getText()); String getriebe = getriebeTextField.getText(); int vertragslaufzeit = Integer.parseInt(vertragslaufzeitTextField.getText()); int herstellerId = Integer.parseInt(herstellerIdTextField.getText()); int werkstattId = Integer.parseInt(werkstattIdTextField.getText()); int kilometerstand = Integer.parseInt(kilometerstandTextField.getText()); String vertragsart = vertragsartTextField.getText(); String model = modelTextField.getText(); FahrzeugController fc = FahrzeugController.getInstance(); } }); Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 22
package com.hsulm.wf5.fleetmanagement.controller.FahrzeugController.java public void fahrzeugUpdaten(int arrayID, String vertragsart, int serviceintervall, String kennzeichen, String standort, String tuev, String vertragsbeginn, int vertragslaufzeit, int werkstattId, int kilometerstand) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException { Fahrzeug fahrzeug = fahrzeuge.get(arrayID); fahrzeug.setKennzeichen(kennzeichen); fahrzeug.setKilometerstand(kilometerstand); fahrzeug.setStandort(standort); fahrzeug.setTuev(tuev); fahrzeug.setVertragsBeginn(vertragsbeginn); fahrzeug.setVertragsLaufzeitMonate(vertragslaufzeit); fahrzeug.setWerkstattId(werkstattId); fahrzeug.setVertragsart(vertragsart); fahrzeug.setServiceIntervall_KM(serviceintervall); System.out.println("controller" + fahrzeug.getKilometerstand()); // fahrzeug updaten fahrzeug.objektUpdaten(fahrzeug); } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 23
package com.hsulm.wf5.fleetmanagement.model.Fahrzeug.java public void objektUpdaten(Fahrzeug fahrzeug) { dao.objektUpdaten(fahrzeug); } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 24
package com.hsulm.wf5.fleetmanagement.model.FahrzeugDao.java public void objektUpdaten(Fahrzeug object) { try { java.sql.Connection conn = Connection.connect(); PreparedStatement preStmt = conn.prepareStatement("CALL updateFahrzeug(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); java.sql.Date vertragsbeginn=null; if(!object.getVertragsBeginn().equals("null")){vertragsbeginn = java.sql.Date.valueOf(object.getVertragsBeginn());} preStmt.setString(1, object.getKennzeichen()); preStmt.setString(2, object.getStandort()); preStmt.setString(3, object.getFarbe()); preStmt.setString(4, object.getErstzulassung()); preStmt.setString(5, object.getKraftstoffart()); preStmt.setInt(6, object.getSitzplaetze()); preStmt.setString(7, object.getTuev()); preStmt.setInt(8, object.getServiceIntervall_KM()); preStmt.setString(9, object.getGetriebe()); preStmt.setString(10, object.getVertragsart()); preStmt.setDate(11, vertragsbeginn); preStmt.setInt(12, object.getVertragsLaufzeitMonate()); preStmt.setInt(13, object.getWerkstattId()); preStmt.setInt(14, object.getHerstellerId()); preStmt.setString(15, object.getModell()); preStmt.setInt(16, object.getKilometerstand()); preStmt.executeUpdate(); preStmt.close(); conn.close(); } catch (SQLException sqle) { sqle.printStackTrace(); } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 25
Suchfunktion Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 26
package com.hsulm.wf5.fleetmanagement.view.MainGui.java public JTextField sucheFahrzeug; this.sucheFahrzeug = new JTextField(); public void set_fahrzeugsucheListener(KeyListener l){ sucheFahrzeug.addKeyListener(l); } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 27
package com.hsulm.wf5.fleetmanagement.controller.FahrzeugController.java public void Fahrzeuginit() { MainGUI.getInstance().getTable_2().setRowSorter(null); MainGUI.getInstance().sucheFahrzeug.setText(""); MainGUI.getInstance().set_fahrzeugsucheListener(new fahrzeug_sucheListener()); } class fahrzeug_sucheListener implements KeyListener{ public void keyReleased(KeyEvent e) { TableRowSorter sorter = new TableRowSorter (MainGUI.getInstance().getTable_2().getModel()); MainGUI.getInstance().getTable_2().setRowSorter(sorter); filter(MainGUI.getInstance().sucheFahrzeug.getText(),sorter); } public void filter (String text,TableRowSorter sorter) { if (text.length() == 0) { sorter.setRowFilter(null); } else { try { sorter.setRowFilter(RowFilter.regexFilter("(?i)"+text)); } catch (PatternSyntaxException e) { System.out.println(e.getPattern()); } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 28
Reservierungen Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 29
Reservierungen Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 30
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer); ws.set ( ); ws.setStrasse(strasse); ws.setPlz(plz); ws.setOrt(ort); ws.setLand(land); ws.objektUpdaten(ws);}
Controller Werkstatt anlegen //neue Werkstatt anlegen boolean flag = false; for (int i = 0; i < werkstattarray.size()-1; i++) { if (plz ==(werkstattarray.get(i).getPlz())) { ws.setOrt(werkstattarray.get(i).getOrt()); ws.setLand(werkstattarray.get(i).getLand()); flag = true; } if (flag == true) { ws.objektAnlegen(ws);} else { ws.werkstattcityanlegen(ws); ws.objektAnlegen(ws);
Controller WerkstattBearbeiten Felder //Werkstattbearbeitenframe befüllen public void WerkstattBearbeiten(int row) { Werkstatt werkstatt = werkstattarray.get(row); WerkstattBearbeiten wb = WerkstattBearbeiten.getInstance(); wb.get_namef().setText(werkstatt.getName()); wb.get_plzf().setText(""+werkstatt.getPlz()); wb.get_telef().setText(werkstatt.getTelefonnummer()); wb.get_strasf().setText(werkstatt.getStrasse()); wb.get_anspf().setText(werkstatt.getAnsprechpartner()); wb.get_emaif().setText(werkstatt.get ()); wb.get_ortf().setText(werkstatt.getOrt()); wb.get_landf().setText(werkstatt.getLand()); wb.setArrayID(row); }
Controller befüllen //Werkstatt Combobox in Bearbeitenframe befüllen public void fahrzeugBearbeiten() { FahrzeugBearbeiten fb = FahrzeugBearbeiten.getInstance(); fb.get_Werk().removeAllItems(); for(int i =0;i<werkstattarray.size();i++){ fb.get_Werk().addItem(werkstattarray.get(i).getName()); }
Controller löschen // Siherheitsabfrage if(table5.getModel().removeRow(werkstattID)){ // Werkstatt aus Datenbank löschen Werkstatt werkstatt = werkstattarray.get(werkstattID); werkstatt.objektLoesche(werkstatt); // Lösche aus ArrayList von werkstattController werkstattarray.remove(werkstattID); table5.getModel().fuelleModelmitDaten(werkstattarray); table5.setRowSelectionInterval(0, 0);
Werkstattübersicht Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 36
Werkstattübersicht Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 37
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer); ws.set ( ); ws.setStrasse(strasse); ws.setPlz(plz); ws.setOrt(ort); ws.setLand(land); ws.objektUpdaten(ws);}
Controller Werkstatt anlegen //neue Werkstatt anlegen boolean flag = false; for (int i = 0; i < werkstattarray.size()-1; i++) { if (plz ==(werkstattarray.get(i).getPlz())) { ws.setOrt(werkstattarray.get(i).getOrt()); ws.setLand(werkstattarray.get(i).getLand()); flag = true; } if (flag == true) { ws.objektAnlegen(ws);} else { ws.werkstattcityanlegen(ws); ws.objektAnlegen(ws);
Controller WerkstattBearbeiten Felder //Werkstattbearbeitenframe befüllen public void WerkstattBearbeiten(int row) { Werkstatt werkstatt = werkstattarray.get(row); WerkstattBearbeiten wb = WerkstattBearbeiten.getInstance(); wb.get_namef().setText(werkstatt.getName()); wb.get_plzf().setText(""+werkstatt.getPlz()); wb.get_telef().setText(werkstatt.getTelefonnummer()); wb.get_strasf().setText(werkstatt.getStrasse()); wb.get_anspf().setText(werkstatt.getAnsprechpartner()); wb.get_emaif().setText(werkstatt.get ()); wb.get_ortf().setText(werkstatt.getOrt()); wb.get_landf().setText(werkstatt.getLand()); wb.setArrayID(row); }
Controller befüllen //Werkstatt Combobox in Bearbeitenframe befüllen public void fahrzeugBearbeiten() { FahrzeugBearbeiten fb = FahrzeugBearbeiten.getInstance(); fb.get_Werk().removeAllItems(); for(int i =0;i<werkstattarray.size();i++){ fb.get_Werk().addItem(werkstattarray.get(i).getName()); }
Controller löschen // Siherheitsabfrage if(table5.getModel().removeRow(werkstattID)){ // Werkstatt aus Datenbank löschen Werkstatt werkstatt = werkstattarray.get(werkstattID); werkstatt.objektLoesche(werkstatt); // Lösche aus ArrayList von werkstattController werkstattarray.remove(werkstattID); table5.getModel().fuelleModelmitDaten(werkstattarray); table5.setRowSelectionInterval(0, 0);
Statistiken Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 43
package com.hsulm.wf5.fleetmanagement.view.MainGui.java ActionListener al7 = new ActionListener() { public void actionPerformed(ActionEvent e) { FahrzeugReserviert demo = new FahrzeugReserviert("Vergleich„, "Fahrzeuge, die am meisten reserviert wurden"); demo.FahrzeugReserviertStart(); demo.pack(); demo.setVisible(true); } }; Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 44
package com.hsulm.wf5.fleetmanagement.statisticview.FahrzeugReserviert.java ArrayList fz; public FahrzeugReserviert(String applicationTitle, String chartTitle) { super(applicationTitle); fz = new ArrayList (); fz = FahrzeugDAO.getInstance().fahrzeugeAmMeistenReserviert(); // This will create the dataset PieDataset dataset = createDataset(); // based on the dataset we create the chart chart = createChart(dataset, chartTitle); // we put the chart into a panel ChartPanel chartPanel = new ChartPanel(chart); // default size chartPanel.setPreferredSize(new java.awt.Dimension(600, 400)); // add it to our application this.FahrzeugReserviert = chartPanel; } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 45
package com.hsulm.wf5.fleetmanagement.model.FahrzeugDao.java public ArrayList fahrzeugeAmMeistenReserviert() { ArrayList fahrzeugstat = new ArrayList (); Fahrzeug fahrzeug; try { java.sql.Connection con = Connection.connect(); CallableStatement cst; cst = con.prepareCall("Call FahrzeugAmMeistenReserviert()"); ResultSet rs = cst.executeQuery(); while (rs.next()) { fahrzeug = new Fahrzeug(rs.getInt("AnzahlReservierungen"), rs.getString("Kennzeichen"), rs.getString("Name"), rs.getString("Modell")); fahrzeugstat.add(fahrzeug); } cst.close(); rs.close(); con.close(); } catch (SQLException e) { System.out.println(e.getMessage()); e.printStackTrace(); } return fahrzeugstat; } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 46
FahrzeugAmMeistenReserviert () Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 47
Chart: Fahrzeuge, die am meisten reserviert wurden Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 48
PDF-Generator Generation von PDFs – Tabellen Fahrzeug Reservierungen Mitarbeiter – Statistiken Top 5 gefahrene Kilometer Reservierte Fahrzeuge Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 49
PDF-Generator Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 50
PDF-Generator Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 51
PDF-Generator Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 52
PDF-Generator Programmierung – PDFGenerator.java Erstellt PDF – ExportPDFFrame.java (GUI) Ruft Jtables auf – Jtables-Klassen und Statistik-Klassen Rufen PDFGenerator auf Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 53
package com.hsulm.wf5.fleetmanagement.view.ExportPDFFrame.java ActionListener exp = new ActionListener() public void actionPerformed( ActionEvent e ) { if(FahrzeugeIsActive()) { MainGUI.getInstance().getTable_2().createPDF(); } if(ReservierungenIsActive()){ MainGUI.getInstance().getTable_3().createPDF(); } if(MitarbeiterIsActive()) { MainGUI.getInstance().getTable_4().createPDF(); } if(TopFuenfIsActive()) { erstelleMitarbeiterKMPDF(); } if(ReservierteFahrzeugeIsActive()) { erstelleFahrzeugeReserviertPDF(); } if(AlleIsActive()) { MainGUI.getInstance().getTable_2().createPDF(); MainGUI.getInstance().getTable_3().createPDF(); erstelleMitarbeiterKMPDF(); erstelleFahrzeugeReserviertPDF(); } }}; Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 54
package com.hsulm.wf5.fleetmanagement.view.ExportPDFFrame.java public void erstelleFahrzeugeReserviertPDF() { FahrzeugReserviert reservierteFahrzeuge; reservierteFahrzeuge = new FahrzeugReserviert("Vergleich", "Fahrzeuge, die am meisten reserviert wurden"); reservierteFahrzeuge.pack(); RefineryUtilities.centerFrameOnScreen(reservierteFahrzeuge); reservierteFahrzeuge.setVisible(false); reservierteFahrzeuge.createPDF(); } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 55
package com.hsulm.wf5.fleetmanagement.statisticview.FahrzeugReserviert.java public void createPDF() { PDFGenerator gen = new PDFGenerator(); PDFGenerator.writeChartToPDF(getChart(), 585, 312, "Reservierte Fahrzeuge.pdf"); } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 56
package com.hsulm.wf5.fleetmanagement.pdfgeneration.PDFGenerator.java public static void writeChartToPDF(JFreeChart chart, int width, int height, String fileName) { PdfWriter writer = null; Document document = new Document(PageSize.A4.rotate(), 20, 15, 15, 15); try { writer = PdfWriter.getInstance(document, new FileOutputStream(fileName)); document.open(); BufferedImage bufferedImage = chart.createBufferedImage(width, height); Image image = Image.getInstance(writer, bufferedImage, 1.0f); document.add(image); document.close(); writer.close(); Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + fileName); } catch (Exception e) { e.printStackTrace(); } Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 57
PHP Benny Brand | Paul Fuchs | Gui Ro Kong | Boris Oechsle | Elizaveta Olar | Thomas Oppel | Matthias Schmitt | Markus Schönfeld 58