Package org.epic.perleditor.editors.util

Source Code of org.epic.perleditor.editors.util.MarkerUtil

/*
* Created on 03.05.2005
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package org.epic.perleditor.editors.util;

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

import org.eclipse.core.internal.resources.Marker;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.ui.editors.text.TextEditor;
import org.eclipse.ui.texteditor.MarkerAnnotation;
import org.epic.perleditor.editors.AddEditorMarker;

/**
* @author luelljoc
*
* Handles Marker setting and deletion
*
*/
public class MarkerUtil {

  //private ISourceViewer fViewer;
  //private TextEditor fTextEditor;
  private IResource fResource;

  private static final String EPIC_MARKER_USED_FLAG = "epic.markerUsedFlag";


//  public MarkerUtil(TextEditor textEditor, ISourceViewer viewer) {
//    this.fTextEditor = textEditor;
//    this.fViewer = viewer;
//    resource = (IResource) ((IAdaptable) fTextEditor.getEditorInput()).getAdapter(IResource.class);
//  }

  /**
   * Constructor
   *
   * @param resource The resource
   */
  public MarkerUtil(IResource resource) {
    fResource = resource;
  }

  /**
   *  Sets used flag to false of all markers that have the specified marker type
   *
   * @param markerType The Marker type
   */
  public void clearAllUsedFlags(String markerType) {
    clearAllUsedFlags(markerType, null);
  }

