Package mindnotes.client.storage

Source Code of mindnotes.client.storage.LocalMapStorage

package mindnotes.client.storage;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import mindnotes.shared.model.MindMap;
import mindnotes.shared.model.MindMapInfo;

import com.google.gwt.json.client.JSONParser;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.rpc.AsyncCallback;

/**
* Store mind maps using HTML5 LocalStorage mechanism.
*
* @author dominik
*
*/
public class LocalMapStorage implements Storage {

  private static final String MINDMAP_KEY_PREFIX = "mm_";
  private static final String MINDMAP_KEY_CONTENT_SUFFIX = "_content";
  private static final String MINDMAP_KEY_TITLE_SUFFIX = "_title";
  protected static final String SEQUENCE_KEY = "seq_key";

  private com.google.code.gwt.storage.client.Storage _storage;

  @Override
  public void getStoredMaps(final AsyncCallback<List<MindMapInfo>> callback) {

    DeferredCommand.addCommand(new Command() {

      @Override
      public void execute() {
        try {
          if (_storage == null) {
            _storage = com.google.code.gwt.storage.client.Storage
                .getLocalStorage();
          }

          Map<String, MindMapInfo> map = new HashMap<String, MindMapInfo>();

          // iterate over all existing keys; look for title keys;
          // fill out a list of available keys.
          for (int i = 0; i < _storage.getLength(); i++) {
            String key = _storage.key(i);
            if (!key.startsWith(MINDMAP_KEY_PREFIX))
              continue;
            if (key.endsWith(MINDMAP_KEY_TITLE_SUFFIX)) {
              String realkey = key.substring(
                  MINDMAP_KEY_PREFIX.length(), key.length()
                      - MINDMAP_KEY_TITLE_SUFFIX.length());

              map.put(realkey,
                  new MindMapInfo(realkey, _storage
                      .getItem(key)));
            }

          }

          callback.onSuccess(new ArrayList<MindMapInfo>(map.values()));
        } catch (Throwable t) {
          callback.onFailure(t);
        }
      }

    });
  }

  @Override
  public void loadMindMap(final MindMapInfo map,
      final AsyncCallback<MindMap> callback) {
    DeferredCommand.addCommand(new Command() {

      @Override
      public void execute() {
        try {
          String realKey = MINDMAP_KEY_PREFIX + map.getKey()
              + MINDMAP_KEY_CONTENT_SUFFIX;
          String json = _storage.getItem(realKey);
          JSONMindMapBuilder jmmb = new JSONMindMapBuilder(JSONParser
              .parse(json).isObject());
          MindMap mm = new MindMap();
          jmmb.copyTo(mm);
          callback.onSuccess(mm);
        } catch (Throwable t) {
          callback.onFailure(t);
        }

      }
    });
  }

  @Override
  public void saveMindMap(String key, final MindMap map,
      final AsyncCallback<MindMapInfo> callback) {
    DeferredCommand.addCommand(new Command() {

      @Override
      public void execute() {
        try {
          if (_storage == null) {
            _storage = com.google.code.gwt.storage.client.Storage
                .getLocalStorage();
          }
          int k = 0;

          try {
            k = Integer.parseInt(_storage.getItem(SEQUENCE_KEY));
          } catch (NumberFormatException nfe) {
          } catch (NullPointerException npe) {
          }
          k++;

          JSONMindMapBuilder jmmb = new JSONMindMapBuilder();
          map.copyTo(jmmb);

          _storage.setItem(SEQUENCE_KEY, Integer.toString(k));
          _storage.setItem(MINDMAP_KEY_PREFIX + k
              + MINDMAP_KEY_TITLE_SUFFIX,
              map.getTitle() == null ? "" : map.getTitle());
          _storage.setItem(MINDMAP_KEY_PREFIX + k
              + MINDMAP_KEY_CONTENT_SUFFIX, jmmb.getJSON());

          callback.onSuccess(new MindMapInfo("" + k, map.getTitle()));
        } catch (Throwable t) {
          callback.onFailure(t);
        }
      }
    });
  }

  @Override
  public void remove(MindMapInfo map, AsyncCallback<Void> asyncCallback) {
    _storage.removeItem(MINDMAP_KEY_PREFIX + map.getKey()
        + MINDMAP_KEY_CONTENT_SUFFIX);
    _storage.removeItem(MINDMAP_KEY_PREFIX + map.getKey()
        + MINDMAP_KEY_TITLE_SUFFIX);

  }
}
TOP

Related Classes of mindnotes.client.storage.LocalMapStorage

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.