[300182] Expose convert to faceted form action from configure menu
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/plugin.properties b/plugins/org.eclipse.wst.common.project.facet.ui/plugin.properties index ebea5dc..bfc8a6d 100644 --- a/plugins/org.eclipse.wst.common.project.facet.ui/plugin.properties +++ b/plugins/org.eclipse.wst.common.project.facet.ui/plugin.properties
@@ -2,4 +2,5 @@ providerName = Eclipse Web Tools Platform project.facets = Project Facets runtimesPropertyPageLabel = Targeted Runtimes -basicFacetedProjectWizardName = Faceted Project \ No newline at end of file +basicFacetedProjectWizardName = Faceted Project +convertToFacetedFormCommandName = Convert to Faceted Form...
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/plugin.xml b/plugins/org.eclipse.wst.common.project.facet.ui/plugin.xml index 14e9574..07cd21c 100644 --- a/plugins/org.eclipse.wst.common.project.facet.ui/plugin.xml +++ b/plugins/org.eclipse.wst.common.project.facet.ui/plugin.xml
@@ -91,5 +91,33 @@ category="org.eclipse.ui.Basic"> </wizard> </extension> + + <extension point="org.eclipse.ui.commands"> + <command + categoryId="org.eclipse.ui.category.file" + defaultHandler="org.eclipse.wst.common.project.facet.ui.internal.ConvertProjectToFacetedFormCommandHandler" + id="org.eclipse.wst.common.project.facet.ui.ConvertProjectToFacetedForm" + name="%convertToFacetedFormCommandName"> + </command> + </extension> + + <extension point="org.eclipse.ui.menus"> + <menuContribution locationURI="popup:org.eclipse.ui.projectConfigure?after=additions"> + <command commandId="org.eclipse.wst.common.project.facet.ui.ConvertProjectToFacetedForm" style="push"> + <visibleWhen checkEnabled="false"> + <and> + <count value="1"/> + <iterate ifEmpty="false" operator="and"> + <adapt type="org.eclipse.core.resources.IProject"> + <not> + <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.wst.common.project.facet.core.nature"/> + </not> + </adapt> + </iterate> + </and> + </visibleWhen> + </command> + </menuContribution> + </extension> </plugin>
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormCommandHandler.java b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormCommandHandler.java new file mode 100644 index 0000000..c103478 --- /dev/null +++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormCommandHandler.java
@@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright (c) 2010 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 org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.preference.PreferenceDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.dialogs.PreferencesUtil; +import org.eclipse.ui.handlers.HandlerUtil; + +/** + * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a> + */ + +public final class ConvertProjectToFacetedFormCommandHandler + + extends AbstractHandler + +{ + public Object execute( final ExecutionEvent event ) + + throws ExecutionException + + { + IProject project = null; + final ISelection currentSelection = HandlerUtil.getCurrentSelection( event ); + + if( currentSelection instanceof IStructuredSelection ) + { + final Object element = ( (IStructuredSelection) currentSelection).getFirstElement(); + project = (IProject) Platform.getAdapterManager().getAdapter( element, IProject.class ); + } + + if( project == null ) + { + return null; + } + + final IWorkbenchWindow activeWorkbenchWindow = HandlerUtil.getActiveWorkbenchWindow( event ); + + if( activeWorkbenchWindow != null ) + { + final Shell shell = activeWorkbenchWindow.getShell(); + + ConvertProjectToFacetedFormRunnable.runInProgressDialog( shell, project ); + + final PreferenceDialog dialog + = PreferencesUtil.createPropertyDialogOn( shell, project, FacetsPropertyPage.ID, + null, null, PreferencesUtil.OPTION_NONE ); + + if( dialog != null ) + { + dialog.open(); + } + } + + return null; + } + +}
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormRunnable.java b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormRunnable.java new file mode 100644 index 0000000..9d833f8 --- /dev/null +++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormRunnable.java
@@ -0,0 +1,113 @@ +/****************************************************************************** + * Copyright (c) 2010 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.lang.reflect.InvocationTargetException; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.wst.common.project.facet.core.IFacetedProject; +import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy; +import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; + +/** + * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a> + */ + +public final class ConvertProjectToFacetedFormRunnable + + implements IRunnableWithProgress + +{ + private final IProject project; + + public static void runInProgressDialog( final Shell shell, + final IProject project ) + { + final ConvertProjectToFacetedFormRunnable runnable = new ConvertProjectToFacetedFormRunnable( project ); + + try + { + new ProgressMonitorDialog( shell ).run( true, true, runnable ); + } + catch( InvocationTargetException e ) + { + FacetUiPlugin.log( e ); + } + catch( InterruptedException e ) {} + } + + public ConvertProjectToFacetedFormRunnable( final IProject project ) + { + this.project = project; + } + + public void run( final IProgressMonitor monitor ) + + throws InvocationTargetException, InterruptedException + + { + monitor.beginTask( Resources.taskConvertingProject, 1000 ); + + try + { + final IProgressMonitor createProgressMonitor = new SubProgressMonitor( monitor, 100 ); + final IFacetedProject fpj = ProjectFacetsManager.create( this.project, true, createProgressMonitor ); + + if( monitor.isCanceled() ) + { + throw new InterruptedException(); + } + + monitor.setTaskName( Resources.taskDetectingTechnologies ); + + final IProgressMonitor detectProgressMonitor = new SubProgressMonitor( monitor, 800 ); + final IFacetedProjectWorkingCopy fpjwc = fpj.createWorkingCopy(); + fpjwc.detect( detectProgressMonitor ); + + monitor.setTaskName( Resources.taskInstallingFacets ); + + final IProgressMonitor commitChangesProgressMonitor = new SubProgressMonitor( monitor, 100 ); + fpjwc.commitChanges( commitChangesProgressMonitor ); + } + catch( CoreException e ) + { + throw new InvocationTargetException( e ); + } + finally + { + monitor.done(); + } + } + + private static final class Resources + + extends NLS + + { + public static String taskConvertingProject; + public static String taskDetectingTechnologies; + public static String taskInstallingFacets; + + static + { + initializeMessages( ConvertProjectToFacetedFormRunnable.class.getName(), Resources.class ); + } + } + +}
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormRunnable.properties b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormRunnable.properties new file mode 100644 index 0000000..8f7fb47 --- /dev/null +++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/ConvertProjectToFacetedFormRunnable.properties
@@ -0,0 +1,3 @@ +taskConvertingProject = Converting project to faceted form... +taskDetectingTechnologies = Detecting existing technologies... +taskInstallingFacets = Installing project facets...
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsPropertyPage.java b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsPropertyPage.java index 171e3ff..ff5024b 100644 --- a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsPropertyPage.java +++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsPropertyPage.java
@@ -34,7 +34,6 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.IDialogConstants; @@ -87,6 +86,8 @@ extends PropertyPage { + public static final String ID = "org.eclipse.wst.common.project.facet.ui.FacetsPropertyPage"; //$NON-NLS-1$ + private IProject project; private IFacetedProject fpj; private IFacetedProjectWorkingCopy fpjwc; @@ -540,21 +541,7 @@ private void handleConvertProjectAction() { - final ConvertProjectAction action = new ConvertProjectAction( this.project ); - - try - { - new ProgressMonitorDialog( getShell() ).run( true, true, action ); - } - catch( InvocationTargetException e ) - { - - } - catch( InterruptedException e ) - { - - } - + ConvertProjectToFacetedFormRunnable.runInProgressDialog( getShell(), this.project ); resetContents(); } @@ -587,57 +574,6 @@ } } - private static final class ConvertProjectAction - - implements IRunnableWithProgress - - { - private final IProject project; - - public ConvertProjectAction( final IProject project ) - { - this.project = project; - } - - public void run( final IProgressMonitor monitor ) - - throws InvocationTargetException, InterruptedException - - { - monitor.beginTask( Resources.taskConvertingProject, 1000 ); - - try - { - final IProgressMonitor createProgressMonitor = new SubProgressMonitor( monitor, 100 ); - final IFacetedProject fpj = ProjectFacetsManager.create( this.project, true, createProgressMonitor ); - - if( monitor.isCanceled() ) - { - throw new InterruptedException(); - } - - monitor.setTaskName( Resources.taskDetectingTechnologies ); - - final IProgressMonitor detectProgressMonitor = new SubProgressMonitor( monitor, 800 ); - final IFacetedProjectWorkingCopy fpjwc = SharedWorkingCopyManager.getWorkingCopy( fpj ); - fpjwc.detect( detectProgressMonitor ); - - monitor.setTaskName( Resources.taskInstallingFacets ); - - final IProgressMonitor commitChangesProgressMonitor = new SubProgressMonitor( monitor, 100 ); - fpjwc.commitChanges( commitChangesProgressMonitor ); - } - catch( CoreException e ) - { - throw new InvocationTargetException( e ); - } - finally - { - monitor.done(); - } - } - } - private static final class Resources extends NLS @@ -651,9 +587,6 @@ public static String modifyWithUnknownWarningMessage; public static String projectNotFacetedMessage; public static String convertLink; - public static String taskConvertingProject; - public static String taskDetectingTechnologies; - public static String taskInstallingFacets; static {
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsPropertyPage.properties b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsPropertyPage.properties index c4c12a3..44369a9 100644 --- a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsPropertyPage.properties +++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsPropertyPage.properties
@@ -6,6 +6,3 @@ modifyWithUnknownWarningMessage = Modifying a faceted project when implementations of one or more installed facets are not available can potentially result in a corrupted project. Are you sure you want to proceed? projectNotFacetedMessage = This project is not configured to use project facets. Converting this project to faceted form will allow you to easily control the available technologies. convertLink = Convert to faceted form... -taskConvertingProject = Converting project to faceted form... -taskDetectingTechnologies = Detecting existing technologies... -taskInstallingFacets = Installing project facets...