/*******************************************************************************
* Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>.
* 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
******************************************************************************/
package org.axdt.core.model.impl;
import org.axdt.core.AxdtCore;
import org.axdt.core.AxdtEPackage;
import org.axdt.core.model.AxdtElement;
import org.axdt.core.model.AxdtHandle;
import org.eclipse.core.resources.IResource;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Axdt Handle</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.axdt.core.model.impl.AxdtHandleImpl#getResource <em>Resource</em>}</li>
* <li>{@link org.axdt.core.model.impl.AxdtHandleImpl#getDelegate <em>Delegate</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public abstract class AxdtHandleImpl<T extends AxdtElement> extends AxdtElementImpl implements AxdtHandle<T> {
/**
* The default value of the '{@link #getResource() <em>Resource</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getResource()
* @generated
* @ordered
*/
protected static final IResource RESOURCE_EDEFAULT = null;
/**
* The cached value of the '{@link #getResource() <em>Resource</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getResource()
* @generated
* @ordered
*/
protected IResource resource = RESOURCE_EDEFAULT;
/**
* The cached value of the '{@link #getDelegate() <em>Delegate</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getDelegate()
* @generated
* @ordered
*/
protected T delegate;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected AxdtHandleImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return AxdtEPackage.Literals.AXDT_HANDLE;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public IResource getResource() {
return resource;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
*/
public void setResource(IResource newResource) {
if (newResource == null || !newResource.equals(resource))
disconnect();
IResource oldResource = resource;
resource = newResource;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, AxdtEPackage.AXDT_HANDLE__RESOURCE, oldResource, resource));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("unchecked")
public T getDelegate() {
if (delegate != null && delegate.eIsProxy()) {
InternalEObject oldDelegate = (InternalEObject)delegate;
delegate = (T)eResolveProxy(oldDelegate);
if (delegate != oldDelegate) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, AxdtEPackage.AXDT_HANDLE__DELEGATE, oldDelegate, delegate));
}
}
return delegate;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public T basicGetDelegate() {
return delegate;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setDelegate(T newDelegate) {
T oldDelegate = delegate;
delegate = newDelegate;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, AxdtEPackage.AXDT_HANDLE__DELEGATE, oldDelegate, delegate));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
*/
public T checkDelegate() {
if (delegate == null && resource != null)
AxdtCore.getModel().connectHandle(this);
return delegate;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case AxdtEPackage.AXDT_HANDLE__RESOURCE:
return getResource();
case AxdtEPackage.AXDT_HANDLE__DELEGATE:
if (resolve) return getDelegate();
return basicGetDelegate();
}
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 AxdtEPackage.AXDT_HANDLE__RESOURCE:
setResource((IResource)newValue);
return;
case AxdtEPackage.AXDT_HANDLE__DELEGATE:
setDelegate((T)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case AxdtEPackage.AXDT_HANDLE__RESOURCE:
setResource(RESOURCE_EDEFAULT);
return;
case AxdtEPackage.AXDT_HANDLE__DELEGATE:
setDelegate((T)null);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case AxdtEPackage.AXDT_HANDLE__RESOURCE:
return RESOURCE_EDEFAULT == null ? resource != null : !RESOURCE_EDEFAULT.equals(resource);
case AxdtEPackage.AXDT_HANDLE__DELEGATE:
return delegate != null;
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (resource: ");
result.append(resource);
result.append(')');
return result.toString();
}
@Override
public boolean isHandle() {
return true;
}
@Override
public boolean isConnected() {
T delegate = getDelegate();
return delegate != null && delegate.isConnected();
}
@Override
public void connect() {
AxdtCore.getModel().connectHandle(this);
}
@Override
public void disconnect() {
setDelegate(null);
}
@Override
public boolean equals(Object obj) {
if (getClass().isInstance(obj)) {
AxdtHandleImpl<?> cast = getClass().cast(obj);
return resource == null
? cast.resource == null
: resource.equals(cast.resource);
}
return super.equals(obj);
}
public AxdtElement getParent() {
T delegate = getDelegate();
if (delegate != null) {
AxdtElement parent = delegate.getParent();
return parent != null ? parent.getHandle() : null;
}
return null;
}
} //AxdtHandleImpl