/*******************************************************************************
* Copyright (c) 2012 Google, Inc.
* 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:
* Google, Inc. - initial API and implementation
*******************************************************************************/
package com.windowtester.runtime.swt.internal.finder.eclipse.views;
import org.eclipse.ui.views.IViewCategory;
import org.eclipse.ui.views.IViewDescriptor;
import org.eclipse.ui.views.IViewRegistry;
import com.windowtester.runtime.swt.internal.finder.eclipse.WorkbenchFinder;
import com.windowtester.runtime.swt.internal.finder.eclipse.views.ViewFinder.IViewMatcher;
/**
* A helper for navigating and exploring views.
*/
public class ViewExplorer {
public void spelunk() {
IViewDescriptor[] views = getViews();
for (int i = 0; i < views.length; i++) {
IViewDescriptor view = views[i];
// System.out.println(Arrays.toString(view.getCategoryPath()));
System.out.println(view);
System.out.println(findCategoryPath(view));
System.out.println("----");
}
}
private IViewDescriptor[] getViews() {
return getViewRegistry().getViews();
}
public String findCategory(String viewName) {
return findCategoryPath(findView(viewName));
}
public String findCategoryPath(IViewDescriptor view) {
if (view == null)
return null;
IViewCategory[] categories = getViewRegistry().getCategories();
for (int i = 0; i < categories.length; i++) {
IViewCategory category = categories[i];
IViewDescriptor[] views = category.getViews();
for (int j = 0; j < views.length; j++) {
IViewDescriptor candidateView = views[i];
if (view == candidateView)
return category.getLabel();
}
}
// TODO Auto-generated method stub
return null;
}
private IViewRegistry getViewRegistry() {
return WorkbenchFinder.getWorkbench().getViewRegistry();
}
public IViewDescriptor findView(String name) {
if (name == null)
return null;
IViewDescriptor[] views = getViews();
for (int i = 0; i < views.length; i++) {
IViewDescriptor view = views[i];
String label = view.getLabel();
if (label == null)
continue;
if (name.equals(view.getLabel()))
return view;
}
return null;
}
public IViewDescriptor findMatchInRegistry(IViewMatcher matcher) {
IViewDescriptor[] views = getViews();
for (int i = 0; i < views.length; i++) {
IViewDescriptor view = views[i];
if (matcher.matches(view))
return view;
}
return null;
}
}