/*******************************************************************************
* Copyright (c) 2013 AGETO Service GmbH 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:
* Gunnar Wagenknecht - initial API and implementation
*******************************************************************************/
package org.eclipse.gyrex.admin.ui.internal.preferences;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.gyrex.admin.ui.internal.AdminUiActivator;
import org.eclipse.gyrex.admin.ui.internal.widgets.AdminPageWithTree;
import org.eclipse.gyrex.admin.ui.internal.widgets.PatternFilter;
import org.eclipse.core.runtime.preferences.IPreferencesService;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
public class PreferencesExplorer extends AdminPageWithTree {
static class ViewContentProvider implements ITreeContentProvider {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
private static final Object[] NO_CHILDREN = new Object[0];
@Override
public void dispose() {
}
@Override
public Object[] getChildren(final Object parent) {
return getElements(parent);
}
@Override
public Object[] getElements(final Object parent) {
if (parent instanceof Preferences) {
final Preferences node = (Preferences) parent;
try {
final List<Object> children = new ArrayList<Object>();
for (final String name : node.childrenNames()) {
children.add(node.node(name));
}
for (final String name : node.keys()) {
children.add(name + "=" + StringUtils.left(node.get(name, StringUtils.EMPTY), 70));
}
return children.toArray();
} catch (final BackingStoreException e) {
return new String[] { ExceptionUtils.getRootCauseMessage(e) };
}
} else
return NO_CHILDREN;
}
@Override
public Object getParent(final Object element) {
if (element instanceof Preferences)
return ((Preferences) element).parent();
return null;
}
@Override
public boolean hasChildren(final Object element) {
if (element instanceof Preferences) {
try {
return (((Preferences) element).childrenNames().length > 0) || (((Preferences) element).keys().length > 0);
} catch (final BackingStoreException e) {
// try again (or report exception)
return true;
}
} else
return false;
}
@Override
public void inputChanged(final Viewer v, final Object oldInput, final Object newInput) {
}
}
public PreferencesExplorer() {
super(0);
setTitle("Preferences Explorer");
setTitleToolTip("Browse Preferences");
}
@Override
protected void createButtons(final Composite parent) {
// no buttons
}
@Override
protected ITreeContentProvider createContentProvider() {
return new ViewContentProvider();
}
@Override
protected Control createHeader(final Composite parent) {
// no header
return null;
}
@Override
protected PatternFilter createPatternFilter() {
final PatternFilter filter = new PatternFilter();
filter.setIncludeLeadingWildcard(true);
return filter;
}
@Override
protected String getColumnLabel(final int column) {
// no columns
return null;
}
@Override
protected String getElementLabel(final Object element, final int column) {
if (element instanceof Preferences)
return ((Preferences) element).name();
else
return String.valueOf(element);
}
@Override
protected Object getViewerInput() {
return AdminUiActivator.getInstance().getService(IPreferencesService.class).getRootNode();
}
@Override
protected boolean isColumnSortable(final int column) {
return false;
}
@Override
protected void refresh() {
getTreeViewer().setInput(getViewerInput());
}
@Override
protected void updateButtons() {
// no buttons
}
}