/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.core.util;
import org.eclipse.emf.common.util.URI;
/**
* EmfUriFinder
*
* @since 8.0
*/
public interface UriPathConverter {
/**
* Resolves the relative URI reference against a <code>base</code> absolute
* hierarchical URI, returning the resulting absolute URI. If already
* absolute, the URI itself is returned. During resolution, empty segments,
* self references ("."), and parent references ("..") are interpreted, so that
* they can be removed from the path.
* <p>
* Examples are:
* <li> relativeURI = "./e.xmi" baseURI = "/a/c/d.xmi" resultant = "/a/c/e.xmi"
* <li> relativeURI = "e.xmi" baseURI = "/a/c/d.xmi" resultant = "/a/c/e.xmi"
* <li> relativeURI = "../b.xmi" baseURI = "/a/c/d.xmi" resultant = "/a/b.xmi"
* <li> relativeURI = "../../x/y/z.xmi" baseURI = "/a/c/d.xmi" resultant = "/x/y/z.xmi"
* </p>
* @param relativeURI the URI relative to the base
* @param baseURI the base URI from which the relative URI is to be interpreted.
* @exception java.lang.IllegalArgumentException if <code>relativeURI</code> is
* null.
*/
URI makeAbsolute(final URI relativeURI, final URI baseURI);
/**
* Resolves the relative path reference against a <code>base</code> absolute
* hierarchical path, returning the resulting absolute path. If already
* absolute, the path itself is returned. During resolution, empty segments,
* self references ("."), and parent references ("..") are interpreted, so that
* they can be removed from the path.
* <p>
* Examples are:
* <li> relativePath = "./e.xmi" basePath = "/a/c/d.xmi" resultant = "/a/c/e.xmi"
* <li> relativePath = "e.xmi" basePath = "/a/c/d.xmi" resultant = "/a/c/e.xmi"
* <li> relativePath = "../b.xmi" basePath = "/a/c/d.xmi" resultant = "/a/b.xmi"
* <li> relativePath = "../../x/y/z.xmi" basePath = "/a/c/d.xmi" resultant = "/x/y/z.xmi"
* </p>
* @param relativePath the path relative to the base
* @param basePath the base path from which the relative path is to be interpreted.
* @exception java.lang.IllegalArgumentException if <code>relativeURI</code> is
* null.
*/
String makeAbsolute(final String relativePath, final String basePath);
/**
* Finds the shortest relative or, if necessary, the absolute URI that,
* when resolved against the given <code>base</code> absolute hierarchical
* URI using {@link #makeAbsolute(URI,URI)}, will yield this absolute URI.
* <p>
* Examples are:
* <li> absoluteURI ="/a/c/e.xmi" baseURI = "/a/c/d.xmi" resultant = "e.xmi"
* <li> absoluteURI = "/a/b.xmi" baseURI = "/a/c/d.xmi" resultant = "../b.xmi"
* <li> absoluteURI = "/x/y/z.xmi" baseURI = "/a/c/d.xmi" resultant = "../../x/y/z.xmi"
* </p>
* @param absoluteURI the absolute URI
* @param baseURI the base URI from which the relative URI is to be created.
* @exception java.lang.IllegalArgumentException if <code>absoluteURI</code> is null
*/
URI makeRelative(final URI absoluteURI, final URI baseURI);
/**
* Finds the shortest relative or, if necessary, the absolute path that,
* when resolved against the given <code>base</code> absolute hierarchical
* path using {@link #makeAbsolute(String,String)}, will yield this absolute path.
* <p>
* Examples are:
* <li> absolutePath ="/a/c/e.xmi" basePath = "/a/c/d.xmi" resultant = "e.xmi"
* <li> absolutePath = "/a/b.xmi" basePath = "/a/c/d.xmi" resultant = "../b.xmi"
* <li> absolutePath = "/x/y/z.xmi" basePath = "/a/c/d.xmi" resultant = "../../x/y/z.xmi"
* </p>
* @param absolutePath the absolute path
* @param basePath the base path from which the relative path is to be created.
* @exception java.lang.IllegalArgumentException if <code>absolutePath</code> is null
*/
String makeRelative(final String absolutePath, final String basePath);
}