@Override
public void setPerspective( final PerspectiveDefinition perspective ) {
final PanelDefinition newRoot = perspective.getRoot();
final WorkbenchPanelPresenter oldPresenter = mapPanelDefinitionToPresenter.remove( root );
SimplePanel container;
if ( oldPresenter != null && oldPresenter.getPanelView().asWidget().getParent() != null ) {
container = (SimplePanel) oldPresenter.getPanelView().asWidget().getParent();
} else {
container = null;
}
getBeanFactory().destroy( root );
this.root = newRoot;
this.perspective = perspective;
WorkbenchPanelPresenter newPresenter = getWorkbenchPanelPresenter( newRoot );
if ( newPresenter == null ) {
newPresenter = getBeanFactory().newWorkbenchPanel( newRoot );
mapPanelDefinitionToPresenter.put( newRoot, newPresenter );
}
if ( container != null ) {
if ( oldPresenter != null ) {
oldPresenter.removePanel();
}
container.setWidget( newPresenter.getPanelView() );
}
}