Package org.newdawn.slick.muffin

Source Code of org.newdawn.slick.muffin.WebstartMuffin

package org.newdawn.slick.muffin;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import javax.jnlp.BasicService;
import javax.jnlp.FileContents;
import javax.jnlp.PersistenceService;
import javax.jnlp.ServiceManager;

import org.newdawn.slick.util.Log;

/**
* A muffin load/save implementation based on using Webstart Muffins (a bit like cookies only
* for webstart)
*
* @author kappaOne
*/
public class WebstartMuffin implements Muffin {

  /**
   * @see org.newdawn.slick.muffin.Muffin#saveFile(java.util.HashMap, java.lang.String)
   */
  public void saveFile(HashMap scoreMap, String fileName) throws IOException {

    PersistenceService ps;
    BasicService bs;
    URL configURL;

    try {
      ps = (PersistenceService) ServiceManager
          .lookup("javax.jnlp.PersistenceService");
      bs = (BasicService) ServiceManager
          .lookup("javax.jnlp.BasicService");
      URL baseURL = bs.getCodeBase();
      // System.out.println("CodeBase was " + baseURL);
      configURL = new URL(baseURL, fileName);
    } catch (Exception e) {
      Log.error(e);
      throw new IOException("Failed to save state: ");
    }

    try {
      ps.delete(configURL);
    } catch (Exception e) {
      Log.info("No exisiting Muffin Found - First Save");
    }
   
    try {
      ps.create(configURL, 1024); // 1024 bytes for our data

      FileContents fc = ps.get(configURL);
      DataOutputStream oos = new DataOutputStream(fc
          .getOutputStream(false));

      // scroll through hashMap and write key and value to file
      Set keys = scoreMap.keySet(); // get the keys

      // get values using keys
      for (Iterator i = keys.iterator(); i.hasNext();) {
        String key = (String) i.next();

        oos.writeUTF(key);

        if (fileName.endsWith("Number")) {
          double value = ((Double) scoreMap.get(key)).doubleValue();
          oos.writeDouble(value);
        } else {
          String value = (String) scoreMap.get(key);
          oos.writeUTF(value);
        }
      }

      oos.flush();
      oos.close();
    } catch (Exception e) {
      Log.error(e);
      throw new IOException("Failed to store map of state data");
    }
  }

  /**
   * @see org.newdawn.slick.muffin.Muffin#loadFile(java.lang.String)
   */
  public HashMap loadFile(String fileName) throws IOException {
    HashMap hashMap = new HashMap();

    try {
      PersistenceService ps = (PersistenceService) ServiceManager
          .lookup("javax.jnlp.PersistenceService");
      BasicService bs = (BasicService) ServiceManager
          .lookup("javax.jnlp.BasicService");
      URL baseURL = bs.getCodeBase();
      URL configURL = new URL(baseURL, fileName);
      FileContents fc = ps.get(configURL);
      DataInputStream ois = new DataInputStream(fc.getInputStream());

      // read in data from muffin
      String key;

      // load hashMap as <String, Int> or <String, String>
      if (fileName.endsWith("Number")) {
        double value;
        // while not end of file
        while ((key = ois.readUTF()) != null) {
          value = ois.readDouble();
          // load value into hashMap
          hashMap.put(key, new Double(value));
        }
      } else {
        String value;
        // while not end of file
        while ((key = ois.readUTF()) != null) {
          value = ois.readUTF();
          // load value into hashMap
          hashMap.put(key, value);
        }
      }

      ois.close();
    } catch (EOFException e) {
      // End of the file reached, do nothing
    } catch (IOException e) {
      // No data there - thats ok, just not saved before
    } catch (Exception e) {
      Log.error(e);
      throw new IOException("Failed to load state from webstart muffin");
    }

    return hashMap;
  }
}
TOP

Related Classes of org.newdawn.slick.muffin.WebstartMuffin

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.