/*******************************************************************************
* Copyright (c) 2007 Jeff Mesnil
* 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
*******************************************************************************/
package net.jmesnil.jmx.ui.internal.views.explorer;
import java.util.ArrayList;
import java.util.List;
import net.jmesnil.jmx.resources.MBeanFeatureInfoWrapper;
import net.jmesnil.jmx.ui.internal.tree.DomainNode;
import net.jmesnil.jmx.ui.internal.tree.Node;
import net.jmesnil.jmx.ui.internal.tree.ObjectNameNode;
import net.jmesnil.jmx.ui.internal.tree.Root;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
class MBeanExplorerContentProvider implements
IStructuredContentProvider, ITreeContentProvider {
private boolean flatLayout;
public MBeanExplorerContentProvider() {
}
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {
return getChildren(parent);
}
public Object getParent(Object child) {
if (child instanceof Node) {
Node node = (Node) child;
return node.getParent();
}
return null;
}
@SuppressWarnings("unchecked")//$NON-NLS-1$
public Object[] getChildren(Object parent) {
if (parent instanceof Root) {
Root root = (Root) parent;
return root.getChildren();
}
if (parent instanceof DomainNode) {
DomainNode node = (DomainNode) parent;
if (flatLayout) {
List objectNameNodes = findOnlyObjectNames(node);
return objectNameNodes.toArray();
} else {
return node.getChildren();
}
}
if (parent instanceof ObjectNameNode) {
ObjectNameNode node = (ObjectNameNode) parent;
return node.getMbeanInfoWrapper().getMBeanFeatureInfos();
}
if (parent instanceof Node) {
Node node = (Node) parent;
return node.getChildren();
}
return new Object[0];
}
@SuppressWarnings("unchecked")//$NON-NLS-1$
private List findOnlyObjectNames(Node node) {
List objectNameNodes = new ArrayList();
Node[] children = node.getChildren();
for (int i = 0; i < children.length; i++) {
Node child = children[i];
if (child instanceof ObjectNameNode) {
objectNameNodes.add(child);
} else {
objectNameNodes.addAll(findOnlyObjectNames(child));
}
}
return objectNameNodes;
}
public boolean hasChildren(Object parent) {
if (parent instanceof ObjectNameNode) {
ObjectNameNode node = (ObjectNameNode) parent;
return (node.getMbeanInfoWrapper().getMBeanFeatureInfos().length > 0);
}
if (parent instanceof Node) {
Node node = (Node) parent;
return (node.getChildren().length > 0);
}
if (parent instanceof MBeanFeatureInfoWrapper) {
return false;
}
return true;
}
public void setFlatLayout(boolean state) {
flatLayout = state;
}
}