stephan 2003/01/30 11:57:47 Modified: src/java/org/apache/cocoon/components/source SourceUtil.java Log: Add methods to exract the specifing parts of an URI, using a regex pattern. Revision Changes Path 1.18 +140 -1 xml-cocoon2/src/java/org/apache/cocoon/components/source/SourceUtil.java Index: SourceUtil.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/SourceUtil.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- SourceUtil.java 30 Jan 2003 10:59:23 -0000 1.17 +++ SourceUtil.java 30 Jan 2003 19:57:47 -0000 1.18 @@ -71,6 +71,10 @@ import org.apache.excalibur.source.SourceParameters; import org.apache.excalibur.source.SourceResolver; import org.apache.excalibur.xmlizer.XMLizer; +import org.apache.regexp.RE; +import org.apache.regexp.RECompiler; +import org.apache.regexp.REProgram; +import org.apache.regexp.RESyntaxException; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.xml.sax.ContentHandler; @@ -87,6 +91,16 @@ */ public final class SourceUtil { + private static REProgram uripattern = null; + + static { + try { + uripattern = (new RECompiler()).compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"); + } catch (RESyntaxException rese) { + rese.printStackTrace(); + } + } + /** Avoid instantiation */ protected SourceUtil() { } @@ -524,6 +538,131 @@ throw new ProcessingException(ce); } finally { resolver.release(source); + } + } + + /** + * Return the scheme of a URI. Just as there are many different methods + * of access to resources, there are a variety of schemes for identifying + * such resources. + * (see <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>). + * + * @param uri Uniform resource identifier. + * + * @return Scheme of the URI. + */ + public static String getScheme(String uri) { + RE re = new RE(uripattern); + + if (re.match(uri)) { + return re.getParen(2); + } else { + throw new IllegalArgumentException("'"+uri+ + "' is not a correct URI"); + } + } + + /** + * Return the authority of a URI. This authority is + * typically defined by an Internet-based server or a scheme-specific + * registry of naming authorities + * (see <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>). + * + * @param uri Uniform resource identifier. + * + * @return Scheme of the URI. + */ + public static String getAuthority(String uri) { + RE re = new RE(uripattern); + + if (re.match(uri)) { + return re.getParen(4); + } else { + throw new IllegalArgumentException("'"+uri+ + "' is not a correct URI"); + } + } + + /** + * Return the path of a URI. The path contains data, specific to the + * authority (or the scheme if there is no authority component), + * identifying the resource within the scope of that scheme and authority + * (see <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>). + * + * @param uri Uniform resource identifier. + * + * @return Path of the URI. + */ + public static String getPath(String uri) { + RE re = new RE(uripattern); + + if (re.match(uri)) { + return re.getParen(5); + } else { + throw new IllegalArgumentException("'"+uri+ + "' is not a correct URI"); + } + } + + /** + * Return the path of a URI, if the URI can't contains a authority. + * This implementation differ to the RFC 2396. + * + * @param uri Uniform resource identifier. + * + * @return Path of the URI. + */ + public static String getPathWithoutAuthority(String uri) { + RE re = new RE(uripattern); + + if (re.match(uri)) { + return re.getParen(4)+re.getParen(5); + } else { + throw new IllegalArgumentException("'"+uri+ + "' is not a correct URI"); + } + } + + /** + * Return the query of a URI. The query is a string of information to + * be interpreted by the resource + * (see <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>). + * + * @param uri Uniform resource identifier. + * + * @return Query of the URI. + */ + public static String getQuery(String uri) { + RE re = new RE(uripattern); + + if (re.match(uri)) { + return re.getParen(7); + } else { + throw new IllegalArgumentException("'"+uri+ + "' is not a correct URI"); + } + } + + /** + * Return the fragment of a URI. When a URI reference is used to perform + * a retrieval action on the identified resource, the optional fragment + * identifier, consists of additional reference information to be + * interpreted by the user agent after the retrieval action has been + * successfully completed + * (see <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>). + * + * @param uri Uniform resource identifier. + * + * @return Fragment of the URI. + */ + public static String getFragment(String uri) { + RE re = new RE(uripattern); + + if (re.match(uri)) { + return re.getParen(9); + } else { + throw new IllegalArgumentException("'"+uri+ + "' is not a correct URI"); } } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]