[Sagaj-commits] java/saga/inout/generic Persistence.java,NONE,1.1
Status: Abandoned
Brought to you by:
srennecke
From: Sandra R. <sre...@us...> - 2004-07-03 18:03:43
|
Update of /cvsroot/sagaj/java/saga/inout/generic In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20427/java/saga/inout/generic Added Files: Persistence.java Log Message: Object Stream access moved from Control to Persistence, some comments added --- NEW FILE: Persistence.java --- /* * Created on 03.07.2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package saga.inout.generic; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import saga.control.Control; import saga.control.HeroLocation; import saga.model.Hero; import saga.model.Loc; import saga.model.Time; import saga.model.map.IslandMap; /** * Load and Saving for Objects * as XML Streams or serialized objects * @author sas * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class Persistence { public static final String SAVE_FILE = "saga.sav"; public static final String MAP_DIR = "islands"; public static final String MAP_PREFIX = "island"; /** Load a serialized object from the current directory (assuming * that the given <var>file</var> is relative), falling back to * loading from the class path if the file is not found. * @param file the file to load * @throws IOException propagated from I/O methods * @return the loaded object */ public static Object loadObject(File file) throws IOException, ClassNotFoundException { ObjectInputStream in = openObjectStream(file); try { return in.readObject(); } finally { in.close(); } } /** * * @param file * @return * @throws IOException */ public static ObjectInputStream openObjectStream(File file) throws IOException { InputStream in = openObjectInput(file); IOException failure; try { return new XMLObjectInputStream(in); } catch (IOException e) { failure = e; in.close(); } in = openObjectInput(file); try { return new ObjectInputStream(in); } catch (Exception e) { throw failure; } } private static InputStream openObjectInput(File file) throws FileNotFoundException { InputStream in; try { in = new FileInputStream(file); } catch (FileNotFoundException ex) { in = Control.class.getResourceAsStream(Control.getResourceName(file)); if (in == null) { throw ex; } } return in; } /** * tries to load islandmap from MAP_DIR/fileName * using {@link #loadObject(File) loadObject} method(ie fallback to classpath) * @param fileName name of the file the map is saved in * @return the loaded map, null if there was none **/ public static IslandMap loadMap(String fileName){ try { return (IslandMap)loadObject(new File(Persistence.MAP_DIR, fileName)); } catch (Exception ex) { ex.printStackTrace(); Control.info("Load map '"+fileName+"' failed", "Loading Map"); return null; } } /** * saves hero and time to file "saga.sav" * saves IslandMap to "islands/<name>.map" * both relative to the directory you started the game in **/ public static void save() { Hero hero = HeroLocation.getHeroLocation().getHero(); File f; try{ IslandMap map = HeroLocation.getHeroLocation().getIslandMap(); Control.saveMap(map); // ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(f)); // oout.writeObject(hero); // oout.writeObject(Time.getTime()); // oout.writeObject(map.getSaveFileName()); // oout.writeObject(HeroLocation.getHeroLocation().getTopLoc()); // oout.flush(); // oout.close(); f = new File(Persistence.SAVE_FILE); XMLObjectOutputStream xout = new XMLObjectOutputStream(new FileOutputStream(f)); xout.writeObject(hero); xout.writeObject(Time.getTime()); xout.writeObject(map.getSaveFileName()); xout.writeObject(HeroLocation.getHeroLocation().getTopLoc()); xout.close(); } catch(Exception ex){ ex.printStackTrace(); Control.info("Save '"+Persistence.SAVE_FILE+"' failed", "Saving Map"); } } /** * loads hero and time from file "saga.sav" * loads IslandMap via {@link loadMap loadMap} method * sets current hero, time and map to loaded hero, time * and map **/ public static void load() { HeroLocation hl = HeroLocation.getHeroLocation(); Hero h = null; File f = new File(Persistence.SAVE_FILE); try{ ObjectInputStream oin = openObjectStream(f); try { h = (Hero) oin.readObject(); Time t = (Time)oin.readObject(); Time.setTime(t); Loc startLoc = null; IslandMap mainMap = null; try { // this is new save file format, so guard against missing // fields here and ensure hero is set in finally. We have // to set the hero after the main map so that no default // map will be created. String mapFileName = (String)oin.readObject(); startLoc = (Loc)oin.readObject(); mainMap = loadMap(mapFileName); } finally { if (mainMap != null) { hl.setIslandMap(mainMap); } hl.setHero(h); if (mainMap != null) { hl.move(startLoc.x, startLoc.y); } } } finally { oin.close(); } } catch(Exception ex){ ex.printStackTrace(); Control.info("Load '"+Persistence.SAVE_FILE+"' failed", "Failure"); return; } } public static boolean canLoad() { return new File(SAVE_FILE).exists(); } } |