Hello,
Let's say I want to write some UI to edit some complicated configuration
split into multiple entities in multiple maven modules. The UI needs to
have one entry point though. So:
Let's create the UI based on TabbedPanel. Each of the tabs will be
provided by different maven modules by the means of factories:
> public interface JukeboxConfigPanelFactory extends Ordered {
public IModel<String> getPanelTitle();
public Panel getPanel( String id, IModel<Jukebox> jukeboxModel );
}
Provided that I have a list of all panel factories (that is an actual
problem!) I can do that:
List<ITab> tabs = new ArrayList<ITab>();
for ( JukeboxConfigPanelFactory factory : getPanelFactories() )
{
tabs.add( new
JukeboxConfigPanelFactoryAwareAbstractTab( factory, getJukeboxModel() ) );
}
add( new AjaxTabbedPanel( "tabs", tabs ) );
The problem is: HOW do I get all the panel factories defined in Spring
context?
I cannot do :
@SpringBean
private List<JukeboxConfigPanelFactory> factories;
because this is not supported by
org.apache.wicket.spring.injection.annot.AnnotProxyFieldValueFactory.
I could create another spring bean:
public interface JukeboxConfigPanelFactoryManager {
public List<JukeboxConfigPanelFactory> getPanelFactoryList();
}
@Component
public class JukeboxConfigPanelFactoryManagerImpl implements
JukeboxConfigPanelFactoryManager, InitializingBean {
private List<JukeboxConfigPanelFactory> factoryList;
@Autowired
public JukeboxConfigPanelFactoryManagerImpl(
List<JukeboxConfigPanelFactory> factoryList ) {
this.factoryList = factoryList;
}
@Override
public List<JukeboxConfigPanelFactory> getPanelFactoryList() {
return Collections.unmodifiableList( factoryList );
}
@Override
public void afterPropertiesSet() throws Exception {
Collections.sort( factoryList,
new OrderComparator() );
}
}
so now I am able to get all factory implementations in one place:
List<ITab> tabs = new ArrayList<ITab>();
for ( JukeboxConfigPanelFactory factory :
panelFactoryManager.getPanelFactoryList() ) {
tabs.add( new
JukeboxConfigPanelFactoryAwareAbstractTab( factory, getJukeboxModel() ) );
}
add( new AjaxTabbedPanel( "tabs", tabs ) );
But now the JukeboxConfigPanelFactoryAwareAbstractTab will fail
miserably at serializing as only the manager has been wrapped with a
proxy and not the factories underneath.
How can I approach the problem using current state of wicket-spring
module? I haven't found a way to wrap the "factory" beans with proxy
manually.
--
Leszek Gawron http://lgawron.blogspot.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]