/******************************************************************************* * Copyright (c) 2001, 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Jens Lukowski/Innoopract - initial renaming/restructuring * *******************************************************************************/ package org.eclipse.wst.sse.ui.internal; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.Position; import org.eclipse.ui.texteditor.MarkerAnnotation; import org.eclipse.ui.texteditor.MarkerUtilities; import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel; import org.eclipse.wst.sse.ui.internal.provisional.extensions.breakpoint.IBreakpointConstants; /** * Source editor resource marker annotation model implementation */ public class StructuredResourceMarkerAnnotationModel extends ResourceMarkerAnnotationModel { /** * Loading of markers when working with non-IResources is accomplished by * adding the markers to the workspace root with an additional key, whose * value uses '/' for segment separators when representing paths, * determining whether they're added into the annotation model. * * Setters of this attribute should use '/'for segment separators when * representing paths. */ public final static String SECONDARY_ID_KEY = IBreakpointConstants.RESOURCE_PATH; protected IResource fMarkerResource; protected String fSecondaryMarkerAttributeValue; /** * Constructor * * @param resource */ public StructuredResourceMarkerAnnotationModel(IResource resource) { super(resource); fMarkerResource = resource; } public StructuredResourceMarkerAnnotationModel(IResource resource, String secondaryID) { super(resource); fMarkerResource = resource; fSecondaryMarkerAttributeValue = secondaryID; } /* * (non-Javadoc) * * @see org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel#createMarkerAnnotation(org.eclipse.core.resources.IMarker) */ protected MarkerAnnotation createMarkerAnnotation(IMarker marker) { /* * We need to do some special processing if marker is a validation * (aka problem) marker or if marker is a breakpoint marker so create * a special marker annotation for those markers. Otherwise, use * default. */ if (MarkerUtilities.isMarkerType(marker, IMarker.PROBLEM)) { return new StructuredMarkerAnnotation(marker); } return super.createMarkerAnnotation(marker); } /* * (non-Javadoc) * * @see org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel#getMarkerPosition(org.eclipse.core.resources.IMarker) */ public Position getMarkerPosition(IMarker marker) { Position pos = super.getMarkerPosition(marker); // if ((pos == null || pos.getLength() == 0) && marker.getType() == // IInternalDebugUIConstants.ANN_INSTR_POINTER_CURRENT) { if (pos == null || pos.getLength() == 0) { // We probably should create position from marker if marker // attributes specify a valid position pos = createPositionFromMarker(marker); } return pos; } /* * (non-Javadoc) * * @see org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel#isAcceptable(org.eclipse.core.resources.IMarker) */ protected boolean isAcceptable(IMarker marker) { try { Object attr = marker.getAttribute(IBreakpointConstants.ATTR_HIDDEN); if (attr != null && Boolean.TRUE.equals(attr)) return false; } catch (CoreException e) { // ignore } if (fSecondaryMarkerAttributeValue == null) return super.isAcceptable(marker); String markerSecondaryMarkerAttributeValue = marker.getAttribute(SECONDARY_ID_KEY, ""); //$NON-NLS-1$ boolean isSameFile = fSecondaryMarkerAttributeValue.equalsIgnoreCase(markerSecondaryMarkerAttributeValue); return super.isAcceptable(marker) && isSameFile; } }