01.03.2013 Aufrufe

Technische Praesentation(pdf) - Christian-Daniel Wirth

Technische Praesentation(pdf) - Christian-Daniel Wirth

Technische Praesentation(pdf) - Christian-Daniel Wirth

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

ISS<br />

DER UMWELT<br />

CAMPUS<br />

BIRKENFELD<br />

Institut für Softwaresysteme<br />

in Wirtschaft, Umwelt und Verwaltung<br />

<strong>Technische</strong> Präsentation<br />

zum<br />

Web Mining Projekt<br />

UDK- Loganalyzer<br />

<strong>Christian</strong> <strong>Wirth</strong> und Hasiba Sarwari<br />

Angewandte Informatik UCB<br />

im 5-ten Semester<br />

Praxissemester bei ISS seit 01.03.2005<br />

Büro: 25/135 Tel. 17/1957<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 1


<strong>Technische</strong> echnische Präsentation<br />

Pr sentation<br />

� Was war zu tun?<br />

� Problemstellung<br />

� Lösung:<br />

UDK-Loganalyzer<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 2


<strong>Technische</strong> echnische Präsentation<br />

Pr sentation<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 3


Coding oding : GUI - initialize<br />

public class Graphics extends JFrame {<br />

/**<br />

* This is the default constructor<br />

*/<br />

public Graphics() {<br />

super();<br />

initialize();<br />

}<br />

private void initialize() {<br />

Quelle[0] = new File("C:\\");<br />

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();<br />

d.height = d.height / 2;<br />

d.width = (d.width / 2);<br />

this.setContentPane(getJContentPane());<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 4


Coding oding : GUI - initialize<br />

}<br />

this.setLocation((int) ((d.width - getSize().width) / 3),<br />

(d.height - getSize().height) / 2);<br />

d.width = (int) (d.width * 1.25);<br />

this.setSize(d);<br />

this.setTitle("UDK-Loganalyzer");<br />

this.setVisible(true);<br />

this.addWindowListener(new WindowAdapter() {<br />

public void windowActivated(WindowEvent event) {<br />

repaint();<br />

quellordner_txt.setText(getQuell_Ordner());<br />

zielordner_txt.setText(getZiel_Ordner());<br />

}<br />

});<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 5


Coding : GUI - JContentPane<br />

private JPanel getJContentPane() {<br />

if (jContentPane == null) {<br />

jContentPane = new javax.swing.JPanel();<br />

jContentPane.setLayout(new java.awt.BorderLayout());<br />

jContentPane.setToolTipText("Udk-Loganalyzer ");<br />

jContentPane.add(getJPanel(),<br />

java.awt.BorderLayout.NORTH);<br />

jContentPane.add(getJPanel1(),<br />

java.awt.BorderLayout.SOUTH);<br />

jContentPane.add(getJPanel2(),<br />

java.awt.BorderLayout.EAST);<br />

jContentPane.add(getJPanel3(),<br />

java.awt.BorderLayout.WEST);<br />

jContentPane.add(getJTabbedPane(),<br />

java.awt.BorderLayout.CENTER); }<br />

return jContentPane;<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 6


Coding : GUI - JPanel<br />

private JPanel getJPanel1() {<br />

if (jPanel1 == null) {<br />

jPanel1 = new JPanel();<br />

jPanel1.add(programmstart(), null);<br />

jPanel1.add(getJbutton_einstellungen(), null);<br />

jPanel1.add(hilfe(), null);<br />

jPanel1.add(ausstieg(), null);<br />

}<br />

return jPanel1;<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 7


Coding : GUI - JButton<br />

private JButton programmstart() {<br />

if (jButton == null) {<br />

jButton = new JButton();<br />

jButton.setText("Run UDK-Loganalyzer");<br />

jButton.setPreferredSize(new java.awt.Dimension(156, 42));<br />

jButton.setSelected(true);<br />

jButton.setToolTipText("Dieser Button startet die Auswertung mit den<br />

angegebenen Einstellungen");<br />

jButton.setComponentOrientation(java.awt.ComponentOrientation.UNKNOWN);<br />

jButton.addMouseListener(new java.awt.event.MouseAdapter() {<br />

public void mouseClicked(java.awt.event.MouseEvent e) {<br />

if (Ziel_Ordner.equals("Ziel-Ordner:")) {<br />

JOptionPane.showMessageDialog(null,<br />

"Bitte Zielordner aussuchen", "Fehler",<br />

JOptionPane.ERROR_MESSAGE);<br />

} else if (von.equals(bis)) {<br />

JOptionPane.showMessageDialog(null,<br />

"Anfangs-Datum = End-Datum", "Fehler",<br />

JOptionPane.ERROR_MESSAGE);<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 8


Coding : GUI - JButton<br />

} else {<br />

for (int i = 0; i < 7; i++) {<br />

ausgabe_html[i] = null;<br />

}<br />

System.out.println(von + "\n" + bis + "\n"<br />

+ Quell_Ordner);<br />

for (int i = 0; i


Coding : GUI - JTabbedPane<br />

private JTabbedPane getJTabbedPane() {<br />

if (jTabbedPane == null) {<br />

jTabbedPane = new JTabbedPane();<br />

jTabbedPane.addTab("Dateien auswählen", null,<br />

getJSplitPane(), null);<br />

jTabbedPane.addTab("UDK-Log Einstellungen", null,<br />

getJPanel_UDKLOGEINSTELLUNGEN(),<br />

"Ausgabeformatierung");<br />

jTabbedPane.addTab("Credits", null, getJPanel_CREDITS(),<br />

"Credits");<br />

}<br />

return jTabbedPane;<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 10


Coding : GUI - JSplitPane<br />

private JSplitPane getJSplitPane() {<br />

if (jSplitPane == null) {<br />

jSplitPane = new JSplitPane();<br />

jSplitPane.setDividerLocation(0.8);<br />

jSplitPane.setLeftComponent(dat_ausw_links());<br />

jSplitPane.setRightComponent(ausg_ausw_rechts());<br />

jSplitPane.setDividerSize(6);<br />

jSplitPane.setToolTipText("Hier können sie die<br />

auszuwertenden Dateien auswählen und den Zielordner<br />

für die Ausgabe Dateien bestimmen");<br />

}<br />

return jSplitPane;<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 11


Coding : GUI - GriBagLayout<br />

private JPanel dat_ausw_links() {<br />

if (dateiauswahlfenster == null) {<br />

GridBagConstraints gridBagConstraints1 = new GridBagConstraints();<br />

GridBagConstraints gridBagConstraints2 = new GridBagConstraints();<br />

GridBagConstraints gridBagConstraints3 = new GridBagConstraints();<br />

GridBagConstraints gridBagConstraints4 = new GridBagConstraints();<br />

//1)Textfeld-Possition: Zeitraum eingeben<br />

gridBagConstraints1.gridx = 0;<br />

gridBagConstraints1.gridy = 0;<br />

gridBagConstraints1.weightx = 1.0;<br />

gridBagConstraints1.weighty = 1.0;<br />

gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;<br />

//2)von_Datums_Feld-Possition<br />

gridBagConstraints2.gridx = 0;<br />

gridBagConstraints2.gridy = 1;<br />

gridBagConstraints2.weightx = 1.0;<br />

gridBagConstraints2.weighty = 1.0;<br />

//3)bis_Datums_Feld-Possition<br />

gridBagConstraints3.gridx = 0;<br />

gridBagConstraints3.gridy = 2;<br />

gridBagConstraints3.weightx = 1.0;<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 12


Coding : GUI - GriBagLayout<br />

gridBagConstraints3.weighty = 1.0;<br />

//4)Quellordner_Feld-Possition<br />

gridBagConstraints4.gridx = 0;<br />

gridBagConstraints4.gridy = 3;<br />

gridBagConstraints4.weightx = 1.0;<br />

gridBagConstraints4.weighty = 1.0;<br />

//gridBagConstraints4.fill = java.awt.GridBagConstraints.BOTH;<br />

//Panel initialisieren<br />

dateiauswahlfenster = new JPanel();<br />

dateiauswahlfenster.setLayout(new GridBagLayout());<br />

dateiauswahlfenster.setName("Eingabe");<br />

dateiauswahlfenster.setToolTipText("Hier sind die Eingabeeinstellungen<br />

auszusuchen");<br />

dateiauswahlfenster.setBorder(BorderFactory<br />

.createTitledBorder("Eingabe"));<br />

//Felder einfügen und lokalisieren<br />

dateiauswahlfenster.add(getZeitraum_txt(), gridBagConstraints1);<br />

dateiauswahlfenster.add(getJPanel_datum_von(), gridBagConstraints2);<br />

dateiauswahlfenster.add(getJPanel_datum_bis(), gridBagConstraints3);<br />

dateiauswahlfenster.add(getJPanel_Quellordner(),gridBagConstraints4);<br />

}<br />

return dateiauswahlfenster;<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 13


Coding : GUI – Date-Combo<br />

Date Combo-Box Box<br />

Import com.pallas.swing.date.DateComboBox;<br />

public DateComboBox getDate() {<br />

if (date == null) {<br />

date = new DateComboBox(new Date(),<br />

"dd\'/\'MM\'/\'yyyy");<br />

date.addFormat("dd\'/\'MM\'/\'yyyy");<br />

date.setDate(new<br />

GregorianCalendar().getTime());<br />

date.addItemListener(new ItemListener() {<br />

public void itemStateChanged(ItemEvent e) {<br />

von = e.getItem().toString();<br />

}<br />

});<br />

}<br />

return date;<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 14


Coding : GUI - JFileChooser<br />

public class Ordner_öffnen {<br />

private JFileChooser Einstellungen = null;<br />

private JFileChooser Eingabe = null;<br />

private JFileChooser Ausgabe = null;<br />

private String Standardordner = "G:\\webmining\\UDK-<br />

Weblogs";<br />

public Ordner_öffnen() {<br />

}<br />

public Ordner_öffnen(String ausw, Graphics gui) {<br />

super();<br />

if (ausw.equals("Einstellungen")) {<br />

getEinstellungen();<br />

} else if (ausw.equals("Eingabe")) {<br />

getEingabe(gui);<br />

} else if (ausw.equals("Ausgabe")) {<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 15


Coding : GUI – JFileChooser<br />

getAusgabe(gui);<br />

}<br />

}<br />

private JFileChooser getEinstellungen() {<br />

Einstellungen = new JFileChooser();<br />

Einstellungen.setApproveButtonText("Auswählen");<br />

int returnVal = Einstellungen.showSaveDialog(null);<br />

if (returnVal == JFileChooser.APPROVE_OPTION) {<br />

File file = Einstellungen.getSelectedFile();<br />

} else<br />

System.out.println("Auswahl abgebrochen");<br />

return Einstellungen;<br />

}<br />

private JFileChooser getEingabe(Graphics gui) {<br />

Eingabe = new JFileChooser(Standardordner);<br />

Eingabe.setFileSelectionMode(javax.swing.JFileChooser.DIRECTORIES<br />

_ONLY);<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 16


Coding : GUI - JFileChooser<br />

Eingabe.setMultiSelectionEnabled(true);<br />

[....]<br />

Eingabe.setApproveButtonText("Auswählen");<br />

int returnVal = Eingabe.showOpenDialog(null);<br />

if (returnVal == JFileChooser.APPROVE_OPTION)<br />

{<br />

File[] file = Eingabe.getSelectedFiles();<br />

String string = new String();<br />

string = file[0].toString();<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 17


Einstellungen speichern<br />

� Beispiel für eine Speicher-Datei:<br />

Quelle:<br />

G:\webmining\UDK-Weblogs\vudk<br />

Ziel:<br />

G:\webmining\ziel\auswertungen\09_06_05_vudk_komplett<br />

01/04/2004<br />

31/10/2004<br />

UDK-Logdatei-Auswertung BW VUDK<br />

http://www.umweltdatenkatalog.de<br />

false<br />

false<br />

false<br />

false<br />

false<br />

true<br />

vudk<br />

ende<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 18


GUI<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 19


<strong>Technische</strong> echnische Präsentation<br />

Pr sentation<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 20


<strong>Technische</strong> echnische Präsentation<br />

Pr sentation<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 21


Coding: oding: File-List File List erstellen<br />

� Zentrale übergibt Pfad der Log-Dateien und Zeitraum<br />

� Pfad wird abgearbeitet und auf weitere Ordner überprüft<br />

� Sämtliche Dateien werden auf Datum überprüft<br />

� Liste mit passenden Log-Files wird erstellt und<br />

weitergegeben.<br />

BufferedReader bufReader = new BufferedReader(fileReader);<br />

while (true) {<br />

String s = bufReader.readLine();<br />

if (s == null) {<br />

break;<br />

}<br />

StringTokenizer tokens = new StringTokenizer(s,"\b\t\n;!");<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 22


Coding: oding: File-List File List erstellen<br />

//hier wird Datum gelesen<br />

if (tokens.hasMoreTokens()) {<br />

String vergleich = tokens.nextToken();<br />

if (vergleich.startsWith("From")) {<br />

if (tokens.hasMoreTokens()) {<br />

String datum = tokens.nextToken();<br />

FromDatum = DateReader.format_StringToDate(datum);<br />

FromDatumNeu =DateReader.format_DateToDate(FromDatum);<br />

}<br />

if ((FromDatumNeu.after(ab) || FromDatumNeu.equals(ab)) &&<br />

(FromDatumNeu.before(bis) || (FromDatumNeu.equals(bis))))<br />

list.addElement(fileNames[i]);<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 23


Coding:Dateien<br />

oding:Dateien auslesen<br />

public static int daten_auslesen(Db db, Vector list) throws IOException {<br />

for (Enumeration el = list.elements(); el.hasMoreElements();) {<br />

File inFile = (File) el.nextElement();<br />

FileReader fileReader = new FileReader(inFile);<br />

BufferedReader bufReader = new BufferedReader(fileReader);<br />

String FromDate = null;<br />

Insert ins = new Insert();<br />

while (true) {<br />

String s = bufReader.readLine();<br />

if (s == null) {<br />

break;<br />

}<br />

StringTokenizer tokens = new StringTokenizer(s, "\b\t\n!");<br />

if (tokens.hasMoreTokens()) {<br />

String vergleich = tokens.nextToken();<br />

//Z.B.:<br />

(else) if (vergleich.startsWith("Adresse:")) {<br />

ins.Insert_Adresse_Detail(tokens, FromDate, db);<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 24


Coding: oding: Datum anpassen<br />

� Problem: verschiedene Formate beim Datum<br />

� Unterschiedlich in Dateien und auch in Anwendung<br />

� Formate: Bsp.:<br />

� Mm/dd/yyyy 12.00 pm<br />

� Dd/mm/yyyy 24.00<br />

� ...<br />

� Java.util.date<br />

� GregorianCalendar.Date<br />

� Sql-Date<br />

� Mit und ohne Uhrzeit<br />

� Dazu wurden verschiedene Methoden entwickelt, um diese<br />

anzugleichen und damit arbeiten zu können<br />

� StringTokenizer<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 25


Coding: Datum anpassen<br />

/** Konvertiert String Format "MM/dd/yy hh:mm a ", "dd.MM.yy hh:mm a",<br />

* "dd.MM.yy hh:mm"(aus unser .stats) zu java.util.Date<br />

*/<br />

static Date format_StringToDate(String s) {<br />

Date myDate = null;<br />

SimpleDateFormat dateFormat1 = new SimpleDateFormat("MM/dd/yy hh:mm a");<br />

try {<br />

myDate = dateFormat1.parse(s);<br />

} catch (ParseException e1) {<br />

SimpleDateFormat dateFormat2 = new SimpleDateFormat("MM.dd.yy hh:mm a");<br />

try {<br />

myDate = dateFormat2.parse(s);<br />

} catch (ParseException e2) {<br />

try {<br />

StringTokenizer tokens = new StringTokenizer(s, " :");<br />

if (tokens.hasMoreTokens()) {<br />

String datum = tokens.nextToken();<br />

String uhr = tokens.nextToken();<br />

String mm = tokens.nextToken();<br />

int hh = 0;<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 26


Coding: Datum anpassen<br />

}<br />

}<br />

return myDate;<br />

}<br />

try {<br />

hh = Integer.parseInt(uhr);<br />

} catch (NumberFormatException e) {}<br />

if (hh >= 12) {<br />

hh = hh - 12;<br />

s = datum.concat(" " + hh + ":" + mm + " PM");<br />

} else<br />

s = s.concat(" AM");<br />

SimpleDateFormat dateFormat3 = new SimpleDateFormat(<br />

"dd.MM.yy hh:mm a");<br />

myDate = dateFormat3.parse(s);<br />

}<br />

} catch (ParseException e3) {<br />

e3.printStackTrace();<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 27


<strong>Technische</strong> echnische Präsentation<br />

Pr sentation<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 28


Coding: Auslesen und<br />

Datenbank füllen<br />

� Datenbank: hsqldb<br />

� jdbc connection<br />

Class.forName("org.hsqldb.jdbcDriver");<br />

c = DriverManager.getConnection("jdbc:hsqldb:mem:aname",<br />

"sa", "");<br />

� Starten<br />

Db dbank = new Db();<br />

dbank.jdbc_connect("db_file");<br />

� Abfrage<br />

st = c.createStatement();<br />

rs = st.executeQuery(expression);<br />

� Aktualisierung<br />

st = c.createStatement();<br />

int i = st.executeUpdate(expression);<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 29


Coding: Auslesen und<br />

Datenbank füllen<br />

� Class Create erzeugt verschiedene Tabellen<br />

public static void create_Adresse_Detail(Db db) {<br />

try {<br />

db.update("Create Table Adress_Detaildarstellung("adr_nr”+<br />

“VARCHAR(64),FromDate DATE,adresse”+<br />

“VARCHAR(32), anzahl INTEGER)");<br />

} catch (SQLException e) {<br />

e.printStackTrace();<br />

}<br />

}<br />

� Class Insert hat Methoden, die für das Füllen der Tabellen<br />

zuständig sind.<br />

� Die Methoden bekommen als Parameter einen tokenierten<br />

String, der aus der Log-Datei gelesen wurde. Dieser wird<br />

weiter bearbeitet und in die richtige Tabelle eingefügt.<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 30


Coding: Auslesen und<br />

Datenbank füllen<br />

public void Insert_Adresse_Detail(StringTokenizer tokens,<br />

String adr_FromDate, Db db) {<br />

if (tokens.countTokens() == 3) {<br />

while (tokens.hasMoreTokens()) {<br />

String adr_name = tokens.nextToken();<br />

String adr_nr = tokens.nextToken();<br />

String adr_anzahl = tokens.nextToken();<br />

int anz = 0;<br />

try {<br />

anz = Integer.parseInt(adr_anzahl);<br />

} catch (NumberFormatException e) {}<br />

try { db.update("INSERT INTO Adress_Detaildarstellung“+<br />

(adr_nr,FromDate,adresse,anzahl)„ +<br />

"VALUES('"+ adr_nr+ "','"+ adr_FromDate+ "','"+<br />

adr_name+ "'," + anz + ")");<br />

} catch (SQLException e) {<br />

e.printStackTrace();}}}}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 31


Coding: Datumsfelder erzeugen<br />

Calendar c = new GregorianCalendar();<br />

Calendar f = new GregorianCalendar();<br />

c.set(year, month - 1, day);<br />

f.set(year2, month2 - 1, day2);<br />

date = DateReader.format_DateToSqlDate(c.getTime());<br />

String date_anf = DateReader.format_DateToSqlDate(c.getTime());<br />

while (c.before(f) || c.equals(f)) {<br />

try {<br />

date = DateReader.format_DateToSqlDate(c.getTime());<br />

week = c.get(3); // 3 steht für Woche<br />

if (week < 10) {<br />

woche = Integer.toString(c.get(1)).concat("/0").concat( //1 steht für Jahr<br />

Integer.toString(c.get(3)));<br />

} else<br />

woche = Integer.toString(c.get(1)).concat("/").concat(<br />

Integer.toString(c.get(3)));<br />

db.update("INSERT INTO von_bis(dates)VALUES( '" + date + "')");<br />

if ((c.get(2) == c.getActualMaximum(2)) && (c.get(3) == 1)) { //2 steht für Monat<br />

week = c.get(3);<br />

if (week < 10) {<br />

woche = Integer.toString(c.get(1) + 1).concat("/0")<br />

.concat(Integer.toString(c.get(3)));<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 32


Coding: Datumsfelder erzeugen<br />

} else<br />

woche = Integer.toString(c.get(1) + 1).concat("/")<br />

.concat(Integer.toString(c.get(3)));<br />

db.update("INSERT INTO wochen(tage,woche)VALUES( '" + date<br />

+ "','" + woche + "')");<br />

} else {<br />

if (week < 10) {<br />

woche = Integer.toString(c.get(1)).concat("/0").concat(<br />

Integer.toString(c.get(3)));<br />

} else<br />

woche = Integer.toString(c.get(1)).concat("/").concat(<br />

Integer.toString(c.get(3)));<br />

db.update("INSERT INTO wochen(tage,woche)VALUES( '" + date<br />

+ "','" + woche + "')");<br />

}<br />

if (c.get(5) == c.getActualMaximum(5)) {<br />

date = DateReader.format_DateToSqlDate(c.getTime());<br />

if (week < 10) {<br />

woche = Integer.toString(c.get(1)).concat("/0").concat(<br />

Integer.toString(c.get(3)));<br />

} else<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 33


Coding: Datumsfelder erzeugen<br />

woche = Integer.toString(c.get(1)).concat("/").concat(<br />

Integer.toString(c.get(3)));<br />

db.update("INSERT INTO von_bis(dates)VALUES( '" + date<br />

+ "')");<br />

db.update("INSERT INTO monate(monat_anf,monat_end)VALUES(<br />

+ date_anf + "','" + date + "')");<br />

if (c.get(2) == c.getMaximum(2)<br />

&& c.get(5) == c.getActualMaximum(5)) { //5 steht für Tag<br />

c.roll(1, true);<br />

}<br />

c.roll(2, true);<br />

c.set(5, 1);<br />

date = DateReader.format_DateToSqlDate(c.getTime());<br />

date_anf = DateReader.format_DateToSqlDate(c.getTime());<br />

db.update("INSERT INTO von_bis(dates)VALUES( '" + date<br />

+ "')");<br />

week = c.get(3);<br />

if (week < 10) {<br />

woche = Integer.toString(c.get(1) + 1).concat("/0")<br />

.concat(Integer.toString(c.get(3)));<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 34


Coding: Datumsfelder erzeugen<br />

}<br />

} else<br />

woche = Integer.toString(c.get(1)).concat("/").concat(<br />

Integer.toString(c.get(3)));<br />

db.update("INSERT INTO wochen(tage,woche)VALUES( '"<br />

+ date_anf + "','" + woche + "')");<br />

}<br />

c.roll(5, true);<br />

} catch (SQLException e) {<br />

e.printStackTrace();<br />

}<br />

}<br />

date = DateReader.format_DateToSqlDate(f.getTime());<br />

week = c.get(3);<br />

if (week < 10) {<br />

woche = Integer.toString(c.get(1) + 1).concat("/0").concat(<br />

Integer.toString(c.get(3)));<br />

} else<br />

woche = Integer.toString(c.get(1)).concat("/").concat(<br />

Integer.toString(c.get(3)));<br />

db.update("INSERT INTO monate(monat_anf,monat_end)VALUES( '" + date_anf<br />

+ "','" + date + "')");<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 35


<strong>Technische</strong> echnische Präsentation<br />

Pr sentation<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 36


Coding: Auswertung<br />

� Abhängig von der Auswahl der check Boxes und anderen Einstellungen,<br />

werden verschiedene Auswertungen durchgeführt. Die Ausgabe wird von<br />

hier gesteuert und alle dazu notwendigen Daten und Graphiken werden<br />

bereitgestellt.<br />

� Nachfolgende Methode liefert einen Wert, der für die Berechnung der<br />

relativen Häufigkeiten bei der Erzeugung der Graphik nötig ist:<br />

public double add_Gesammtsummen(ResultSet rs_Tagesprotokoll)<br />

throws SQLException {<br />

double sum = 0.0;<br />

ResultSetMetaData meta = rs_Tagesprotokoll.getMetaData();<br />

int spaltmax = meta.getColumnCount();<br />

Object o = null;<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 37


Coding: Auswertung<br />

}<br />

for (; rs_Tagesprotokoll.next();) {<br />

for (int i = 1; i < spaltmax; ++i) {<br />

o = rs_Tagesprotokoll.getObject(i + 1);<br />

if (o != null)<br />

sum = sum + Double.parseDouble(o.toString());<br />

}<br />

}<br />

return sum;<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 38


Coding: Auswertung<br />

� Nächststehende Methode liefert z.B. Anzahl der gesuchten<br />

Begriffe, gruppiert pro Monat.<br />

public ResultSet werte_monat_anzahl(Db db, String tabelle2)<br />

throws SQLException{<br />

//tabelle2 ist auszuwertende Tabelle<br />

rs = db.query("SELECT DISTINCT monat_anf,SUM(anzahl) FROM "<br />

+ tabelle2+”,monate WHERE FromDate BETWEEN”+<br />

“monat_anf AND monat_end”+<br />

“GROUP BY monat_anf ");<br />

return rs;<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 39


Coding: Graphik<br />

� Nachfolgend einige Infos über die Erzeugung solch einer<br />

Grafik.<br />

� Beispiel: Daten werden für PieChart gelesen<br />

� Zuerst erzeugt man eine Instanz der Dataset Class, für Pie<br />

Chart ist PieDataset und in diesem Fall DefaultPieDataset<br />

zuständig.<br />

DefaultPieDataset dataset = new DefaultPieDataset();<br />

ResultSetMetaData meta = rs_Tagesprotokoll.getMetaData();<br />

int spaltmax = meta.getColumnCount();<br />

Object o = null;<br />

String[] str = { "Adress-Detail-Darstellung",<br />

"Objekt-Detail-Darstellung", "einfache Suche nach<br />

Adressen","einfache Suche nach Objekten ", "Expertensuche<br />

nach Adressen","Expertensuche nach Objekten", "Thesaurus-<br />

Suche" };<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 40


Coding: Graphik<br />

for (; rs_Tagesprotokoll.next();) {<br />

for (int i = 1; i < spaltmax; ++i) {<br />

o = rs_Tagesprotokoll.getObject(i + 1);<br />

if (o == null)<br />

break;<br />

dataset.setValue(str[i - 1], Double.parseDouble(o.toString())<br />

/sum);<br />

}<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 41


Coding: Graphik<br />

� Als nächstes wird die Art der Grafik festgelegt und eine<br />

Instanz der JFreeChart Class erzeugt, die wiederum<br />

org.jfree.chart.ChartFactory Class verwendet um Dataset zu<br />

Chart umzuwandeln.<br />

JFreeChart chart = ChartFactory.createPieChart3D(<br />

"VERTEILUNG DER RELATIVEN HÄUFIGKEITEN",<br />

dataset, true, true,true);<br />

Nachfolgend einige Möglichkeiten die Charts zu formatieren:<br />

chart.setBackgroundPaint(new GradientPaint(0, 0, Color.WHITE, 1000, 0,<br />

Color.WHITE));<br />

PiePlot pie = (PiePlot) chart.getPlot();<br />

pie.setForegroundAlpha(0.9f); //Transparenz Diagramm<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 42


Coding: Graphik<br />

pie.setLabelBackgroundPaint(Color.WHITE);<br />

pie.setBaseSectionOutlinePaint(Color.BLACK);<br />

pie.setStartAngle(180.0);<br />

pie.setOutlinePaint(Color.black);<br />

� Speichern als Bild (jpg): nachdem man Chart in einem<br />

JFreeChart Objekt gespeichert hat, muss man es in ein<br />

sichtbares Format konvertieren(z.B. .jpg, .png)<br />

File file = new File(charts_ordner + " \\gesamtsummen2.jpeg");<br />

ChartUtilities.saveChartAsJPEG(file, chart, 700, 400);<br />

� Erzeugung des Bildes<br />

ChartFactory.createPieChart("Gesamtsummen",dataset, true, true,true);<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 43


Coding: Graphik<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 44


Coding: Ausgabe<br />

� Hier werden die Html-Seiten für die Ausgabe erzeugt.<br />

� Die Datenbank wird ausgelesen und die Elemente in<br />

Schleifen in den Html-Code eingefügt und somit Tabellen<br />

für die Auswertung generiert.<br />

for (; rs_fehlende.next();) {<br />

monat = DateReader.format_SqlDateToString_kurz(rs_fehlende<br />

.getObject(1).toString());<br />

n = Integer.parseInt(rs_fehlende.getObject(2).toString());<br />

bw.write("" + monat + "");<br />

for (int i = 0; i < n; i++) {<br />

rs_fehlende_dateien.next();<br />

o = rs_fehlende_dateien.getObject(1);<br />

String str = DateReader.format_SqlDateToString(o.toString());<br />

if (str.endsWith(monat)) {<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 45


Coding: Ausgabe<br />

bw.write("");<br />

bw.write(str);<br />

bw.write("");<br />

}<br />

else<br />

break;<br />

}<br />

}<br />

bw.write("");<br />

bw.close();<br />

gui.setAusgabe_html(new File(komplett_ansicht.toString()));<br />

gui.setAusgabe_html(new File(ordner.toString() + "\\fehltage.html"));<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 46


<strong>Technische</strong> echnische Präsentation<br />

Pr sentation<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 47


http-Abfrage<br />

� Hier wird Verbindung mit dem Server hergestellt und Anfrage<br />

geschickt und zwar mit einzelnen Suchbegriffen( einfache<br />

Suche Adresse/Objekt) aus der Tabelle.<br />

� Das Ergebnis, in Form einer Html-Seite, wird ausgelesen und<br />

auch in die Tabelle (Datenbank) geschrieben.<br />

public void udk_anfrage_einf(Db db, String table, String column,String suche,<br />

String udk, String adresse)<br />

throws ParseException,IOException,<br />

ModuleException, SQLException {<br />

ResultSet rs = null;<br />

Object o = null;<br />

String str = null;<br />

if (udk.startsWith("vudk")) {<br />

adresse = "http://www.umweltdatenkatalog.de";<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 48


http-Abfrage<br />

URL url = new URL(adresse);<br />

HTTPConnection verbindung = new HTTPConnection(url);<br />

verbindung.setAllowUserInteraction(false);<br />

String udkverbindung = null;<br />

String antwort = null;<br />

if (udk.equals("wwwudk")) {<br />

udkverbindung = "/wwwudk/UDKServlet";<br />

antwort = "/wwwudk";<br />

}<br />

else {<br />

udkverbindung = "/V-UDKServlet";<br />

antwort = "";<br />

}<br />

HTTPResponse rsp = verbindung.Get(udkverbindung);<br />

try {<br />

rs = db.query("SELECT " + column + " FROM " + table );<br />

} catch (SQLException e) {<br />

e.printStackTrace();<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 49


http-Abfrage<br />

ResultSetMetaData meta = rs.getMetaData();<br />

int spaltmax = meta.getColumnCount();<br />

int i = 0;<br />

while (true) {<br />

if (rs.next()) {<br />

o = rs.getObject(1);<br />

str = o.toString();<br />

System.out.println("O " + str);<br />

rsp.getStatusCode();<br />

rsp = verbindung.Get(udkverbindung<br />

+ "?Type=Dispatcher&SRC=Menu&Menu." + "category="<br />

+ suche + "&Menu.searchterm=" + str<br />

+ "&Menu.quick.x=85&Menu.quick.y=11");<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 50


http-Abfrage<br />

int statuscode = rsp.getStatusCode();<br />

rsp = verbindung.Get(antwort + "/jsp/" + suche<br />

+ "ListBottom.jsp?Category=" + suche<br />

+ "&uURL=1&no-wait=true");<br />

statuscode = rsp.getStatusCode();<br />

BufferedReader br = new BufferedReader(new StringReader(rsp.getText()));<br />

while (true) {<br />

String s = br.readLine();<br />

if (s == null) {<br />

break;<br />

}<br />

StringTokenizer tokens = new StringTokenizer(s, "\b\t\n;!");<br />

if (tokens.hasMoreTokens()) {<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 51


http-Abfrage<br />

String vergleich = tokens.nextToken();<br />

if (vergleich.startsWith("Anzahl gefundener ")) {<br />

s = br.readLine();<br />

tokens = new StringTokenizer(s, "\t < >");<br />

if (tokens.hasMoreTokens()) {<br />

tokens.nextToken();<br />

tokens.nextToken();<br />

tokens.nextToken();<br />

int result = Integer.parseInt(tokens.nextToken());<br />

try {<br />

db.update("UPDATE " + table<br />

+ " SET udk_anfrage=" + result<br />

+ " WHERE " + column + "='" + str+ "'");<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 52


http-Abfrage<br />

}<br />

}<br />

} else<br />

return;<br />

}<br />

}<br />

i++;<br />

} catch (SQLException e) {<br />

e.printStackTrace();<br />

}<br />

}<br />

} else if (vergleich.startsWith("Achtung ")) {<br />

return;<br />

}<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 53


<strong>Technische</strong> echnische Präsentation<br />

Pr sentation<br />

Institut für Softwaresysteme in Wirtschaft, Umwelt und Verwaltung Folie 54

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!