blob: 366acfce7852d6c79ae6c46edab1f130a143a017 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2012 Oracle 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.ui.wizards;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.bpel.common.ui.editmodel.EditModel;
import org.eclipse.bpel.model.partnerlinktype.PartnerLinkType;
import org.eclipse.bpel.model.partnerlinktype.PartnerlinktypeFactory;
import org.eclipse.bpel.model.partnerlinktype.Role;
import org.eclipse.bpel.ui.BPELEditor;
import org.eclipse.bpel.ui.BPELUIPlugin;
import org.eclipse.bpel.ui.IBPELUIConstants;
import org.eclipse.bpel.ui.commands.AddWSDLImportCommand;
import org.eclipse.bpel.ui.commands.CompoundCommand;
import org.eclipse.bpel.ui.commands.CreatePartnerLinkTypeCommand;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.PortType;
/**
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Aug 14, 2006
*
*/
public class CreatePartnerLinkWizard extends Wizard {
CreatePartnerLinkTypeWizardNamePage fFirstPage;
CreatePartnerLinkTypeWizardRolePage fRolePage1;
CreatePartnerLinkTypeWizardRolePage fRolePage2;
PortType fMandatoryPortType;
PartnerLinkType fPartnerLinkType;
BPELEditor fEditor;
public CreatePartnerLinkWizard () {
setNeedsProgressMonitor(true);
setDialogSettings(BPELUIPlugin.INSTANCE.getDialogSettingsFor(this));
setHelpAvailable(false);
setWindowTitle(Messages.CreatePartnerLinkWizard_0);
}
public PartnerLinkType getPartnerLinkType () {
return fPartnerLinkType;
}
public void setMandatoryPortType (PortType pt) {
fMandatoryPortType = pt;
}
public void setBPELEditor ( BPELEditor editor ) {
fEditor = editor;
}
@Override
public void addPages() {
fFirstPage = new CreatePartnerLinkTypeWizardNamePage("name.page"); //$NON-NLS-1$
fFirstPage.setTitle(Messages.CreatePartnerLinkWizard_2);
fFirstPage.setDescription(Messages.CreatePartnerLinkWizard_3);
fFirstPage.setImageDescriptor(BPELUIPlugin.INSTANCE.getImageDescriptor(
IBPELUIConstants.ICON_WIZARD_BANNER));
fFirstPage.setDefinitions ( fEditor.getArtifactsDefinition() );
fRolePage1 = new CreatePartnerLinkTypeWizardRolePage ("role.1"); //$NON-NLS-1$
fRolePage1.setTitle(Messages.CreatePartnerLinkWizard_5);
fRolePage1.setDescription(Messages.CreatePartnerLinkWizard_6);
fRolePage1.setImageDescriptor(BPELUIPlugin.INSTANCE.getImageDescriptor(
IBPELUIConstants.ICON_WIZARD_BANNER));
fRolePage1.setMandatoryDefinition( fMandatoryPortType.getEnclosingDefinition() );
fRolePage2 = new CreatePartnerLinkTypeWizardRolePage ("role.2"); //$NON-NLS-1$
fRolePage2.setTitle(Messages.CreatePartnerLinkWizard_8);
fRolePage2.setDescription(Messages.CreatePartnerLinkWizard_9);
fRolePage2.setImageDescriptor(BPELUIPlugin.INSTANCE.getImageDescriptor(
IBPELUIConstants.ICON_WIZARD_BANNER));
IFile file = EditModel.getIFileForURI(fMandatoryPortType.eResource().getURI());
if (file==null)
// Bugzilla 324164
// if WSDL is not a file (e.g. http://service.com?WSDL) use editor's input file project
file = ((FileEditorInput)fEditor.getEditorInput()).getFile();
if (file!=null)
fRolePage2.setOptionalDefinitions( getOptionalDefinitions(file.getProject()) );
fRolePage2.setOptional(true);
fRolePage1.setOtherRolePage ( fRolePage2 );
fRolePage2.setOtherRolePage ( fRolePage1 );
addPage(fFirstPage);
addPage(fRolePage1);
addPage(fRolePage2);
fRolePage1.setPreviousPage( fFirstPage );
fRolePage2.setPreviousPage (fRolePage1);
}
private List<Definition> getOptionalDefinitions(IProject project) {
final List<Definition> wsdlDefinitions = new ArrayList<Definition>();
final List<IFile> wsdlFiles = new ArrayList<IFile>();
IResourceVisitor visitor = new IResourceVisitor() {
public boolean visit(org.eclipse.core.resources.IResource resource) throws org.eclipse.core.runtime.CoreException {
if (resource.getType() == IResource.FILE && "wsdl".equalsIgnoreCase(resource.getFileExtension())) {
IFile artifactFile = EditModel.getIFileForURI(fEditor.getArtifactsDefinition().eResource().getURI());
if (artifactFile==null || !(artifactFile.getFullPath().equals(((IFile)resource).getFullPath()))) {
//filter artifacts WSDL
wsdlFiles.add((IFile)resource);
}
}
return true;
}
};
try {
project.accept(visitor);
}
catch (CoreException e) {
e.printStackTrace();
}
for (Iterator<IFile> iterator = wsdlFiles.iterator(); iterator.hasNext();) {
IFile iFile = iterator.next();
IPath fullPath = iFile.getFullPath();
URI uri = URI.createPlatformResourceURI(fullPath.toString(), false);
Resource wsdlResource = fEditor.getResource().getResourceSet().getResource(uri, true);
EcorePackage instance = EcorePackage.eINSTANCE;
instance.eAdapters();
try {
wsdlResource.load(Collections.EMPTY_MAP);
EList<EObject> contents = wsdlResource.getContents();
if (!contents.isEmpty()) {
Definition def = (Definition) contents.get(0);
wsdlDefinitions.add(def);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return wsdlDefinitions;
}
/**
* Create and return the partner link type that this wizard gathered information
* about.
*
* @return
*/
PartnerLinkType createPLT () {
PartnerLinkType plt = PartnerlinktypeFactory.eINSTANCE.createPartnerLinkType();
plt.setName( fFirstPage.getPartnerLinkTypeName() );
// Element doc = plt.getDocumentationElement();
// doc.setNodeValue("Generated by CreatePartnerLinkWizard");
Role role1 = PartnerlinktypeFactory.eINSTANCE.createRole();
role1.setName ( fRolePage1.getRoleName() );
role1.setPortType( fRolePage1.getMandatoryPortType() );
plt.getRole().add(role1);
if (fRolePage2.isSpecified()) {
Role role2 = PartnerlinktypeFactory.eINSTANCE.createRole();
role2.setName ( fRolePage2.getRoleName() );
role2.setPortType( fRolePage2.getOptionalPortType() );
plt.getRole().add(role2);
}
return plt;
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish() {
fPartnerLinkType = createPLT();
Definition artifactsDefinition = fEditor.getArtifactsDefinition();
CompoundCommand cmd = new CompoundCommand();
// We add the import into the artifacts now, because code relies on diving through
// WSDL imports to find portTypes etc.
// 1. Add WSDL import to the artifacts file (again, this is a noop if already exists).
cmd.add( new AddWSDLImportCommand ( artifactsDefinition, fMandatoryPortType ));
// 2. Create the new Partner Link Type in the artifacts file.
cmd.add( new CreatePartnerLinkTypeCommand(artifactsDefinition, fPartnerLinkType) );
fEditor.getCommandFramework().execute( cmd );
return true;
}
@Override
public boolean canFinish() {
return super.canFinish();
}
}