package model.data; import java.io.IOException; import java.util.Map; import javax.swing.JOptionPane; import main.error.VideothekException; import model.Customer; import model.InRent; import model.PriceCategory; import model.Video; import model.VideoUnit; import model.Warning; import model.data.exceptions.DataException; import model.data.exceptions.DataLoadException; import model.data.exceptions.DataSaveException; import model.data.exceptions.RecordNotFoundException; import model.data.xml.parsers.CustomerParser; import model.data.xml.parsers.InRentParser; import model.data.xml.parsers.PriceCategoryParser; import model.data.xml.parsers.VideoParser; import model.data.xml.parsers.WarningParser; import model.data.xml.writers.CustomerWriter; import model.data.xml.writers.InRentWriter; import model.data.xml.writers.PriceCategoryWriter; import model.data.xml.writers.VideoWriter; import model.exceptions.FalseFieldException; /** * DataBase.java * * @author Christopher Bertels (chbertel@uos.de) * @date 09.09.2008 * * Zentrale Datenzugriffsklasse. Verwaltet das Laden und Speichern von Daten. * (Momentan aus XML-Datein im bin/xml/ Unterordner. */ public class DataBase { private static PriceCategoryParser pcParser = new PriceCategoryParser(); private static CustomerParser costParser = new CustomerParser(); private static VideoParser vidParser = new VideoParser(); private static InRentParser irParser = new InRentParser(); private static WarningParser wParser = new WarningParser(); private static PriceCategoryWriter pcWriter; private static CustomerWriter costWriter; private static VideoWriter vidWriter; private static InRentWriter irWriter; // private static WarningWriter wWriter; private static Map<Integer, PriceCategory> priceCategories; private static Map<Integer, Customer> customers; private static Map<Integer, Video> videos; private static Map<Integer, VideoUnit> videoUnits; private static Map<Integer, InRent> inRents; private static Map<Integer, Warning> warnings; private static boolean dataLoaded = false; public static void loadTestData() throws DataException { if (!dataLoaded) { priceCategories = pcParser .parsePriceCategories("xml-spec/priceCategories.xml"); customers = costParser.parseCustomers("xml-spec/customers.xml"); videos = vidParser.parseVideos("xml-spec/videos.xml"); videoUnits = vidParser.getVideoUnitList(); inRents = irParser.parseInRents("xml-spec/inRents.xml"); warnings = wParser.parseWarnings("xml-spec/warnings.xml"); try { Warning.setWarningList(warnings); } catch (FalseFieldException e) { e.printStackTrace(); } setGlobalLists(); } } private static void setGlobalLists() throws DataException { try { PriceCategory.setPriceCategoryList(priceCategories); Customer.setCustomerList(customers); Video.setVideoList(videos); VideoUnit.setVideoUnitList(videoUnits); InRent.setInRentList(inRents); dataLoaded = true; } catch (VideothekException ex) { throw new DataException(ex.getMessage()); } } /** * Lädt Daten aus der Datenquelle und erstellt die entsprechenden * Business-Logik Objekte (im package 'main'). * * @throws DataLoadException Wird geworfen, falls ein Fehler beim Laden * auftrat. */ public static void loadData() throws DataException { priceCategories = pcParser .parsePriceCategories("data/priceCategories.xml"); customers = costParser.parseCustomers("data/customers.xml"); videos = vidParser.parseVideos("data/videos.xml"); videoUnits = vidParser.getVideoUnitList(); inRents = irParser.parseInRents("data/inRents.xml"); // warnings = wParser.parseWarnings("data/warnings.xml"); try { Warning.setMinID(1); Warning.setWarningList(new java.util.HashMap<Integer,Warning>()); } catch (VideothekException e) { JOptionPane.showMessageDialog(null, "Fehler beim Laden der Daten: " + e.getMessage(), "Lade-Fehler", JOptionPane.ERROR_MESSAGE); } setGlobalLists(); } /** * Speichert alle Business-Logik Objekte ab in Datenquelle. * * @throws DataSaveException Wird geworfen, falls ein Fehler beim Speichern * auftrat. * @throws IOException * @throws RecordNotFoundException */ public static void saveData() throws DataSaveException { try { pcWriter = new PriceCategoryWriter("data/priceCategories.xml"); pcWriter.savePriceCategories(PriceCategory.findAll()); } catch (Exception ex) { throw new DataSaveException(ex.getMessage(), "data/priceCategories.xml"); } try { costWriter = new CustomerWriter("data/customers.xml"); costWriter.saveCustomers(Customer.findAll()); } catch (Exception ex) { throw new DataSaveException(ex.getMessage(), "data/customers.xml"); } try { vidWriter = new VideoWriter("data/videos.xml"); vidWriter.saveVideos(Video.findAll()); } catch (Exception ex) { throw new DataSaveException(ex.getMessage(), "data/videos.xml"); } try { irWriter = new InRentWriter("data/inRents.xml"); irWriter.saveInRents(InRent.findAll()); } catch (Exception ex) { throw new DataSaveException(ex.getMessage(), "data/inRents.xml"); } // try // { // wWriter = new WarningWriter("data/warnings.xml"); // wWriter.saveWarnings(Warning.findAll()); // } // catch (Exception ex) // { // throw new DataSaveException(ex.getMessage(), "data/warnings.xml"); // } } }