Vincent, how is this different to the MakeRelativePathTag?
--
dIon Gillard, Multitask Consulting
Blog: http://blogs.codehaus.org/people/dion/
[EMAIL PROTECTED] wrote on 09/10/2003 09:44:04 AM:
> vmassol 2003/10/08 16:44:04
>
> Modified: src/java/org/apache/maven/jelly/tags/maven
> MavenTagLibrary.java
> Added: src/test/java/org/apache/maven/jelly/tags/maven
> RootRelativePathTagTest.java
> src/java/org/apache/maven/jelly/tags/maven
> RootRelativePathTag.java
> Log:
> Added new tag which can be used to implement property inheritance
> while waiting for the final fix in maven 2.0...
>
>
>
> The way to use it is by adding the following lines in your top
> level maven.xml (outside of any goal):
>
>
>
> <maven:rootRelativePath rootdir="your absolute root to where your
> top level maven.xml is located" path="${basedir}" var="relpath"/>
>
> <u:properties file="${relpath}/project.properties"/>
>
> <u:properties file="${relpath}/build.properties"/>
>
>
>
> Note: I haven't tried a full functional test yet (but I will
> tomorrow) but it should work :-)
>
> Revision Changes Path
> 1.1
>
maven/src/test/java/org/apache/maven/jelly/tags/maven/RootRelativePathTagTest.
> java
>
> Index: RootRelativePathTagTest.java
> ===================================================================
> package org.apache.maven.jelly.tags.maven;
>
> /*
====================================================================
> * The Apache Software License, Version 1.1
> *
> * Copyright (c) 2003 The Apache Software Foundation. All rights
> * reserved.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions
> * are met:
> *
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> *
> * 2. Redistributions in binary form must reproduce the above
copyright
> * notice, this list of conditions and the following disclaimer in
> * the documentation and/or other materials provided with the
> * distribution.
> *
> * 3. The end-user documentation included with the redistribution,
> * if any, must include the following acknowledgment:
> * "This product includes software developed by the
> * Apache Software Foundation (http://www.apache.org/)."
> * Alternately, this acknowledgment may appear in the software
itself,
> * if and wherever such third-party acknowledgments normally
appear.
> *
> * 4. The names "Apache" and "Apache Software Foundation" and
> * "Apache Maven" must not be used to endorse or promote products
> * derived from this software without prior written permission. For
> * written permission, please contact [EMAIL PROTECTED]
> *
> * 5. Products derived from this software may not be called "Apache",
> * "Apache Maven", nor may "Apache" appear in their name, without
> * prior written permission of the Apache Software Foundation.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> *
====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation. For more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> *
> *
====================================================================
> */
>
> import java.io.File;
> import java.io.IOException;
>
> import junit.framework.TestCase;
>
> /**
> * Tests for [EMAIL PROTECTED] RootRelativePathTag}.
> *
> * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Massol</a>
> * @version $Id: RootRelativePathTagTest.java,v 1.1 2003/10/08 23:
> 44:04 vmassol Exp $
> */
> public class RootRelativePathTagTest extends TestCase
> {
> /**
> * The tag to test
> */
> private RootRelativePathTag tag;
>
> /**
> * @see TestCase#setUp()
> */
> protected void setUp()
> {
> tag = new RootRelativePathTag();
> }
>
> public void testComputePathOk() throws Exception
> {
> tag.setPath("c:/apps/myproject/path/subproject2");
> tag.setRootdir(new File("c:/apps/myproject"));
> String result = tag.computePath();
> assertEquals("./../..", result);
> }
>
> public void testComputePathWithEndingSeparator() throws Exception
> {
> tag.setPath("c:/apps/myproject/path/subproject2");
> tag.setRootdir(new File("c:/apps/myproject/"));
> String result = tag.computePath();
> assertEquals("./../..", result);
> }
>
> public void testComputePathOk2() throws Exception
> {
> tag.setPath("c:/apps/myproject");
> tag.setRootdir(new File("c:/apps/myproject"));
> String result = tag.computePath();
> assertEquals(".", result);
> }
>
> public void testComputePathOk3() throws Exception
> {
> tag.setPath("c:\\apps\\myproject\\path\\subproject2");
> tag.setRootdir(new File("c:\\apps\\myproject"));
> String result = tag.computePath();
> assertEquals("./../..", result);
> }
>
> public void testComputePathWhenPathNotSubsetRootdir() throws
Exception
> {
> tag.setPath("c:/apps/myproject/path/subproject2");
> tag.setRootdir(new File("c:/somethingelse"));
>
> try
> {
> tag.computePath();
> fail("should have thrown an exception");
> }
> catch (IOException expected)
> {
> assertTrue(true);
> }
> }
> }
>
>
>
> 1.12 +4 -3
> maven/src/java/org/apache/maven/jelly/tags/maven/MavenTagLibrary.java
>
> Index: MavenTagLibrary.java
> ===================================================================
> RCS file:
>
/home/cvs/maven/src/java/org/apache/maven/jelly/tags/maven/MavenTagLibrary.
> java,v
> retrieving revision 1.11
> retrieving revision 1.12
> diff -u -r1.11 -r1.12
> --- MavenTagLibrary.java 20 Aug 2003 12:37:18 -0000 1.11
> +++ MavenTagLibrary.java 8 Oct 2003 23:44:04 -0000 1.12
> @@ -63,10 +63,10 @@
> *
> * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
> * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a>
> + * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Massol</a>
> * @version $Id$
> */
> -public class MavenTagLibrary
> - extends BaseTagLibrary
> +public class MavenTagLibrary extends BaseTagLibrary
> {
> /**
> * Create an instance of the [EMAIL PROTECTED] MavenTagLibrary},
> registering related
> @@ -86,6 +86,7 @@
> registerTag( "userCheck", UserCheck.class);
> registerTag( "paramCheck", ParamCheck.class);
> registerTag( "copyResources", CopyResources.class);
> + registerTag( "rootRelativePath", RootRelativePathTag.class );
> // Remove the following deprecated forms
> registerTag( "user-check", UserCheck.class);
> registerTag( "param-check", ParamCheck.class);
>
>
>
> 1.1
>
maven/src/java/org/apache/maven/jelly/tags/maven/RootRelativePathTag.java
>
> Index: RootRelativePathTag.java
> ===================================================================
> package org.apache.maven.jelly.tags.maven;
>
> /*
====================================================================
> * The Apache Software License, Version 1.1
> *
> * Copyright (c) 2003 The Apache Software Foundation. All rights
> * reserved.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions
> * are met:
> *
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> *
> * 2. Redistributions in binary form must reproduce the above
copyright
> * notice, this list of conditions and the following disclaimer in
> * the documentation and/or other materials provided with the
> * distribution.
> *
> * 3. The end-user documentation included with the redistribution,
> * if any, must include the following acknowledgment:
> * "This product includes software developed by the
> * Apache Software Foundation (http://www.apache.org/)."
> * Alternately, this acknowledgment may appear in the software
itself,
> * if and wherever such third-party acknowledgments normally
appear.
> *
> * 4. The names "Apache" and "Apache Software Foundation" and
> * "Apache Maven" must not be used to endorse or promote products
> * derived from this software without prior written permission. For
> * written permission, please contact [EMAIL PROTECTED]
> *
> * 5. Products derived from this software may not be called "Apache",
> * "Apache Maven", nor may "Apache" appear in their name, without
> * prior written permission of the Apache Software Foundation.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> *
====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation. For more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> *
> *
====================================================================
> */
>
> import java.io.File;
> import java.io.IOException;
> import java.util.StringTokenizer;
>
> import org.apache.commons.jelly.JellyTagException;
> import org.apache.commons.jelly.MissingAttributeException;
> import org.apache.commons.jelly.XMLOutput;
> import org.apache.maven.jelly.tags.BaseTagSupport;
>
> /**
> * Converts an absolute path into a path relative to a root dir. For
> * example, if the root dir is "c:/apps/myproject" and the absolute
> * path is "c:/apps/myproject/path/subproject2" then the computed
> * relative path is "../..".
> *
> * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Massol</a>
> * @version $Id: RootRelativePathTag.java,v 1.1 2003/10/08 23:44:
> 04 vmassol Exp $
> */
> public class RootRelativePathTag extends BaseTagSupport
> {
> /** The root dir. */
> private File rootdir;
>
> /** The path to convert. */
> private String path;
>
> /** The jelly variable to store the result into. */
> private String var;
>
> /**
> * Set the root directory.
> * @param rootdir the root directory
> */
> public void setRootdir(File rootdir)
> {
> this.rootdir = rootdir;
> }
>
> /**
> * Set the path.
> * @param path the path.
> */
> public void setPath(String path)
> {
> this.path = path;
> }
>
> /**
> * Set the result variable.
> * @param var the result variable name.
> */
> public void setVar(String var)
> {
> this.var = var;
> }
>
> /**
> * @see Tag#doTag(XMLOutput)
> */
> public void doTag(XMLOutput output)
> throws MissingAttributeException, JellyTagException
> {
> checkAttribute(rootdir, "rootdir");
> checkAttribute(path, "path");
> checkAttribute(var, "var");
>
> String result;
> try
> {
> result = computePath();
> }
> catch (IOException e)
> {
> throw new JellyTagException( "Unable to create
> relative path", e );
> }
> getContext().setVariable(var, result);
> }
>
> /**
> * @return the compute relative path to the root dir
> * @throws IOException on error
> */
> public String computePath() throws IOException
> {
> String canonicalRootdir = rootdir.getCanonicalPath();
> String canonicalPath = new File(path).getCanonicalPath();
> if (canonicalPath.equals(canonicalRootdir))
> {
> return ".";
> }
> else if (canonicalPath.startsWith(canonicalRootdir))
> {
> canonicalPath = canonicalPath.substring(
> canonicalRootdir.length());
> }
> else
> {
> throw new IOException("Path [" + canonicalPath
> + "] is not a subset of [" + canonicalRootdir + "]");
> }
>
> StringBuffer result = new StringBuffer(".");
> StringTokenizer tokens = new StringTokenizer(canonicalPath,
"/\\" );
> while (tokens.hasMoreTokens())
> {
> String token = (String) tokens.nextToken();
> result.append("/..");
> }
> return result.toString();
> }
> }
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]