* @param selectedObject the selected object
* @return the details component for the given provider and selected object
*/
@NotNull
private Component createDetailsComponent( @NotNull DetailsProvider<Object> provider, @NotNull Object selectedObject ) {
Lookup details = provider.getDetails( selectedObject );
//Delegate the view
PageComponentContextAware pageComponentContextAware = details.lookup( PageComponentContextAware.class );
if ( pageComponentContextAware != null ) {
pageComponentContextAware.updateContext( getContext() );
}
//When a form is available, set the title pane as messagable
Form form = details.lookup( Form.class );
if ( form != null ) {
form.newSingleLineResultsReporter( titlePane );
}
//Register delegating listener
delegatingApplicationListener = details.lookup( ApplicationListener.class );
//Insert the component
Component component;
DetailsComponentFactory componentFactory = details.lookup( DetailsComponentFactory.class );
if ( componentFactory != null ) {
component = componentFactory.createComponent();
} else {
component = details.lookup( Component.class );
if ( component == null ) {
throw new IllegalStateException( "No componentFactory and no component provided for " + selectedObject );
}
}
return component;