@Override public PathImpl schemeWalk(String userPath,Map<String,Object> attributes,String filePath,int offset){
  int length=filePath.length();
  if (length <= offset || filePath.charAt(offset) != '(')   return super.schemeWalk(userPath,attributes,filePath,offset);
  MergePath mergePath=createMergePath();
  mergePath.setUserPath(userPath);
  int head=++offset;
  int tail=head;
  while (tail < length) {
    int ch=filePath.charAt(tail);
    if (ch == ')') {
      if (head + 1 != tail) {
        String subPath=filePath.substring(head,tail);
        if (subPath.startsWith("(") && subPath.endsWith(")"))         subPath=subPath.substring(1,subPath.length() - 1);
        mergePath.addMergePath(VfsOld.lookup(subPath));
      }
      if (tail + 1 == length)       return mergePath;
 else       return mergePath.fsWalk(userPath,attributes,filePath.substring(tail + 1));
    }
 else     if (ch == ';') {
      String subPath=filePath.substring(head,tail);
      if (subPath.startsWith("(") && subPath.endsWith(")"))       subPath=subPath.substring(1,subPath.length() - 1);
      mergePath.addMergePath(VfsOld.lookup(subPath));
      head=++tail;
    }
 else     if (ch == '(') {
      int depth=1;
      for (tail++; tail < length; tail++) {
        if (filePath.charAt(tail) == '(')         depth++;
 else         if (filePath.charAt(tail) == ')') {
          tail++;
          depth--;
          if (depth == 0)           break;
        }
      }
      if (depth != 0)       return new NotFoundPath(getSchemeMap(),filePath);
    }
 else     tail++;
  }
  return new NotFoundPath(getSchemeMap(),filePath);
}

@ Override public PathImpl schemeWalk ( String userPath , Map < String , Object > attributes , String filePath , int offset ) { int length = filePath . length ( ) ; if ( length <= offset || filePath . charAt ( offset ) != '(' ) return super . schemeWalk ( userPath , attributes , filePath , offset ) ; MergePath mergePath = createMergePath ( ) ; mergePath . setUserPath ( userPath ) ; int head = ++ offset ; int tail = head ; while ( tail < length ) { int ch = filePath . charAt ( tail ) ; if ( ch == ')' ) { if ( head + 1 != tail ) { String subPath = filePath . substring ( head , tail ) ; if ( subPath . startsWith ( "(" ) && subPath . endsWith ( ")" ) ) subPath = subPath . substring ( 1 , subPath . length ( ) - 1 ) ; mergePath . addMergePath ( VfsOld . lookup ( subPath ) ) ; } if ( tail + 1 == length ) return mergePath ; else return mergePath . fsWalk ( userPath , attributes , filePath . substring ( tail + 1 ) ) ; } else if ( ch == ';' ) { String subPath = filePath . substring ( head , tail ) ; if ( subPath . startsWith ( "(" ) && subPath . endsWith ( ")" ) ) subPath = subPath . substring ( 1 , subPath . length ( ) - 1 ) ; mergePath . addMergePath ( VfsOld . lookup ( subPath ) ) ; head = ++ tail ; } else if ( ch == '(' ) { int depth = 1 ; for ( tail ++ ; tail < length ; tail ++ ) { if ( filePath . charAt ( tail ) == '(' ) depth ++ ; else if ( filePath . charAt ( tail ) == ')' ) { tail ++ ; depth -- ; if ( depth == 0 ) break ; } } if ( depth != 0 ) return new NotFoundPath ( getSchemeMap ( ) , filePath ) ; } else tail ++ ; } return new NotFoundPath ( getSchemeMap ( ) , filePath ) ; }
schemewalk is called by path for a scheme lookup like file : / tmp / foo
