Package freenet.pluginmanager

Source Code of freenet.pluginmanager.PluginStore

/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.pluginmanager;

import java.util.HashMap;
import java.util.Map;

import freenet.node.FSParseException;
import freenet.support.Base64;
import freenet.support.IllegalBase64Exception;
import freenet.support.SimpleFieldSet;

/**
* This is a PluginStore. Plugins can use that to store all kinds of primary
* data types with as many recursion level as needed.
* @author Artefact2
*/
public class PluginStore {
  public final HashMap<String, PluginStore> subStores = new HashMap<String, PluginStore>();
  public final HashMap<String, Long> longs = new HashMap<String, Long>();
  public final HashMap<String, long[]> longsArrays = new HashMap<String, long[]>();
  public final HashMap<String, Integer> integers = new HashMap<String, Integer>();
  public final HashMap<String, int[]> integersArrays = new HashMap<String, int[]>();
  public final HashMap<String, Short> shorts = new HashMap<String, Short>();
  public final HashMap<String, short[]> shortsArrays = new HashMap<String, short[]>();
  public final HashMap<String, Boolean> booleans = new HashMap<String, Boolean>();
  public final HashMap<String, boolean[]> booleansArrays = new HashMap<String, boolean[]>();
  public final HashMap<String, Byte> bytes = new HashMap<String, Byte>();
  public final HashMap<String, byte[]> bytesArrays = new HashMap<String, byte[]>();
  public final HashMap<String, String> strings = new HashMap<String, String>();
  public final HashMap<String, String[]> stringsArrays = new HashMap<String, String[]>();
 
  public PluginStore() {
      // Default constructor. See below for constructor from SFS.
  }
 
  public SimpleFieldSet exportStoreAsSFS() {
      SimpleFieldSet fs = new SimpleFieldSet(true, true);
      for(Map.Entry<String, PluginStore> entry : subStores.entrySet()) {
          fs.put("substore."+encode(entry.getKey()), entry.getValue().exportStoreAsSFS());
      }
      for(Map.Entry<String, Long> entry : longs.entrySet()) {
          fs.put("long."+encode(entry.getKey()), entry.getValue());
      }
      for(Map.Entry<String, long[]> entry : longsArrays.entrySet()) {
          fs.put("longs."+encode(entry.getKey()), entry.getValue());
      }
      for(Map.Entry<String, Integer> entry : integers.entrySet()) {
          fs.put("integer."+encode(entry.getKey()), entry.getValue());
      }
      for(Map.Entry<String, int[]> entry : integersArrays.entrySet()) {
          fs.put("integers."+encode(entry.getKey()), entry.getValue());
      }
      for(Map.Entry<String, Short> entry : shorts.entrySet()) {
          fs.put("short."+encode(entry.getKey()), entry.getValue());
      }
      for(Map.Entry<String, short[]> entry : shortsArrays.entrySet()) {
          fs.put("shorts."+encode(entry.getKey()), entry.getValue());
      }
      for(Map.Entry<String, Byte> entry : bytes.entrySet()) {
          fs.put("byte."+encode(entry.getKey()), entry.getValue());
      }
      for(Map.Entry<String, byte[]> entry : bytesArrays.entrySet()) {
          fs.put("bytes."+encode(entry.getKey()), entry.getValue());
      }
        for(Map.Entry<String, Boolean> entry : booleans.entrySet()) {
            fs.put("boolean."+encode(entry.getKey()), entry.getValue());
        }
        for(Map.Entry<String, boolean[]> entry : booleansArrays.entrySet()) {
            fs.put("booleans."+encode(entry.getKey()), entry.getValue());
        }
      for(Map.Entry<String, String> entry : strings.entrySet()) {
          fs.putSingle("string."+encode(entry.getKey()), entry.getValue());
      }
      for(Map.Entry<String, String[]> entry : stringsArrays.entrySet()) {
          fs.putEncoded("strings."+encode(entry.getKey()), entry.getValue());
      }
      return fs;
  }
 
    public PluginStore(SimpleFieldSet sfs) throws IllegalBase64Exception, FSParseException {
        SimpleFieldSet group = sfs.subset("substore");
        if(group != null) {
            for(Map.Entry<String, SimpleFieldSet> entry : group.directSubsets().entrySet()) {
                subStores.put(decode(entry.getKey()), new PluginStore(entry.getValue()));
            }
        }
        group = sfs.subset("long");
        if(group != null) {
            for(String s : group.directKeys()) {
                longs.put(decode(s), group.getLong(s));
            }
        }
        group = sfs.subset("longs");
        if(group != null) {
            for(String s : group.directKeys()) {
                longsArrays.put(decode(s), group.getLongArray(s));
            }
        }
        group = sfs.subset("integer");
        if(group != null) {
            for(String s : group.directKeys()) {
                integers.put(decode(s), group.getInt(s));
            }
        }
        group = sfs.subset("integers");
        if(group != null) {
            for(String s : group.directKeys()) {
                integersArrays.put(decode(s), group.getIntArray(s));
            }
        }
        group = sfs.subset("short");
        if(group != null) {
            for(String s : group.directKeys()) {
                shorts.put(decode(s), group.getShort(s));
            }
        }
        group = sfs.subset("shorts");
        if(group != null) {
            for(String s : group.directKeys()) {
                shortsArrays.put(decode(s), group.getShortArray(s));
            }
        }
        group = sfs.subset("boolean");
        if(group != null) {
            for(String s : group.directKeys()) {
                booleans.put(decode(s), group.getBoolean(s));
            }
        }
        group = sfs.subset("booleans");
        if(group != null) {
            for(String s : group.directKeys()) {
                booleansArrays.put(decode(s), group.getBooleanArray(s));
            }
        }
        group = sfs.subset("byte");
        if(group != null) {
            for(String s : group.directKeys()) {
                bytes.put(decode(s), group.getByte(s));
            }
        }
        group = sfs.subset("bytes");
        if(group != null) {
            for(String s : group.directKeys()) {
                bytesArrays.put(decode(s), group.getByteArray(s));
            }
        }
        group = sfs.subset("string");
        if(group != null) {
            for(String s : group.directKeys()) {
                strings.put(decode(s), group.get(s));
            }
        }
        group = sfs.subset("strings");
        if(group != null) {
            for(String s : group.directKeys()) {
                stringsArrays.put(decode(s), group.getAllEncoded(s));
            }
        }
    }

  private static final String encode(String s) {
      return Base64.encodeUTF8(s);
  }
 
  private static final String decode(String s) throws IllegalBase64Exception {
      return Base64.decodeUTF8(s);
  }

}
TOP

Related Classes of freenet.pluginmanager.PluginStore

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.