logo       

Re: JobProperty Questions: msg#00099

java.hudson.user

Subject: Re: JobProperty Questions

Great. One more question, from an instance of the JobDescriptor associated with a Job, how can I see the instance associated with the system config, in order to merge the settings?

On 1/26/07, Kohsuke Kawaguchi <Kohsuke.Kawaguchi@xxxxxxx> wrote:
Eric Crahen wrote:
> Adding load() might be a good idea since (I think) most options would want
> to restore their previous settings.
>
> I understand how configure() works now, thanks.
>
> One thing I find a little fuzy still is the global JobProperty. On the
> System Config page, using the global.jelly that I listed in my previous
> mail, I noticed ${instance} was null, and ${it} was a reference to the
> Hudson instance. Is there ever a JobProperty instantiated for the global
> setting?

I think it's available as ${descriptor}. See the trac plugin as an example.

>
> On 1/26/07, Kohsuke Kawaguchi < Kohsuke.Kawaguchi@xxxxxxx> wrote:
>>
>>
>>
>> Eric Crahen wrote:
>> > I have a question on using custom JobProperties, I'm noticing some
>> strange
>> > behavior.
>> >
>> > My plugin adds a custom JobDescriptor to the Jobs.PROPERTIES list and
>> I've
>> > included a very basic config.jelly . in the correct resource path
>> > resources/hudson/plugins/MyJobProperty/global.jelly and a similar one
>> for
>> > config.jelly. It contains a simple f:entry with some text fields to
>> display
>> > some data,
>> >
>> > The first thing was that when I create a new Job and enter the Job
>> > Configuration page, I thought I would see some of what was in the
>> > config.jelly in the UI, but there is no addition. Also, there never was
>> a
>> > call to isApplicable() or configure() so it would make sense that
>> nothing
>> > gets added to the UI, but I'm not quire sure why this is.
>>
>> I just checked the code and apparently this part was broken. I just
>> committed the change.
>>
>> > The next odd thing was that if I visit the Manage Hudson -> System
>> > Configuration page, I do see the additional fields on the UI for my
>> custom
>> > property, but there isn't a call to configure() until after I hit save.
>> And
>> > load() was never called, so I'm not sure where I have the chance to load
>> the
>> > global settings for a custom property.
>>
>> The config() will be only invoked when the browser submits the form, so
>> that sounds correct to me.
>>
>> The derived class is responsible for calling the load() method by
>> itself, actually. See for example Ant.DescriptorImpl l.114.
>>
>> This is quite error prone, yes, but I couldn't do that in the base class
>> constructor. Maybe I should call the load when descriptors are added to
>> their respective list?
>>
>>
>> > // -------
>> >
>> > package hudson.plugins ;
>> >
>> > import hudson.model.AbstractProject;
>> > import hudson.model.Job;
>> > import hudson.model.JobProperty;
>> > import hudson.model.JobPropertyDescriptor ;
>> > import hudson.tasks.BuildStep;
>> > import org.kohsuke.stapler.StaplerRequest;
>> >
>> >
>> > public class MyJobProperty extends JobProperty<AbstractProject<?,?>> {
>> >
>> >   public static final JobPropertyDescriptor DESCRIPTOR = new
>> Descriptor();
>> >
>> >   public JobPropertyDescriptor getDescriptor() {
>> >     return DESCRIPTOR;
>> >   }
>> >
>> >   private static class Descriptor extends JobPropertyDescriptor {
>> >
>> >     Descriptor() {
>> >       super(MyJobProperty.class );
>> >     }
>> >
>> >     public boolean isApplicable(java.lang.Class<? extends Job> jobType)
>> {
>> >       System.out.println(jobType);
>> >       return AbstractProject.class.isAssignableFrom(jobType);
>> >     }
>> >
>> >     // TODO: support per-project override to the system-wide setting
>> >     public IvyJobProperty newInstance(StaplerRequest req) throws
>> > FormException {
>> >       System.err.println("NEW INSTANCE!" + req);
>> >       return new IvyJobProperty();
>> >     }
>> >
>> >    public boolean configure(StaplerRequest req) throws FormException {
>> >      System.err.println("CONFIG!" + req);
>> >       return true;
>> >    }
>> >
>> >     public String getDisplayName() {
>> >       return MyJobProperty.class.toString();
>> >     }
>> >
>> >   }
>> >
>> > }
>> >
>> > // -----------
>> > // Same for global.jelly & config.jelly
>> >
>> > <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler"
>> > xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson"
>> > xmlns:f="/lib/form">
>> >
>> >   <f:entry title="MyProperties"
>> help="${rootURL}/plugin/build-timeout/help-
>> > projectConfig.html ">
>> >     <f:textbox name="myproperties.instance" value="${instance} default"
>> />
>> >     <f:textbox name="myproperties.it " value="${it} default" />
>> >   </f:entry>
>> >
>> > </j:jelly>
>> >
>> >
>> >
>>
>>
>> --
>> Kohsuke Kawaguchi
>> Sun Microsystems                   kohsuke.kawaguchi@xxxxxxx
>>
>>
>>
>
>


--
Kohsuke Kawaguchi
Sun Microsystems                   kohsuke.kawaguchi@xxxxxxx





--

- Eric
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise