package org.nightlabs.jfire.issuetracking.ui.issue;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.jdo.FetchPlan;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.base.login.ui.Login;
import org.nightlabs.jfire.base.ui.jdo.tree.ActiveJDOObjectTreeController;
import org.nightlabs.jfire.issue.project.Project;
import org.nightlabs.jfire.issue.project.ProjectDAO;
import org.nightlabs.jfire.issue.project.ProjectParentResolver;
import org.nightlabs.jfire.issue.project.id.ProjectID;
import org.nightlabs.jfire.issuetracking.ui.project.ProjectTreeNode;
import org.nightlabs.jfire.jdo.notification.TreeNodeParentResolver;
import org.nightlabs.progress.ProgressMonitor;
/**
* @author Chairat Kongarayawetchakun - chairat[at]nightlabs[dot]de
*
*/
public class ActiveProjectTreeController extends ActiveJDOObjectTreeController<ProjectID, Project, ProjectTreeNode>
{
public static final String[] FETCH_GROUPS_PROJECT = {
FetchPlan.DEFAULT, Project.FETCH_GROUP_NAME, Project.FETCH_GROUP_SUBPROJECTS, Project.FETCH_GROUP_PARENT_PROJECT
};
@Override
protected ProjectTreeNode createNode()
{
return new ProjectTreeNode();
}
@Override
protected Collection<Project> retrieveChildren(ProjectID parentID, Project parent, ProgressMonitor monitor)
{
if (parentID != null) {
Project project = ProjectDAO.sharedInstance().getProject(
parentID, FETCH_GROUPS_PROJECT, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor);
Collection<Project> res = project.getSubProjects();
return res;
}
Collection<Project> projects = ProjectDAO.sharedInstance().getRootProjects(Login.sharedInstance().getOrganisationID(), FETCH_GROUPS_PROJECT, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor);
return projects;
}
@Override
protected Collection<Project> retrieveJDOObjects(Set<ProjectID> objectIDs, ProgressMonitor monitor)
{
Collection<Project> res = ProjectDAO.sharedInstance().getProjects(
objectIDs, new String[]{Project.FETCH_GROUP_PARENT_PROJECT, Project.FETCH_GROUP_NAME}, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor);
return res;
}
@Override
protected void sortJDOObjects(List<Project> objects)
{
Collections.sort(objects);
}
@Override
protected TreeNodeParentResolver createTreeNodeParentResolver()
{
return new ProjectParentResolver();
}
@Override
protected Class<Project> getJDOObjectClass()
{
return Project.class;
}
}