package org.wikiwebserver.distribute.se.worker.task;

import java.io.File;
import java.io.IOException;
import org.wikiwebserver.distribute.interfaces.Generator;
import org.wikiwebserver.distribute.interfaces.Task;
import org.wikiwebserver.distribute.se.ConfigManager;
import org.wikiwebserver.distribute.util.FileDetails;
import org.wikiwebserver.distribute.util.PersistableVector;



public class DirectoryListingTask extends Task implements Generator {

	private static final long serialVersionUID = 1L;
	
	private File dir;

	@SuppressWarnings("unchecked")
    public Object generate() throws IOException {

		dir = ConfigManager.getFileForPath(getTaskInputMeta());			
		File[] files = dir.listFiles();
		if (files == null) {
			throw new IOException("Directory not found");
		}
		
		PersistableVector fileDetailsList = new PersistableVector();
		if (files != null) {
			for (File file : files) {
				if (file.canRead()) {
					fileDetailsList.add(getFileDetails(file));
				}
			}
		}
		
		return fileDetailsList;
	}
	
	private static FileDetails getFileDetails(File file) {
		return new FileDetails(
				file.getName(), 
				file.isDirectory(), 
				file.lastModified(), 
				file.length());
	}	
	
	public String toString() {
	    if (dir == null) return "Starting...";
		return "Posting file list for " + dir;
	}

	public long getStreamLength() {
		return -1;
	}	
}

