| /******************************************************************************* |
| * Copyright (c) 2001, 2007 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.internal.impl; |
| |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.wst.wsdl.Definition; |
| import org.eclipse.wst.wsdl.ExtensibilityElement; |
| import org.eclipse.wst.wsdl.Types; |
| import org.eclipse.wst.wsdl.WSDLFactory; |
| import org.eclipse.wst.wsdl.WSDLPackage; |
| import org.eclipse.wst.wsdl.XSDSchemaExtensibilityElement; |
| import org.eclipse.wst.wsdl.util.WSDLConstants; |
| import org.eclipse.xsd.XSDSchema; |
| import org.eclipse.xsd.util.XSDConstants; |
| import org.w3c.dom.DOMException; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| |
| /** |
| * <!-- begin-user-doc --> |
| * An implementation of the model object '<em><b>Types</b></em>'. |
| * <!-- end-user-doc --> |
| * <p> |
| * </p> |
| * |
| * @generated |
| */ |
| public class TypesImpl extends ExtensibleElementImpl implements Types |
| { |
| /** |
| * This class is not intended to be serialized. |
| * serialVersionUID is assigned with 1L to avoid |
| * compiler warning messages. |
| */ |
| private static final long serialVersionUID = 1L; |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| protected TypesImpl() |
| { |
| super(); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| protected EClass eStaticClass() |
| { |
| return WSDLPackage.Literals.TYPES; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| */ |
| public List getSchemas() |
| { |
| List arrayList = new ArrayList(); |
| for (Iterator i = getEExtensibilityElements().iterator(); i.hasNext();) |
| { |
| ExtensibilityElement extensibilityElement = (ExtensibilityElement)i.next(); |
| if (!(extensibilityElement instanceof XSDSchemaExtensibilityElement)) |
| { |
| continue; |
| } |
| XSDSchemaExtensibilityElement xsdee = (XSDSchemaExtensibilityElement) extensibilityElement; |
| if (xsdee.getSchema() != null) |
| { |
| arrayList.add(xsdee.getSchema()); |
| } |
| } |
| return arrayList; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| */ |
| public List getSchemas(String namespaceURI) |
| { |
| List schemas = new ArrayList(); |
| for (Iterator i = getSchemas().iterator(); i.hasNext();) |
| { |
| XSDSchema schema = (XSDSchema)i.next(); |
| if (namespaceURI == null && schema.getTargetNamespace() == null) |
| { |
| schemas.add(schema); |
| } |
| else if (namespaceURI != null && namespaceURI.equals(schema.getTargetNamespace())) |
| { |
| schemas.add(schema); |
| } |
| } |
| return schemas; |
| } |
| |
| public void eNotify(Notification msg) |
| { |
| super.eNotify(msg); |
| |
| // cs.. if we've added an XSDSchemaExtensibilityElementImpl and the Types object is already attached |
| // to a resource we need to set the schemaLocation for the inline schema. |
| // If not yet attached to a resource, the schemaLocation's will be set via WSDLResourceImpl.attached(EObject o) |
| // |
| if (msg.getFeature() == WSDLPackage.Literals.EXTENSIBLE_ELEMENT__EEXTENSIBILITY_ELEMENTS && msg.getEventType() == Notification.ADD) |
| { |
| if (msg.getNewValue() instanceof XSDSchemaExtensibilityElementImpl) |
| { |
| XSDSchemaExtensibilityElementImpl ee = (XSDSchemaExtensibilityElementImpl)msg.getNewValue(); |
| if (ee.getSchema() != null && ee.getSchema().eResource() != null) |
| { |
| ee.getSchema().setSchemaLocation(ee.getSchema().eResource().getURI().toString()); |
| } |
| } |
| } |
| } |
| |
| // |
| // Reconcile methods |
| // |
| |
| public void reconcileAttributes(Element changedElement) |
| { |
| } |
| |
| public void handleUnreconciledElement(Element child, Collection remainingModelObjects) |
| { |
| if (XSDConstants.SCHEMA_ELEMENT_TAG.equals(child.getLocalName())) |
| { |
| try |
| { |
| XSDSchemaExtensibilityElement xsdee = WSDLFactory.eINSTANCE.createXSDSchemaExtensibilityElement(); |
| xsdee.setEnclosingDefinition(getEnclosingDefinition()); |
| xsdee.setElement(child); // cs : this has the side effect of creating the inline schema |
| addExtensibilityElement(xsdee); |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| } |
| } |
| else |
| { |
| super.handleUnreconciledElement(child, remainingModelObjects); |
| } |
| } |
| |
| protected void handleReconciliation(Collection remainingModelObjects) |
| { |
| for (Iterator i = remainingModelObjects.iterator(); i.hasNext();) |
| { |
| remove(this, i.next()); |
| } |
| ((DefinitionImpl)getEnclosingDefinition()).reconcileReferences(true); |
| } |
| |
| protected void remove(Object component, Object modelObject) |
| { |
| Types types = (Types)component; |
| List list = types.getEExtensibilityElements(); |
| list.remove(modelObject); |
| } |
| |
| public Collection getModelObjects(Object component) |
| { |
| Types types = (Types)component; |
| List list = new ArrayList(); |
| list.addAll(types.getEExtensibilityElements()); |
| return list; |
| } |
| |
| public Element createElement() |
| { |
| Element newElement = createElement(WSDLConstants.TYPES); |
| setElement(newElement); |
| |
| // Add children |
| Definition definition = getEnclosingDefinition(); |
| if (definition == null) |
| return newElement; |
| |
| Document document = definition.getDocument(); |
| if (document == null) |
| document = ((DefinitionImpl)definition).updateDocument(); |
| |
| Iterator iter = getEExtensibilityElements().iterator(); |
| Element el = null; |
| while (iter.hasNext()) |
| { |
| ExtensibilityElement extensibility = (ExtensibilityElement)iter.next(); |
| el = extensibility.getElement(); |
| if (el != null) |
| { |
| try |
| { |
| Element reParented = (Element)document.importNode(el, true); |
| extensibility.setElement(reParented); // replace with the new one |
| newElement.appendChild(reParented); |
| } |
| catch (DOMException e) |
| { |
| e.printStackTrace(); |
| return newElement; |
| } |
| } |
| else |
| { |
| Element child = ((ExtensibilityElementImpl)extensibility).createElement(); |
| newElement.appendChild(child); |
| } |
| } |
| |
| return newElement; |
| } |
| } //TypesImpl |