| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 org.apache.hadoop.eclipse.dfs; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.apache.hadoop.eclipse.ImageLibrary; |
| import org.apache.hadoop.eclipse.server.HadoopServer; |
| import org.apache.hadoop.eclipse.servers.ServerRegistry; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.viewers.ILabelProviderListener; |
| import org.eclipse.jface.viewers.ITreeContentProvider; |
| import org.eclipse.jface.viewers.StructuredViewer; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.widgets.Display; |
| |
| /** |
| * Handles viewing of DFS locations |
| * <p> |
| * |
| * The content handled by this provider is a tree: |
| * |
| * <tt> |
| * <br>DFSLocationsRoot |
| * <br>\_HadoopServer |
| * <br>| \_DfsFolder |
| * <br>| | \_DfsFile |
| * <br>| \_DfsFolder |
| * <br>| ... |
| * <br>\_HadoopServer... |
| * </tt> |
| * |
| * The code should not block here: blocking operations need to be done |
| * asynchronously so as not to freeze the UI! |
| */ |
| public class DFSContentProvider implements ITreeContentProvider, |
| ILabelProvider { |
| |
| /** |
| * The viewer that displays this Tree content |
| */ |
| private Viewer viewer; |
| |
| private StructuredViewer sviewer; |
| |
| private Map<HadoopServer, DFSContent> rootFolders = |
| new HashMap<HadoopServer, DFSContent>(); |
| |
| /** |
| * Constructor: load resources (icons). |
| */ |
| public DFSContentProvider() { |
| } |
| |
| private final DFSLocationsRoot locationsRoot = new DFSLocationsRoot(this); |
| |
| /* |
| * ITreeContentProvider implementation |
| */ |
| |
| /* @inheritDoc */ |
| public Object[] getChildren(Object parent) { |
| |
| if (!(parent instanceof DFSContent)) |
| return null; |
| DFSContent content = (DFSContent) parent; |
| return content.getChildren(); |
| } |
| |
| public Object[] test(Object parentElement) { |
| if (parentElement instanceof DFSLocationsRoot) { |
| return ServerRegistry.getInstance().getServers().toArray(); |
| |
| } else if (parentElement instanceof HadoopServer) { |
| final HadoopServer location = (HadoopServer) parentElement; |
| Object root = rootFolders.get(location); |
| if (root != null) |
| return new Object[] { root }; |
| |
| return new Object[] { "Connecting to DFS..." }; |
| |
| } else if (parentElement instanceof DFSFolder) { |
| DFSFolder folder = (DFSFolder) parentElement; |
| return folder.getChildren(); |
| } |
| |
| return new Object[] { "<Unknown DFSContent>" }; |
| } |
| |
| /* @inheritDoc */ |
| public Object getParent(Object element) { |
| |
| if (element instanceof DFSPath) { |
| return ((DFSPath) element).getParent(); |
| |
| } else if (element instanceof HadoopServer) { |
| return locationsRoot; |
| } |
| |
| return null; |
| } |
| |
| /* @inheritDoc */ |
| public boolean hasChildren(Object element) { |
| if (element instanceof DFSContent) { |
| DFSContent content = (DFSContent) element; |
| return content.hasChildren(); |
| } |
| return false; |
| } |
| |
| /* |
| * IStructureContentProvider implementation |
| */ |
| |
| /* @inheritDoc */ |
| public Object[] getElements(final Object inputElement) { |
| return new Object[] { locationsRoot }; |
| // return ServerRegistry.getInstance().getServers().toArray(); |
| } |
| |
| /* |
| * ILabelProvider implementation |
| */ |
| |
| /* @inheritDoc */ |
| public Image getImage(Object element) { |
| if (element instanceof DFSLocationsRoot) |
| return ImageLibrary.getImage("dfs.browser.root.entry"); |
| |
| else if (element instanceof DFSLocation) |
| return ImageLibrary.getImage("dfs.browser.location.entry"); |
| |
| else if (element instanceof DFSFolder) |
| return ImageLibrary.getImage("dfs.browser.folder.entry"); |
| |
| else if (element instanceof DFSFile) |
| return ImageLibrary.getImage("dfs.browser.file.entry"); |
| |
| return null; |
| } |
| |
| /* @inheritDoc */ |
| public String getText(Object element) { |
| if (element instanceof DFSFile) |
| return ((DFSFile) element).toDetailedString(); |
| |
| return element.toString(); |
| } |
| |
| /* |
| * IBaseLabelProvider implementation |
| */ |
| |
| /* @inheritDoc */ |
| public void addListener(ILabelProviderListener listener) { |
| } |
| |
| /* @inheritDoc */ |
| public void removeListener(ILabelProviderListener listener) { |
| } |
| |
| /* @inheritDoc */ |
| public boolean isLabelProperty(Object element, String property) { |
| return false; |
| } |
| |
| /* |
| * IContentProvider implementation |
| */ |
| |
| /* @inheritDoc */ |
| public void dispose() { |
| } |
| |
| /* @inheritDoc */ |
| public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
| this.viewer = viewer; |
| if ((viewer != null) && (viewer instanceof StructuredViewer)) |
| this.sviewer = (StructuredViewer) viewer; |
| else |
| this.sviewer = null; |
| } |
| |
| /* |
| * Miscellaneous |
| */ |
| |
| /** |
| * Ask the viewer for this content to refresh |
| */ |
| void refresh() { |
| // no display, nothing to update |
| if (this.viewer == null) |
| return; |
| |
| Display.getDefault().asyncExec(new Runnable() { |
| public void run() { |
| DFSContentProvider.this.viewer.refresh(); |
| } |
| }); |
| } |
| |
| /** |
| * Ask the viewer to refresh a single element |
| * |
| * @param content what to refresh |
| */ |
| void refresh(final DFSContent content) { |
| if (this.sviewer != null) { |
| Display.getDefault().asyncExec(new Runnable() { |
| public void run() { |
| DFSContentProvider.this.sviewer.refresh(content); |
| } |
| }); |
| |
| } else { |
| refresh(); |
| } |
| } |
| |
| Viewer getViewer() { |
| return this.viewer; |
| } |
| |
| } |