Package com.massivecraft.mcore.store

Source Code of com.massivecraft.mcore.store.DriverFlatfile

package com.massivecraft.mcore.store;

import java.io.File;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import com.massivecraft.mcore.util.DiscUtil;
import com.massivecraft.mcore.xlib.gson.JsonElement;
import com.massivecraft.mcore.xlib.gson.JsonParser;

public class DriverFlatfile extends DriverAbstract
{
  // -------------------------------------------- //
  // CONSTANTS
  // -------------------------------------------- //
 
  private static final String DOTJSON = ".json";
  public static final String NAME = "flatfile";
 
  // -------------------------------------------- //
  // INSTANCE & CONSTRUCT
  // -------------------------------------------- //
 
  private static DriverFlatfile i = new DriverFlatfile();
  public static DriverFlatfile get() { return i; }
  private DriverFlatfile() { super(NAME); }
 
  // -------------------------------------------- //
  // OVERRIDE
  // -------------------------------------------- //
   
  @Override
  public Db getDb(String uri)
  {
    // "flatfile://" is 8+3=11 chars
    File folder = new File(uri.substring(NAME.length() + 3));
    folder.mkdirs();
    return new DbFlatfile(this, folder);
  }

  @Override
  public Set<String> getCollnames(Db db)
  {
    Set<String> ret = new LinkedHashSet<String>();
   
    for (File f : ((DbFlatfile)db).dir.listFiles())
    {
      if ( ! f.isDirectory()) continue;
      ret.add(f.getName());
    }
 
    return ret;
  }

  @Override
  public boolean containsId(Coll<?> coll, String id)
  {
    return fileFromId(coll, id).isFile();
  }
 
  @Override
  public Long getMtime(Coll<?> coll, String id)
  {
    File file = fileFromId(coll, id);
    if ( ! file.isFile()) return null;
    return file.lastModified();
  }
 
  @Override
  public Collection<String> getIds(Coll<?> coll)
  {
    List<String> ret = new ArrayList<String>();
   
    // Scan the collection folder for .json files
    File collDir = getCollDir(coll);
    if ( ! collDir.isDirectory()) return ret;
    for (File file : collDir.listFiles(JsonFileFilter.get()))
    {
      ret.add(idFromFile(file));
    }
   
    return ret;
  }
 
  @Override
  public Map<String, Long> getId2mtime(Coll<?> coll)
  {
    Map<String, Long> ret = new HashMap<String, Long>();
   
    // Scan the collection folder for .json files
    File collDir = getCollDir(coll);
    if (!collDir.isDirectory()) return ret;
    for (File file : collDir.listFiles(JsonFileFilter.get()))
    {
      ret.put(idFromFile(file), file.lastModified());
    }
   
    return ret;
  }
 
  @Override
  public Entry<JsonElement, Long> load(Coll<?> coll, String id)
  {
    File file = fileFromId(coll, id);
    Long mtime = file.lastModified();
    if (mtime == 0) return null;
    String content = DiscUtil.readCatch(file);
    if (content == null) return null;
    if (content.length() == 0) return null;
    JsonElement raw = new JsonParser().parse(content);
    return new SimpleEntry<JsonElement, Long>(raw, mtime);
  }

  @Override
  public Long save(Coll<?> coll, String id, JsonElement data)
  {
    File file = fileFromId(coll, id);
    String content = coll.getGson().toJson(data);
    if (DiscUtil.writeCatch(file, content) == false) return null;
    return file.lastModified();
  }

  @Override
  public void delete(Coll<?> coll, String id)
  {
    File file = fileFromId(coll, id);
    file.delete();
  }
 
  // -------------------------------------------- //
  // UTIL
  // -------------------------------------------- //
 
  protected static File getCollDir(Coll<?> coll)
  {
    return (File) coll.getCollDriverObject();
  }
 
  protected static String idFromFile(File file)
  {
    if (file == null) return null;
    String name = file.getName();
    return name.substring(0, name.length()-5);
  }
 
  protected static File fileFromId(Coll<?> coll, String id)
  {
    File collDir = getCollDir(coll);
    File idFile = new File(collDir, id+DOTJSON);
    return idFile;
  }
 
 
}
TOP

Related Classes of com.massivecraft.mcore.store.DriverFlatfile

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.