/*
* Created on Jan 31, 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package org.epic.perleditor.views;
import java.util.ArrayList;
import java.util.HashMap;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.epic.core.Constants;
/**
* @author luelljoc
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class ExplainErrorsView extends ViewPart {
private StyledText explanationText;
private Color red;
private Color yellow;
private Color black;
private HashMap levels;
public ExplainErrorsView() {
levels = new HashMap();
levels.put("(W)", "A warning (optional)");
levels.put("(W once)", "A warning (optional)");
levels.put("(D)", "A deprecation (optional)");
levels.put("(S)", "A severe warning (default)");
levels.put("(F)", "A fatal error (trappable)");
levels.put("(P)", "An internal error you should never see (trappable)");
levels.put("(X)", "A very fatal error (nontrappable)");
levels.put("(A)", "An alien error message (not generated by Perl)");
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
public void createPartControl(Composite parent) {
explanationText = new StyledText(parent, SWT.MULTI | SWT.V_SCROLL
| SWT.H_SCROLL);
explanationText.setEditable(false);
red = new Color(parent.getDisplay(), 216, 60, 26);
yellow = new Color(parent.getDisplay(), 211, 140, 29);
black = new Color(parent.getDisplay(), 0, 0, 0);
}
public String getText()
{
return explanationText.getText();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
*/
public void setFocus() {
explanationText.setFocus();
}
public void explain(ArrayList markers) {
explanationText.setText("");
for(int i=0; i<markers.size(); i++) {
IMarker marker = (IMarker) markers.get(i);
try {
int pos = explanationText.getCharCount();
explanationText.append((String) marker.getAttribute(IMarker.MESSAGE) +"\n");
int severity = ((Integer) marker.getAttribute(IMarker.SEVERITY)).intValue();
StyleRange styleRange = new StyleRange();
styleRange.start = pos;
styleRange.length = ((String) marker.getAttribute(IMarker.MESSAGE)).length();
styleRange.fontStyle = SWT.BOLD;
styleRange.foreground = severity == IMarker.SEVERITY_WARNING ? yellow : red;
explanationText.setStyleRange(styleRange);
String expStr = (String) marker.getAttribute(Constants.MARKER_ATTR_PERL_ERROR_EXPLANATION);
String levelStr = null;
if(expStr.length() > 0) {
levelStr = (String) levels.get(expStr.substring(0,expStr.indexOf(")")+1));
}
if(levelStr != null) {
pos = explanationText.getCharCount();
explanationText.append(levelStr +"\n");
styleRange = new StyleRange();
styleRange.start = pos;
styleRange.length = levelStr.length();
styleRange.fontStyle = SWT.ITALIC;
styleRange.foreground = black;
explanationText.setStyleRange(styleRange);
}
explanationText.append(levelStr != null ? expStr.substring(expStr.indexOf(")")+2) : expStr);
explanationText.append("\n");
} catch (CoreException e) {
e.printStackTrace();
}
}
}
}