/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.eclipse.debug.core;
import org.drools.eclipse.DroolsEclipsePlugin;
import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.Position;
import org.eclipse.ui.texteditor.IMarkerUpdater;
import org.eclipse.ui.texteditor.MarkerUtilities;
public class DroolsLineBreakpointMarkerUpdater implements IMarkerUpdater {
private static final String[] ATTRIBUTES = {
IMarker.LINE_NUMBER,
IDroolsDebugConstants.DRL_LINE_NUMBER
};
public String getMarkerType() {
// responsible for only Drools line breakpoint markers
return IDroolsDebugConstants.DROOLS_MARKER_TYPE;
}
public String[] getAttribute() {
return ATTRIBUTES;
}
public boolean updateMarker(IMarker marker, IDocument document, Position position) {
if (position == null) {
return true;
}
if (position.isDeleted()) {
return false;
}
boolean offsetsInitialized = false;
boolean offsetsChanged = false;
int markerStart = MarkerUtilities.getCharStart(marker);
int markerEnd = MarkerUtilities.getCharEnd(marker);
if (markerStart != -1 && markerEnd != -1) {
offsetsInitialized = true;
int offset = position.getOffset();
if (markerStart != offset) {
MarkerUtilities.setCharStart(marker, offset);
offsetsChanged= true;
}
offset += position.getLength();
if (markerEnd != offset) {
MarkerUtilities.setCharEnd(marker, offset);
offsetsChanged= true;
}
}
if (!offsetsInitialized || (offsetsChanged && MarkerUtilities.getLineNumber(marker) != -1)) {
try {
int drlLineNumber = document.getLineOfOffset(position.getOffset()) + 1;
marker.setAttribute(IDroolsDebugConstants.DRL_LINE_NUMBER, drlLineNumber);
} catch (Throwable t) {
DroolsEclipsePlugin.log(t);
}
}
return true;
}
}