package rtt.ui.content.main;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaProject;
import rtt.ui.RttPluginUI;
import rtt.ui.content.IContent;
import rtt.ui.content.ReloadInfo;
import rtt.ui.content.ReloadInfo.Content;
import rtt.ui.model.RttProject;
import rtt.ui.utils.RttLog;
// TODO check possible refactorings
public class ProjectDirectory extends AbstractContent {
private List<ProjectContent> projectList;
private boolean hasChanged = false;
private boolean needToReload = false;
public ProjectDirectory(Collection<ProjectContent> projects) {
super(null);
projectList = new LinkedList<ProjectContent>();
childs = null;
for (ProjectContent projectContent : projects) {
addProjectInternal(projectContent);
}
}
@Override
public IContent[] getChildren() {
return projectList.toArray(new IContent[projectList.size()]);
}
private void addProjectInternal(ProjectContent projectContent) {
if (!projectList.contains(projectContent)) {
projectList.add(projectContent);
}
this.hasChanged = true;
}
public void addProject(IJavaProject project) {
if (project == null) {
throw new IllegalArgumentException("The project must not be null.");
}
try {
RttProject newProject = new RttProject(project);
newProject.createArchive(newProject.getArchiveFile());
this.addProjectInternal(new ProjectContent(newProject));
} catch (Exception exception) {
RttLog.log(exception);
}
}
public void removeProject(IProject project) {
ProjectContent projectContent = findProjectContent(project);
if (projectContent != null) {
projectList.remove(projectContent);
RttProject rttProject = projectContent.getProject();
rttProject.close(true);
this.hasChanged = true;
}
}
public ProjectContent findProjectContent(IProject project) {
for (ProjectContent projectContent : projectList) {
if (projectContent.getProject().getIProject() == project) {
return projectContent;
}
}
return null;
}
@Override
public String getText() {
return "ProjectDirectory";
}
@Override
protected ContentIcon getIcon() {
return ContentIcon.PLACEHOLDER;
}
public boolean hasChanged() {
if (needToReload) {
needToReload = false;
for (ProjectContent content : projectList) {
RttProject project = content.getProject();
project.close(false);
}
}
if (hasChanged) {
hasChanged = false;
ProjectContent newContent = null;
if (projectList.size() > 0) {
newContent = projectList.get(0);
}
RttPluginUI.getProjectManager().setCurrentContent(newContent, true);
return true;
}
return false;
}
public void reload(ReloadInfo info) {
if (info.contains(Content.PROJECT)) {
for (ProjectContent projectContent : projectList) {
projectContent.reload(new ReloadInfo(Content.TESTSUITE, Content.LOG, Content.CONFIGURATION));
}
}
}
public void needToReload() {
hasChanged = true;
needToReload = true;
}
}