BrimiSamling.java [Last ned]

/*
 *  Klasse for håndtering av objektsamlinger i Brimi-programmet,
 *  med felles håndtering av autonummerering, innlesing fra og
 *  skriving til fil, samt metoder for navigering (forrige/neste).
 *  Ekementene kan være enten varer, kunder eller bestillinger.
 *
 */
 
import java.io.*;
import java.util.*;
 
 
public class BrimiSamling {
 
  public static int VARER        = 0;
  public static int KUNDER       = 1;
  public static int BESTILLINGER = 2;
 
  private int                    objektType;
  private String[]               filnavn =
    {"vare.dat", "kunde.dat", "bestilling.dat"};
 
  private ArrayList<BrimiObjekt> liste;    // Samlingen
  private int                    pos;      // Aktivt element
  private int                    nesteNr;  // Neste løpenr
 
 
  // Oppretter en ny objektsamling.
  public BrimiSamling(int objektType) {
    this.objektType = objektType;
    liste = new ArrayList<BrimiObjekt>();
    pos = 0;
    nesteNr = 1;
  }
 
 
  // Opprett et nytt element med unikt autogenerert nr
  // og sett det inn i samlingen.
  public void ny() {
    BrimiObjekt b = lagObjekt(nesteNr);
    liste.add(b);
    pos = liste.size()-1;
    nesteNr++;
  }
 
 
  // Sletter et element med gitt nr.
  public boolean slett(int nr) {
    BrimiObjekt b = lagObjekt(nr);
    boolean slettet = liste.remove(b);
    if (pos == liste.size())
      pos--;
    return slettet;
  }
 
 
  // Returnerer aktivt element
  public BrimiObjekt denne() {
    if (pos<liste.size())
      return liste.get(pos);
    else
      return null;
  }
 
 
  // Går til forrige element i samlingen - hvis mulig.
  public void forrige() {
    if (pos>0)
      pos--;
  }
 
 
  // Går til neste element i samlingen - hvis mulig.
  public void neste() {
    if (pos<liste.size()-1)
      pos++;
  }
 
 
  // Bygger opp objektsamlingen fra fil.
  public void lesFraFil() {
    try {
      Scanner leser = new Scanner(new File(filnavn[objektType]), "UTF-8");
      String linje;
 
      while ( leser.hasNextLine() ) {
        linje = leser.nextLine();
        BrimiObjekt b = lagObjekt(linje);
        liste.add(b);
        nesteNr = Math.max(b.getNr(), nesteNr) + 1;
      }
      leser.close();
    }
    catch (IOException e) {
      Brimi.feil("Feil ved lesing av " + filnavn[objektType]);
      System.exit(-1);
    }
  }
 
 
  // Skriver objektsamlingen til fil.
  public void skrivTilFil() {
    try {
      PrintWriter skriver = new PrintWriter(filnavn[objektType], "UTF-8");
 
      for (BrimiObjekt b : liste)
        skriver.println(b.toString());
 
      skriver.close();
    }
    catch (IOException e) {
      Brimi.feil("Feil ved skriving av " + filnavn[objektType]);
      System.exit(-1);
    }
  }
 
 
  // Bygger opp et objekt fra en linje på fil.
  private BrimiObjekt lagObjekt(String linje) {
    BrimiObjekt b = null;
    if (objektType == VARER)
      b = new Vare(linje);
    else if (objektType == KUNDER)
      b = new Kunde(linje);
    else
      b = new Bestilling(linje);
    return b;
  }
 
 
  // Lager et objekt av korrekt subklasse med gitt løpenr.
  // Brukes i forbindelse med sletting.
  private BrimiObjekt lagObjekt(int nr) {
    BrimiObjekt b = null;
    if (objektType == VARER)
      b = new Vare(nr);
    else if (objektType == KUNDER)
      b = new Kunde(nr);
    else
      b = new Bestilling(nr);
    return b;
  }
 
}
Kildekode blir vist ved hjelp av GeSHi.