/******************************************************************************* | |
* 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 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* 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(); | |
} | |
} |