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

网格计算

开发平台:

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.IOException;
  20. import org.apache.hadoop.eclipse.server.HadoopServer;
  21. import org.eclipse.core.runtime.IProgressMonitor;
  22. import org.eclipse.core.runtime.IStatus;
  23. import org.eclipse.core.runtime.Status;
  24. import org.eclipse.core.runtime.jobs.Job;
  25. /**
  26.  * DFS Content representation of a HDFS location
  27.  */
  28. public class DFSLocation implements DFSContent {
  29.   private final DFSContentProvider provider;
  30.   private final HadoopServer location;
  31.   private DFSContent rootFolder = null;
  32.   DFSLocation(DFSContentProvider provider, HadoopServer server) {
  33.     this.provider = provider;
  34.     this.location = server;
  35.   }
  36.   /* @inheritDoc */
  37.   @Override
  38.   public String toString() {
  39.     return this.location.getLocationName();
  40.   }
  41.   /*
  42.    * Implementation of DFSContent
  43.    */
  44.   /* @inheritDoc */
  45.   public DFSContent[] getChildren() {
  46.     if (this.rootFolder == null) {
  47.       /*
  48.        * DfsFolder constructor might block as it contacts the NameNode: work
  49.        * asynchronously here or this will potentially freeze the UI
  50.        */
  51.       new Job("Connecting to DFS " + location) {
  52.         @Override
  53.         protected IStatus run(IProgressMonitor monitor) {
  54.           try {
  55.             rootFolder = new DFSFolder(provider, location);
  56.             return Status.OK_STATUS;
  57.           } catch (IOException ioe) {
  58.             rootFolder =
  59.                 new DFSMessage("Error: " + ioe.getLocalizedMessage());
  60.             return Status.CANCEL_STATUS;
  61.           } finally {
  62.             // Under all circumstances, update the UI
  63.             provider.refresh(DFSLocation.this);
  64.           }
  65.         }
  66.       }.schedule();
  67.       return new DFSContent[] { new DFSMessage("Connecting to DFS "
  68.           + toString()) };
  69.     }
  70.     return new DFSContent[] { this.rootFolder };
  71.   }
  72.   /* @inheritDoc */
  73.   public boolean hasChildren() {
  74.     return true;
  75.   }
  76.   
  77.   /* @inheritDoc */
  78.   public void refresh() {
  79.     this.rootFolder = null;
  80.     this.provider.refresh(this);
  81.   }
  82.   /*
  83.    * Actions
  84.    */
  85.   
  86.   /**
  87.    * Refresh the location using a new connection
  88.    */
  89.   public void reconnect() {
  90.     this.refresh();
  91.   }
  92. }