On 9/25/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> [BuildElementArray("jobgroup")]
> public JobGroupCollection groups
>         {
>             get { return _groups; }
>             set
>             {
>                 for( int i = 0; i < value.Count; i++ )
>                 {
>                     JobGroup group = value[i];
>                     this.addJobGroup( group );
>                 }
>                 this._groups = value;
>             }
>         }
>
> [BuildElementArray("job")]
>         public JobDefinitionCollection jobs
>         {
>             get { return _jobs; }
>             set
>             {
>                 String thisMethod = "jobs.set";
>                 log.Debug(thisMethod + ":entering...");
>                 for( int i = 0; i < value.Count; i++ )
>                 {
>                     JobDefinition job = value[i];
>                     this.addJobDefinition( job );
>                 }
>                 _jobs = value;
>             }
>         }
> }

I notice that in your setter methods, you are calling a function to
individually add the job[group]s to your group, as well as setting the
passed job[group] into your local member.  Without seeting your
addJobGroup and addJobDefinition methods, I can't be sure, but it
looks like you're duplicating effort - you are likely to need only one
or the other.

But that shouldn't be causing the problem you describe...  Perhaps if
you add more logging (as the log.Debug line to specify that the jobs
setter is being accessed) and run ant with debug output enabled you
may have more insight why your nested jobs aren't being processed.


For a concrete example of a recursive datatype, look at the PathSet
datatype (NAnt.Core\Types\PathSet.cs)... the relevant snippet:
        /// <summary>
        /// Defines a set of path elements to add to the current path.
        /// </summary>
        /// <param name="path">The <see cref="PathSet" /> to add.</param>
        [BuildElement("path")]
        public void AddPath(PathSet path) {
            _elements.Add(path);
        }

        /// <summary>
        /// Defines a path element to add to the current path.
        /// </summary>
        /// <param name="pathElement">The <see cref="PathElement" />
to add.</param>
        [BuildElement("pathelement")]
        public void AddPathElement(PathElement pathElement) {
            _elements.Add(pathElement);
        }

The major difference (I believe) between using a property setter and
the AddXxx methods is that the AddXxx methods retain order,
particularly when the types are polymorphic and mixed, as in a path
element.


Hope that gives you something to work with,

Regards and good luck,


--
Troy


-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server.
Download it for free - -and be entered to win a 42" plasma tv or your very
own Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
nant-developers mailing list
nant-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to