DFSContentProvider.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:6k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.eclipse.dfs;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. import org.apache.hadoop.eclipse.ImageLibrary;
  22. import org.apache.hadoop.eclipse.server.HadoopServer;
  23. import org.apache.hadoop.eclipse.servers.ServerRegistry;
  24. import org.eclipse.jface.viewers.ILabelProvider;
  25. import org.eclipse.jface.viewers.ILabelProviderListener;
  26. import org.eclipse.jface.viewers.ITreeContentProvider;
  27. import org.eclipse.jface.viewers.StructuredViewer;
  28. import org.eclipse.jface.viewers.Viewer;
  29. import org.eclipse.swt.graphics.Image;
  30. import org.eclipse.swt.widgets.Display;
  31. /**
  32.  * Handles viewing of DFS locations
  33.  * <p>
  34.  * 
  35.  * The content handled by this provider is a tree:
  36.  * 
  37.  * <tt>
  38.  * <br>DFSLocationsRoot
  39.  * <br>_HadoopServer
  40.  * <br>|  _DfsFolder
  41.  * <br>|  |  _DfsFile
  42.  * <br>|  _DfsFolder
  43.  * <br>| ...
  44.  * <br>_HadoopServer...
  45.  * </tt>
  46.  * 
  47.  * The code should not block here: blocking operations need to be done
  48.  * asynchronously so as not to freeze the UI!
  49.  */
  50. public class DFSContentProvider implements ITreeContentProvider,
  51.     ILabelProvider {
  52.   /**
  53.    * The viewer that displays this Tree content
  54.    */
  55.   private Viewer viewer;
  56.   private StructuredViewer sviewer;
  57.   private Map<HadoopServer, DFSContent> rootFolders =
  58.       new HashMap<HadoopServer, DFSContent>();
  59.   /**
  60.    * Constructor: load resources (icons).
  61.    */
  62.   public DFSContentProvider() {
  63.   }
  64.   private final DFSLocationsRoot locationsRoot = new DFSLocationsRoot(this);
  65.   /*
  66.    * ITreeContentProvider implementation
  67.    */
  68.   /* @inheritDoc */
  69.   public Object[] getChildren(Object parent) {
  70.     if (!(parent instanceof DFSContent))
  71.       return null;
  72.     DFSContent content = (DFSContent) parent;
  73.     return content.getChildren();
  74.   }
  75.   public Object[] test(Object parentElement) {
  76.     if (parentElement instanceof DFSLocationsRoot) {
  77.       return ServerRegistry.getInstance().getServers().toArray();
  78.     } else if (parentElement instanceof HadoopServer) {
  79.       final HadoopServer location = (HadoopServer) parentElement;
  80.       Object root = rootFolders.get(location);
  81.       if (root != null)
  82.         return new Object[] { root };
  83.       return new Object[] { "Connecting to DFS..." };
  84.     } else if (parentElement instanceof DFSFolder) {
  85.       DFSFolder folder = (DFSFolder) parentElement;
  86.       return folder.getChildren();
  87.     }
  88.     return new Object[] { "<Unknown DFSContent>" };
  89.   }
  90.   /* @inheritDoc */
  91.   public Object getParent(Object element) {
  92.     if (element instanceof DFSPath) {
  93.       return ((DFSPath) element).getParent();
  94.     } else if (element instanceof HadoopServer) {
  95.       return locationsRoot;
  96.     }
  97.     return null;
  98.   }
  99.   /* @inheritDoc */
  100.   public boolean hasChildren(Object element) {
  101.     if (element instanceof DFSContent) {
  102.       DFSContent content = (DFSContent) element;
  103.       return content.hasChildren();
  104.     }
  105.     return false;
  106.   }
  107.   /*
  108.    * IStructureContentProvider implementation
  109.    */
  110.   /* @inheritDoc */
  111.   public Object[] getElements(final Object inputElement) {
  112.     return new Object[] { locationsRoot };
  113.     // return ServerRegistry.getInstance().getServers().toArray();
  114.   }
  115.   /*
  116.    * ILabelProvider implementation
  117.    */
  118.   /* @inheritDoc */
  119.   public Image getImage(Object element) {
  120.     if (element instanceof DFSLocationsRoot)
  121.       return ImageLibrary.getImage("dfs.browser.root.entry");
  122.     else if (element instanceof DFSLocation)
  123.       return ImageLibrary.getImage("dfs.browser.location.entry");
  124.     else if (element instanceof DFSFolder)
  125.       return ImageLibrary.getImage("dfs.browser.folder.entry");
  126.     else if (element instanceof DFSFile)
  127.       return ImageLibrary.getImage("dfs.browser.file.entry");
  128.     return null;
  129.   }
  130.   /* @inheritDoc */
  131.   public String getText(Object element) {
  132.     if (element instanceof DFSFile)
  133.       return ((DFSFile) element).toDetailedString();
  134.     return element.toString();
  135.   }
  136.   /*
  137.    * IBaseLabelProvider implementation
  138.    */
  139.   /* @inheritDoc */
  140.   public void addListener(ILabelProviderListener listener) {
  141.   }
  142.   /* @inheritDoc */
  143.   public void removeListener(ILabelProviderListener listener) {
  144.   }
  145.   /* @inheritDoc */
  146.   public boolean isLabelProperty(Object element, String property) {
  147.     return false;
  148.   }
  149.   /*
  150.    * IContentProvider implementation
  151.    */
  152.   /* @inheritDoc */
  153.   public void dispose() {
  154.   }
  155.   /* @inheritDoc */
  156.   public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
  157.     this.viewer = viewer;
  158.     if ((viewer != null) && (viewer instanceof StructuredViewer))
  159.       this.sviewer = (StructuredViewer) viewer;
  160.     else
  161.       this.sviewer = null;
  162.   }
  163.   /*
  164.    * Miscellaneous
  165.    */
  166.   /**
  167.    * Ask the viewer for this content to refresh
  168.    */
  169.   void refresh() {
  170.     // no display, nothing to update
  171.     if (this.viewer == null)
  172.       return;
  173.     Display.getDefault().asyncExec(new Runnable() {
  174.       public void run() {
  175.         DFSContentProvider.this.viewer.refresh();
  176.       }
  177.     });
  178.   }
  179.   /**
  180.    * Ask the viewer to refresh a single element
  181.    * 
  182.    * @param content what to refresh
  183.    */
  184.   void refresh(final DFSContent content) {
  185.     if (this.sviewer != null) {
  186.       Display.getDefault().asyncExec(new Runnable() {
  187.         public void run() {
  188.           DFSContentProvider.this.sviewer.refresh(content);
  189.         }
  190.       });
  191.     } else {
  192.       refresh();
  193.     }
  194.   }
  195.   Viewer getViewer() {
  196.     return this.viewer;
  197.   }
  198. }