/*******************************************************************************
 * Copyright (c) 2001, 2004 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.binding.mime.internal.util;

import org.eclipse.wst.wsdl.ExtensibilityElement;
import org.eclipse.wst.wsdl.WSDLFactory;
import org.eclipse.wst.wsdl.binding.mime.MIMEFactory;
import org.eclipse.wst.wsdl.util.ExtensibilityElementFactory;

public class MIMEExtensibilityElementFactory implements ExtensibilityElementFactory
{
  public ExtensibilityElement createExtensibilityElement(String namespace, String localName)
  {
    if (MIMEConstants.MIME_NAMESPACE_URI.equals(namespace))
    {
      if (MIMEConstants.CONTENT_ELEMENT_TAG.equals(localName))
      {
        return MIMEFactory.eINSTANCE.createMIMEContent();
      }
      else if (MIMEConstants.MIME_XML_ELEMENT_TAG.equals(localName))
      {
        return MIMEFactory.eINSTANCE.createMIMEMimeXml();
      }
      else if (MIMEConstants.MULTIPART_RELATED_ELEMENT_TAG.equals(localName))
      {
        return MIMEFactory.eINSTANCE.createMIMEMultipartRelated();
      }
      /* TODO - fix the rose model
      else if ("part".equals(localName))
      {
        return MIMEFactory.eINSTANCE.createMIMEPart();
      }
      */
	  else
	  {
	    //System.out.println("Unhandled localName: " + localName);
	    return WSDLFactory.eINSTANCE.createUnknownExtensibilityElement();
      }
    }
    else
    {
      //System.out.println("Unhandled namespace: " + namespace);
      return WSDLFactory.eINSTANCE.createUnknownExtensibilityElement();
    }
  }
}
