You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by vm...@apache.org on 2003/10/09 01:44:04 UTC

cvs commit: maven/src/java/org/apache/maven/jelly/tags/maven RootRelativePathTag.java MavenTagLibrary.java

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 apache@apache.org.
   *
   * 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 {@link RootRelativePathTag}.
   * 
   * @author <a href="mailto:vmassol@apache.org">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:jason@zenplex.com">Jason van Zyl</a>
    * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  + * @author <a href="mailto:vmassol@apache.org">Vincent Massol</a>
    * @version $Id$
    */
  -public class MavenTagLibrary
  -    extends BaseTagLibrary
  +public class MavenTagLibrary extends BaseTagLibrary
   {
       /**
        * Create an instance of the {@link 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 apache@apache.org.
   *
   * 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:vmassol@apache.org">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: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: cvs commit: maven/src/java/org/apache/maven/jelly/tags/maven RootRelativePathTag.java MavenTagLibrary.java

Posted by Jason van Zyl <jv...@maven.org>.
On Wed, 2003-10-08 at 19:44, vmassol@apache.org wrote:
> 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...

I'm not sure how much code Brett has integrated but I believe he
integrated code that will take care of this. I certainly wasn't planning
on waiting until 2.0 to fix this, just post 1.0. If he's got it working
then I would certainly like to use that and not encourage what you just
suggested.

Brett how you making out on integrating that code?
  
> -- 
> jvz.
> 
> Jason van Zyl
> jason@zenplex.com
> http://tambora.zenplex.org
> 
> In short, man creates for himself a new religion of a rational
> and technical order to justify his work and to be justified in it.
>   
>   -- Jacques Ellul, The Technological Society


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


RE: cvs commit: maven/src/java/org/apache/maven/jelly/tags/maven RootRelativePathTag.java MavenTagLibrary.java

Posted by Vincent Massol <vm...@pivolis.com>.

> -----Original Message-----
> From: dion@multitask.com.au [mailto:dion@multitask.com.au]
> Sent: 09 October 2003 14:15
> To: Maven Developers List
> Subject: RE: cvs commit:
maven/src/java/org/apache/maven/jelly/tags/maven
> RootRelativePathTag.java MavenTagLibrary.java
> 
> This looks like one is the opposite of the other to me? Am I missing
> something or won't reversing the arguments pased to
MakeRelativePathTag do
> the same thing?

I don't think so. If you pass:

basedir="c:/apps/myproject/dir1/dir2/mysubproject"
Path ="c:/apps/myroject"

To MakeRelativePathTag, you'll get "c:/apps/myproject" because path does
not start with basedir... Which is not what I was looking for.

-Vincent

> --
> dIon Gillard, Multitask Consulting
> Blog:      http://blogs.codehaus.org/people/dion/
> 
> 
> "Vincent Massol" <vm...@pivolis.com> wrote on 09/10/2003 06:46:56
PM:
> 
> > Hi dIon,
> >
> > I had a look at MakeRelativePathTag but it's not working in the same
way
> > at all. Here's an example
> >
> > Basedir/Rootdir="c:/apps/myroject"
> > Path="c:/apps/myproject/dir1/dir2/mysubproject"
> >
> > Result of RootRelativePathTag = "../../.."
> > Result of MakeRelativePathTag = "dir/dir2/mysubproject"
> >
> > However, when property inheritance is there this will no longer be
> > needed.
> >
> > -Vincent
> >
> >
> > > -----Original Message-----
> > > From: dion@multitask.com.au [mailto:dion@multitask.com.au]
> > > Sent: 09 October 2003 09:02
> > > To: Maven Developers List
> > > Subject: Re: cvs commit:
> > maven/src/java/org/apache/maven/jelly/tags/maven
> > > RootRelativePathTag.java MavenTagLibrary.java
> > >
> > > Vincent, how is this different to the MakeRelativePathTag?
> > > --
> > > dIon Gillard, Multitask Consulting
> > > Blog:      http://blogs.codehaus.org/people/dion/
> > >
> > >
> > > vmassol@apache.org 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/RootRelativePathTa
> > gT
> > > est.
> > > > 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 apache@apache.org.
> > > >    *
> > > >    * 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 {@link RootRelativePathTag}.
> > > >    *
> > > >    * @author <a href="mailto:vmassol@apache.org">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/MavenTagLibra
> > ry
> > > .
> > > > 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:jason@zenplex.com">Jason van
Zyl</a>
> > > >     * @author <a href="mailto:brett@apache.org">Brett Porter</a>
> > > >   + * @author <a href="mailto:vmassol@apache.org">Vincent
Massol</a>
> > > >     * @version $Id$
> > > >     */
> > > >   -public class MavenTagLibrary
> > > >   -    extends BaseTagLibrary
> > > >   +public class MavenTagLibrary extends BaseTagLibrary
> > > >    {
> > > >        /**
> > > >         * Create an instance of the {@link 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.jav
> > a
> > > >
> > > >   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 apache@apache.org.
> > > >    *
> > > >    * 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:vmassol@apache.org">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: dev-unsubscribe@maven.apache.org
> > > > For additional commands, e-mail: dev-help@maven.apache.org
> > > >
> > >
> > >
> > >
---------------------------------------------------------------------
> > > To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> > > For additional commands, e-mail: dev-help@maven.apache.org
> >
> >
> >
> >
---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> > For additional commands, e-mail: dev-help@maven.apache.org
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


RE: cvs commit: maven/src/java/org/apache/maven/jelly/tags/maven RootRelativePathTag.java MavenTagLibrary.java

Posted by di...@multitask.com.au.
This looks like one is the opposite of the other to me? Am I missing 
something or won't reversing the arguments pased to MakeRelativePathTag do 
the same thing?
--
dIon Gillard, Multitask Consulting
Blog:      http://blogs.codehaus.org/people/dion/


"Vincent Massol" <vm...@pivolis.com> wrote on 09/10/2003 06:46:56 PM:

> Hi dIon,
> 
> I had a look at MakeRelativePathTag but it's not working in the same way
> at all. Here's an example
> 
> Basedir/Rootdir="c:/apps/myroject"
> Path="c:/apps/myproject/dir1/dir2/mysubproject"
> 
> Result of RootRelativePathTag = "../../.."
> Result of MakeRelativePathTag = "dir/dir2/mysubproject"
> 
> However, when property inheritance is there this will no longer be
> needed.
> 
> -Vincent
> 
> 
> > -----Original Message-----
> > From: dion@multitask.com.au [mailto:dion@multitask.com.au]
> > Sent: 09 October 2003 09:02
> > To: Maven Developers List
> > Subject: Re: cvs commit:
> maven/src/java/org/apache/maven/jelly/tags/maven
> > RootRelativePathTag.java MavenTagLibrary.java
> > 
> > Vincent, how is this different to the MakeRelativePathTag?
> > --
> > dIon Gillard, Multitask Consulting
> > Blog:      http://blogs.codehaus.org/people/dion/
> > 
> > 
> > vmassol@apache.org 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/RootRelativePathTa
> gT
> > est.
> > > 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 apache@apache.org.
> > >    *
> > >    * 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 {@link RootRelativePathTag}.
> > >    *
> > >    * @author <a href="mailto:vmassol@apache.org">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/MavenTagLibra
> ry
> > .
> > > 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:jason@zenplex.com">Jason van Zyl</a>
> > >     * @author <a href="mailto:brett@apache.org">Brett Porter</a>
> > >   + * @author <a href="mailto:vmassol@apache.org">Vincent Massol</a>
> > >     * @version $Id$
> > >     */
> > >   -public class MavenTagLibrary
> > >   -    extends BaseTagLibrary
> > >   +public class MavenTagLibrary extends BaseTagLibrary
> > >    {
> > >        /**
> > >         * Create an instance of the {@link 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.jav
> a
> > >
> > >   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 apache@apache.org.
> > >    *
> > >    * 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:vmassol@apache.org">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: dev-unsubscribe@maven.apache.org
> > > For additional commands, e-mail: dev-help@maven.apache.org
> > >
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> > For additional commands, e-mail: dev-help@maven.apache.org
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


RE: cvs commit: maven/src/java/org/apache/maven/jelly/tags/maven RootRelativePathTag.java MavenTagLibrary.java

Posted by Vincent Massol <vm...@pivolis.com>.
Hi dIon,

I had a look at MakeRelativePathTag but it's not working in the same way
at all. Here's an example

Basedir/Rootdir="c:/apps/myroject"
Path="c:/apps/myproject/dir1/dir2/mysubproject"

Result of RootRelativePathTag = "../../.."
Result of MakeRelativePathTag = "dir/dir2/mysubproject"

However, when property inheritance is there this will no longer be
needed.

-Vincent


> -----Original Message-----
> From: dion@multitask.com.au [mailto:dion@multitask.com.au]
> Sent: 09 October 2003 09:02
> To: Maven Developers List
> Subject: Re: cvs commit:
maven/src/java/org/apache/maven/jelly/tags/maven
> RootRelativePathTag.java MavenTagLibrary.java
> 
> Vincent, how is this different to the MakeRelativePathTag?
> --
> dIon Gillard, Multitask Consulting
> Blog:      http://blogs.codehaus.org/people/dion/
> 
> 
> vmassol@apache.org 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/RootRelativePathTa
gT
> est.
> > 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 apache@apache.org.
> >    *
> >    * 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 {@link RootRelativePathTag}.
> >    *
> >    * @author <a href="mailto:vmassol@apache.org">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/MavenTagLibra
ry
> .
> > 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:jason@zenplex.com">Jason van Zyl</a>
> >     * @author <a href="mailto:brett@apache.org">Brett Porter</a>
> >   + * @author <a href="mailto:vmassol@apache.org">Vincent Massol</a>
> >     * @version $Id$
> >     */
> >   -public class MavenTagLibrary
> >   -    extends BaseTagLibrary
> >   +public class MavenTagLibrary extends BaseTagLibrary
> >    {
> >        /**
> >         * Create an instance of the {@link 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.jav
a
> >
> >   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 apache@apache.org.
> >    *
> >    * 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:vmassol@apache.org">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: dev-unsubscribe@maven.apache.org
> > For additional commands, e-mail: dev-help@maven.apache.org
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: cvs commit: maven/src/java/org/apache/maven/jelly/tags/maven RootRelativePathTag.java MavenTagLibrary.java

Posted by di...@multitask.com.au.
Vincent, how is this different to the MakeRelativePathTag?
--
dIon Gillard, Multitask Consulting
Blog:      http://blogs.codehaus.org/people/dion/


vmassol@apache.org 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 apache@apache.org.
>    *
>    * 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 {@link RootRelativePathTag}.
>    * 
>    * @author <a href="mailto:vmassol@apache.org">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:jason@zenplex.com">Jason van Zyl</a>
>     * @author <a href="mailto:brett@apache.org">Brett Porter</a>
>   + * @author <a href="mailto:vmassol@apache.org">Vincent Massol</a>
>     * @version $Id$
>     */
>   -public class MavenTagLibrary
>   -    extends BaseTagLibrary
>   +public class MavenTagLibrary extends BaseTagLibrary
>    {
>        /**
>         * Create an instance of the {@link 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 apache@apache.org.
>    *
>    * 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:vmassol@apache.org">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: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org