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.vfs2.provider.local; 18 19 import org.apache.commons.lang3.StringUtils; 20 import org.apache.commons.vfs2.FileName; 21 import org.apache.commons.vfs2.FileSystemException; 22 import org.apache.commons.vfs2.FileType; 23 24 /** 25 * A general-purpose file name parser. 26 */ 27 public class GenericFileNameParser extends LocalFileNameParser { 28 29 private static final GenericFileNameParser INSTANCE = new GenericFileNameParser(); 30 31 /** 32 * Gets the singleton instance, never null. 33 * 34 * @return the singleton instance. 35 */ 36 public static GenericFileNameParser getInstance() { 37 return INSTANCE; 38 } 39 40 /** 41 * Constructs a new instance. 42 */ 43 public GenericFileNameParser() { 44 // empty 45 } 46 47 /* 48 * Here the rootFileName can only be "/" (see above) put this "/" is also in the 49 * path name so its of no value for the LocalFileName instance 50 */ 51 @Override 52 protected FileName createFileName(final String scheme, final String rootFile, final String path, 53 final FileType type) { 54 return new LocalFileName(scheme, "", path, type); 55 } 56 57 /** 58 * Extracts the root prefix from a URI string, which has had the scheme removed. 59 */ 60 @Override 61 protected String extractRootPrefix(final String uri, final StringBuilder name) throws FileSystemException { 62 // TODO - this class isn't generic at all. Need to fix this 63 // Looking for "/" 64 final String prefix = "/"; 65 if (!StringUtils.startsWith(name, prefix)) { 66 throw new FileSystemException("vfs.provider.local/not-absolute-file-name.error", uri); 67 } 68 // do not strip the separator, BUT also return it ... 69 return prefix; 70 } 71 }