  /**
   *  Sets used flag to false of all markers that have the specified marker type
   *
   * @param markerType The Marker type
   * @param additionalAttribute Additional attribute to check for
   */
  public void clearAllUsedFlags(String markerType, String additionalAttribute) {
    try {
      IMarker[] markers = fResource.findMarkers(markerType, true, IResource.DEPTH_ONE);
      for(int i = 0; i < markers.length; i++) {
        if(additionalAttribute != null) {
             // If additional attribute is not present check next marker
             if(markers[i].getAttribute(additionalAttribute) == null) {
               continue;
             }
           }
                markers[i].setAttribute(EPIC_MARKER_USED_FLAG, false);
      }
    } catch (CoreException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  /**
   * Deletes all unused markers of given type
   *
   * @param markerType Marker Type
   */
  public void removeUnusedMarkers(String markerType) {
    removeUnusedMarkers(markerType, null);
  }

    public void removeObsoleteProblemMarkers()
    {
        // Note: on 2006-10-21 bug #1563114 was fixed: EPIC now uses its own
        // marker type in order not to interfere with other plug-ins.
        // The code below is here only to remove the problem markers persisted
        // by EPIC *before* this fix. It should be removed some day in the
        // future, as it also (incorrectly) removes old problem markers set
        // by other plug-ins.

        try
        {
            IMarker[] markers = fResource.exists() ? fResource.findMarkers(
                IMarker.PROBLEM, true, IResource.DEPTH_ONE) : new IMarker[0];

            for(int i = 0; i < markers.length; i++)
            {
                if (markers[i].getCreationTime() < 1161441375673L)
                    markers[i].delete();
            }
        }
        catch (CoreException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

  /**
   * Deletes all unused markers of given type
   *
   * @param markerType Marker Type
   * @param additionalAttribute Additional attribute to check for
   */
  public void removeUnusedMarkers(String markerType, String additionalAttribute) {
    try {
      IMarker[] markers = fResource.exists() ? fResource.findMarkers(markerType, true, IResource.DEPTH_ONE) : new IMarker[0];
      for(int i = 0; i < markers.length; i++) {
        if(additionalAttribute != null) {
             // If additional attribute is not present check next marker
             if(markers[i].getAttribute(additionalAttribute) == null) {
               continue;
             }
           }
        if(!markers[i].getAttribute(EPIC_MARKER_USED_FLAG, false)) {
          markers[i].delete();
        }
      }
    } catch (CoreException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  /**
   * Adds a marker
   *
   * @param attributes  Marker attributes
   * @param markerType Marker type
   */
  public void addMarker(Map attributes, String markerType) {
    attributes.put(EPIC_MARKER_USED_FLAG, Boolean.TRUE);
    AddEditorMarker ed = new AddEditorMarker();
    ed.addMarker(fResource, attributes, markerType);
  }

  /**
   * @param makerType Marker Type
   * @param line Line Number
   * @param text Text to copare
   * @param setUsedFlag Set to true if used flag should be set
   * @return <code>true</code> if maker is already presen otherwise <code>false</code>
   */
  public boolean isMarkerPresent(String makerType, int line, String text,  boolean setUsedFlag) {
    return isMarkerPresent(makerType, line, text, null, setUsedFlag);
  }

  /**
   * @param makerType Marker Type
   * @param line Line Number
   * @param text Text to copare
   * @param additionalAtrribute Additional attribute to check for
   * @param setUsedFlag Set to true if used flag should be set
   * @return <code>true</code> if maker is already presen otherwise <code>false</code>
   */
  public boolean isMarkerPresent(String makerType, int line, String text, String additionalAttribute, boolean setUsedFlag) {
    boolean found = false;

    List markers = getMarkersForLine(fResource, line);
     for(int i = 0; i < markers.size(); i++) {
         Marker marker = (Marker) markers.get(i);
         String markerText = marker.getAttribute(IMarker.MESSAGE, (String) null);

         try {
           if(!marker.getType().equals(makerType)) {
             continue;
           }

           if(additionalAttribute != null) {
             // If additional attribute is not present check next marker
             if(marker.getAttribute(additionalAttribute) == null) {
               continue;
             }
           }

        if(markerText != null && markerText.equals(text)) {
          found = true;
          if(setUsedFlag) {
            try {
              marker.setAttribute(EPIC_MARKER_USED_FLAG, true);
            } catch (CoreException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
          }
          break;
        }
      } catch (CoreException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
     }

     return found;
  }

  /**
   *  Returns all markers which includes the ruler's line of activity.
   *
   * @param resource The reource
   * @param aLine The line number
   * @return List of all makers for given line
   */
  public static List getMarkersForLine(IResource resource, int aLine) {
    List markers = new ArrayList();
    try {
      IMarker[] allMarkers = resource.findMarkers(null, true, IResource.DEPTH_ONE);
      for(int i = 0; i < allMarkers.length; i++) {
        IMarker marker = allMarkers[i];
                Integer lineNr = (Integer) marker.getAttribute(IMarker.LINE_NUMBER);
        if(lineNr != null && lineNr.intValue() == aLine) {
          markers.add(marker);
        }
      }
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return markers;
  }

//  /**
//   * Returns all markers which includes the ruler's line of activity.
//  *
//   * @param aLine Line number
//   * @return List of all markers
//   */
//  public static List getMarkersForLine(ISourceViewer viewer, int aLine) {
//    List markers = new ArrayList();
//    IAnnotationModel model = viewer.getAnnotationModel();
//    if (model != null) {
//      Iterator e = model.getAnnotationIterator();
//      while (e.hasNext()) {
//        Object o = e.next();
//        if (o instanceof MarkerAnnotation) {
//          MarkerAnnotation a = (MarkerAnnotation) o;
//          if (compareRulerLine(model.getPosition(a),
//            viewer.getDocument(),
//            aLine)
//            != 0) {
//            markers.add(a.getMarker());
//          }
//        }
//      }
//    }
//    return markers;
//  }
//
//  /**
//   * Returns distance of given line to specified position (1 = same line,
//   * 2 = included in given position, 0 = not related).
//   *
//   * @param aPosition Position
//   * @param aDocument Document
//   * @param aLine Line number
//   * @return
//   */
//  protected static int compareRulerLine(
//    Position aPosition,
//    IDocument aDocument,
//    int aLine) {
//    int distance = 0;
//    if (aPosition.getOffset() > -1 && aPosition.getLength() > -1) {
//      try {
//        int markerLine =
//          aDocument.getLineOfOffset(aPosition.getOffset());
//        if (aLine == markerLine) {
//          distance = 1;
//        } else if (
//          markerLine <= aLine
//            && aLine
//              <= aDocument.getLineOfOffset(
//                aPosition.getOffset()
//                  + aPosition.getLength())) {
//          distance = 2;
//        }
//      } catch (BadLocationException e) {
//      }
//    }
//    return distance;
//  }

}
TOP

Related Classes of org.epic.perleditor.editors.util.MarkerUtil

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.