I can't find more effective way to implement lookup method with groovy configuration (only groovy!) than that:
// abstract Java class with lookup method
public abstract class GMyFrame extends JFrame {
private Color startColor;
public GMyFrame() {
super("Hello");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(200, 400));
setSize(new Dimension(400, 400));
setLocationRelativeTo(null);
}
public void setStartColor(Color color) {
this.startColor = color;
this.getContentPane().setBackground(color);
}
protected Color getStartColor() {
return startColor;
}
public abstract Color getNewColor(); //lookup
}
//groovy config
...
Closure ctx() {
def closure = { caller ->
[this, caller]
}
return closure
}
beans {
randomColorGenerator(GRandomColorGenerator) {
new GRandomColorGenerator()
}
randomColor(Color) { bean ->
bean.scope = 'prototype'
bean.factoryBean = 'randomColorGenerator'
bean.factoryMethod = 'generate'
}
startColor(Color, 0, 0, 255) {}
myFrame(NFrame, ctx().getProperties()) {
startColor = ref('startColor')
}
jFrameInvoker(GJFrameInvoker) { bean ->
bean.initMethod = 'init'
frame = ref('myFrame')
}
}
class NFrame extends GMyFrame {
def configObj
NFrame(o) {
configObj = o
}
@Override
Color getNewColor() {
return configObj['thisObject'].getProperties().get('binding').getProperties().get('variables')['beans'].getApplicationContext().getBean('randomColor')
}
}
But it's too long and strange. Can you find a simple decision?