/******************************************************************************* * Copyright (c) 2004, 2009 MAKE Technologies Inc. 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: * MAKE Technologies Inc - initial API and implementation * Mariot Chauvin <mariot.chauvin@obeo.fr> - refactoring *******************************************************************************/ package org.eclipse.swtbot.eclipse.gef.finder.finders; import java.util.ArrayList; import java.util.List; import org.eclipse.gef.EditDomain; import org.eclipse.gef.palette.PaletteContainer; import org.eclipse.gef.palette.PaletteEntry; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable; import org.eclipse.swtbot.swt.finder.results.Result; import org.hamcrest.Matcher; /** * A finder for finding {@link PaletteEntry palette entries}. * * @author David Green */ public class PaletteFinder { private final EditDomain editDomain; public PaletteFinder(EditDomain editDomain) { this.editDomain = editDomain; } public List<PaletteEntry> findEntries(final Matcher<?> matcher) { return UIThreadRunnable.syncExec(new Result<List<PaletteEntry>>() { public List<PaletteEntry> run() { List<PaletteEntry> list = new ArrayList<PaletteEntry>(); PaletteRoot paletteRoot = editDomain.getPaletteViewer().getPaletteRoot(); find(list,paletteRoot,matcher); return list; } }); } protected void find(List<PaletteEntry> list, PaletteContainer container, Matcher<?> matcher) { List<PaletteEntry> children = container.getChildren(); if (children != null) { for (PaletteEntry entry: children) { if (matcher.matches(entry)) { list.add(entry); } else if (entry instanceof PaletteContainer) { find(list,(PaletteContainer)entry,matcher); } } } } }