code: void movePath(int geom, int before_path, int path_to_move) {
  		if (path_to_move == -1)
  			throw new IllegalArgumentException();
  
  		if (before_path == path_to_move)
  			return;
  
  		int next = getNextPath(path_to_move);
  		int prev = getPrevPath(path_to_move);
  		int geom_src = getGeometryFromPath(path_to_move);
  		if (prev == -1) {
  			setFirstPath_(geom_src, next);
  		} else {
  			setNextPath_(prev, next);
  		}
  
  		if (next == -1) {
  			setLastPath_(geom_src, prev);
  		} else {
  			setPrevPath_(next, prev);
  		}
  
  		setGeometryVertexCount_(geom_src, getPointCount(geom_src)
  				- getPathSize(path_to_move));
  		setGeometryPathCount_(geom_src, getPathCount(geom_src) - 1);
  
  		if (before_path == -1)
  			prev = getLastPath(geom);
  		else
  			prev = getPrevPath(before_path);
  
  		setPrevPath_(path_to_move, prev);
  		setNextPath_(path_to_move, before_path);
  		if (before_path == -1)
  			setLastPath_(geom, path_to_move);
  		else
  			setPrevPath_(before_path, path_to_move);
  		if (prev == -1)
  			setFirstPath_(geom, path_to_move);
  		else
  			setNextPath_(prev, path_to_move);
  		setGeometryVertexCount_(geom, getPointCount(geom)
  				+ getPathSize(path_to_move));
  		setGeometryPathCount_(geom, getPathCount(geom) + 1);
  		setPathGeometry_(path_to_move, geom);
  	}
docs: before_path can be -1, then the path is moved to the end of the dst_geom.