| /******************************************************************************* |
| * Copyright (c) 2001, 2006 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.wst.wsdl.ui.internal.adapters.commands; |
| |
| import org.eclipse.wst.wsdl.Definition; |
| import org.eclipse.wst.wsdl.Message; |
| import org.eclipse.wst.wsdl.Part; |
| import org.eclipse.wst.wsdl.WSDLElement; |
| import org.eclipse.wst.wsdl.ui.internal.adapters.WSDLBaseAdapter; |
| import org.eclipse.wst.wsdl.ui.internal.adapters.basic.W11MessageReference; |
| import org.eclipse.wst.wsdl.ui.internal.adapters.basic.W11ParameterForPart; |
| import org.eclipse.wst.wsdl.ui.internal.asd.Messages; |
| import org.eclipse.wst.wsdl.ui.internal.asd.facade.IParameter; |
| import org.eclipse.xsd.XSDConcreteComponent; |
| import org.eclipse.xsd.XSDElementDeclaration; |
| import org.eclipse.xsd.XSDModelGroup; |
| import org.eclipse.xsd.XSDParticle; |
| import org.eclipse.xsd.XSDSchema; |
| import org.w3c.dom.Element; |
| |
| |
| public class W11DeleteParameterCommand extends W11TopLevelElementCommand { |
| private IParameter parameter; |
| |
| public W11DeleteParameterCommand(IParameter param) { |
| super(Messages._UI_ACTION_DELETE, null); |
| this.parameter = param; |
| } |
| |
| public void execute() { |
| Object object = ((WSDLBaseAdapter) parameter).getTarget(); |
| Element element = null; |
| if (object instanceof XSDElementDeclaration) { |
| element = ((XSDElementDeclaration) object).getElement(); |
| } |
| else if (object instanceof WSDLElement) { |
| element = ((Part) object).getElement(); |
| } |
| |
| if (element != null) { |
| try { |
| beginRecording(element); |
| delete(); |
| } |
| finally { |
| endRecording(element); |
| } |
| } |
| } |
| |
| private void delete() { |
| Object object = ((WSDLBaseAdapter) parameter).getTarget(); |
| |
| if (object instanceof XSDElementDeclaration) { |
| XSDConcreteComponent xsdComponent = ((XSDElementDeclaration) object).getContainer(); |
| |
| if (xsdComponent instanceof XSDParticle) { |
| XSDParticle particle = (XSDParticle) xsdComponent; |
| if (particle.getContainer() instanceof XSDModelGroup) { |
| XSDModelGroup modelGroup = (XSDModelGroup) particle.getContainer(); |
| if (modelGroup.getContents().size() >= 2) { |
| modelGroup.getContents().remove(particle); |
| } |
| else { |
| modelGroup.getContents().remove(particle); |
| // TODO: We need the line below to delete the Message and Part |
| // removeMessageAndPart(wParameter.getPart()); |
| // TODO: Remove the XSD components as well..... |
| } |
| } |
| } |
| else if (xsdComponent instanceof XSDSchema){ |
| // TODO: We need the line below to delete the Message and Part |
| // removeMessageAndPart(wParameter.getPart()); // Delete the part as well |
| XSDSchema xsdSchema = (XSDSchema) xsdComponent; |
| xsdSchema.getContents().remove(object); |
| } |
| } |
| else if (object instanceof Part) { |
| removeMessageAndPart((Part) object); |
| } |
| else if (object instanceof Message) { |
| removeMessageAndPart((Part) ((Message) object).getEParts().get(0)); |
| } |
| |
| // Do we want to remove the Input/Output/Fault MessageReference as well if |
| // there are no more "inputs"?.... |
| } |
| |
| protected void removeMessageAndPart(Part part) { |
| W11MessageReference wMessage = null; |
| /* |
| if (parameter instanceof W11ParameterForElement) { |
| wMessage = (W11MessageReference) ((W11ParameterForElement) parameter).getOwner(); |
| } |
| else */if (parameter instanceof W11ParameterForPart) { |
| wMessage = (W11MessageReference) ((W11ParameterForPart) parameter).getOwner(); |
| } |
| |
| Message message = wMessage.getMessageReference().getEMessage(); |
| message.getEParts().remove(part); |
| |
| ((Definition) part.getEnclosingDefinition()).getEMessages().remove(message); |
| } |
| } |