From f14600bb3b8df15341c197411c39b3ff8bce1094 Mon Sep 17 00:00:00 2001 From: Vincent Aravantinos <aravantinos@fortiss.org> Date: Tue, 12 Apr 2016 07:47:23 +0000 Subject: [PATCH] improves the warning icons refs 2334 --- .../trunk/plugin.xml | 15 +------ .../ui/internal/ConstraintLabelDecorator.java | 36 +++++++-------- .../kernel/ui/internal/MarkerService.java | 8 ++-- .../kernel/ui/util/ConstraintsUtils.java | 45 +++++++++++++++++++ .../extension/data/IConstraintViolation.java | 16 +++++-- 5 files changed, 82 insertions(+), 38 deletions(-) diff --git a/org.fortiss.tooling.kernel.ui/trunk/plugin.xml b/org.fortiss.tooling.kernel.ui/trunk/plugin.xml index eae388ffc..951c33d73 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/plugin.xml +++ b/org.fortiss.tooling.kernel.ui/trunk/plugin.xml @@ -112,25 +112,12 @@ </extension> <extension point="org.eclipse.ui.decorators"> - <decorator - class="org.fortiss.tooling.kernel.ui.internal.MarkerServiceLabelDecorator" - id="org.fortiss.tooling.kernel.ui.internal.MarkerServiceLabelDecorator" - label="Marker Service Decorator" - lightweight="true" - location="BOTTOM_LEFT" - state="true"> - <enablement> - <objectClass - name="org.eclipse.emf.ecore.EObject"> - </objectClass> - </enablement> - </decorator> <decorator class="org.fortiss.tooling.kernel.ui.internal.ConstraintLabelDecorator" id="org.fortiss.tooling.kernel.ui.internal.ConstraintLabelDecorator" label="Constraint Decorator" lightweight="true" - location="TOP_LEFT" + location="BOTTOM_LEFT" state="true"> <enablement> <objectClass diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ConstraintLabelDecorator.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ConstraintLabelDecorator.java index d7546958c..7495f0902 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ConstraintLabelDecorator.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ConstraintLabelDecorator.java @@ -17,14 +17,14 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui.internal; +import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.BaseLabelProvider; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.ILightweightLabelDecorator; -import org.fortiss.tooling.kernel.model.constraints.IConstrained; -import org.fortiss.tooling.kernel.ui.ToolingKernelUIActivator; +import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity; +import org.fortiss.tooling.kernel.ui.ESharedImages; import org.fortiss.tooling.kernel.ui.service.IMarkerService; import org.fortiss.tooling.kernel.ui.util.ConstraintsUtils; -import org.fortiss.tooling.kernel.ui.util.ConstraintsUtils.ClassifiedStatuses; /** * Label decorator for the {@link IMarkerService} decorations: errors, warnings, etc. @@ -40,21 +40,21 @@ public final class ConstraintLabelDecorator extends BaseLabelProvider implements /** {@inheritDoc} */ @Override public void decorate(Object element, IDecoration decoration) { - if(element instanceof IConstrained) { - IConstrained constrained = (IConstrained)element; - ClassifiedStatuses classifiedStatuses = - ConstraintsUtils.getClassifiedStatuses(constrained); - if(!classifiedStatuses.failedStatuses.isEmpty()) { - decoration.addOverlay(ToolingKernelUIActivator - .getImageDescriptor("icons/constraintFailOverlay.png")); - } else if(!classifiedStatuses.errorStatuses.isEmpty()) { - decoration.addOverlay(ToolingKernelUIActivator - .getImageDescriptor("icons/constraintErrorOverlay.png")); - } else if(!classifiedStatuses.outdatedStatuses.isEmpty()) { - decoration.addOverlay(ToolingKernelUIActivator - .getImageDescriptor("icons/constraintOutdatedOverlay.png")); - } else if(!classifiedStatuses.failedStatuses.isEmpty()) { - decoration.addOverlay(null); + if(element instanceof EObject) { + ESeverity sev = IMarkerService.INSTANCE.getHighestViolationSeverity((EObject)element); + sev = ConstraintsUtils.augmentSeverityWithConstraintSeverity(sev, (EObject)element); + switch(sev) { + case FATAL: + decoration.addOverlay(ESharedImages.FATAL_OVERLAY.getImageDescriptor()); + break; + case ERROR: + decoration.addOverlay(ESharedImages.ERROR_OVERLAY.getImageDescriptor()); + break; + case WARNING: + decoration.addOverlay(ESharedImages.WARNING_OVERLAY.getImageDescriptor()); + break; + default: + // ignore info and debug } } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/MarkerService.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/MarkerService.java index 5850a190e..f924e917d 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/MarkerService.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/MarkerService.java @@ -41,10 +41,12 @@ import org.eclipse.ui.progress.UIJob; import org.fortiss.tooling.kernel.extension.data.IConstraintViolation; import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; +import org.fortiss.tooling.kernel.model.constraints.IConstrained; import org.fortiss.tooling.kernel.service.IPersistencyService; import org.fortiss.tooling.kernel.service.listener.IPersistencyServiceListener; import org.fortiss.tooling.kernel.ui.internal.views.MarkerViewPart; import org.fortiss.tooling.kernel.ui.service.IMarkerService; +import org.fortiss.tooling.kernel.ui.util.ConstraintsUtils; /** * This class implements the {@link IMarkerService} interface. @@ -259,10 +261,10 @@ public class MarkerService implements IMarkerService, IPersistencyServiceListene /** Returns the highest severity for the given element. */ public ESeverity getHighestSeverity(EObject element) { ESeverity sev = highestSeverityMap.get(element); - if(sev == null) { - return ESeverity.lowest(); + if(element instanceof IConstrained) { + sev = ConstraintsUtils.augmentSeverityWithConstraintSeverity(sev, element); } - return sev; + return sev == null ? ESeverity.lowest() : sev; } /** Updates the cache entry. */ diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/util/ConstraintsUtils.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/util/ConstraintsUtils.java index 01cbd0699..a5e02a372 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/util/ConstraintsUtils.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/util/ConstraintsUtils.java @@ -17,9 +17,14 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui.util; +import static org.fortiss.tooling.kernel.extension.data.IConstraintViolation.SEVERITY_DIRECT_COMPARATOR; + import java.util.ArrayList; import java.util.List; +import org.eclipse.emf.ecore.EObject; +import org.fortiss.tooling.kernel.extension.data.IConstraintViolation; +import org.fortiss.tooling.kernel.extension.data.IConstraintViolation.ESeverity; import org.fortiss.tooling.kernel.model.constraints.ConstraintsFactory; import org.fortiss.tooling.kernel.model.constraints.ErrorVerificationStatus; import org.fortiss.tooling.kernel.model.constraints.FailVerificationStatus; @@ -101,4 +106,44 @@ public class ConstraintsUtils { } return res; } + + /** + * @param c + * @return {@link ESeverity} corresponding to the status of the constraint <code>c</code> + */ + public static ESeverity getConstraintSeverity(IConstraint c) { + if(c.getVerificationStatus() instanceof FailVerificationStatus) { + return ESeverity.ERROR; + } else if(c.getVerificationStatus() instanceof ErrorVerificationStatus) { + return ESeverity.ERROR; + } else if(c.getVerificationStatus() instanceof OutdatedVerificationStatus) { + return ESeverity.WARNING; + } else { + return ESeverity.lowest(); + } + } + + /** + * @param c + * @return Severity corresponding to the status of the constraints of <code>c</code>. + */ + public static ESeverity getSeverity(IConstrained c) { + try { + return c.getConstraints().stream().map(cstr -> getConstraintSeverity(cstr)) + .sorted(IConstraintViolation.SEVERITY_DIRECT_COMPARATOR).findFirst().get(); + } catch(Exception e) { + return null; + } + } + + public static ESeverity augmentSeverityWithConstraintSeverity(ESeverity sev, + EObject modelElement) { + if(modelElement instanceof IConstrained) { + ESeverity sev2 = ConstraintsUtils.getSeverity((IConstrained)modelElement); + if(sev == null || (sev2 != null && SEVERITY_DIRECT_COMPARATOR.compare(sev2, sev) < 0)) { + sev = sev2; + } + } + return sev == null ? ESeverity.lowest() : sev; + } } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/IConstraintViolation.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/IConstraintViolation.java index 7c42012c4..b3aaba7e3 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/IConstraintViolation.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/IConstraintViolation.java @@ -101,6 +101,16 @@ public interface IConstraintViolation<T extends EObject> extends IAdaptable { void applyQuickFix(); } + /** Severity comparator. To use directly with lists of severities. */ + public static final Comparator<ESeverity> SEVERITY_DIRECT_COMPARATOR = + new Comparator<ESeverity>() { + /** {@inheritDoc} */ + @Override + public int compare(ESeverity sev0, ESeverity sev1) { + return ESeverity.getIntSeverity(sev0) - ESeverity.getIntSeverity(sev1); + } + }; + /** Stores the severity comparator used during violation sorting. */ public static final Comparator<IConstraintViolation<? extends EObject>> SEVERITY_COMPARATOR = new Comparator<IConstraintViolation<? extends EObject>>() { @@ -108,9 +118,9 @@ public interface IConstraintViolation<T extends EObject> extends IAdaptable { @Override public int compare(IConstraintViolation<? extends EObject> arg0, IConstraintViolation<? extends EObject> arg1) { - int sev0 = ESeverity.getIntSeverity(arg0.getSeverity()); - int sev1 = ESeverity.getIntSeverity(arg1.getSeverity()); - return sev0 - sev1; + return SEVERITY_DIRECT_COMPARATOR.compare(arg0.getSeverity(), + arg1.getSeverity()); } }; + } -- GitLab