package com.aptana.ide.editors.tasks;
import java.util.HashMap;
import java.util.List;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import com.aptana.ide.core.IdeLog;
import com.aptana.ide.core.builder.BuildContext;
import com.aptana.ide.core.builder.BuildParticipant;
import com.aptana.ide.editors.UnifiedEditorsPlugin;
public class TaskBuildParticipant extends BuildParticipant
{
private static final String TASK_MARKER_ID = "com.aptana.ide.editors.task";
private TaskParser parser;
@Override
public void buildStarting(List<BuildContext> contexts, boolean isBatch, IProgressMonitor monitor)
{
parser = new TaskParser();
}
@Override
public void build(BuildContext buildContext, IProgressMonitor monitor)
{
try
{
removeExistingTasks(buildContext);
}
catch (CoreException e)
{
IdeLog.logError(UnifiedEditorsPlugin.getDefault(), e.getMessage(), e);
}
List<TaskTag> tasks = parser.parse(buildContext);
for (TaskTag task : tasks)
{
recordNewProblems(buildContext, task);
}
}
@Override
public void buildFinishing(IProgressMonitor monitor)
{
// do nothing
}
private void removeExistingTasks(BuildContext buildContext) throws CoreException
{
if (buildContext != null && buildContext.getFile() != null)
buildContext.getFile().deleteMarkers(TASK_MARKER_ID, false, IResource.DEPTH_ONE);
}
private void recordNewProblems(BuildContext buildContext, TaskTag task)
{
try
{
IMarker marker = buildContext.getFile().createMarker(TASK_MARKER_ID);
HashMap<String, Comparable> map = new HashMap<String, Comparable>();
map.put(IMarker.PRIORITY, new Integer(task.getPriority()));
map.put(IMarker.MESSAGE, task.getMessage());
map.put(IMarker.LINE_NUMBER, new Integer(task.getLineNumber()));
map.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
map.put(IMarker.USER_EDITABLE, new Boolean(false));
map.put(IMarker.TRANSIENT, new Boolean(false));
map.put(IMarker.CHAR_START, new Integer(task.getStartOffset()));
map.put(IMarker.CHAR_END, new Integer(task.getEndOffset()));
marker.setAttributes(map);
}
catch (CoreException e)
{
IdeLog.logError(UnifiedEditorsPlugin.getDefault(), e.getMessage(), e);
}
}
@Override
public void cleanStarting(IProject project)
{
try
{
if (project != null)
project.deleteMarkers(TASK_MARKER_ID, false, IResource.DEPTH_INFINITE);
}
catch (CoreException e)
{
IdeLog.logError(UnifiedEditorsPlugin.getDefault(), e.getMessage(), e);
}
}
@Override
public boolean isActive(IProject project)
{
return true;
}
}