package com.itsolut.mantis.ui.wizard; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import com.itsolut.mantis.core.model.MantisProject; /** * @author Robert Munteanu * */ public class MantisProjectITreeContentProvider implements ITreeContentProvider { private MantisProject[] projects; public Object[] getChildren(Object parentElement) { if (parentElement instanceof MantisProject[]) return topLevelOnly((MantisProject[]) parentElement); if (parentElement instanceof MantisProject) { Integer parentProjectId = ((MantisProject) parentElement).getValue(); List<MantisProject> childProjects = getChildProjects(parentProjectId); return childProjects.toArray(new MantisProject[childProjects.size()]); } return null; } private MantisProject[] topLevelOnly(MantisProject[] parentElement) { List<MantisProject> topLevel = new ArrayList<MantisProject>(); for ( MantisProject project : parentElement ) if ( project.getParentProjectId() == null ) topLevel.add(project); return topLevel.toArray(new MantisProject[topLevel.size()]); } private List<MantisProject> getChildProjects(Integer parentProjectId) { if ( parentProjectId == null ) return Collections.emptyList(); List<MantisProject> childProjects = new ArrayList<MantisProject>(); for (MantisProject childCandidate : projects) if (parentProjectId.equals(childCandidate.getParentProjectId())) childProjects.add(childCandidate); return childProjects; } public Object getParent(Object element) { if (element instanceof MantisProject) { Integer parentId = ((MantisProject) element).getParentProjectId(); if (parentId == null) return null; for (MantisProject project : projects) if (parentId.equals(project.getValue())) return project; } return null; } public boolean hasChildren(Object element) { if (element instanceof MantisProject) return getChildProjects(((MantisProject) element).getValue()).size() > 0; return false; } public Object[] getElements(Object inputElement) { return getChildren(inputElement); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { setInput(newInput); } public void setInput(Object newInput) { if (newInput instanceof MantisProject[]) projects = (MantisProject[]) newInput; else projects = new MantisProject[0]; } }