Now that I think about it, annotations could provide a wholly new and improved way of doing properties. They would be attached to the fields directly instead of their getter. It could look like this:

@MasonProperty(order=1, 
   displayName="Number of Youth", 
   tooltip="Number of youth in the model. This reflects the blah blah blah", 
   min=1, 
   max=500,
   uiType=Slider,
   disabledWhileRunning=true)
public int numYouth = 140;

There's a lot of power there. Food for thought.

Joey

On Mon, Jun 22, 2015 at 11:26 PM, Joey Harrison <[log in to unmask]> wrote:
This problem has irritated me for a long time and I finally thought of a solution using annotations. Working from this tutorial I created MasonProperty.java and modified SimpleProperties.java to use it. In your SimState, you'd do the following:

public int numYouth = 140;
@MasonProperty(order=1)
public int getNumYouth() { return numYouth; }
public void setNumYouth(int val) { numYouth = val; }

public int classSize = 18;
@MasonProperty(order=2)
public int getClassSize() { return classSize; }
public void setClassSize(int val) { classSize = val; }

...and so on. The annotation gets attached to the method that follows it and it needs to go with the get method, so make sure it's in the right place. If you don't include the annotation, the order will be the same as before. If you put the annotation on some of your properties but not on others, the non-annotated ones will come afterward (the default order number is Integer.MAX_VALUE).

For Sean, here's what I did to SimpleProperties: In the loop where it goes through all the methods looking for valid getters and setters, I changed it so it just adds the method to getMethods but doesn't do the <other stuff>. (It does currently print out debug info.) Next, it sorts the methods in the getMethods list. Finally, it loops through the now-sorted getMethods list and does the rest of the <other stuff>. That's it.

I haven't used annotations before, so it's possible I've done something wrong or unnecessary. Feedback is certainly welcome. That said, my initial tests looked great.

Hope that helps,
Joey

On Mon, Jun 22, 2015 at 11:22 PM, Joey Harrison <[log in to unmask]> wrote:
This problem has irritated me for a long time and I finally thought of a solution using annotations. Working from this tutorial I created MasonProperty.java and modified SimpleProperties.java to use it. In your SimState, you'd do the following:

public int numYouth = 140;
@MasonProperty(order=1)
public int getNumYouth() { return numYouth; }
public void setNumYouth(int val) { numYouth = val; }

public int classSize = 18;
@MasonProperty(order=2)
public int getClassSize() { return classSize; }
public void setClassSize(int val) { classSize = val; }

...and so on. The annotation gets attached to the method that follows it and it needs to go with the get method, so make sure it's in the right place. If you don't include the annotation, the order will be the same as before. If you put the annotation on some of your properties but not on others, the non-annotated ones will come afterward (the default order number is Integer.MAX_VALUE).

For Sean, here's what I did to SimpleProperties: In the loop where it goes through all the methods looking for valid getters and setters, I changed it so it just adds the method to getMethods but doesn't do the <other stuff>. (It does currently print out debug info.) Next, it sorts the methods in the getMethods list. Finally, it loops through the now-sorted getMethods list and does the rest of the <other stuff>. That's it.

I haven't used annotations before, so it's possible I've done something wrong or unnecessary. That said, my initial tests looked great.

Hope that helps,
Joey
 

On Mon, Jun 22, 2015 at 9:09 PM, Sean Luke <[log in to unmask]> wrote:
On Jun 22, 2015, at 5:34 PM, Axel Kowald <[log in to unmask]> wrote:

> well the ordering in the model tab seems to be unrelated to the ordering in the source code.

Again, it depends on the compiler.  :-(

> The really weird thing is that the ordering changes arbitrarily with each program start.

Now that *is* strange. Is this a Windows thing?  Definitely does not happen on the Mac.

Sean