| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.motorolamobility.studio.android.db.core.ui.tree; |
| |
| import org.eclipse.jface.viewers.ILazyTreeContentProvider; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.jface.viewers.Viewer; |
| |
| import com.motorolamobility.studio.android.db.core.ui.AbstractTreeNode; |
| import com.motorolamobility.studio.android.db.core.ui.ITreeNode; |
| import com.motorolamobility.studio.android.db.core.ui.LoadingNode; |
| |
| /** |
| * Content provider that uses {@link AbstractTreeNode} as the model |
| */ |
| public class DatabaseExplorerTreeContentProvider implements ILazyTreeContentProvider |
| { |
| |
| private final TreeViewer treeViewer; |
| |
| public DatabaseExplorerTreeContentProvider(TreeViewer viewer) |
| { |
| this.treeViewer = viewer; |
| } |
| |
| public void dispose() |
| { |
| //Nothing |
| } |
| |
| public void inputChanged(Viewer viewer, Object oldInput, Object newInput) |
| { |
| //Nothing |
| } |
| |
| public Object getParent(Object element) |
| { |
| if (element instanceof AbstractTreeNode) |
| { |
| ITreeNode treeNode = (ITreeNode) element; |
| return treeNode.getParent(); |
| } |
| return null; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.viewers.ILazyTreeContentProvider#updateElement(java.lang.Object, int) |
| */ |
| public void updateElement(Object parent, int index) |
| { |
| if (parent instanceof ITreeNode) |
| { |
| ITreeNode parentTreeNode = (ITreeNode) parent; |
| ITreeNode child = null; |
| if ((index == 0) && parentTreeNode.isLoading()) |
| { |
| child = new LoadingNode(parentTreeNode); |
| } |
| else |
| { |
| child = parentTreeNode.getChild(index); |
| } |
| if (child != null) |
| { |
| treeViewer.replace(parent, index, child); |
| if (!child.isLeaf()) |
| { |
| treeViewer.setHasChildren(child, true); |
| } |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.viewers.ILazyTreeContentProvider#updateChildCount(java.lang.Object, int) |
| */ |
| public void updateChildCount(Object element, int currentChildCount) |
| { |
| if (element instanceof AbstractTreeNode) |
| { |
| ITreeNode treeNode = (ITreeNode) element; |
| treeNode.refreshAsync(); |
| int childCount = 0; |
| if (treeNode.isLoading()) |
| { |
| childCount = 1; |
| } |
| else |
| { |
| childCount = treeNode.getChildren().size(); |
| } |
| if (childCount != currentChildCount) |
| { |
| treeViewer.setChildCount(element, childCount); |
| } |
| } |
| } |
| } |