Package org.newdawn.slick

Source Code of org.newdawn.slick.SavedState

package org.newdawn.slick;

import java.io.IOException;
import java.util.HashMap;

import javax.jnlp.ServiceManager;

import org.newdawn.slick.muffin.FileMuffin;
import org.newdawn.slick.muffin.Muffin;
import org.newdawn.slick.muffin.WebstartMuffin;
import org.newdawn.slick.util.Log;

/**
* A utility to allow game setup/state to be stored locally. This utility will adapt to the
* current enviornment (webstart or file based). Note that this will not currently
* work in an applet.
*
* @author kappaOne
*/
public class SavedState {
  /** file name of where the scores will be saved */
  private String fileName;
  /** Type of Muffin to use */
  private Muffin muffin;
  /** hash map where int data will be stored */
  private HashMap numericData = new HashMap();
  /** hash map where string data will be stored */
  private HashMap stringData = new HashMap();
 
  /**
   * Create and Test to see if the app is running
   * as webstart or local app and select the appropriate
   * muffin type
   *
   * @param fileName name of muffin where data will be saved
   * @throws SlickException Indicates a failure to load the stored state
   */
  public SavedState(String fileName) throws SlickException {
    this.fileName = fileName;
   
    if (isWebstartAvailable()) {
      muffin = new WebstartMuffin();
    }
    else {
      muffin = new FileMuffin();
    }
   
    try {
      load();
    } catch (IOException e) {
      throw new SlickException("Failed to load state on startup",e);
    }
  } 

  /**
   * Get number stored at given location
   *
   * @param nameOfField The name of the number to retrieve
   * @return The number saved at this location
   */
  public double getNumber(String nameOfField) {
    return getNumber(nameOfField, 0);
  }
 
  /**
   * Get number stored at given location
   *
   * @param nameOfField The name of the number to retrieve
   * @param defaultValue The value to return if the specified value hasn't been set
   * @return The number saved at this location
   */
  public double getNumber(String nameOfField, double defaultValue) {
    Double value = ((Double)numericData.get(nameOfField));
   
    if (value == null) {
      return defaultValue;
    }
   
    return value.doubleValue();
  }
 
  /**
   * Save the given value at the given location
   * will overwrite any previous value at this location
   *
   * @param nameOfField The name to store the value against
   * @param value The value to store
   */
  public void setNumber(String nameOfField, double value){
    numericData.put(nameOfField, new Double(value));
  }

  /**
   * Get the String at the given location
   *
   * @param nameOfField location of string
   * @return String stored at the location given
   */
  public String getString(String nameOfField) {
    return getString(nameOfField, null);
  }
 
  /**
   * Get the String at the given location
   *
   * @param nameOfField location of string
   * @param defaultValue The value to return if the specified value hasn't been set
   * @return String stored at the location given
   */
  public String getString(String nameOfField, String defaultValue) {
    String value = (String) stringData.get(nameOfField);
   
    if (value == null) {
      return defaultValue;
    }
   
    return value;
  }
 
  /**
   * Save the given value at the given location
   * will overwrite any previous value at this location
   *
   * @param nameOfField location to store int
   * @param value The value to store
   */
  public void setString(String nameOfField, String value){
    stringData.put(nameOfField, value);
  }
 
  /**
   * Save the stored data to file/muffin
   *
   * @throws IOException Indicates it wasn't possible to store the state
   */
  public void save() throws IOException {
    muffin.saveFile(numericData, fileName + "_Number");
    muffin.saveFile(stringData, fileName + "_String");
  }
 
  /**
   * Load the data from file/muffin
   *
   * @throws IOException Indicates it wasn't possible to load the state
   */
  public void load() throws IOException {
    numericData = muffin.loadFile(fileName + "_Number");
    stringData = muffin.loadFile(fileName + "_String");
  }
 
  /**
   * Will delete all current data held in Score
   */
  public void clear() {
    numericData.clear();
    stringData.clear();
  }
 
  /**
   * Quick test to see if running through Java webstart
   *
   * @return True if jws running
   */
  private boolean isWebstartAvailable() {
    try {
      Class.forName("javax.jnlp.ServiceManager");
      // this causes to go and see if the service is available
      ServiceManager.lookup("javax.jnlp.PersistenceService");
      Log.info("Webstart detected using Muffins");
    } catch (Exception e) {
      Log.info("Using Local File System");
      return false;
    }
    return true;
  }
}
TOP

Related Classes of org.newdawn.slick.SavedState

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.