import java.util.*;
public abstract class Dataforbindelse
{
/**
* Sletter alle data
*/
abstract public void sletAlleData() throws Exception;
/**
* Indsætter en kunde
* @param kunden
*/
abstract public void indsæt(Kunde k) throws Exception;
/**
* Henter alle kunderne
* @return en liste af Kunde-objekter
*/
abstract public List hentAlle() throws Exception;
private static Dataforbindelse forb;
/**
* Fabrikeringsmetode til at skaffe en forbindelse
* @return forbindelsen
*/
synchronized public static Dataforbindelse hentForbindelse() throws Exception
{
// implementeret som en Singleton, så der må kun eksistere ét objekt
if (forb != null) return forb;
// ... herunder skal kode ind der skaffer en forbindelse
//forb = new DataforbindelseDummy(); // før
//forb = new DataforbindelseFil(); // senere
forb = new DataforbindelseOracle();
// endnu senere !!!
// forb = new DataforbindelseOverNetvaerketTilEnServlet(
// "http://localhost:8080/servlet/DataforbindelseServlet");
return forb;
}
/**
* Lavet sådan at man kan angive hvilken slags forbindelse man foretrækker.
* Dette er rart til afprøvning og fejlfinding.
* Skal kaldes som før første kald til hentForbindelse()
.
* Eksempler på brug:
* Dataforbindelse.sætForbindelsesvink("dummy");
* Dataforbindelse.sætForbindelsesvink("fil");
* Dataforbindelse.sætForbindelsesvink(
* "http://localhost:8080/servlet/DataforbindelseServlet");
*
* @param vink Vink til hvilken type forbindelse der foretrækkes
* @see #hentForbindelse()
*/
synchronized public static void sætForbindelsesvink(String v) throws Exception
{
if (forb != null) return; // ignorer vink når forbindelse først er oprettet.
if (v.equals("dummy")) forb = new DataforbindelseDummy();
else if (v.startsWith("fil")) forb = new DataforbindelseFil();
else if (v.startsWith("http")) forb = new DataforbindelseCache(
new DataforbindelseOverNetvaerketTilEnServlet(v)); // brug cache
else forb = new DataforbindelseOracle();
}
}