package eu.dnetlib.r2d2.mongodb;

import java.io.InputStream;
import java.io.OutputStream;

import javax.annotation.Resource;

import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;

import me.prettyprint.cassandra.service.PoolExhaustedException;
import eu.dnetlib.r2d2.FileStore;

public class MongoFileStore implements FileStore {
	
	@Resource
	private GridFS gridFS = null;

	@Override
	public void write(String id, InputStream input)
			throws IllegalStateException, PoolExhaustedException, Exception {
		
		GridFSInputFile file = gridFS.createFile(input, id);
		
		file.save();
		file.validate();
	}
	
	@Override
	public void read(String id, OutputStream output) throws Exception {
		GridFSDBFile file = gridFS.findOne(id);
		
		if (file == null)
			throw new Exception("File with id " + id + " not found.");
		
		file.writeTo(output);
	}
	
	public void delete(String id) {
		this.gridFS.remove(id);
	}

	public GridFS getGridFS() {
		return gridFS;
	}

	public void setGridFS(GridFS gridFS) {
		this.gridFS = gridFS;
	}
}