Package tk.eclipse.plugin.htmleditor

Source Code of tk.eclipse.plugin.htmleditor.HTMLProjectBuilder

package tk.eclipse.plugin.htmleditor;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.swt.widgets.Display;

import tk.eclipse.plugin.htmleditor.tasktag.HTMLTaskTagDetector;
import tk.eclipse.plugin.htmleditor.tasktag.ITaskTagDetector;
import tk.eclipse.plugin.htmleditor.tasktag.JavaScriptTaskTagDetector;
import tk.eclipse.plugin.htmleditor.tasktag.TaskTag;

/**
*
* @author Naoki Takezoe
*/
public class HTMLProjectBuilder extends IncrementalProjectBuilder {
 
  private List taskTagDetectors = new ArrayList();
  private TaskTag[] tags;
 
  public HTMLProjectBuilder(){
    taskTagDetectors.add(new HTMLTaskTagDetector());
    taskTagDetectors.add(new JavaScriptTaskTagDetector());
  }
 
  protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
   
    List list = TaskTag.loadFromPreference(false);
    tags = (TaskTag[])list.toArray(new TaskTag[list.size()]);
   
    if(getProject()==null){
      return null;
    }
    if(kind==FULL_BUILD){
      processContainer(getProject());
    }
    IResourceDelta delta = getDelta(getProject());
    if(delta==null){
      return null;
    }
    processDelta(delta);
   
    getProject().refreshLocal(IResource.DEPTH_INFINITE,monitor);
    return null;
  }
 
  private void processContainer(IContainer project){
    try {
      IResource[] resources = project.members();
      for(int i=0;i<resources.length;i++){
//        if(resources[i]==null){
//          continue;
//        }
        if(resources[i] instanceof IContainer){
          processContainer((IContainer)resources[i]);
        } else if(resources[i] instanceof IFile){
          for(int j=0;j<taskTagDetectors.size();j++){
            final ITaskTagDetector detector = (ITaskTagDetector)taskTagDetectors.get(j);
            if(detector.isSupported((IFile)resources[i])){
              applyDetector(resources[i], detector);
              break;
            }
          }
        }
      }
    } catch(Exception ex){
      HTMLPlugin.logException(ex);
    }
  }
 
  private void processDelta(IResourceDelta delta){
    IResourceDelta[] children = delta.getAffectedChildren();
    for(int i=0;i<children.length;i++){
      int kind = children[i].getFlags();
      if(kind==IResourceDelta.MARKERS){
        continue;
      }
      final IResource resource = children[i].getResource();
      if(resource!=null && resource instanceof IFile && resource.exists()){
        for(int j=0;j<taskTagDetectors.size();j++){
          final ITaskTagDetector detector = (ITaskTagDetector)taskTagDetectors.get(j);
          if(detector.isSupported((IFile)resource)){
            applyDetector(resource, detector);
            break;
          }
        }
      }
      processDelta(children[i]);
    }
  }
 
  private void applyDetector(final IResource resource, final ITaskTagDetector detector){
    Display.getDefault().asyncExec(new Runnable() {
      public void run(){
        try {
          ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
            public void run(IProgressMonitor monitor) throws CoreException {
              try {
                resource.deleteMarkers(IMarker.TASK, false, 0);
                detector.detect((IFile)resource, tags);
              } catch(Exception ex){
                HTMLPlugin.logException(ex);
              }
            }
          }, null);
        } catch(Exception ex){
          HTMLPlugin.logException(ex);
        }
      }
    });
  }
 
  public static void doBuild(IProject project){
    try {
      if(project.hasNature(HTMLProjectNature.HTML_NATURE_ID)){
        project.refreshLocal(
            IResource.DEPTH_ONE, new NullProgressMonitor());
       
        project.build(
            IncrementalProjectBuilder.FULL_BUILD,
            HTMLProjectNature.HTML_BUILDER_ID,
            new HashMap(), new NullProgressMonitor());
      }
    } catch(Exception ex){
      HTMLPlugin.logException(ex);
    }
  }
 
}
TOP

Related Classes of tk.eclipse.plugin.htmleditor.HTMLProjectBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.