| /******************************************************************************* |
| * Copyright (c) 2005, 2010 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 |
| * yyyymmdd bug Email and other contact information |
| * -------- -------- ----------------------------------------------------------- |
| * 20060131 121071 rsinha@ca.ibm.com - Rupam Kuehner |
| * 20060330 128827 kathy@ca.ibm.com - Kathy Chan |
| * 20060524 141925 kathy@ca.ibm.com - Kathy Chan |
| * 20060529 141422 kathy@ca.ibm.com - Kathy Chan |
| * 20070509 182274 kathy@ca.ibm.com - Kathy Chan |
| * 20071218 200193 gilberta@ca.ibm.com - Gilbert Andrews |
| * 20071220 213640 kathy@ca.ibm.com - Kathy Chan |
| * 20080325 222473 makandre@ca.ibm.com - Andrew Mak, Create EAR version based on the version of modules to be added |
| * 20090415 264683 danail.branekov@sap.com - Danail Branekov |
| * 20100511 309395 mahutch@ca.ibm.com - Mark Hutchinson, WS Wizard Converting Java Project into Utility Project without any warning |
| *******************************************************************************/ |
| |
| package org.eclipse.jst.ws.internal.creation.ui.extension; |
| |
| import java.lang.reflect.InvocationTargetException; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| import org.eclipse.jface.operation.ModalContext; |
| import org.eclipse.jst.j2ee.internal.plugin.IJ2EEModuleConstants; |
| import org.eclipse.jst.ws.internal.common.J2EEUtils; |
| import org.eclipse.jst.ws.internal.consumption.command.common.AssociateModuleWithEARCommand; |
| import org.eclipse.jst.ws.internal.consumption.command.common.CreateFacetedProjectCommand; |
| import org.eclipse.jst.ws.internal.consumption.common.FacetUtils; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.wst.common.environment.IEnvironment; |
| import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation; |
| import org.eclipse.wst.ws.internal.plugin.WSPlugin; |
| import org.eclipse.wst.ws.internal.preferences.PersistentMergeContext; |
| import org.eclipse.wst.ws.internal.wsrt.IContext; |
| import org.eclipse.wst.ws.internal.wsrt.IWebService; |
| import org.eclipse.wst.ws.internal.wsrt.IMerger; |
| import org.eclipse.wst.ws.internal.wsrt.WebServiceScenario; |
| |
| public class PreServiceAssembleCommand extends AbstractDataModelOperation |
| { |
| private IWebService webService_; |
| private String project_; |
| private String module_; |
| private String earProject_; |
| private String ear_; |
| private IContext context_; |
| private IProject initialProject_; |
| |
| public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable ) |
| { |
| IEnvironment environment = getEnvironment(); |
| IStatus status = Status.OK_STATUS; |
| |
| // For top down scenarios, merge the content of the skeleton files with the previous version stored. |
| // The Web service extensions triggers the storing of the content of the old skeleton file by |
| // calling WebServiceInfo.setImplURLs() before the new skeleton is generated in the extension's |
| // develop() method. |
| |
| if (context_.getScenario().getValue() == WebServiceScenario.TOPDOWN) { |
| PersistentMergeContext mergeContext = WSPlugin.getInstance().getMergeContext(); |
| IMerger merger = webService_.getWebServiceInfo().getMerger(); |
| if (mergeContext.isSkeletonMergeEnabled() && merger != null) { |
| status = merger.merge(monitor, getEnvironment().getStatusHandler()); |
| if (status.getSeverity() == Status.ERROR) { |
| environment.getStatusHandler().reportError(status); |
| return status; |
| } |
| } |
| } |
| |
| if (context_.getAssemble()) { |
| |
| // Check if EAR module is req'd, ie. !=null |
| if (earProject_==null) |
| return Status.OK_STATUS; |
| |
| |
| |
| //Create the service EAR module |
| |
| CreateFacetedProjectCommand command = new CreateFacetedProjectCommand(); |
| command.setProjectName(earProject_); |
| command.setTemplateId(IJ2EEModuleConstants.JST_EAR_TEMPLATE); |
| |
| IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(project_); |
| command.setRequiredFacetVersions(FacetUtils.getRequiredEARFacetVersions(project)); |
| |
| command.setServerFactoryId(webService_.getWebServiceInfo().getServerFactoryId()); |
| command.setServerInstanceId(webService_.getWebServiceInfo().getServerInstanceId()); |
| status = command.execute( monitor, adaptable ); |
| if (status.getSeverity() == Status.ERROR) |
| { |
| environment.getStatusHandler().reportError( status ); |
| return status; |
| } |
| |
| //Associate the service module and service EAR |
| AssociateModuleWithEARCommand associateCommand = new AssociateModuleWithEARCommand(); |
| associateCommand.setProject(project_); |
| associateCommand.setModule(module_); |
| associateCommand.setEARProject(earProject_); |
| associateCommand.setEar(ear_); |
| associateCommand.setEnvironment( environment ); |
| status = associateCommand.execute( monitor, null ); |
| if (status.getSeverity()==Status.ERROR) |
| { |
| environment.getStatusHandler().reportError(status); |
| } |
| |
| //make sure the ear file has been created. |
| |
| if(initialProject_ != null && FacetUtils.isJavaProject(initialProject_) && context_.getScenario().getValue() == WebServiceScenario.BOTTOMUP) { |
| IProject earProject = ResourcesPlugin.getWorkspace().getRoot().getProject(earProject_); |
| addJavaProjectAsUtilityInModalCtx(initialProject_, earProject, monitor); |
| } |
| |
| } |
| return status; |
| } |
| |
| private void addJavaProjectAsUtilityInModalCtx(final IProject projectToAdd, final IProject earProject, final IProgressMonitor monitor) |
| { |
| final IRunnableWithProgress addRunnable = new IRunnableWithProgress() |
| { |
| public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException |
| { |
| J2EEUtils.addJavaProjectAsUtilityJar(projectToAdd, earProject, monitor); |
| } |
| }; |
| |
| try |
| { |
| ModalContext.run(addRunnable, true, monitor, PlatformUI.getWorkbench().getDisplay()); |
| } catch (InvocationTargetException e) |
| { |
| // The executed runnable does not throw checked exceptions therefore if this happens, this is a runtime exception |
| throw new RuntimeException(e); |
| } catch (InterruptedException e) |
| { |
| // The executed runnable does not support cancellation and this should never happen |
| throw new IllegalStateException(e); |
| } |
| } |
| |
| public void setInitialProject(IProject initialProject) |
| { |
| initialProject_ = initialProject; |
| } |
| |
| public IProject getInitialProject() |
| { |
| return initialProject_; |
| } |
| |
| public void setProject( String project ) |
| { |
| project_ = project; |
| } |
| |
| public void setModule( String module ) |
| { |
| module_ = module; |
| } |
| |
| public void setEarProject( String earProject ) |
| { |
| earProject_ = earProject; |
| } |
| |
| public void setEar( String ear ) |
| { |
| ear_ = ear; |
| } |
| |
| public void setWebService( IWebService webService ) |
| { |
| webService_ = webService; |
| } |
| |
| public void setContext (IContext context) { |
| context_ = context; |
| } |
| } |