FsUrlStreamHandlerFactory.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.fs;
  19. import java.net.URLStreamHandlerFactory;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. import org.apache.hadoop.conf.Configuration;
  23. /**
  24.  * Factory for URL stream handlers.
  25.  * 
  26.  * There is only one handler whose job is to create UrlConnections. A
  27.  * FsUrlConnection relies on FileSystem to choose the appropriate FS
  28.  * implementation.
  29.  * 
  30.  * Before returning our handler, we make sure that FileSystem knows an
  31.  * implementation for the requested scheme/protocol.
  32.  */
  33. public class FsUrlStreamHandlerFactory implements
  34.     URLStreamHandlerFactory {
  35.   // The configuration holds supported FS implementation class names.
  36.   private Configuration conf;
  37.   // This map stores whether a protocol is know or not by FileSystem
  38.   private Map<String, Boolean> protocols = new HashMap<String, Boolean>();
  39.   // The URL Stream handler
  40.   private java.net.URLStreamHandler handler;
  41.   public FsUrlStreamHandlerFactory() {
  42.     this.conf = new Configuration();
  43.     // force the resolution of the configuration files
  44.     // this is required if we want the factory to be able to handle
  45.     // file:// URLs
  46.     this.conf.getClass("fs.file.impl", null);
  47.     this.handler = new FsUrlStreamHandler(this.conf);
  48.   }
  49.   public FsUrlStreamHandlerFactory(Configuration conf) {
  50.     this.conf = new Configuration(conf);
  51.     // force the resolution of the configuration files
  52.     this.conf.getClass("fs.file.impl", null);
  53.     this.handler = new FsUrlStreamHandler(this.conf);
  54.   }
  55.   public java.net.URLStreamHandler createURLStreamHandler(String protocol) {
  56.     if (!protocols.containsKey(protocol)) {
  57.       boolean known =
  58.           (conf.getClass("fs." + protocol + ".impl", null) != null);
  59.       protocols.put(protocol, known);
  60.     }
  61.     if (protocols.get(protocol)) {
  62.       return handler;
  63.     } else {
  64.       // FileSystem does not know the protocol, let the VM handle this
  65.       return null;
  66.     }
  67.   }
  68. }