// Datei: Telefonbuch.java
// Autor: Brecht
// Datum: 23.07.2018
// Thema: Dieses Telefonbuch ist strukturell identisch mit dem
// der beiden ersten Aufgaben. Die Liste tBuch wurde so
// gestaltet, dass sie wahlweise (je nach Parameter)
// für die Abteilung Einkauf oder die Abteilung Vertrieb
// verwendet werden kann.
// =============================================================
import java.util.*;
class Telefonbuch {
ArrayList<String> tBuch = new ArrayList<String>();
ArrayList<String> suErgNa = new ArrayList<String>();
ArrayList<String> suErgNu = new ArrayList<String>();
// Telefonbuch wählen
// -----------------------------------------------------------
Telefonbuch(String abteilung) {
// tBuch abteilungsbezogen belegen
// ---------------------------------------------------------
if(abteilung.equals("Einkauf")) {
tBuch.add( "Meier&4711" );
tBuch.add( "von Ulm&4815" );
tBuch.add( "Müller&4711" );
tBuch.add( "Meier&4816" );
tBuch.add( "Schmitt&4712" );
tBuch.add( "Meier&4713" );
tBuch.add( "Huber&4711" );
}
else {
tBuch.add( "Schulze&2813" );
tBuch.add( "Huber&2742" );
tBuch.add( "Müller&2743" );
tBuch.add( "Schulze&2394" );
tBuch.add( "Schmitt&2813" );
tBuch.add( "Meier&2441" );
tBuch.add( "Schmitt&2813" );
}
}
// Suche im Telefonbuch
// -----------------------------------------------------------
ArrayList<String> tBuchSuche(String pkqs) {
ArrayList<String> treffer = new ArrayList<String>();
int len = tBuch.size();
String zeile = null;
for(int i=0; i<len; i++) {
zeile = tBuch.get(i);
if(pkqs.endsWith("&")) {
if(zeile.startsWith(pkqs)) treffer.add(zeile);
}
else {
if(zeile.endsWith(pkqs)) treffer.add(zeile);
}
}
return treffer;
} // basisSuche()
// Nebenläufige Suche mit Threads, die tBuchSuche()
// ausführen
// Parameter ist ein korrekt aufgebauter Query String
// -----------------------------------------------------------
ArrayList<String> tBuchAbfrage(String kqs)
throws Exception {
// SuchThreads als lokale Klasse
// ---------------------------------------------------------
class SuchThread extends Thread {
String pkqs = null;
SuchThread(String pkqs) { this.pkqs = pkqs; }
public void run() {
if(pkqs.endsWith("&")) {
Telefonbuch.this.suErgNa =
Telefonbuch.this.tBuchSuche(pkqs);
}
else {
Telefonbuch.this.suErgNu =
Telefonbuch.this.tBuchSuche(pkqs);
}
}
} // local class
// Query String hat die Form: *& oder &* oder *&*
// ---------------------------------------------------------
String name = null;
String nummer = null;
if(kqs.endsWith("&")) {
SuchThread st = new SuchThread(kqs);
st.start();
st.join();
return suErgNa;
}
if(kqs.startsWith("&")) {
SuchThread st = new SuchThread(kqs);
st.start();
st.join();
return suErgNu;
}
String[] token = kqs.split("&");
name = token[0]+"&";
nummer = "&" + token[1];
SuchThread st1 = new SuchThread(name);
SuchThread st2 = new SuchThread(nummer);
st1.start();
st2.start();
st1.join();
st2.join();
int len = suErgNu.size();
for(int i=0; i<len; i++) suErgNa.add(suErgNu.get(i));
return suErgNa;
} // nebenSuche()
} // class