Loader.java :  » Game » stackiter » stackiter » learn » Java Open Source

Java Open Source » Game » stackiter 
stackiter » stackiter » learn » Loader.java
package stackiter.learn;

import java.io.*;
import java.util.*;
import java.util.zip.*;

public class Loader {

  /**
   * Instance level so we don't need to pass in args.
   */
  private Map<String, Runnable> handlers;

  /**
   * The sequence of loaded states.
   */
  private Sequence sequence;

  /**
   * The current state of the world, needing cloned and frequently modified
   * for each new time step.
   */
  private State state;

  public Loader() {
    clear();
    handlers = new HashMap<String, Runnable>();
    handlers.put("color", new Runnable() { @Override public void run() {
      // TODO Auto-generated method stub
    }});
    handlers.put("destroy", new Runnable() { @Override public void run() {
      // TODO Auto-generated method stub
    }});
    handlers.put("extent", new Runnable() { @Override public void run() {
      // TODO Auto-generated method stub
    }});
    handlers.put("item", new Runnable() { @Override public void run() {
      // TODO Auto-generated method stub
    }});
    handlers.put("pos", new Runnable() { @Override public void run() {
      // TODO Auto-generated method stub
    }});
    handlers.put("rot", new Runnable() { @Override public void run() {
      // TODO Auto-generated method stub
    }});
  }

  private void clear() {
    sequence = new Sequence();
    state = new State();
  }

  public Sequence load(String name, InputStream stream) {
    try {
      try {
        if (name.endsWith(".gz")) {
          stream = new GZIPInputStream(stream);
        }
        BufferedReader in = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
        String line;
        while ((line = in.readLine()) != null) {
          parseLine(line);
        }
        return sequence;
      } finally {
        stream.close();
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  public Sequence loadFile(String name) {
    try {
      InputStream stream = new FileInputStream(name);
      return load(name, stream);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  public Sequence loadResource(String name) {
    try {
      InputStream stream = Loader.class.getResourceAsStream(name);
      return load(name, stream);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  private void parseLine(String line) {
    // TODO Look into faster splitting than regex?
    String[] words = line.split("\\s+");
    String command = words[0];
    Runnable handler = handlers.get(command);
    if (handler != null) {
      handler.run();
    }
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.