blob: 1db91298e1a227728777c28e6f4e621561c43385 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2008 Oracle
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Konstantin Komissarchik - initial implementation and ongoing maintenance
******************************************************************************/
package org.eclipse.wst.common.project.facet.ui.internal;
import java.util.Set;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.help.IWorkbenchHelpSystem;
import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager;
import org.eclipse.wst.common.project.facet.core.runtime.events.IRuntimeLifecycleEvent;
import org.eclipse.wst.common.project.facet.core.runtime.events.IRuntimeLifecycleListener;
import org.eclipse.wst.common.project.facet.ui.FacetUiHelpContextIds;
/**
* @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a>
*/
public final class FacetsSelectionPage
extends WizardPage
{
public FacetsSelectionPanel panel;
private IFacetedProjectWorkingCopy fpjwc;
public FacetsSelectionPage( final Set<IProjectFacetVersion> base,
final IFacetedProjectWorkingCopy fpjwc )
{
super( "facets.selection.page" ); //$NON-NLS-1$
setTitle( Resources.pageTitle );
setDescription( Resources.pageDescription );
setImageDescriptor( FacetedProjectFrameworkImages.BANNER_IMAGE.getImageDescriptor() );
this.fpjwc = fpjwc;
}
public void createControl( final Composite parent )
{
this.panel = new FacetsSelectionPanel( parent, this.fpjwc );
updatePageState();
this.fpjwc.addListener
(
new IFacetedProjectListener()
{
public void handleEvent( final IFacetedProjectEvent event )
{
updatePageState();
}
},
IFacetedProjectEvent.Type.PROJECT_MODIFIED
);
final IRuntimeLifecycleListener runtimeLifecycleListener = new IRuntimeLifecycleListener()
{
public void handleEvent( final IRuntimeLifecycleEvent event )
{
updatePageState();
}
};
RuntimeManager.addListener( runtimeLifecycleListener,
IRuntimeLifecycleEvent.Type.VALIDATION_STATUS_CHANGED );
this.panel.addDisposeListener
(
new DisposeListener()
{
public void widgetDisposed( final DisposeEvent e )
{
RuntimeManager.removeListener( runtimeLifecycleListener );
}
}
);
final IWorkbenchHelpSystem h = PlatformUI.getWorkbench().getHelpSystem();
h.setHelp( this.panel, FacetUiHelpContextIds.FACETS_SELECTION_PAGE );
setControl( this.panel );
}
private void updatePageState()
{
if( ! Thread.currentThread().equals( this.panel.getDisplay().getThread() ) )
{
final Runnable uiRunnable = new Runnable()
{
public void run()
{
updatePageState();
}
};
this.panel.getDisplay().asyncExec( uiRunnable );
return;
}
setPageComplete( this.panel.isSelectionValid() );
if( getContainer().getCurrentPage() != null )
{
getContainer().updateButtons();
}
}
public void setVisible( final boolean visible )
{
super.setVisible( visible );
if( visible )
{
this.panel.setFocus();
}
}
private static final class Resources
extends NLS
{
public static String pageTitle;
public static String pageDescription;
static
{
initializeMessages( FacetsSelectionPage.class.getName(),
Resources.class );
}
}
}