/** * Path parsing method and returns an array. The last two values of the array are the * * @param mode {@link #PARSE_CANONICAL} : rejects any '.' or '..' / {@link #PARSE_ANY} : accepts '.' or '..' * @param base the base path * @param padding the first index that will be written * @param path the path to parse * @param off the first char to parse * @return the parsed path as a String[] * @throws IllegalArgumentException if the path is not valid */ public static String[] parsePath(int mode, String[] base, int padding, String path, int off) throws IllegalArgumentException { return parsePath(mode, base, padding, path, off, 0); }
/** * Path parsing method and returns an array. The last two values of the array are the * * @param mode {@link #PARSE_CANONICAL} : rejects any '.' or '..' / {@link #PARSE_ANY} : accepts '.' or '..' * @param base the base path * @param padding the first index that will be written * @param path the path to parse * @param off the first char to parse * @return the parsed path as a String[] * @throws IllegalArgumentException if the path is not valid */ public static String[] parsePath(int mode, String[] base, int padding, String path, int off) throws IllegalArgumentException { return parsePath(mode, base, padding, path, off, 0); }
public Path append(String path) throws NullPointerException, IllegalArgumentException { if (path == null) { throw new NullPointerException("No null path accepted"); } if (path.length() > 0 && path.charAt(0) == '/') { throw new IllegalArgumentException("Cannot append absolute path " + path); } String[] atoms = Lexers.parsePath(Lexers.PARSE_ANY, name.identifiers, name.size - 1, path, 0); return create(new Name(atoms, atoms.length - 1), atoms[atoms.length - 1]); }
public Path append(String path) throws NullPointerException, IllegalArgumentException { if (path == null) { throw new NullPointerException("No null path accepted"); } if (path.length() > 0 && path.charAt(0) == '/') { throw new IllegalArgumentException("Cannot append absolute path " + path); } String[] atoms = Lexers.parsePath(Lexers.PARSE_ANY, name.identifiers, name.size - 1, path, 0); return create(new Name(atoms, atoms.length - 1), atoms[atoms.length - 1]); }
int diff = pos - off; if (diff == 0) { return parsePath(mode, base, padding, path, off + 1, size); } else { if (diff == 1 && path.charAt(off) == '.') { case PARSE_ANY: return parsePath(mode, base, padding, path, off + 2, size); default: throw new AssertionError("Should not be here"); return parsePath(mode, base, padding, path, off + 3, size - 1); } else if (padding > 0) { return parsePath(mode, base, padding - 1, path, off + 3, size); } else { throw new IllegalArgumentException("Invalid path"); String[] ret = parsePath(mode, base, padding, path, pos + 1, size + 1); if (ret[at] == null) { ret[at] = path.substring(off, pos);
int diff = pos - off; if (diff == 0) { return parsePath(mode, base, padding, path, off + 1, size); } else { if (diff == 1 && path.charAt(off) == '.') { case PARSE_ANY: return parsePath(mode, base, padding, path, off + 2, size); default: throw new AssertionError("Should not be here"); return parsePath(mode, base, padding, path, off + 3, size - 1); } else if (padding > 0) { return parsePath(mode, base, padding - 1, path, off + 3, size); } else { throw new IllegalArgumentException("Invalid path"); String[] ret = parsePath(mode, base, padding, path, pos + 1, size + 1); if (ret[at] == null) { ret[at] = path.substring(off, pos);
public Path.Absolute resolve(String path) { String[] atoms = Lexers.parsePath(Lexers.PARSE_ANY, identifiers, size, path, 0); return new Path.Absolute(new Name(atoms, atoms.length - 1), atoms[atoms.length - 1]); }
public Path.Absolute resolve(String path) { String[] atoms = Lexers.parsePath(Lexers.PARSE_ANY, identifiers, size, path, 0); return new Path.Absolute(new Name(atoms, atoms.length - 1), atoms[atoms.length - 1]); }
public static Path parse(String path) throws NullPointerException, IllegalArgumentException { boolean absolute = path.length() > 0 && path.charAt(0) == '/'; String[] atoms = Lexers.parsePath(Lexers.PARSE_CANONICAL, EMPTY_STRING_ARRAY, 0, path, 0); if (absolute) { return new Absolute(new Name(atoms, atoms.length - 1), atoms[atoms.length - 1]); } else { return new Relative(new Name(atoms, atoms.length - 1), atoms[atoms.length - 1]); } }
public static Path parse(String path) throws NullPointerException, IllegalArgumentException { boolean absolute = path.length() > 0 && path.charAt(0) == '/'; String[] atoms = Lexers.parsePath(Lexers.PARSE_CANONICAL, EMPTY_STRING_ARRAY, 0, path, 0); if (absolute) { return new Absolute(new Name(atoms, atoms.length - 1), atoms[atoms.length - 1]); } else { return new Relative(new Name(atoms, atoms.length - 1), atoms[atoms.length - 1]); } }