/**
* <copyright>
* </copyright>
*
* $Id$
*/
package org.eclipse.gmf.codegen.gmfgen.impl;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.gmf.codegen.gmfgen.GMFGenPackage;
import org.eclipse.gmf.codegen.gmfgen.GenCompartment;
import org.eclipse.gmf.codegen.gmfgen.GenDiagram;
import org.eclipse.gmf.codegen.gmfgen.GenNode;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Gen Compartment</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenCompartmentImpl#getTitle <em>Title</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenCompartmentImpl#isCanCollapse <em>Can Collapse</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenCompartmentImpl#isHideIfEmpty <em>Hide If Empty</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenCompartmentImpl#isNeedsTitle <em>Needs Title</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenCompartmentImpl#getDiagram <em>Diagram</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenCompartmentImpl#getNode <em>Node</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenCompartmentImpl#isListLayout <em>List Layout</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class GenCompartmentImpl extends GenChildContainerImpl implements GenCompartment {
/**
* The default value of the '{@link #getTitle() <em>Title</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getTitle()
* @generated
* @ordered
*/
protected static final String TITLE_EDEFAULT = null;
/**
* The cached value of the '{@link #getTitle() <em>Title</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getTitle()
* @generated
* @ordered
*/
protected String title = TITLE_EDEFAULT;
/**
* The default value of the '{@link #isCanCollapse() <em>Can Collapse</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isCanCollapse()
* @generated
* @ordered
*/
protected static final boolean CAN_COLLAPSE_EDEFAULT = true;
/**
* The cached value of the '{@link #isCanCollapse() <em>Can Collapse</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isCanCollapse()
* @generated
* @ordered
*/
protected boolean canCollapse = CAN_COLLAPSE_EDEFAULT;
/**
* The default value of the '{@link #isHideIfEmpty() <em>Hide If Empty</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isHideIfEmpty()
* @generated
* @ordered
*/
protected static final boolean HIDE_IF_EMPTY_EDEFAULT = true;
/**
* The cached value of the '{@link #isHideIfEmpty() <em>Hide If Empty</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isHideIfEmpty()
* @generated
* @ordered
*/
protected boolean hideIfEmpty = HIDE_IF_EMPTY_EDEFAULT;
/**
* The default value of the '{@link #isNeedsTitle() <em>Needs Title</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isNeedsTitle()
* @generated
* @ordered
*/
protected static final boolean NEEDS_TITLE_EDEFAULT = true;
/**
* The cached value of the '{@link #isNeedsTitle() <em>Needs Title</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isNeedsTitle()
* @generated
* @ordered
*/
protected boolean needsTitle = NEEDS_TITLE_EDEFAULT;
/**
* The cached value of the '{@link #getNode() <em>Node</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getNode()
* @generated
* @ordered
*/
protected GenNode node;
/**
* The default value of the '{@link #isListLayout() <em>List Layout</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isListLayout()
* @generated
* @ordered
*/
protected static final boolean LIST_LAYOUT_EDEFAULT = true;
/**
* The cached value of the '{@link #isListLayout() <em>List Layout</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isListLayout()
* @generated
* @ordered
*/
protected boolean listLayout = LIST_LAYOUT_EDEFAULT;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected GenCompartmentImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return GMFGenPackage.eINSTANCE.getGenCompartment();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String getTitle() {
return title;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setTitle(String newTitle) {
String oldTitle = title;
title = newTitle;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_COMPARTMENT__TITLE, oldTitle, title));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isCanCollapse() {
return canCollapse;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setCanCollapse(boolean newCanCollapse) {
boolean oldCanCollapse = canCollapse;
canCollapse = newCanCollapse;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_COMPARTMENT__CAN_COLLAPSE, oldCanCollapse, canCollapse));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isHideIfEmpty() {
return hideIfEmpty;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setHideIfEmpty(boolean newHideIfEmpty) {
boolean oldHideIfEmpty = hideIfEmpty;
hideIfEmpty = newHideIfEmpty;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_COMPARTMENT__HIDE_IF_EMPTY, oldHideIfEmpty, hideIfEmpty));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isNeedsTitle() {
return needsTitle;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setNeedsTitle(boolean newNeedsTitle) {
boolean oldNeedsTitle = needsTitle;
needsTitle = newNeedsTitle;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_COMPARTMENT__NEEDS_TITLE, oldNeedsTitle, needsTitle));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public GenDiagram getDiagram() {
if (eContainerFeatureID() != GMFGenPackage.GEN_COMPARTMENT__DIAGRAM) return null;
return (GenDiagram)eInternalContainer();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public GenNode getNode() {
if (node != null && node.eIsProxy()) {
InternalEObject oldNode = (InternalEObject)node;
node = (GenNode)eResolveProxy(oldNode);
if (node != oldNode) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, GMFGenPackage.GEN_COMPARTMENT__NODE, oldNode, node));
}
}
return node;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public GenNode basicGetNode() {
return node;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetNode(GenNode newNode, NotificationChain msgs) {
GenNode oldNode = node;
node = newNode;
if (eNotificationRequired()) {
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_COMPARTMENT__NODE, oldNode, newNode);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
return msgs;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setNode(GenNode newNode) {
if (newNode != node) {
NotificationChain msgs = null;
if (node != null)
msgs = ((InternalEObject)node).eInverseRemove(this, GMFGenPackage.GEN_NODE__COMPARTMENTS, GenNode.class, msgs);
if (newNode != null)
msgs = ((InternalEObject)newNode).eInverseAdd(this, GMFGenPackage.GEN_NODE__COMPARTMENTS, GenNode.class, msgs);
msgs = basicSetNode(newNode, msgs);
if (msgs != null) msgs.dispatch();
}
else if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_COMPARTMENT__NODE, newNode, newNode));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isListLayout() {
return listLayout;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setListLayout(boolean newListLayout) {
boolean oldListLayout = listLayout;
listLayout = newListLayout;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_COMPARTMENT__LIST_LAYOUT, oldListLayout, listLayout));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case GMFGenPackage.GEN_COMPARTMENT__DIAGRAM:
if (eInternalContainer() != null)
msgs = eBasicRemoveFromContainer(msgs);
return eBasicSetContainer(otherEnd, GMFGenPackage.GEN_COMPARTMENT__DIAGRAM, msgs);
case GMFGenPackage.GEN_COMPARTMENT__NODE:
if (node != null)
msgs = ((InternalEObject)node).eInverseRemove(this, GMFGenPackage.GEN_NODE__COMPARTMENTS, GenNode.class, msgs);
return basicSetNode((GenNode)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 GMFGenPackage.GEN_COMPARTMENT__DIAGRAM:
return eBasicSetContainer(null, GMFGenPackage.GEN_COMPARTMENT__DIAGRAM, msgs);
case GMFGenPackage.GEN_COMPARTMENT__NODE:
return basicSetNode(null, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
switch (eContainerFeatureID()) {
case GMFGenPackage.GEN_COMPARTMENT__DIAGRAM:
return eInternalContainer().eInverseRemove(this, GMFGenPackage.GEN_DIAGRAM__COMPARTMENTS, GenDiagram.class, msgs);
}
return super.eBasicRemoveFromContainerFeature(msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case GMFGenPackage.GEN_COMPARTMENT__TITLE:
return getTitle();
case GMFGenPackage.GEN_COMPARTMENT__CAN_COLLAPSE:
return isCanCollapse();
case GMFGenPackage.GEN_COMPARTMENT__HIDE_IF_EMPTY:
return isHideIfEmpty();
case GMFGenPackage.GEN_COMPARTMENT__NEEDS_TITLE:
return isNeedsTitle();
case GMFGenPackage.GEN_COMPARTMENT__DIAGRAM:
return getDiagram();
case GMFGenPackage.GEN_COMPARTMENT__NODE:
if (resolve) return getNode();
return basicGetNode();
case GMFGenPackage.GEN_COMPARTMENT__LIST_LAYOUT:
return isListLayout();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case GMFGenPackage.GEN_COMPARTMENT__TITLE:
setTitle((String)newValue);
return;
case GMFGenPackage.GEN_COMPARTMENT__CAN_COLLAPSE:
setCanCollapse((Boolean)newValue);
return;
case GMFGenPackage.GEN_COMPARTMENT__HIDE_IF_EMPTY:
setHideIfEmpty((Boolean)newValue);
return;
case GMFGenPackage.GEN_COMPARTMENT__NEEDS_TITLE:
setNeedsTitle((Boolean)newValue);
return;
case GMFGenPackage.GEN_COMPARTMENT__NODE:
setNode((GenNode)newValue);
return;
case GMFGenPackage.GEN_COMPARTMENT__LIST_LAYOUT:
setListLayout((Boolean)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case GMFGenPackage.GEN_COMPARTMENT__TITLE:
setTitle(TITLE_EDEFAULT);
return;
case GMFGenPackage.GEN_COMPARTMENT__CAN_COLLAPSE:
setCanCollapse(CAN_COLLAPSE_EDEFAULT);
return;
case GMFGenPackage.GEN_COMPARTMENT__HIDE_IF_EMPTY:
setHideIfEmpty(HIDE_IF_EMPTY_EDEFAULT);
return;
case GMFGenPackage.GEN_COMPARTMENT__NEEDS_TITLE:
setNeedsTitle(NEEDS_TITLE_EDEFAULT);
return;
case GMFGenPackage.GEN_COMPARTMENT__NODE:
setNode((GenNode)null);
return;
case GMFGenPackage.GEN_COMPARTMENT__LIST_LAYOUT:
setListLayout(LIST_LAYOUT_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case GMFGenPackage.GEN_COMPARTMENT__TITLE:
return TITLE_EDEFAULT == null ? title != null : !TITLE_EDEFAULT.equals(title);
case GMFGenPackage.GEN_COMPARTMENT__CAN_COLLAPSE:
return canCollapse != CAN_COLLAPSE_EDEFAULT;
case GMFGenPackage.GEN_COMPARTMENT__HIDE_IF_EMPTY:
return hideIfEmpty != HIDE_IF_EMPTY_EDEFAULT;
case GMFGenPackage.GEN_COMPARTMENT__NEEDS_TITLE:
return needsTitle != NEEDS_TITLE_EDEFAULT;
case GMFGenPackage.GEN_COMPARTMENT__DIAGRAM:
return getDiagram() != null;
case GMFGenPackage.GEN_COMPARTMENT__NODE:
return node != null;
case GMFGenPackage.GEN_COMPARTMENT__LIST_LAYOUT:
return listLayout != LIST_LAYOUT_EDEFAULT;
}
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(" (title: ");
result.append(title);
result.append(", canCollapse: ");
result.append(canCollapse);
result.append(", hideIfEmpty: ");
result.append(hideIfEmpty);
result.append(", needsTitle: ");
result.append(needsTitle);
result.append(", listLayout: ");
result.append(listLayout);
result.append(')');
return result.toString();
}
@Override
public EList<GenNode> getAssistantNodes() {
if (isListLayout()) {
return new BasicEList<GenNode>();
}
return super.getAssistantNodes();
}
public String getClassNamePrefix() {
if (getNode() == null) {
return CLASS_NAME_PREFIX;
}
// should be consistent with ClassNamingStrategy
return getNode().getClassNamePrefix() + (isEmpty(getTitle()) ? CLASS_NAME_PREFIX : getValidClassName(getTitle()));
}
public boolean isSansDomain() {
return getNode().getModelFacet() == null;
}
} //GenCompartmentImpl