/*******************************************************************************
 * Copyright (c) 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
 *******************************************************************************/
package org.eclipse.jst.javaee.webfragment.internal.util;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.jst.javaee.jsp.internal.metadata.JspPackage;
import org.eclipse.jst.javaee.web.internal.metadata.WebPackage;
import org.eclipse.jst.javaee.webfragment.internal.metadata.WebfragmentPackage;
import org.eclipse.jst.javaee.core.internal.util.JEEXMLHelperImpl;

public class WebfragmentXMLHelperImpl extends JEEXMLHelperImpl {

	public WebfragmentXMLHelperImpl(XMLResource resource) {
		super(resource);
	}

	@Override
	public String getURI(String prefix) {
		if (prefix != null && prefix.equals("")) //$NON-NLS-1$
			return WebfragmentPackage.eNS_URI;
		else
			return super.getURI(prefix);
	}

	@Override
	protected String getQName(EPackage ePackage, String name, boolean mustHavePrefix) {
		String nsPrefix = getPrefix(ePackage, mustHavePrefix);
		// Not using EE5 package namespace - default jee5 namespace is used
		if (nsPrefix.equals(WebfragmentPackage.eNS_PREFIX) || nsPrefix.equals(WebPackage.eNS_PREFIX) || nsPrefix.equals(JspPackage.eNS_PREFIX)) {
			return name;
		} else
			return super.getQName(ePackage, name, mustHavePrefix);
	}

	@Override
	public EStructuralFeature getFeature(EClass class1, String namespaceURI, String name, boolean isElement) {
		
		EStructuralFeature feat = super.getFeature(class1, namespaceURI, name, isElement);
		if (feat == null)
		{
			//Try to use web-app namespace
			feat = super.getFeature(class1, WebPackage.eNS_URI, name, isElement);
		}
		if (feat == null)
		{
			//Try to use JSP namespace
			feat = super.getFeature(class1, JspPackage.eNS_URI, name, isElement);
		}
		return feat;
		
	}

}
