FileAccessMap.java

package eu.javaexperience.io;

import java.io.File;
import java.io.IOException;

import eu.javaexperience.collection.map.PublisherMap;
import eu.javaexperience.interfaces.simple.WrapUnwarpTools;
import eu.javaexperience.interfaces.simple.WrapUnwrap;

public class FileAccessMap<K> extends PublisherMap<K, byte[]>
{
	protected WrapUnwrap<String, K> fileWrap;
	
	public FileAccessMap(WrapUnwrap<String, K> filePathWrap)
	{
		this.fileWrap = filePathWrap;
	}
	
	public static FileAccessMap<String> fromDirectory(String dir)
	{
		return new FileAccessMap<String>(WrapUnwarpTools.withPrefix(dir));
	}
	
	public static FileAccessMap<String> fromDirectoryModifiedBy(WrapUnwrap<String, String> wrapBefore, String dir)
	{
		return new FileAccessMap<String>
		(
			WrapUnwarpTools.chain
			(
				wrapBefore,
				WrapUnwarpTools.withPrefix(dir)
			)
		);
	}
	
	@Override
	public byte[] put(K key, byte[] value)
	{
		String path = fileWrap.wrap((K) key);
		try
		{
			IOTools.createPathBeforeFile(path);
			IOTools.putFileContent(path, value);
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		
		return null;
	}
	
	public byte[] get(Object key)
	{
		String path = fileWrap.wrap((K) key);
		if(new File(path).exists())
		{
			try
			{
				return IOTools.loadFileContent(path);
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return null;
	}

	@Override
	public boolean containsKey(Object key)
	{
		String path = fileWrap.wrap((K) key);
		return new File(path).exists();
	}
}