You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Ja...@rzf.fin-nrw.de on 2003/08/22 12:38:54 UTC
RE: [VOTE] Ant/Antcall Returning properties and references [WAS]
Re: ant 1.5.4 : Import
+1
Jan
> -----Original Message-----
> From: Antoine Levy-Lambert [mailto:antoine@antbuild.com]
> Sent: Friday, August 22, 2003 12:29 PM
> To: Ant Developers List
> Subject: [VOTE] Ant/Antcall Returning properties and references [WAS]
> Re: ant 1.5.4 : Import
>
>
> I think that the code of Dominique would add a lot of value to ant.
> Instead of committing the code as is, I would like simply to
> add the new
> features to the <ant/> task.
> This means that it should be a no brainer to have these
> features then also
> in <antcall/>
> Can we vote about introducing it ?
> I start with my +1
> Cheers,
> Antoine
> ----- Original Message -----
> From: "Dominique Devienne" <DD...@lgc.com>
> To: "'Ant Developers List'" <de...@ant.apache.org>
> Sent: Thursday, July 24, 2003 5:36 PM
> Subject: RE: ant 1.5.4 : Import
>
>
> > Then have a look at what I did in the past two days to do something
> similar
> > ;-) I created an <antreturn> task that piggybacks on <ant>,
> and allows
> > returning properties and/or references from the called
> build file back
> into
> > the caller's context (Project).
> >
> > That would take care of that use case ;-) --DD
> >
> > > -----Original Message-----
> > > From: Conor MacNeill [mailto:conor@cortexebusiness.com.au]
> > > Sent: Thursday, July 24, 2003 10:39 AM
> > > To: Ant Developers List
> > > Subject: Re: ant 1.5.4 : Import
> > >
> > > On Fri, 25 Jul 2003 01:23 am, Dominique Devienne wrote:
> > > >
> > > > I (strongly again ;) believe that imported build files should be
> > > designed
> > > > to be imported, and never used without being imported.
> > >
> > > I disagree (strongly :-). I think augmenting/overriding
> an existing
> build
> > > file
> > > is a valid use for import. I recently changed the
> checkstyle build I
> have
> > > been using (check.xml) to import Ant's build.xml to pick
> up property
> defs
> > > for
> > > various locations. Have a look.
> > >
> > > Conor
> >
> >
> > <?xml version="1.0"?>
> >
> > <project name="AntReturnTest" default="test-returnProperty">
> >
> > <!-- Our custom tasks we are testing -->
> > <taskdef resource="com/lgc/buildmagic/tasks.properties" />
> > <typedef resource="com/lgc/buildmagic/types.properties" />
> >
> > <target name="test-returnProperty">
> > <antreturn antfile="AntReturnNestedTest.xml"
> target="set-properties">
> > <return>
> > <property name="propA" />
> > <property name="propC" />
> > </return>
> > </antreturn>
> > </target>
> >
> > <target name="test-returnReference">
> > <antreturn antfile="AntReturnNestedTest.xml"
> target="set-references">
> > <return>
> > <reference refid="pathRef" />
> > <reference refid="filesetRef" />
> > </return>
> > </antreturn>
> > </target>
> >
> > </project>
> >
> > <?xml version="1.0"?>
> >
> > <project name="AntReturnNestedTest" default="set-properties">
> >
> > <target name="set-properties">
> > <property name="propA" value="a" />
> > <property name="propB" value="bb" />
> > <property name="propC" value="ccc" />
> > <property name="propD" value="dddd" />
> > </target>
> >
> > <target name="set-references">
> > <path id="pathRef" location="${basedir}" />
> > <fileset id="filesetRef" dir="${basedir}">
> > <include name="AntReturn*Test.xml" />
> > </fileset>
> > <patternset id="patternsetRef">
> > <include name="dummy" />
> > </patternset>
> > </target>
> >
> > </project>
> >
> > // vim:ts=2:sw=2
> > package com.lgc.buildmagic.test;
> >
> > import org.apache.tools.ant.ProjectComponent;
> > import org.apache.tools.ant.types.Path;
> > import org.apache.tools.ant.types.FileSet;
> >
> > import com.lgc.buildmagic.util.BuildFileTestCase;
> >
> > /**
> > * Tests <antreturn>.
> > *
> > * @author <a href="mailto:ddevienne@lgc.com">Dominique Devienne</a>
> > * @version Jul 2003 - Copyright (c) 2003, Landmark Graphics Corp.
> > */
> > public class AntReturnTest
> > extends BuildFileTestCase {
> >
> > public void testReturnProperty() {
> > executeTarget("test-returnProperty");
> >
> > assertProperty("propA", "a");
> > assertProperty("propB", null);
> > assertProperty("propC", "ccc");
> > assertProperty("propD", null);
> > }
> >
> > private void assertProperty(String name, String expectedValue) {
> > String value = getProject().getProperty(name);
> > assertEquals(name + " property", value, expectedValue);
> > }
> >
> > public void testReturnReference() {
> > executeTarget("test-returnReference");
> >
> > assertReference("pathRef", Path.class);
> > assertReference("filesetRef", FileSet.class);
> > assertReference("patternsetRef", null);
> > }
> >
> > private void assertReference(String refid, Class expectedClass) {
> > Object value = getProject().getReference(refid);
> > if (expectedClass != null) {
> > assertNotNull(refid + " reference", value);
> > assertEquals(refid + " reference type", expectedClass,
> > value.getClass());
> > assertSame(refid + " reference project", getProject(),
> > ((ProjectComponent)value).getProject());
> > }
> > else {
> > assertEquals(refid + " reference found", false, value
> != null);
> > }
> > }
> >
> > } // END class AntReturnTest
> >
> > // vim:ts=2:sw=2
> > package com.lgc.buildmagic;
> >
> > import java.util.List;
> > import java.util.Iterator;
> > import java.util.ArrayList;
> > import java.util.Collections;
> >
> > import org.apache.tools.ant.Project;
> > import org.apache.tools.ant.ProjectComponent;
> > import org.apache.tools.ant.BuildException;
> >
> > import org.apache.tools.ant.types.Reference;
> >
> > import org.apache.tools.ant.taskdefs.Ant;
> > import org.apache.tools.ant.taskdefs.Property;
> >
> > /**
> > * ...
> > *
> > * @author <a href="mailto:ddevienne@lgc.com">Dominique Devienne</a>
> > * @version Jul 2003 - Copyright (c) 2003, Landmark Graphics Corp.
> > *
> > * @ant.task category="control"
> > */
> > public class AntReturn
> > extends Ant {
> >
> > private Project _newProject;
> > private ReturnedElements _returns;
> >
> > public void init() {
> > super.init();
> > setInheritAll(false);
> > setInheritRefs(false);
> > }
> >
> > public void execute()
> > throws BuildException {
> > int returnCount = 0;
> > if (_returns != null) {
> > returnCount = _returns._references.size()
> > + _returns._properties.size();
> > }
> >
> > if (returnCount > 0 && _newProject == null) {
> > // Create dummy property to get at nested project
> > Property p = createProperty();
> >
> p.setName("sdliugyhspuygh.asdjhriawu120983472$376asdbfandbfa7347");
> > p.setValue("");
> >
> > if (_newProject == null) {
> > throw new BuildException("Cannot access nested Project
> BEFORE!!!");
> > }
> > }
> >
> > super.execute();
> >
> > if (returnCount < 1) {
> > return; // Nothing to return
> > }
> >
> > // Set the returned properties in the outer project
> > for (Iterator i = _returns._properties.iterator();
> i.hasNext();) {
> > ReturnProperty retProperty = (ReturnProperty)i.next();
> > String name = retProperty.getName();
> > String value = _newProject.getProperty(name);
> > if (value == null) {
> > throw new BuildException("Cannot find property '" +
> name + "'");
> > }
> > getProject().setNewProperty(retProperty.getToName(), value);
> > }
> >
> > // Set the returned properties in the outer project
> > for (Iterator i = _returns._references.iterator();
> i.hasNext();) {
> > ReturnReference retReference = (ReturnReference)i.next();
> > String refid = retReference.getRefid();
> > Object value = _newProject.getReference(refid);
> > if (value == null) {
> > throw new BuildException("Cannot find reference '"
> + refid + "'");
> > }
> > if (value instanceof ProjectComponent) {
> > ((ProjectComponent)value).setProject(getProject());
> > }
> > getProject().addReference(retReference.getToRefid(), value);
> > }
> > }
> >
> > /** Intercept property creation to catch the new project.
> Wicked! */
> > public Property createProperty() {
> > Property p = super.createProperty();
> > _newProject = p.getProject();
> > return p;
> > }
> >
> > /** Adds the set of properties/references to return. */
> > public void addReturn(ReturnedElements returns) {
> > if (_returns != null) {
> > throw new BuildException("Can have only one nested <return>");
> > }
> > _returns = returns;
> > }
> >
> > /** Programatic convenience to select a property to return. */
> > public void selectProperty(String name, String toName) {
> > if (_returns == null) {
> > addReturn(new ReturnedElements());
> > }
> > ReturnProperty p = new ReturnProperty();
> > p.setName(name);
> > if (toName != null) {
> > p.setToName(toName);
> > }
> > _returns.addProperty(p);
> > }
> >
> > /** Programatic convenience to select a reference to return. */
> > public void selectReference(String refid, String toRefid) {
> > if (_returns == null) {
> > addReturn(new ReturnedElements());
> > }
> > ReturnReference r = new ReturnReference();
> > r.setRefid(refid);
> > if (toRefid != null) {
> > r.setToRefid(toRefid);
> > }
> > _returns.addReference(r);
> > }
> >
> > /** A property name to return from the called project. */
> > public static class ReturnProperty {
> > private String _name;
> > private String _toName;
> >
> > public void setName(String name) {
> > _name = TaskUtils.assertNotEmpty(name, "name", true);
> > }
> > public void setToName(String toName) {
> > _toName = TaskUtils.assertNotEmpty(toName, "toName", true);
> > }
> > public String getName() {
> > TaskUtils.assertAttributeSet(_name, "name");
> > return _name;
> > }
> > public String getToName() {
> > return (_toName == null)? getName(): _toName;
> > }
> > } // END class AntReturn.ReturnProperty
> >
> > /** A reference name to return from the called project. */
> > public static class ReturnReference {
> > private String _refid;
> > private String _toRefid;
> >
> > public void setRefid(String refid) {
> > _refid = TaskUtils.assertNotEmpty(refid, "refid", true);
> > }
> > public void setToRefid(String toRefid) {
> > _toRefid = TaskUtils.assertNotEmpty(toRefid, "toRefid", true);
> > }
> > public String getRefid() {
> > TaskUtils.assertAttributeSet(_refid, "refid");
> > return _refid;
> > }
> > public String getToRefid() {
> > return (_toRefid == null)? getRefid(): _toRefid;
> > }
> > } // END class AntReturn.ReturnReference
> >
> > /** List of properties and references to return from the
> called project.
> > */
> > public static class ReturnedElements {
> > private List _properties = Collections.EMPTY_LIST;
> > private List _references = Collections.EMPTY_LIST;
> >
> > public void addProperty(ReturnProperty retProperty) {
> > if (_properties == Collections.EMPTY_LIST) {
> > _properties = new ArrayList(4);
> > }
> > _properties.add(retProperty);
> > }
> >
> > public void addReference(ReturnReference retReference) {
> > if (_references == Collections.EMPTY_LIST) {
> > _references = new ArrayList(4);
> > }
> > _references.add(retReference);
> > }
> > } // END class AntReturn.ReturnedElements
> >
> > } // END class AntReturn
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> > For additional commands, e-mail: dev-help@ant.apache.org
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> For additional commands, e-mail: dev-help@ant.apache.org
>