/*******************************************************************************
* Copyright (c) 2008 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.smooks.configuration.validate;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.IDecorationContext;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ILightweightLabelDecorator;
import org.eclipse.jface.viewers.LabelDecorator;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
import org.jboss.tools.smooks.configuration.SmooksConfigurationActivator;
import org.jboss.tools.smooks.configuration.editors.GraphicsConstants;
import org.jboss.tools.smooks.configuration.editors.SmooksMultiFormEditor;
import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils;
import org.jboss.tools.smooks.model.common.AbstractAnyType;
/**
* @author Dart (dpeng@redhat.com)
*
*/
public class ValidateResultLabelDecorator extends LabelDecorator implements ILabelDecorator, ILightweightLabelDecorator {
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.ILabelDecorator#decorateImage(org.eclipse.swt
* .graphics.Image, java.lang.Object)
*/
public Image decorateImage(Image image, Object element) {
return null;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.ILabelDecorator#decorateText(java.lang.String,
* java.lang.Object)
*/
public String decorateText(String text, Object element) {
return null;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.
* jface.viewers.ILabelProviderListener)
*/
public void addListener(ILabelProviderListener listener) {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
*/
public void dispose() {
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang
* .Object, java.lang.String)
*/
public boolean isLabelProperty(Object element, String property) {
return true;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse
* .jface.viewers.ILabelProviderListener)
*/
public void removeListener(ILabelProviderListener listener) {
}
protected int markErrorWarningPropertyUI(Diagnostic diagnostic, Object model) {
if (diagnostic == null || diagnostic.getSeverity() == Diagnostic.OK) {
return -1;
}
List<?> data = diagnostic.getData();
for (Object object : data) {
object = AdapterFactoryEditingDomain.unwrap(object);
if (object instanceof EObject) {
EObject eObject = (EObject) object;
if (eObject.equals(model)) {
return diagnostic.getSeverity();
}
}
}
List<Diagnostic> children = diagnostic.getChildren();
for (Iterator<?> iterator = children.iterator(); iterator.hasNext();) {
Diagnostic diagnostic2 = (Diagnostic) iterator.next();
int i = markErrorWarningPropertyUI(diagnostic2, model);
if (i != -1) {
return i;
}
}
return -1;
}
protected int markErrorWarningPropertyUI(List<Diagnostic> Listdiagnostic, Object model) {
int type = -1;
for (Iterator<?> iterator = Listdiagnostic.iterator(); iterator.hasNext();) {
Diagnostic diagnostic = (Diagnostic) iterator.next();
type = markErrorWarningPropertyUI(diagnostic, model);
if (type == -1) {
continue;
}
if (type == Diagnostic.ERROR) {
return type;
}
}
return type;
}
public void decorate(Object element, IDecoration d) {
try {
element = AdapterFactoryEditingDomain.unwrap(element);
if (element instanceof AbstractAnyType) {
final IResource resource = SmooksUIUtils.getResource((EObject) element);
final IDecoration decoration = d;
final Object fm = element;
Display.getDefault().syncExec(new Runnable() {
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
public void run() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window == null) {
return;
}
SmooksMultiFormEditor editor = (SmooksMultiFormEditor) window.getActivePage().findEditor(
new FileEditorInput((IFile) resource));
if (editor == null)
return;
int type = -1;
type = markErrorWarningPropertyUI(editor.getDiagnosticList(), fm);
if (type == -1)
return;
decoration.addOverlay(null, IDecoration.BOTTOM_RIGHT);
if (type == Diagnostic.ERROR) {
decoration.addOverlay(SmooksConfigurationActivator.getDefault().getImageRegistry()
.getDescriptor(GraphicsConstants.IMAGE_OVR_ERROR), IDecoration.BOTTOM_RIGHT);
}
if (type == Diagnostic.WARNING) {
decoration.addOverlay(SmooksConfigurationActivator.getDefault().getImageRegistry()
.getDescriptor(GraphicsConstants.IMAGE_OVR_WARING), IDecoration.BOTTOM_RIGHT);
}
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public Image decorateImage(Image image, Object element, IDecorationContext context) {
return null;
}
@Override
public String decorateText(String text, Object element, IDecorationContext context) {
return null;
}
@Override
public boolean prepareDecoration(Object element, String originalText, IDecorationContext context) {
return true;
}
}