View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  package org.apache.commons.vfs.provider.local;
    18
    19  import org.apache.commons.vfs.FileName;
    20  import org.apache.commons.vfs.FileSystemException;
    21  import org.apache.commons.vfs.FileType;
    22  import org.apache.commons.vfs.provider.AbstractFileNameParser;
    23  import org.apache.commons.vfs.provider.UriParser;
    24  import org.apache.commons.vfs.provider.VfsComponentContext;
    25
    26  /***
    27   * A name parser.
    28   *
    29   * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
    30   * @version $Revision: 480428 $ $Date: 2006-11-29 07:15:24 +0100 (Mi, 29 Nov 2006) $
    31   */
    32  public abstract class LocalFileNameParser extends AbstractFileNameParser
    33  {
    34      /***
    35       * Determines if a name is an absolute file name.
    36       */
    37      public boolean isAbsoluteName(final String name)
    38      {
    39          // TODO - this is yucky
    40          StringBuffer b = new StringBuffer(name);
    41          try
    42          {
    43              UriParser.fixSeparators(b);
    44              extractRootPrefix(name, b);
    45              return true;
    46          }
    47          catch (FileSystemException e)
    48          {
    49              return false;
    50          }
    51      }
    52
    53      /***
    54       * Pops the root prefix off a URI, which has had the scheme removed.
    55       */
    56      protected abstract String extractRootPrefix(final String uri,
    57                                                  final StringBuffer name)
    58          throws FileSystemException;
    59
    60
    61      public FileName parseUri(final VfsComponentContext context, FileName base, final String filename) throws FileSystemException
    62      {
    63          final StringBuffer name = new StringBuffer();
    64
    65          // Extract the scheme
    66          String scheme = UriParser.extractScheme(filename, name);
    67          if (scheme == null)
    68          {
    69              scheme = "file";
    70          }
    71
    72          // Remove encoding, and adjust the separators
    73          UriParser.canonicalizePath(name, 0, name.length(), this);
    74
    75          UriParser.fixSeparators(name);
    76
    77          // Extract the root prefix
    78          final String rootFile = extractRootPrefix(filename, name);
    79
    80          // Normalise the path
    81          FileType fileType = UriParser.normalisePath(name);
    82
    83          final String path = name.toString();
    84
    85          return createFileName(
    86              scheme,
    87              rootFile,
    88              path,
    89              fileType);
    90      }
    91
    92      protected abstract FileName createFileName(String scheme, final String rootFile, final String path, final FileType type);
    93  }