PageRenderTime 47ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/eclipse-wtp-jeetools-3.4.0/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ServiceHandlersWidgetDefaultingCommand.java

#
Java | 376 lines | 267 code | 43 blank | 66 comment | 52 complexity | cc16c92cdf5a4ff299a80a020f0334bf MD5 | raw file
  1. /*******************************************************************************
  2. * Copyright (c) 2004, 2006 IBM Corporation and others.
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which accompanies this distribution, and is available at
  6. * http://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * IBM Corporation - initial API and implementation
  10. * yyyymmdd bug Email and other contact information
  11. * -------- -------- -----------------------------------------------------------
  12. * 20060404 134913 sengpl@ca.ibm.com - Seng Phung-Lu
  13. * 20060517 142027 sengpl@ca.ibm.com - Seng Phung-Lu
  14. * 20060518 142554 sengpl@ca.ibm.com - Seng Phung-Lu
  15. *******************************************************************************/
  16. package org.eclipse.jst.ws.internal.consumption.ui.widgets;
  17. import java.util.Iterator;
  18. import java.util.List;
  19. import java.util.Vector;
  20. import org.eclipse.core.resources.IFile;
  21. import org.eclipse.core.resources.IProject;
  22. import org.eclipse.core.runtime.IAdaptable;
  23. import org.eclipse.core.runtime.IPath;
  24. import org.eclipse.core.runtime.IProgressMonitor;
  25. import org.eclipse.core.runtime.IStatus;
  26. import org.eclipse.core.runtime.Status;
  27. import org.eclipse.emf.ecore.resource.Resource;
  28. import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
  29. import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
  30. import org.eclipse.jface.viewers.IStructuredSelection;
  31. import org.eclipse.jst.j2ee.internal.webservice.WebServiceNavigatorGroupType;
  32. import org.eclipse.jst.j2ee.webservice.wsdd.Handler;
  33. import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent;
  34. import org.eclipse.jst.j2ee.webservice.wsdd.WebServiceDescription;
  35. import org.eclipse.jst.j2ee.webservice.wsdd.WebServices;
  36. import org.eclipse.jst.j2ee.webservice.wsdd.WsddResource;
  37. import org.eclipse.jst.ws.internal.common.ResourceUtils;
  38. import org.eclipse.jst.ws.internal.consumption.ui.ConsumptionUIMessages;
  39. import org.eclipse.jst.ws.internal.consumption.ui.common.HandlerDescriptionHolder;
  40. import org.eclipse.jst.ws.internal.consumption.ui.helper.WebServicesManager;
  41. import org.eclipse.jst.ws.internal.consumption.ui.widgets.object.HandlerTableItem;
  42. import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
  43. import org.eclipse.wst.common.environment.IEnvironment;
  44. import org.eclipse.wst.wsdl.Service;
  45. import org.eclipse.wst.wsdl.internal.impl.ServiceImpl;
  46. import org.eclipse.wst.wsdl.util.WSDLResourceImpl;
  47. /**
  48. * ServiceHandlersWidgetDefaultingCommand
  49. *
  50. * Initialize and load the handlers data
  51. */
  52. public class ServiceHandlersWidgetDefaultingCommand extends AbstractHandlersWidgetDefaultingCmd {
  53. private WsddResource[] wsddResource_ = null;
  54. private IProject project_;
  55. private String descriptionName_ = null;
  56. private String errorStatusMsg_ = null;
  57. private boolean isMultipleSelection_;
  58. private HandlerDescriptionHolder[] handlerDescriptionHolder_;
  59. public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable )
  60. {
  61. IEnvironment env = getEnvironment();
  62. IStatus status = Status.OK_STATUS;
  63. IStructuredSelection selection = getInitialSelection();
  64. if (selection == null) {
  65. status = StatusUtils.errorStatus( ConsumptionUIMessages.MSG_ERROR_TASK_EXCEPTED );
  66. env.getStatusHandler().reportError(status);
  67. return status;
  68. }
  69. else if (selection.size()>1){
  70. status = processMultipleHandlers(env);
  71. return status;
  72. }
  73. status = processHandlers(env);
  74. return status;
  75. }
  76. public IStatus processHandlers(IEnvironment env) {
  77. try {
  78. WebServicesManager webServicesManager = new WebServicesManager();
  79. List allWSDLServices = webServicesManager.getAllWSDLServices();
  80. int servicesSize = allWSDLServices.size();
  81. wsddResource_= new WsddResource[servicesSize];
  82. wsddResource_[0] = getWsddResourceFromSelection();
  83. if (wsddResource_[0] == null) {
  84. return StatusUtils.errorStatus(ConsumptionUIMessages.MSG_ERROR_WSDD_NOT_FOUND);
  85. }
  86. // check for another wsddResource of another J2EE level
  87. int x = 0;
  88. while (x<servicesSize) {
  89. Service service = (Service )allWSDLServices.get(x);
  90. WsddResource wsddRes = webServicesManager.getWsddResource(service);
  91. boolean isUniqueWsdd = true;
  92. for (int w=0;w<wsddResource_.length;w++){
  93. if (wsddRes.equals(wsddResource_[w])){
  94. isUniqueWsdd = false;
  95. break;
  96. }
  97. }
  98. if (isUniqueWsdd) {
  99. wsddResource_[x] = wsddRes;
  100. }
  101. x++;
  102. }
  103. // determine total # for descriptions
  104. handlerDescriptionHolder_ = new HandlerDescriptionHolder[getNumberofServices(wsddResource_)];
  105. int descCounter = 0;
  106. for (int y=0;y<wsddResource_.length;y++) {
  107. if (wsddResource_[y] !=null) {
  108. WebServices webServices = wsddResource_[y].getWebServices();
  109. if (webServices != null) {
  110. List wsDescriptions = webServices.getWebServiceDescriptions();
  111. for (int i = 0; i < wsDescriptions.size() ; i++) {
  112. WebServiceDescription wsDescription = (WebServiceDescription) wsDescriptions.get(i);
  113. Vector handlers = new Vector();
  114. List wsPortComponents = wsDescription.getPortComponents();
  115. for (int j = 0; j < wsPortComponents.size(); j++) {
  116. PortComponent wsPort = (PortComponent) wsPortComponents.get(j);
  117. String portName = wsPort.getPortComponentName();
  118. List wsHandlers = wsPort.getHandlers();
  119. for (int k = 0; k < wsHandlers.size(); k++) {
  120. Handler wsHandler = (Handler) wsHandlers.get(k);
  121. HandlerTableItem handlerItem = new HandlerTableItem();
  122. handlerItem.setHandler(wsHandler);
  123. handlerItem.setHandlerName(wsHandler.getHandlerName());
  124. handlerItem.setHandlerClassName(wsHandler.getHandlerClass());
  125. handlerItem.setPort(wsPort);
  126. handlerItem.setPortName(portName);
  127. handlerItem.setWsDescRef(wsDescription);
  128. handlers.add(handlerItem);
  129. }
  130. }
  131. String wsDescName = wsDescription.getWebServiceDescriptionName();
  132. handlerDescriptionHolder_[descCounter] = new HandlerDescriptionHolder();
  133. handlerDescriptionHolder_[descCounter].setHandlerList(handlers);
  134. handlerDescriptionHolder_[descCounter].setDescriptionObject(wsDescription);
  135. handlerDescriptionHolder_[descCounter].setDescriptionName(wsDescName);
  136. descCounter++;
  137. }
  138. }
  139. }
  140. }
  141. if (handlerDescriptionHolder_ == null){
  142. //report no Web service is available
  143. return StatusUtils.errorStatus(ConsumptionUIMessages.MSG_ERROR_WEB_SERVICES_NOT_FOUND);
  144. }
  145. }
  146. catch (Exception e) {
  147. e.printStackTrace();
  148. return StatusUtils.errorStatus( ConsumptionUIMessages.MSG_ERROR_TASK_EXCEPTED, e);
  149. }
  150. return Status.OK_STATUS;
  151. }
  152. /**
  153. * For processing multiple service selection; only prepare table of service description names
  154. * description objects will be processed later by the output command
  155. * @param env
  156. * @return
  157. */
  158. private IStatus processMultipleHandlers(IEnvironment env){
  159. Service[] services = getSelectedServices();
  160. if (errorStatusMsg_ != null){
  161. return StatusUtils.errorStatus(errorStatusMsg_);
  162. }
  163. isMultipleSelection_ = true;
  164. handlerDescriptionHolder_ = new HandlerDescriptionHolder[services.length];
  165. Vector handlers = new Vector();
  166. for (int i=0;i<services.length;i++){
  167. String descName = services[i].getQName().getLocalPart();
  168. WebServiceDescription wsDescription = getServiceDescription(services[i], descName);
  169. handlerDescriptionHolder_[i] = new HandlerDescriptionHolder();
  170. handlerDescriptionHolder_[i].setHandlerList(handlers);
  171. handlerDescriptionHolder_[i].setDescriptionName(descName);
  172. handlerDescriptionHolder_[i].setDescriptionObject(wsDescription);
  173. }
  174. return Status.OK_STATUS;
  175. }
  176. /**
  177. * Matches the serviceName with the ServiceDescriptionName to get the WebServiceDescription
  178. * @param service
  179. * @param serviceName
  180. * @return
  181. */
  182. private WebServiceDescription getServiceDescription(Service service, String serviceName){
  183. WebServicesManager webServicesManager = new WebServicesManager();
  184. WsddResource wsddResource = webServicesManager.getWsddResource(service);
  185. if (wsddResource!=null) {
  186. WebServices services = wsddResource.getWebServices();
  187. if (services!=null) {
  188. List descriptions = services.getWebServiceDescriptions();
  189. for (int i=0;i<descriptions.size();i++){
  190. WebServiceDescription wsd = (WebServiceDescription)descriptions.get(i);
  191. if (wsd!=null && wsd.getWebServiceDescriptionName().equals(serviceName)){
  192. return wsd;
  193. }
  194. }
  195. }
  196. }
  197. return null;
  198. }
  199. public boolean getIsMultipleSelection(){
  200. return this.isMultipleSelection_;
  201. }
  202. /**
  203. * @return Returns the isGenSkeletonEnabled_.
  204. */
  205. public boolean getGenSkeletonEnabled() {
  206. if (isMultipleSelection_)
  207. return false;
  208. return true;
  209. }
  210. /**
  211. * @return Returns the sourceOutputLocation_.
  212. */
  213. public IPath[] getSourceOutputLocation() {
  214. IPath[] locations = null;
  215. IProject project = getProject();
  216. if (project != null) {
  217. locations = ResourceUtils.getAllJavaSourceLocations(project);
  218. }
  219. else {
  220. project = project_;
  221. if (project != null) {
  222. locations = ResourceUtils.getAllJavaSourceLocations(project);
  223. }
  224. }
  225. return locations;
  226. }
  227. /**
  228. * Gets the WsddResource
  229. * @return
  230. */
  231. public WsddResource[] getWsddResource() {
  232. return wsddResource_;
  233. }
  234. private WsddResource getWsddResourceFromSelection() {
  235. WebServicesManager webServicesManager = new WebServicesManager();
  236. IStructuredSelection initSel = getInitialSelection();
  237. if (initSel != null && initSel.size() == 1) {
  238. Object obj = initSel.getFirstElement();
  239. if (obj instanceof ServiceImpl) {
  240. // Service object
  241. Service service = (Service) obj;
  242. descriptionName_ = service.getQName().getLocalPart();
  243. project_ = ProjectUtilities.getProject(service);
  244. return webServicesManager.getWsddResource(service);
  245. }
  246. else if (obj instanceof WSDLResourceImpl) {
  247. // WSDL resource
  248. WSDLResourceImpl res = (WSDLResourceImpl) obj;
  249. project_ = ProjectUtilities.getProject(res);
  250. List wsdlResources = webServicesManager.getWSDLServices(res);
  251. return webServicesManager.getWsddResource((Service) wsdlResources.get(0));
  252. }
  253. else if (obj instanceof WebServiceNavigatorGroupType) {
  254. WebServiceNavigatorGroupType wsngt = (WebServiceNavigatorGroupType) obj;
  255. Service service = (Service)wsngt.getWsdlService();
  256. descriptionName_ = service.getQName().getLocalPart();
  257. project_ = ProjectUtilities.getProject(service);
  258. return webServicesManager.getWsddResource(service);
  259. }
  260. else if (obj instanceof IFile){
  261. // webservices.xml file
  262. Resource res = WorkbenchResourceHelperBase.getResource((IFile)obj, true);
  263. WsddResource wsddRes = (WsddResource)res;
  264. WebServices webServices = wsddRes.getWebServices();
  265. if (webServices != null) {
  266. List wsDescriptions = webServices.getWebServiceDescriptions();
  267. if (wsDescriptions!=null) {
  268. WebServiceDescription wsd = (WebServiceDescription)wsDescriptions.get(0);
  269. descriptionName_ = wsd.getWebServiceDescriptionName();
  270. }
  271. }
  272. project_ = ProjectUtilities.getProject(res);
  273. return wsddRes;
  274. }
  275. }
  276. return null;
  277. }
  278. /**
  279. * Get total number of ServiceDescriptions given 14 and 13 services
  280. * @param wsddRes
  281. * @return
  282. */
  283. private int getNumberofServices(WsddResource[] wsddRes){
  284. int num= 0;
  285. for (int i=0;i<wsddRes.length;i++){
  286. if (wsddRes[i]!=null) {
  287. WebServices ws = wsddRes[i].getWebServices();
  288. if (ws!=null){
  289. num += ws.getWebServiceDescriptions().size();
  290. }
  291. }
  292. }
  293. return num;
  294. }
  295. /**
  296. * For multiple selection of Services
  297. * @return
  298. */
  299. private Service[] getSelectedServices(){
  300. WebServicesManager wsManager = new WebServicesManager();
  301. IStructuredSelection initSel = getInitialSelection();
  302. Service[] services = new Service[initSel.size()];
  303. wsddResource_ = new WsddResource[initSel.size()];
  304. Iterator iter = initSel.iterator();
  305. for (int i=0;i<initSel.size();i++) {
  306. Object obj = iter.next();
  307. if (obj instanceof Service){
  308. services[i] = (Service)obj;
  309. wsddResource_[i] = wsManager.getWsddResource(services[i]);
  310. }
  311. else{
  312. errorStatusMsg_ = ConsumptionUIMessages.MSG_ERROR_INVALID_MULTIPLE_SERVICE_SELECT;
  313. return null;
  314. }
  315. }
  316. return services;
  317. }
  318. /**
  319. * Get Description Name for single Web services selected
  320. * null if mulitple services are selected
  321. * @return
  322. */
  323. public String getDescriptionName(){
  324. return descriptionName_;
  325. }
  326. /**
  327. * An array of HandlerDescriptionHolders
  328. * @return
  329. */
  330. public HandlerDescriptionHolder[] getHandlerDescriptionHolders(){
  331. return handlerDescriptionHolder_;
  332. }
  333. }