/******************************************************************************* | |
* Copyright (c) 2008, 2012 IBM Corporation and others. | |
* 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: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.bpel.apache.ode.deploy.ui.wizards; | |
import java.io.IOException; | |
import java.lang.reflect.InvocationTargetException; | |
import java.util.Iterator; | |
import java.util.List; | |
import org.eclipse.bpel.apache.ode.deploy.model.dd.DocumentRoot; | |
import org.eclipse.bpel.apache.ode.deploy.model.dd.ProcessType; | |
import org.eclipse.bpel.apache.ode.deploy.model.dd.TDeployment; | |
import org.eclipse.bpel.apache.ode.deploy.model.dd.ddFactory; | |
import org.eclipse.bpel.apache.ode.deploy.model.dd.util.ddResourceFactoryImpl; | |
import org.eclipse.bpel.apache.ode.deploy.model.dd.util.ddResourceImpl; | |
import org.eclipse.bpel.apache.ode.deploy.ui.Activator; | |
import org.eclipse.bpel.apache.ode.deploy.ui.messages.ODEDeployUIMessages; | |
import org.eclipse.bpel.apache.ode.deploy.ui.util.DeployUtils; | |
import org.eclipse.bpel.model.Process; | |
import org.eclipse.core.resources.IContainer; | |
import org.eclipse.core.resources.IFile; | |
import org.eclipse.core.resources.IProject; | |
import org.eclipse.core.resources.IResource; | |
import org.eclipse.core.resources.IWorkspaceRoot; | |
import org.eclipse.core.resources.ResourcesPlugin; | |
import org.eclipse.core.runtime.CoreException; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.core.runtime.IStatus; | |
import org.eclipse.core.runtime.Path; | |
import org.eclipse.core.runtime.Status; | |
import org.eclipse.emf.common.util.URI; | |
import org.eclipse.emf.ecore.resource.Resource; | |
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; | |
import org.eclipse.jface.dialogs.MessageDialog; | |
import org.eclipse.jface.operation.IRunnableWithProgress; | |
import org.eclipse.jface.viewers.ISelection; | |
import org.eclipse.jface.viewers.IStructuredSelection; | |
import org.eclipse.jface.wizard.Wizard; | |
import org.eclipse.ui.INewWizard; | |
import org.eclipse.ui.IWorkbench; | |
import org.eclipse.ui.IWorkbenchPage; | |
import org.eclipse.ui.IWorkbenchWizard; | |
import org.eclipse.ui.PartInitException; | |
import org.eclipse.ui.PlatformUI; | |
import org.eclipse.ui.ide.IDE; | |
/** | |
* Wizard that enables creating new deployment descriptors for Apache ODE. | |
* | |
* @author Simon Moser (IBM) | |
* @author Tammo van Lessen (IAAS) | |
*/ | |
public class NewODEDeployWizard extends Wizard implements INewWizard { | |
private ODEDeployWizardPage page; | |
private ISelection selection; | |
/** | |
* Constructor for NewODEDeployWizard. | |
*/ | |
public NewODEDeployWizard() { | |
super(); | |
setNeedsProgressMonitor(true); | |
} | |
/** | |
* Adding the page to the wizard. | |
*/ | |
public void addPages() { | |
page = new ODEDeployWizardPage(selection); | |
addPage(page); | |
} | |
/** | |
* This method is called when 'Finish' button is pressed in | |
* the wizard. We will create an operation and run it | |
* using wizard as execution context. | |
*/ | |
public boolean performFinish() { | |
final String containerName = page.getContainerName(); | |
final String fileName = page.getFileName(); | |
IRunnableWithProgress op = new IRunnableWithProgress() { | |
public void run(IProgressMonitor monitor) throws InvocationTargetException { | |
try { | |
doFinish(containerName, fileName, monitor); | |
} catch (CoreException e) { | |
throw new InvocationTargetException(e); | |
} finally { | |
monitor.done(); | |
} | |
} | |
}; | |
try { | |
getContainer().run(true, false, op); | |
} catch (InterruptedException e) { | |
return false; | |
} catch (InvocationTargetException e) { | |
Throwable realException = e.getTargetException(); | |
MessageDialog.openError(getShell(), "Error", realException.getMessage()); | |
return false; | |
} | |
return true; | |
} | |
/** | |
* The worker method. It will find the container, create the | |
* file if missing or just replace its contents, and open | |
* the editor on the newly created file. | |
*/ | |
private void doFinish( | |
String containerName, | |
String fileName, | |
IProgressMonitor monitor) | |
throws CoreException { | |
// create a sample file | |
monitor.beginTask("Creating " + fileName, 2); | |
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); | |
IResource resource = root.findMember(new Path(containerName)); | |
if (!resource.exists() || !(resource instanceof IContainer)) { | |
throwCoreException("Container \"" + containerName + "\" does not exist."); | |
} | |
IContainer container = (IContainer) resource; | |
final IFile file = container.getFile(new Path(fileName)); | |
try { | |
Resource emfResource = createBaseDeploymentDescriptor(file); | |
emfResource.save(null); | |
} | |
catch (IOException e) { | |
throwCoreException(e.getMessage()); | |
} | |
monitor.worked(1); | |
monitor.setTaskName(ODEDeployUIMessages.NewODEDeployWizard_Task_Running); | |
getShell().getDisplay().asyncExec(new Runnable() { | |
public void run() { | |
IWorkbenchPage page = | |
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); | |
try { | |
IDE.openEditor(page, file, Activator.EDITOR_ID, true); | |
} catch (PartInitException e) { | |
} | |
} | |
}); | |
monitor.worked(1); | |
} | |
/** | |
* Purpose of this method is to create a new empty deployment descriptor | |
* in the targetDir | |
*/ | |
public Resource createBaseDeploymentDescriptor(IFile file) | |
{ | |
URI fileURI = URI.createURI(file.getFullPath().toString()); | |
//generate Resource Factory | |
ddResourceFactoryImpl fac = new ddResourceFactoryImpl(); | |
//URI ddFileLocation = URI.createFileURI(this.deployDirectory + System.getProperty("file.separator") + DD_FILENAME ); | |
ddResourceImpl ddResource = (ddResourceImpl) fac.createResource(fileURI); | |
ddResource.setEncoding("UTF-8"); | |
DocumentRoot rootElm = ddFactory.eINSTANCE.createDocumentRoot(); | |
TDeployment deployElement = ddFactory.eINSTANCE.createTDeployment(); | |
rootElm.setDeploy(deployElement); | |
ddResource.getContents().add(rootElm); | |
//bugzilla 250057: parse the project, and if we find a BPEL file, create | |
//a base "process" tag that has | |
// <active>true</active> | |
// <retired>false</retired> | |
IProject project = file.getProject(); | |
List<Process> processes = DeployUtils.loadAllBPELFromProject(project, new ResourceSetImpl()); | |
for (Iterator<Process> iterator = processes.iterator(); iterator.hasNext();) { | |
Process process = (Process) iterator.next(); | |
ProcessType pt = DeployUtils.createProcessStub(process); | |
pt.setActive(true); | |
pt.setRetired(false); | |
pt.setModel(process); | |
deployElement.getProcess().add(pt); | |
} | |
return ddResource; | |
} | |
private void throwCoreException(String message) throws CoreException { | |
IStatus status = | |
new Status(IStatus.ERROR, "org.eclipse.bpel.apache.ode.deploy.ui", IStatus.OK, message, null); | |
throw new CoreException(status); | |
} | |
/** | |
* We will accept the selection in the workbench to see if | |
* we can initialize from it. | |
* @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) | |
*/ | |
public void init(IWorkbench workbench, IStructuredSelection selection) { | |
this.selection = selection; | |
} | |
} |