package org.wikiwebserver.distribute.se.worker.task;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.wikiwebserver.distribute.interfaces.Generator;
import org.wikiwebserver.distribute.interfaces.Task;
import org.wikiwebserver.distribute.se.ConfigManager;

public class FilePostTask extends Task implements Generator {

	private static final long serialVersionUID = 1L;
	
	private File file = null;
	
	public Object generate() throws IOException {

		file = ConfigManager.getFileForPath(getTaskInputMeta());
		if (!file.exists()) {
			throw new FileNotFoundException("File not found");
		}		
		
		if (file.length() > Integer.MAX_VALUE) {
			throw new IOException("Object too large to transfer. (2GB limit)");
		}
		
		setTaskOutputMeta(String.valueOf(file.length()));

		return new FileInputStream(file);
	}
	
	public long getStreamLength() {
	    if (file == null) {
	        file = ConfigManager.getFileForPath(getTaskInputMeta());
	    }
		return file.length();
	}
	
	public String toString() {
	    if (file == null) return "Starting...";
		return "Posting file " + file;
	}	
}

