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

网格计算

开发平台:

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.io.File;
  20. import java.io.IOException;
  21. import java.util.logging.Logger;
  22. import org.apache.hadoop.hdfs.DistributedFileSystem;
  23. import org.apache.hadoop.eclipse.ErrorMessageDialog;
  24. import org.apache.hadoop.eclipse.server.ConfProp;
  25. import org.apache.hadoop.eclipse.server.HadoopServer;
  26. import org.apache.hadoop.fs.FileSystem;
  27. import org.apache.hadoop.fs.Path;
  28. import org.eclipse.core.runtime.IProgressMonitor;
  29. import org.eclipse.jface.dialogs.MessageDialog;
  30. /**
  31.  * DFS Path handling for DFS
  32.  */
  33. public abstract class DFSPath implements DFSContent {
  34.   protected final DFSContentProvider provider;
  35.   protected HadoopServer location;
  36.   private DistributedFileSystem dfs = null;
  37.   protected final Path path;
  38.   protected final DFSPath parent;
  39.   /**
  40.    * For debugging purpose
  41.    */
  42.   static Logger log = Logger.getLogger(DFSPath.class.getName());
  43.   /**
  44.    * Create a path representation for the given location in the given viewer
  45.    * 
  46.    * @param location
  47.    * @param path
  48.    * @param viewer
  49.    */
  50.   public DFSPath(DFSContentProvider provider, HadoopServer location)
  51.       throws IOException {
  52.     this.provider = provider;
  53.     this.location = location;
  54.     this.path = new Path("/");
  55.     this.parent = null;
  56.   }
  57.   /**
  58.    * Create a sub-path representation for the given parent path
  59.    * 
  60.    * @param parent
  61.    * @param path
  62.    */
  63.   protected DFSPath(DFSPath parent, Path path) {
  64.     this.provider = parent.provider;
  65.     this.location = parent.location;
  66.     this.dfs = parent.dfs;
  67.     this.parent = parent;
  68.     this.path = path;
  69.   }
  70.   protected void dispose() {
  71.     // Free the DFS connection
  72.   }
  73.   /* @inheritDoc */
  74.   @Override
  75.   public String toString() {
  76.     if (path.equals("/")) {
  77.       return location.getConfProp(ConfProp.FS_DEFAULT_URI);
  78.     } else {
  79.       return this.path.getName();
  80.     }
  81.   }
  82.   /**
  83.    * Does a recursive delete of the remote directory tree at this node.
  84.    */
  85.   public void delete() {
  86.     try {
  87.       getDFS().delete(this.path, true);
  88.     } catch (IOException e) {
  89.       e.printStackTrace();
  90.       MessageDialog.openWarning(null, "Delete file",
  91.           "Unable to delete file "" + this.path + ""n" + e);
  92.     }
  93.   }
  94.   public DFSPath getParent() {
  95.     return parent;
  96.   }
  97.   public abstract void refresh();
  98.   /**
  99.    * Refresh the UI element for this content
  100.    */
  101.   public void doRefresh() {
  102.     provider.refresh(this);
  103.   }
  104.   /**
  105.    * Copy the DfsPath to the given local directory
  106.    * 
  107.    * @param directory the local directory
  108.    */
  109.   public abstract void downloadToLocalDirectory(IProgressMonitor monitor,
  110.       File dir);
  111.   public Path getPath() {
  112.     return this.path;
  113.   }
  114.   /**
  115.    * Gets a connection to the DFS
  116.    * 
  117.    * @return a connection to the DFS
  118.    * @throws IOException
  119.    */
  120.   DistributedFileSystem getDFS() throws IOException {
  121.     if (this.dfs == null) {
  122.       FileSystem fs = location.getDFS();
  123.       if (!(fs instanceof DistributedFileSystem)) {
  124.         ErrorMessageDialog.display("DFS Browser",
  125.             "The DFS Browser cannot browse anything else "
  126.                 + "but a Distributed File System!");
  127.         throw new IOException("DFS Browser expects a DistributedFileSystem!");
  128.       }
  129.       this.dfs = (DistributedFileSystem) fs;
  130.     }
  131.     return this.dfs;
  132.   }
  133.   public abstract int computeDownloadWork();
  134. }