blob: 57ed099ff6c221cad2100ff5d2ff9ee072ada5f9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2008 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
*******************************************************************************/
package org.eclipse.ui.internal.cheatsheets.views;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.internal.cheatsheets.CheatSheetPlugin;
import org.eclipse.ui.internal.cheatsheets.ICheatSheetResource;
import org.eclipse.ui.internal.cheatsheets.Messages;
public class ErrorPage extends Page {
/*
* Class used to sort status with errors first, then warnings
*/
private class StatusSorter {
private List errors = new ArrayList();
private List warnings = new ArrayList();
private List info = new ArrayList();
public StatusSorter(IStatus status) {
sortStatus(status);
}
private void sortStatus(IStatus status) {
if (status.isMultiStatus()) {
IStatus[] children = status.getChildren();
for (int i = 0; i< children.length; i++) {
sortStatus(children[i]);
}
} else {
switch(status.getSeverity()) {
case IStatus.ERROR:
errors.add(status);
break;
case IStatus.WARNING:
warnings.add(status);
break;
default:
info.add(status);
}
}
}
public List getSortedStatus() {
List result = new ArrayList();
result.addAll(errors);
result.addAll(warnings);
result.addAll(info);
return result;
}
}
private String message;
private IStatus status;
public ErrorPage() {
}
public ErrorPage(String errorMessage) {
this.message = errorMessage;
}
public ErrorPage(IStatus status) {
this.status = status;
}
@Override
public void createPart(Composite parent) {
super.createPart(parent);
if (status != null) {
showStatus(status);
} else {
String errorString = null;
if(message == null) {
errorString = Messages.ERROR_PAGE_MESSAGE;
} else {
errorString = message;
}
Label errorLabel = toolkit.createLabel(form.getBody(), errorString, SWT.WRAP);
errorLabel.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
}
}
private void showStatus(IStatus status) {
StatusSorter sorter = new StatusSorter(status);
List sorted = sorter.getSortedStatus();
for (Iterator iter = sorted.iterator(); iter.hasNext();) {
IStatus nextStatus = (IStatus)iter.next();
Label imageLabel = toolkit.createLabel(form.getBody(), ""); //$NON-NLS-1$
imageLabel.setImage(getImage(nextStatus.getSeverity()));
Label messageLabel = toolkit.createLabel(form.getBody(), nextStatus.getMessage(), SWT.WRAP);
TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB);
layoutData.indent = 10;
messageLabel.setLayoutData(layoutData);
}
}
/**
* Return the image for a status message
*
* @return
*/
private Image getImage(int severity) {
switch(severity) {
case IStatus.ERROR:
return CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.ERROR);
case IStatus.WARNING:
return CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.WARNING);
default:
return CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.INFORMATION);
}
}
/**
* Creates the cheatsheet's title areawhich will consists
* of a title and image.
*
* @param parent the SWT parent for the title area composite
*/
@Override
protected String getTitle() {
return Messages.ERROR_LOADING_CHEATSHEET_CONTENT;
}
@Override
public void initialized() {
// No initialization required
}
}