logo       

Re: JobProperty Questions: msg#00098

java.hudson.user

Subject: Re: JobProperty Questions

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

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

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

News | FAQ | advertise