I've never been a fan of having to use the "new" keyword with a
short-lived object that I won't be holding a reference to. I realize
this isn't the intended use case for EventMonitors (folks should
subclass it), but I don't think many people do that.
I believe a lot of folks will just do...
new EventMonitor("blah").fire();
Which is fine really.

One idea I came up with while day dreaming yesterday was to have a
builder for EventMonitors...

public class EventMonitorBuilder {

    private final EventMonitor eventMonitor;

    public static EventMonitorBuilder newEventMonitor(String name) {
        return new EventMonitorBuilder(new EventMonitor(name));
    }

    public static void fireEventMonitor(String name) {
        newEventMonitor(name).fire();
    }

    private EventMonitorBuilder(EventMonitor eventMonitor) {
        this.eventMonitor = eventMonitor;
    }

    public EventMonitorBuilder addAttribute(String name, Object value) {
        eventMonitor.set(name, value);
        return this;
    }

    public EventMonitor fire() {
        eventMonitor.fire();
        return eventMonitor;
    }

}

This would allow us to write sexy code like this in Java...
(Note that my examples rely on Java 5 for boxing and static imports)

        newEventMonitor("blah")
                .addAttribute("test", 1)
                .addAttribute("good", "stuff")
                .fire();

Or even the one-line alternative...
        fireEventMonitor("blah");

Another thing I'd like to do is add support for Groovy. Where we can
create a Builder Groovy style.
http://groovy.codehaus.org/Builders
(I'm sure Doug is thinking of doing sexy stuff like this in ERMArb)

This is pseudo code to show how the builder pattern would work...
def montior = new GroovyEventMonitorBuilder()
monitor.MonitorNameGoesHere {
    AttributeName(AttributeValue)
}

No need for a "fire()" method as it would be implied.

So for example...

def montior = new GroovyEventMonitorBuilder()
monitor.authenticationFailure {
    userName("rkrueger")
}

Just wanted to get these thoughts out of my head :)

_______________________________________________
Mailing list: https://launchpad.net/~erma-core
Post to     : erma-core@lists.launchpad.net
Unsubscribe : https://launchpad.net/~erma-core
More help   : https://help.launchpad.net/ListHelp

Reply via email to