package org.eclipse.virgo.ide.ui.internal.actions;
import java.net.URL;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.FormText;
import org.eclipse.ui.statushandlers.StatusManager;
import org.eclipse.virgo.ide.pde.core.internal.Constants;
import org.eclipse.virgo.ide.ui.ServerIdeUiPlugin;
/**
* ConvertPDE2VirgoProject is a contextual menu action in the Virgo submenu for migrating projects created with the
* unofficial PDE2Virgo plug-in to the official Virgo tools support for PDE.
*
* The migration consists in simply changing the project nature.
*/
public class ConvertPDE2VirgoProject extends AbstractConvertAction implements IObjectActionDelegate {
private static final String PDE2_VIRGO_NATURE = "org.github.pde2virgo.PDE2VirgoNature"; //$NON-NLS-1$
@Override
protected String getNature() {
return PDE2_VIRGO_NATURE;
}
@Override
protected void migrate(IProgressMonitor monitor, IProject project) {
monitor.beginTask("", 1); //$NON-NLS-1$
try {
IProjectDescription description = project.getDescription();
String[] natures = description.getNatureIds();
for (int i = 0; i < natures.length; i++) {
if (PDE2_VIRGO_NATURE.equals(natures[i])) {
natures[i] = Constants.NATURE_ID;
break;
}
}
description.setNatureIds(natures);
project.setDescription(description, monitor);
} catch (CoreException e) {
Status s = new Status(IStatus.ERROR, ServerIdeUiPlugin.PLUGIN_ID, e.getMessage());
StatusManager.getManager().handle(s, StatusManager.SHOW);
} finally {
monitor.done();
}
}
@Override
protected boolean showConfirmationDialog() {
MessageDialog dlg = new MessageDialog(this.part.getSite().getShell(), Messages.ConvertPDE2VirgoProject_title, null, "", MessageDialog.QUESTION, //$NON-NLS-2$
new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, 0) {
@Override
protected Control createMessageArea(Composite composite) {
composite.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).hint(200, -1).create());
FormText text = new FormText(composite, SWT.NO_FOCUS);
text.addHyperlinkListener(new HyperlinkAdapter() {
@Override
public void linkActivated(HyperlinkEvent e) {
try {
PlatformUI.getWorkbench().getBrowserSupport().createBrowser("PDE2Virgo").openURL(new URL(e.getHref().toString())); //$NON-NLS-1$
} catch (Exception e1) {
}
}
});
String xml = Messages.ConvertPDE2VirgoProject_message;
text.setText(xml, true, false);
return composite;
}
};
int rc = dlg.open();
return rc == Window.OK;
}
}