FileConfigMapper.java
package eu.javaexperience.io;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import eu.javaexperience.asserts.AssertArgument;
import eu.javaexperience.collection.CollectionTools;
import eu.javaexperience.collection.map.MapTools;
import eu.javaexperience.reflect.Mirror;
public class FileConfigMapper implements Map<String, String>
{
protected final File dir;
protected final String path;
public FileConfigMapper(File dir)
{
AssertArgument.assertNotNull(dir, "dir");
if(!dir.exists() || !dir.isDirectory())
{
throw new RuntimeException("Given file is not directory");
}
this.dir = dir;
path = dir.toString()+"/";
}
@Override
public int size()
{
return dir.list().length;
}
@Override
public boolean isEmpty()
{
return size() == 0;
}
@Override
public boolean containsKey(Object key)
{
if(null == key)
{
return false;
}
return new File(path+key).exists();
}
@Override
public boolean containsValue(Object value)
{
for(String k:dir.list())
{
if(value.equals(get(k)))
{
return true;
}
}
return false;
}
@Override
public String get(Object key)
{
if(null == key || !containsKey(key))
{
return null;
}
try
{
return IOTools.getFileContents(path+key);
}
catch (Exception e)
{
Mirror.throwSoftOrHardButAnyway(e);
return null;//have a nice day
}
}
@Override
public String put(String key, String value)
{
try
{
IOTools.putFileContent(path+key, false, value.getBytes());
}
catch (IOException e)
{
Mirror.throwSoftOrHardButAnyway(e);
}
return null;
}
@Override
public String remove(Object key)
{
if(null == key)
{
return null;
}
new File(path+key).delete();
return null;
}
@Override
public void putAll(Map<? extends String, ? extends String> m)
{
MapTools.putAll(m, this);
}
@Override
public void clear()
{
for(File f:dir.listFiles())
{
f.delete();
}
}
@Override
public Set<String> keySet()
{
return CollectionTools.inlineAdd(new HashSet<String>(), dir.list());
}
@Override
public Collection<String> values()
{
ArrayList<String> ret = new ArrayList<>();
for(String k:dir.list())
{
String re = get(k);
if(null != re)
{
ret.add(re);
}
}
return ret;
}
protected class LazyEntry implements Entry<String, String>
{
protected String key;
protected LazyEntry(String key)
{
this.key = key;
}
@Override
public String getKey()
{
return key;
}
@Override
public String getValue()
{
return get(key);
}
@Override
public String setValue(String value)
{
return put(key, value);
}
}
@Override
public Set<java.util.Map.Entry<String, String>> entrySet()
{
HashSet<Entry<String, String>> ret = new HashSet<>();
for(String s:dir.list())
{
ret.add(new LazyEntry(s));
}
return ret;
}
}