/*
 * Created on Apr 24, 2005
 *
 */
package com.dragonsoft.tryapp.ejb.entity.utils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.dragonsoft.tryapp.common.exceptions.TryException;
import com.dragonsoft.tryapp.ejb.entity.interfaces.ActivityKey;
import com.dragonsoft.tryapp.ejb.entity.interfaces.AssignmentKey;
import com.dragonsoft.tryapp.ejb.entity.interfaces.CourseKey;
import com.dragonsoft.tryapp.support.TryFileSystem;

/**
 * @author Greg
 *
 * FileSystemTraverser
 */
public class FileSystemTraverser {
	
	
	public File getCourseDirectory(CourseKey key)throws TryException{
		File rtVal = new File(TryFileSystem.getAssignmentDirectory());
		rtVal = new File(rtVal,key.getTerm());
		rtVal = new File(rtVal,key.getCourseNum());
		if(key.getSection()!= null){
			rtVal = new File(rtVal,CourseFSUtils.SECTIONS);
			rtVal = new File(rtVal,key.getSection());
		}
		return rtVal;
	}
	
	public File getAssignmentDir(AssignmentKey key)throws TryException{
		File assign = getCourseDirectory(key.getAssociatedCourse());
		assign = new File(assign,AssignmentFSUtils.ASSIGNMENT_FOLDER);
		assign = new File(assign,key.getAssignmentNumber());
		return assign;
	}
	
	public File getActivity(ActivityKey key) throws TryException{
		File act = getAssignmentDir(key.getAssociatedAssignment());
		act = new File(act, ActivityFSUtils.ACTIVITY_DIR);
		act = new File(act, key.getActivityNumber());
		return act;
	}
	
	public File[] getAssignments(CourseKey key)throws TryException{
		File course = getCourseDirectory(key);
		return course.listFiles();
	}
	
	public File[] getActivities(AssignmentKey key) throws TryException{
		File[] rtVal = null;
		File assign = getAssignmentDir(key);
		assign = new File(assign,ActivityFSUtils.ACTIVITY_DIR);
		rtVal = assign.listFiles();
		
		return rtVal;
	}
	
	public File[] getAllCourses()throws TryException{
		File root = new File(TryFileSystem.getAssignmentDirectory());
		File[] terms = root.listFiles();
		List lst = new ArrayList();
		File[] courses = null;
		File[] sections = null;
		for (int i = 0; i < terms.length; i++) {
			courses = terms[i].listFiles();
			for (int k = 0; k < courses.length; k++) {
				if ((sections = getCourseSections(courses[i])) != null) {
					for (int j = 0; j < sections.length; j++)
						lst.add(sections[i]);
				}
				lst.add(courses[i]);
			}
		}
		return terms;
	}
	
	public File[] getCourseSections(File globalCourseDir){
		globalCourseDir = new File(globalCourseDir,CourseFSUtils.SECTIONS);
		File[] rtVal = globalCourseDir.listFiles();
		return rtVal;
	}
	
	public File[] getCourses(String number, String section) throws TryException{
		File root = new File(TryFileSystem.getAssignmentDirectory());
		List lst = new ArrayList();
		File[] terms = root.listFiles();
		for(int i = 0; i<terms.length;i++){
			lst.add(getCourseDirectory(new CourseKey(terms[i].getName(),number,section)));
		}
		terms = new File[terms.length];
		lst.toArray(terms);
		return terms;
	}
	
	public static void main(String args[])throws Exception{
		System.setProperty("tryapp.root","C:\\");
		CourseKey key = new CourseKey("20051","4003101",null);
		AssignmentKey asskey = new AssignmentKey(key,"2");
		ActivityKey actkey = new ActivityKey(asskey,"3");
		FileSystemTraverser traverser = new FileSystemTraverser();
		System.out.println(traverser.getCourseDirectory(key).getAbsolutePath());
		System.out.println(traverser.getAssignmentDir(asskey).getAbsolutePath());
		System.out.println(traverser.getActivity(actkey).getAbsolutePath());
	}
}
