/*******************************************************************************
 * Copyright (c) 2014 TwelveTone LLC 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:
 * Steven Spungin <steven@spungin.tv> - initial API and implementation, Ongoing Maintenance
 *******************************************************************************/

package org.eclipse.e4.tools.emf.ui.internal.common.component.tabs;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;

/**
 * Convenience methods for accessing EMF Objects
 *
 * @author Steven Spungin
 *
 */
public class EmfUtil {
	/**
	 * Returns the EAttribute with the given name for the specified object, or
	 * null if non-existent
	 *
	 * @param eObject
	 * @param attName
	 * @return the EAttribute with the given name for the specified object, or
	 *         null if non-existent
	 */
	static public EAttribute getAttribute(EObject eObject, String attName) {
		if (attName == null || attName.isEmpty()) {
			return null;
		}
		// return (EAttribute)
		// eObject.eGet(eObject.eClass().getEStructuralFeature(attName));
		for (final EAttribute att : eObject.eClass().getEAllAttributes()) {
			if (attName.equals(att.getName())) {
				return att;
			}
		}
		return null;
	}

	/**
	 * Returns the EAttribute value with the given attribute name for the
	 * specified object. Returns null if the attribute is not define, or has
	 * null as the value.
	 *
	 * @param eObject
	 * @param attName
	 * @return the EAttribute value with the given attribute name for the
	 *         specified object, Returns null if the attribute is not defined,
	 *         or has null as the value.
	 */
	static public Object getAttributeValue(EObject eObject, String attName) {
		final EAttribute att = getAttribute(eObject, attName);
		if (att == null) {
			return null;
		}
		return eObject.eGet(att);
	}

	/**
	 * Returns the EAttribute value with the given attribute name for the
	 * specified object. Throws if the attribute is not defined.
	 *
	 * @param eObject
	 * @param attName
	 * @throws Exception
	 */
	static public Object getAttributeValueThrows(EObject eObject, String attName) throws Exception {
		final EAttribute att = getAttribute(eObject, attName);
		if (att == null) {
			throw new Exception(Messages.EmfUtil_ex_attribute_not_found + " : " + attName); //$NON-NLS-1$
		}
		return eObject.eGet(att);
	}
}