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 GenericFileNameParserGenericFileNameParser.html#GenericFileNameParser">GenericFileNameParser INSTANCE = new GenericFileNameParser(); 30 31 /** 32 * Gets the singleton instance. 33 * 34 * @return the singleton instance. 35 */ 36 public static GenericFileNameParser getInstance() { 37 return INSTANCE; 38 } 39 40 /* 41 * ... this is why why need this: here the rootFilename can only be "/" (see above) put this "/" is also in the 42 * pathname so its of no value for the LocalFileName instance 43 */ 44 @Override 45 protected FileName createFileName(final String scheme, final String rootFile, final String path, 46 final FileType type) { 47 return new LocalFileName(scheme, "", path, type); 48 } 49 50 /** 51 * Extracts the root prefix from a URI string, which has had the scheme removed. 52 */ 53 @Override 54 protected String extractRootPrefix(final String uri, final StringBuilder name) throws FileSystemException { 55 // TODO - this class isn't generic at all. Need to fix this 56 57 // Looking for <sep> 58 if (StringUtils.isEmpty(name) || name.charAt(0) != '/') { 59 throw new FileSystemException("vfs.provider.local/not-absolute-file-name.error", uri); 60 } 61 62 // do not strip the separator, BUT also return it ... 63 return "/"; 64 } 65 }