/*******************************************************************************
* Copyright (c) 2006-2013 The RCP Company 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:
* The RCP Company - initial API and implementation
*******************************************************************************/
package com.rcpcompany.uibindings.internal.scripting;
import java.util.Collection;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.eclipse.emf.ecore.util.EObjectWithInverseEList;
import org.eclipse.emf.ecore.util.InternalEList;
import com.rcpcompany.uibindings.scripting.IScriptDependency;
import com.rcpcompany.uibindings.scripting.IScriptEnginePackage;
import com.rcpcompany.uibindings.scripting.IScriptExpression;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Script Dependency</b></em>
* '. <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link com.rcpcompany.uibindings.internal.scripting.ScriptDependencyImpl#getObject <em>Object
* </em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.scripting.ScriptDependencyImpl#getFeature <em>
* Feature</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.scripting.ScriptDependencyImpl#getExpressions <em>
* Expressions</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.scripting.ScriptDependencyImpl#getIndex <em>Index
* </em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.scripting.ScriptDependencyImpl#getKey <em>Key</em>}
* </li>
* </ul>
* </p>
*
* @generated
*/
public class ScriptDependencyImpl extends EObjectImpl implements IScriptDependency {
/**
* The cached value of the '{@link #getObject() <em>Object</em>}' reference. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getObject()
* @generated
* @ordered
*/
protected EObject object;
/**
* The cached value of the '{@link #getFeature() <em>Feature</em>}' reference. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getFeature()
* @generated
* @ordered
*/
protected EStructuralFeature feature;
/**
* The cached value of the '{@link #getExpressions() <em>Expressions</em>}' reference list. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getExpressions()
* @generated
* @ordered
*/
protected EList<IScriptExpression> expressions;
/**
* The default value of the '{@link #getIndex() <em>Index</em>}' attribute. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getIndex()
* @generated
* @ordered
*/
protected static final int INDEX_EDEFAULT = -1;
/**
* The cached value of the '{@link #getIndex() <em>Index</em>}' attribute. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getIndex()
* @generated
* @ordered
*/
protected int index = INDEX_EDEFAULT;
/**
* The default value of the '{@link #getKey() <em>Key</em>}' attribute. <!-- begin-user-doc -->
* <!-- end-user-doc -->
*
* @see #getKey()
* @generated
* @ordered
*/
protected static final Object KEY_EDEFAULT = null;
/**
* The cached value of the '{@link #getKey() <em>Key</em>}' attribute. <!-- begin-user-doc -->
* <!-- end-user-doc -->
*
* @see #getKey()
* @generated
* @ordered
*/
protected Object key = KEY_EDEFAULT;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
protected ScriptDependencyImpl() {
super();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
protected EClass eStaticClass() {
return IScriptEnginePackage.Literals.SCRIPT_DEPENDENCY;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EObject getObject() {
return object;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setObject(EObject newObject) {
final EObject oldObject = object;
object = newObject;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IScriptEnginePackage.SCRIPT_DEPENDENCY__OBJECT,
oldObject, object));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EStructuralFeature getFeature() {
return feature;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setFeature(EStructuralFeature newFeature) {
final EStructuralFeature oldFeature = feature;
feature = newFeature;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IScriptEnginePackage.SCRIPT_DEPENDENCY__FEATURE,
oldFeature, feature));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IScriptExpression> getExpressions() {
if (expressions == null) {
expressions = new EObjectWithInverseEList.ManyInverse<IScriptExpression>(IScriptExpression.class, this,
IScriptEnginePackage.SCRIPT_DEPENDENCY__EXPRESSIONS,
IScriptEnginePackage.SCRIPT_EXPRESSION__DEPENDENCIES);
}
return expressions;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public int getIndex() {
return index;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setIndex(int newIndex) {
final int oldIndex = index;
index = newIndex;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IScriptEnginePackage.SCRIPT_DEPENDENCY__INDEX,
oldIndex, index));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Object getKey() {
return key;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setKey(Object newKey) {
final Object oldKey = key;
key = newKey;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IScriptEnginePackage.SCRIPT_DEPENDENCY__KEY, oldKey,
key));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case IScriptEnginePackage.SCRIPT_DEPENDENCY__EXPRESSIONS:
return ((InternalEList<InternalEObject>) (InternalEList<?>) getExpressions()).basicAdd(otherEnd, msgs);
}
return super.eInverseAdd(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case IScriptEnginePackage.SCRIPT_DEPENDENCY__EXPRESSIONS:
return ((InternalEList<?>) getExpressions()).basicRemove(otherEnd, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case IScriptEnginePackage.SCRIPT_DEPENDENCY__OBJECT:
return getObject();
case IScriptEnginePackage.SCRIPT_DEPENDENCY__FEATURE:
return getFeature();
case IScriptEnginePackage.SCRIPT_DEPENDENCY__EXPRESSIONS:
return getExpressions();
case IScriptEnginePackage.SCRIPT_DEPENDENCY__INDEX:
return getIndex();
case IScriptEnginePackage.SCRIPT_DEPENDENCY__KEY:
return getKey();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case IScriptEnginePackage.SCRIPT_DEPENDENCY__OBJECT:
setObject((EObject) newValue);
return;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__FEATURE:
setFeature((EStructuralFeature) newValue);
return;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__EXPRESSIONS:
getExpressions().clear();
getExpressions().addAll((Collection<? extends IScriptExpression>) newValue);
return;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__INDEX:
setIndex((Integer) newValue);
return;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__KEY:
setKey(newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case IScriptEnginePackage.SCRIPT_DEPENDENCY__OBJECT:
setObject((EObject) null);
return;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__FEATURE:
setFeature((EStructuralFeature) null);
return;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__EXPRESSIONS:
getExpressions().clear();
return;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__INDEX:
setIndex(INDEX_EDEFAULT);
return;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__KEY:
setKey(KEY_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case IScriptEnginePackage.SCRIPT_DEPENDENCY__OBJECT:
return object != null;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__FEATURE:
return feature != null;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__EXPRESSIONS:
return expressions != null && !expressions.isEmpty();
case IScriptEnginePackage.SCRIPT_DEPENDENCY__INDEX:
return index != INDEX_EDEFAULT;
case IScriptEnginePackage.SCRIPT_DEPENDENCY__KEY:
return KEY_EDEFAULT == null ? key != null : !KEY_EDEFAULT.equals(key);
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
final StringBuffer result = new StringBuffer(super.toString());
result.append(" (index: ");
result.append(index);
result.append(", key: ");
result.append(key);
result.append(')');
return result.toString();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((feature == null) ? 0 : feature.hashCode());
result = prime * result + index;
result = prime * result + ((key == null) ? 0 : key.hashCode());
result = prime * result + ((object == null) ? 0 : object.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
final ScriptDependencyImpl other = (ScriptDependencyImpl) obj;
if (feature == null) {
if (other.feature != null) return false;
} else if (!feature.equals(other.feature)) return false;
if (index != other.index) return false;
if (key == null) {
if (other.key != null) return false;
} else if (!key.equals(other.key)) return false;
if (object == null) {
if (other.object != null) return false;
} else if (!object.equals(other.object)) return false;
return true;
}
} // ScriptDependencyImpl