/******************************************************************************* * Copyright (c) 2007, 2014 compeople AG 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: * compeople AG - initial API and implementation *******************************************************************************/ package org.eclipse.riena.ui.ridgets.marker; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; import org.eclipse.riena.core.marker.IMarker; import org.eclipse.riena.ui.ridgets.IBasicMarkableRidget; import org.eclipse.riena.ui.ridgets.IRidget; import org.eclipse.riena.ui.ridgets.IRidgetContainer; /** * Utility class for working with markers. * * @since 6.0 * */ public class MarkerUtil { /** * Collects the markers from the given container's children ridgets. Only visible and enabled ridgets will be considered. Markers of ridgets, which are not * visible or not enabled will be not collected. * <p> * Note: The resulting list may contain disabled or invisible markers. * * @param ridgetContainer * the {@link IRidgetContainer}, whose children ridgets will be scanned for markers * @return A collection of the markers, set to the visible and enabled children ridgets. */ public static List<IMarker> getRidgetMarkers(final IRidgetContainer ridgetContainer) { final List<IMarker> combinedMarkers = new ArrayList<IMarker>(); addRidgetMarkers(ridgetContainer, combinedMarkers); return combinedMarkers; } private static void addRidgetMarkers(final IRidget ridget, final List<IMarker> combinedMarkers) { if (ridget instanceof IBasicMarkableRidget && ((IBasicMarkableRidget) ridget).isVisible() && ((IBasicMarkableRidget) ridget).isEnabled()) { addRidgetMarkers((IBasicMarkableRidget) ridget, combinedMarkers); } else if (ridget instanceof IRidgetContainer) { addRidgetMarkers((IRidgetContainer) ridget, combinedMarkers); } } private static void addRidgetMarkers(final IBasicMarkableRidget ridget, final List<IMarker> combinedMarkers) { combinedMarkers.addAll(getNotHiddenMarkers(ridget)); } private static List<? extends IMarker> getNotHiddenMarkers(final IBasicMarkableRidget ridget) { final Collection<? extends IMarker> markers = ridget.getMarkers(); final List<? extends IMarker> notHiddenMarkers = new ArrayList<IMarker>(markers); final Set<Class<IMarker>> hiddenTypes = ridget.getHiddenMarkerTypes(); for (final Class<IMarker> hiddenType : hiddenTypes) { for (final IMarker marker : markers) { if (hiddenType.isAssignableFrom(marker.getClass())) { notHiddenMarkers.remove(marker); } } } return notHiddenMarkers; } private static void addRidgetMarkers(final IRidgetContainer ridgetContainer, final List<IMarker> combinedMarkers) { for (final IRidget ridget : ridgetContainer.getRidgets()) { addRidgetMarkers(ridget, combinedMarkers); } } }