Package org.epic.core.decorators

Source Code of org.epic.core.decorators.PerlProjectVisitor

/*
* Created on Jan 4, 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package org.epic.core.decorators;

import java.net.MalformedURLException;
import java.net.URL;

import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.ILightweightLabelDecorator;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IDecoratorManager;
import org.eclipse.ui.IEditorDescriptor;
import org.epic.core.Constants;
import org.epic.perleditor.PerlEditorPlugin;

/**
* @author luelljoc
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class PerlDecorator extends LabelProvider
    implements
      ILightweightLabelDecorator {

  private static final String PERL_EDITOR_ID = "org.epic.perleditor.editors.PerlEditor";
  private static final String EMB_PERL_FILE_EXTENSION = "epl";
  private static final String PERL_NATURE_ID = "org.epic.perleditor.perlnature";

  public static int NO_ERROR = -1;

  // Define images
  static final URL BASE_URL = PerlEditorPlugin.getDefault().getBundle().getEntry("/");
  public static final ImageDescriptor ICON_ERROR;
  public static final ImageDescriptor ICON_WARNING;
  static {
    String iconPath = "icons/";
    ICON_ERROR = createImageDescriptor(iconPath + "error_co.gif");
    ICON_WARNING = createImageDescriptor(iconPath + "warning_co.gif");
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object,
   *      org.eclipse.jface.viewers.IDecoration)
   */
  public void decorate(Object element, IDecoration decoration) {
    IResource resource = getResource(element);
    boolean isPerlProject = false;
    boolean isPerlFolder = false;
    boolean isPerlFile = false;
   
    // Check if resource exists
    if(!resource.exists()) {
      return;
    }

    // Only decorate Perl sources or projects
    IEditorDescriptor defaultEditorDescriptor = PerlEditorPlugin
        .getDefault().getWorkbench().getEditorRegistry()
        .getDefaultEditor(resource.getFullPath().toString());

    try {
      if (resource.getType() == IResource.PROJECT) {
        if (resource.getProject().isAccessible()) {
          if (resource.getProject().hasNature(PERL_NATURE_ID)) {
            isPerlProject = true;
          }
        }
      }
    } catch (CoreException e) {
      e.printStackTrace();
    }
   
    try {
      if (resource.getType() == IResource.FOLDER) {
        if (resource.getProject().isAccessible()) {
          if (resource.getProject().hasNature(PERL_NATURE_ID)) {
            isPerlFolder = true;
          }
        }
      }
    } catch (CoreException e) {
      e.printStackTrace();
    }

    if (!isPerlProject && defaultEditorDescriptor != null) {
      if (!defaultEditorDescriptor.getId().equals(PERL_EDITOR_ID)
          || EMB_PERL_FILE_EXTENSION.equals(resource.getFileExtension())) {
        return;
      } else {
        isPerlFile = true;
      }
    }

    if (isPerlProject || isPerlFolder) {
      PerlProjectVisitor projectVisitor = new PerlProjectVisitor();
      try {
        //resource.getProject().accept(projectVisitor);
        resource.accept(projectVisitor);
      } catch (CoreException e1) {
        e1.printStackTrace();
      }

      int state = projectVisitor.getState();

      if (state == IMarker.SEVERITY_ERROR) {
        decoration.addOverlay(ICON_ERROR);
      } else if (state == IMarker.SEVERITY_WARNING) {
        decoration.addOverlay(ICON_WARNING);
      }
    } else if (isPerlFile) {
      try {
        if (resource.findMarkers(Constants.PROBLEM_MARKER, true, 1).length > 0) {
          int state = PerlDecorator.getDecoratorMarker(resource);

          if (state == IMarker.SEVERITY_ERROR) {
            decoration.addOverlay(ICON_ERROR);
          } else if (state == IMarker.SEVERITY_WARNING) {
            decoration.addOverlay(ICON_WARNING);
          }
        }
      } catch (CoreException e1) {
        e1.printStackTrace();
      }
    }
  }
  public static PerlDecorator getPerlDecorator() {
    IDecoratorManager decoratorManager = PerlEditorPlugin.getDefault()
        .getWorkbench().getDecoratorManager();

    if (decoratorManager
        .getEnabled("org.epic.core.decorators.PerlDecorator")) {
      return (PerlDecorator) decoratorManager
          .getBaseLabelProvider("org.epic.core.decorators.PerlDecorator");
    }
    return null;
  }

  public void fireLabelEvent(final LabelProviderChangedEvent event) {
    // We need to get the thread of execution to fire the label provider
    // changed event , else WSWB complains of thread exception.
    Display.getDefault().asyncExec(new Runnable() {
      public void run() {
        fireLabelProviderChanged(event);
      }
    });
  }

  private IResource getResource(Object object) {
    if (object instanceof IResource) {
      return (IResource) object;
    }
    if (object instanceof IAdaptable) {
      return (IResource) ((IAdaptable) object)
          .getAdapter(IResource.class);
    }
    return null;
  }

  private static ImageDescriptor createImageDescriptor(String path) {
    try {
      URL url = new URL(BASE_URL, path);

      return ImageDescriptor.createFromURL(url);
    } catch (MalformedURLException e) {
    }

    return ImageDescriptor.getMissingImageDescriptor();
  }

  public static int getDecoratorMarker(IResource resource) {
    int state = NO_ERROR;
    try {
      IMarker[] markers = resource.findMarkers(Constants.PROBLEM_MARKER, true, 1);
      for (int i = 0; i < markers.length; i++) {
        int severity = ((Integer) markers[i]
            .getAttribute(IMarker.SEVERITY)).intValue();
        if (severity == IMarker.SEVERITY_ERROR) {
          state = IMarker.SEVERITY_ERROR;
          break;
        } else if (severity == IMarker.SEVERITY_WARNING) {
          state = IMarker.SEVERITY_WARNING;
        }
      }
    } catch (CoreException e) {
      e.printStackTrace();
    }

    return state;
  }

}

class PerlProjectVisitor implements IResourceVisitor {

  private int state = PerlDecorator.NO_ERROR;
  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.core.resources.IResourceVisitor#visit(org.eclipse.core.resources.IResource)
   */
  public boolean visit(IResource resource) throws CoreException {
    int resourceState = PerlDecorator.getDecoratorMarker(resource);

    if (resourceState != PerlDecorator.NO_ERROR) {
      state = resourceState;
    }

    if (state == IMarker.SEVERITY_ERROR) {
      return false;
    } else {
      return true;
    }
  }

  public int getState() {
    return state;
  }

}
TOP

Related Classes of org.epic.core.decorators.PerlProjectVisitor

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.