You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

326 lines
11 KiB
Java

package com.company.lösungen;
public class websiteGen {
// Konstanten, mit denen wir die Wetterlage beschreiben
static final int SONNE = 0,
BEWOELKT = 1,
REGEN = 2;
// Abstrakte Klasse zur Repräsentation einer Stadt.
// Von dieser Klasse kann keine Instanz (= Objekt) erzeugt werden.
public abstract class Stadt {
// Deklaration privater Variablen
private String name;
private int wetter;
// Konstruktor, der zur Angabe eines Städtenamens und des
// Wetters auffordert
public Stadt(String name, int wetter) {
this.name = name;
this.wetter = wetter;
}
// Getter-Methode zur Rückgabe des Städtenamens
public String getName() {
return this.name;
}
// Getter-Methode zur Rückgabe des Wetters als String
public String getWetter() {
if (this.wetter == REGEN) {
return "regnerisch";
}
else if (this.wetter == BEWOELKT) {
return "bewölkt";
}
else if (this.wetter == SONNE) {
return "sonnig";
}
// Unbekannter Wert
return "Unbekannt";
}
// Getter-Methode zur Rückgabe des Webseiten-Inhalts
// für den Webseiten-Generator.
public String getContent() {
return "<p>In " + this.getName() + " ist es " + this.getWetter() +
".</p>";
}
// Getter-Methode zur Rückgabe der URL zur Wetterseite
public String getURL() {
// Wandle Namen in Kleinbuchstaben um
String name = this
.getName()
.toLowerCase();
// Wandle Leerzeichen im Namen in Bindestriche um
name = name.replace(" ", "-");
// Wandle Umlaute um
name = name.replace("ä", "ae");
name = name.replace("ü", "ue");
name = name.replace("ö", "oe");
// Gebe umgewandelte URL zurück
return name + ".html";
}
}
// Öffentliche Klasse für die Großstadt leitet
// von der Klasse Stadt ab.
public class Grossstadt extends Stadt {
private String[] stadtteile;
// Konstruktor erwartet ebenfalls einen Städtenamen und das
// Wetter, aber zusätzlich noch Stadtteile
public Grossstadt(String name, int wetter, String[] stadtteile) {
// Städtename und Wetter werden an die Basisklasse
// übergeben
super(name, wetter);
// Stadtteile werden noch gesetzt
this.stadtteile = stadtteile;
}
// Getter-Methode zur Rückgabe des Webseiten-Inhalts
// für den Webseiten-Generator
public String getContent() {
// Hier speichern wir unsere Webseite als HTML-Code.
// Wir übernehmen zunächst den Code von der Überklasse.
String output = super.getContent();
String stadtteile = "";
// Gehe die Stadtteile durch
for (int i = 0; i < this.stadtteile.length; i = i + 1) {
if (i == (this.stadtteile.length - 1)) {
// Wir sind beim letzten Eintrag:
// Füge "und" vor dem Stadtteilnamen hinzu
stadtteile = stadtteile + " und ";
}
// Füge Namen des Stadtteils hinzu
stadtteile = stadtteile + this.stadtteile[i];
// Wenn wir noch nicht am Ende sind
if (i < (this.stadtteile.length - 2)) {
// Füge Komma und Leerzeichen hinzu
stadtteile = stadtteile + ", ";
}
}
// Füge den Hinweis zu den Stadtteilen hinzu
output = output + "<p>Dies trifft auch für die Stadtteile " +
stadtteile + " zu.</p>";
// Gebe generierten HTML-Code zurück
return output;
}
// Getter-Methode zur Rückgabe der URL zur Wetterseite
public String getURL() {
// Generiere URL und gebe sie zurück.
// Rufe dabei die URL-Generierungsmethode aus der
// Oberklasse auf.
return "wetter_grossstadt_" + super.getURL();
}
}
// Öffentliche Klasse für die Großstadt leitet
// von der Klasse Stadt ab.
public class Kleinstadt extends Stadt {
// Konstruktor erwartet ebenfalls einen Städtenamen und das
// Wetter
public Kleinstadt(String name, int wetter) {
// Städtename und Wetter werden an die Basisklasse
// übergeben
super(name, wetter);
}
// Getter-Methode zur Rückgabe des Webseiten-Inhalts
// für den Webseiten-Generator
public String getContent() {
return super.getContent();
}
// Getter-Methode zur Rückgabe der URL zur Wetterseite
public String getURL() {
// Generiere URL und gebe sie zurück.
// Rufe dabei die URL-Generierungsmethode aus der
// Oberklasse auf.
return "wetter_kleinstadt_" + super.getURL();
}
}
// Öffentliche Klasse für den Webseitengenerator
public class WebseitenGenerator {
// Deklaration privater Variablen
private Stadt[] staedte;
// Anzahl der Einträge im Array
private int numEntries = 0;
public WebseitenGenerator() {
this.staedte = new Stadt[0];
}
// Methode zum Hinzufügen einer Stadt
public void addStadt(Stadt stadt) {
// Erzeuge temporären Array mit einem Eintrag mehr
Stadt[] staedteTemp = new Stadt[numEntries + 1];
// Kopiere die alten Werte in den neuen Array
for (int i = 0; i < numEntries; i = i + 1) {
staedteTemp[i] = this.staedte[i];
}
// Füge den neuen Eintrag an der letzten Position hinzu
staedteTemp[numEntries] = stadt;
// Setze die neue Liste
staedte = staedteTemp;
// Erhöhe die Anzahl der Einträge um eins
numEntries = numEntries + 1;
}
// Methode zum Erstellen und Ausgeben der Navigationsleiste
// unserer Wetterwebseite
public String getNavigation() {
// Hier speichern wir unsere Navigationsleiste als HTML-Code.
// Wir beginnen mit dem Paragrafen-HTML-Tag
String output = "<h1>Die Wetter-Webseite</h1><p>";
// Gehe alle Städte durch
for (int i = 0; i < this.staedte.length; i = i + 1) {
// Hole die URL zur Datei
String url = this
.staedte[i]
.getURL();
// Hole den Städtenamen
String name = this
.staedte[i]
.getName();
// Füge HTML-Link zur Ausgabe hinzu
output = output + "<a href='" + url + "'>" + name + "</a>";
// Füge Trenner hinzu, wenn wir noch nicht am Ende der
// Liste sind
if (i < this.staedte.length - 1) {
output = output + " | ";
}
}
// Schließe den Paragrafen-Tag
output = output + "</p>";
// Gebe generierte Navigationsleiste zurück
return output;
}
// Methode zum Erstellen und Ausgeben der HTML-Seite
// für eine bestimmte Stadt
public String generatePage(int index) {
// Hole die Stadt aus dem Array
Stadt stadt = this.staedte[index];
// Hier speichern wir unsere Webseite als HTML-Code
// Setze HTML-Kopf
String output = "<html><body>";
// Füge Navigationsleiste hinzu
output = output + this.getNavigation();
// Füge Überschrift hinzu
output = output + "<h2>Das Wetter für " + stadt.getName() + "</h2>";
output = output + stadt.getContent();
// Füge HTML-Fußzeile hinzu
output = output + "</body></html>";
// Gebe HTML-Code zurück
return output;
}
// Methode zum Erstellen und Ausgeben der Wetterwebseite
// mit allen Webseiten
public void generateWebsites() {
// Generiere Index-Dokument
// Öffne Datei für die Hauptseite
PrintWriter output = createWriter("index.html");
// Generiere HTML-Code für Datei, in der Hauptseite nehmen
// wir nur die Navigationsleiste
String htmlCode = this.getNavigation();
// Speichere HTML-Code in Datei
output.print(htmlCode);
// Schließe Datei
output.close();
// Gehe alle Städte durch
for (int i = 0; i < this.staedte.length; i = i + 1) {
// Öffne Datei mit URL-Dateinamen
output = createWriter(this.staedte[i].getURL());
// Generiere HTML-Code für Datei
htmlCode = this.generatePage(i);
// Speichere HTML-Code in Datei
output.print(htmlCode);
// Schließe Datei
output.close();
}
System.out.println("Webseiten generiert");
}
}
// Startpunkt des Hauptprogramms
// Hier werden die implementierten Klassen zu Demonstrations- und
// Testzwecken instanziiert und verwendet.
public void setup() {
// Definiere Köln
String[] stadtteileKoeln = {
"Ehrenfeld",
"Raderthal",
"Nippes",
"Poll",
"Esch",
"Pesch",
"Kalk"
};
Grossstadt koeln = new Grossstadt("Köln", SONNE, stadtteileKoeln);
// Definiere Daaden
Kleinstadt daaden = new Kleinstadt("Daaden", BEWOELKT);
// Definiere Bonn
String[] stadtteileBonn = {
"Poppelsdorf",
"Südstadt",
"Beuel",
"Duisdorf",
"Graurheindorf"
};
Grossstadt bonn = new Grossstadt("Bonn", REGEN, stadtteileBonn);
// Initialisiere den Webseitengenerator
WebseitenGenerator generator = new WebseitenGenerator();
// Füge die Städte hinzu
generator.addStadt(koeln);
generator.addStadt(daaden);
generator.addStadt(bonn);
// Generiere die Webseiten
generator.generateWebsites();
}
}