blob: 6823a6094728a31c1cf68058bcc5de7d48dd5582 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.cheatsheets.views;
import java.util.ArrayList;
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 static class StatusSorter {
private List<IStatus> errors = new ArrayList<>();
private List<IStatus> warnings = new ArrayList<>();
private List<IStatus> 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<IStatus> getSortedStatus() {
List<IStatus> 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<IStatus> sorted = sorter.getSortedStatus();
for (IStatus nextStatus : sorted) {
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 area which 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
}
}