/** * 2014 Urs Zeidler */ package de.urszeidler.eclipse.shr5Management.impl; 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.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; import org.eclipse.emf.ecore.util.EContentAdapter; import de.urszeidler.eclipse.shr5Management.CharacterGenerator; import de.urszeidler.eclipse.shr5Management.CharacterGeneratorSystem; import de.urszeidler.eclipse.shr5Management.CharacterGroup; import de.urszeidler.eclipse.shr5Management.GeneratorState; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; /** * <!-- begin-user-doc --> An implementation of the model object ' * <em><b>Character Generator</b></em>'. <!-- end-user-doc --> * <p> * The following features are implemented: * <ul> * <li>{@link de.urszeidler.eclipse.shr5Management.impl.CharacterGeneratorImpl#getCharacter <em>Character</em>}</li> * <li>{@link de.urszeidler.eclipse.shr5Management.impl.CharacterGeneratorImpl#getGenerator <em>Generator</em>}</li> * <li>{@link de.urszeidler.eclipse.shr5Management.impl.CharacterGeneratorImpl#getState <em>State</em>}</li> * <li>{@link de.urszeidler.eclipse.shr5Management.impl.CharacterGeneratorImpl#getSelectedGroup <em>Selected Group</em>}</li> * <li>{@link de.urszeidler.eclipse.shr5Management.impl.CharacterGeneratorImpl#getCharacterName <em>Character Name</em>}</li> * <li>{@link de.urszeidler.eclipse.shr5Management.impl.CharacterGeneratorImpl#getCurrentInstruction <em>Current Instruction</em>}</li> * </ul> * </p> * * @generated */ public abstract class CharacterGeneratorImpl<G extends CharacterGeneratorSystem> extends MinimalEObjectImpl.Container implements CharacterGenerator<G> { /** * The cached value of the '{@link #getCharacter() <em>Character</em>}' reference. * <!-- begin-user-doc --> <!-- end-user-doc --> * @see #getCharacter() * @generated * @ordered */ protected ManagedCharacter character; /** * The cached value of the '{@link #getGenerator() <em>Generator</em>}' reference. * <!-- begin-user-doc --> <!-- end-user-doc --> * @see #getGenerator() * @generated * @ordered */ protected G generator; /** * The default value of the '{@link #getState() <em>State</em>}' attribute. * <!-- begin-user-doc --> <!-- end-user-doc --> * @see #getState() * @generated * @ordered */ protected static final GeneratorState STATE_EDEFAULT = GeneratorState.NEW; /** * The cached value of the '{@link #getState() <em>State</em>}' attribute. * <!-- begin-user-doc --> <!-- end-user-doc --> * @see #getState() * @generated * @ordered */ protected GeneratorState state = STATE_EDEFAULT; /** * The cached value of the '{@link #getSelectedGroup() <em>Selected Group</em>}' reference. * <!-- begin-user-doc --> <!-- * end-user-doc --> * @see #getSelectedGroup() * @generated * @ordered */ protected CharacterGroup selectedGroup; /** * The default value of the '{@link #getCharacterName() <em>Character Name</em>}' attribute. * <!-- begin-user-doc --> <!-- * end-user-doc --> * @see #getCharacterName() * @generated * @ordered */ protected static final String CHARACTER_NAME_EDEFAULT = null; /** * The cached value of the '{@link #getCharacterName() <em>Character Name</em>}' attribute. * <!-- begin-user-doc --> <!-- * end-user-doc --> * @see #getCharacterName() * @generated * @ordered */ protected String characterName = CHARACTER_NAME_EDEFAULT; /** * The default value of the '{@link #getCurrentInstruction() <em>Current Instruction</em>}' attribute. * <!-- begin-user-doc --> <!-- * end-user-doc --> * @see #getCurrentInstruction() * @generated * @ordered */ protected static final String CURRENT_INSTRUCTION_EDEFAULT = null; private EContentAdapter adapter = new EContentAdapter() { // private Notifier myTarger; // // public Notifier getTarget() { // return myTarger; // } // // public boolean isAdapterForType(Object type) { // return false; // } protected void addAdapter(org.eclipse.emf.common.notify.Notifier notifier) { super.addAdapter(notifier); }; public void notifyChanged(Notification notification) { super.notifyChanged(notification); if(getState()==GeneratorState.COMMITED) return; Object notifier = notification.getNotifier(); if(notifier==CharacterGeneratorImpl.this) return; if (notification.getEventType() == Notification.REMOVING_ADAPTER) return; Object feature = notification.getFeature(); // if (Shr5managementPackage.Literals.MANAGED_CHARACTER__PERSONA.equals(feature)) { // if (getCharacter().getPersona() != null) // if (!getCharacter().getPersona().eAdapters().contains(adapter)) // getCharacter().getPersona().eAdapters().add(adapter); // return; // } if(Shr5managementPackage.Literals.MANAGED_CHARACTER__CHRACTER_SOURCE.equals(feature) || Shr5managementPackage.Literals.MANAGED_CHARACTER__GENERATOR_SRC.equals(feature) ) return; EList<EAttribute> eAllAttributes = eClass().getEAllAttributes(); for (EAttribute attribute : eAllAttributes) { if (attribute != null) CharacterGeneratorImpl.this.eNotify(new ENotificationImpl((InternalEObject) CharacterGeneratorImpl.this, Notification.SET, attribute, 0, 1)); } } // // public void setTarget(Notifier newTarget) { // myTarger = newTarget; // // myTarger.eAdapters().add(this); // // } }; /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated not */ protected CharacterGeneratorImpl() { super(); adapter.setTarget(this); this.eAdapters().add(adapter); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ @Override protected EClass eStaticClass() { return Shr5managementPackage.Literals.CHARACTER_GENERATOR; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public ManagedCharacter getCharacter() { if (character != null && character.eIsProxy()) { InternalEObject oldCharacter = (InternalEObject)character; character = (ManagedCharacter)eResolveProxy(oldCharacter); if (character != oldCharacter) { if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.RESOLVE, Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER, oldCharacter, character)); } } return character; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public ManagedCharacter basicGetCharacter() { return character; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated not */ public NotificationChain basicSetCharacter(ManagedCharacter newCharacter, NotificationChain msgs) { ManagedCharacter oldCharacter = character; character = newCharacter; if (oldCharacter != null) { oldCharacter.eAdapters().remove(adapter); if (oldCharacter.getPersona() != null) oldCharacter.getPersona().eAdapters().remove(adapter); } if (newCharacter != null) { newCharacter.eAdapters().add(adapter); if (newCharacter.getPersona() != null) newCharacter.getPersona().eAdapters().add(adapter); } if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER, oldCharacter, newCharacter); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public void setCharacter(ManagedCharacter newCharacter) { if (newCharacter != character) { NotificationChain msgs = null; if (character != null) msgs = ((InternalEObject)character).eInverseRemove(this, Shr5managementPackage.MANAGED_CHARACTER__CHRACTER_SOURCE, ManagedCharacter.class, msgs); if (newCharacter != null) msgs = ((InternalEObject)newCharacter).eInverseAdd(this, Shr5managementPackage.MANAGED_CHARACTER__CHRACTER_SOURCE, ManagedCharacter.class, msgs); msgs = basicSetCharacter(newCharacter, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER, newCharacter, newCharacter)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ @SuppressWarnings("unchecked") public G getGenerator() { if (generator != null && generator.eIsProxy()) { InternalEObject oldGenerator = (InternalEObject)generator; generator = (G)eResolveProxy(oldGenerator); if (generator != oldGenerator) { if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.RESOLVE, Shr5managementPackage.CHARACTER_GENERATOR__GENERATOR, oldGenerator, generator)); } } return generator; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public G basicGetGenerator() { return generator; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setGenerator(G newGenerator) { G oldGenerator = generator; generator = newGenerator; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, Shr5managementPackage.CHARACTER_GENERATOR__GENERATOR, oldGenerator, generator)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public GeneratorState getState() { return state; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated not */ public void setState(GeneratorState newState) { GeneratorState oldState = state; state = newState == null ? STATE_EDEFAULT : newState; if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, Shr5managementPackage.CHARACTER_GENERATOR__STATE, oldState, state)); if (newState != oldState) eNotify(new ENotificationImpl(this, Notification.SET, Shr5managementPackage.CHARACTER_GENERATOR__CURRENT_INSTRUCTION, 0, 1)); } if(newState==GeneratorState.COMMITED){ adapter.unsetTarget(this); this.eAdapters().remove(adapter); if(getCharacter()!=null) getCharacter().eAdapters().remove(adapter); if(getCharacter()!=null && getCharacter().getPersona()!=null) getCharacter().getPersona().eAdapters().remove(adapter); } // else // if(newState!= STATE_EDEFAULT){ // adapter.setTarget(this); // if(!this.eAdapters().contains(adapter)) // this.eAdapters().add(adapter); // // } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public CharacterGroup getSelectedGroup() { if (selectedGroup != null && selectedGroup.eIsProxy()) { InternalEObject oldSelectedGroup = (InternalEObject)selectedGroup; selectedGroup = (CharacterGroup)eResolveProxy(oldSelectedGroup); if (selectedGroup != oldSelectedGroup) { if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.RESOLVE, Shr5managementPackage.CHARACTER_GENERATOR__SELECTED_GROUP, oldSelectedGroup, selectedGroup)); } } return selectedGroup; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public CharacterGroup basicGetSelectedGroup() { return selectedGroup; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public void setSelectedGroup(CharacterGroup newSelectedGroup) { CharacterGroup oldSelectedGroup = selectedGroup; selectedGroup = newSelectedGroup; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, Shr5managementPackage.CHARACTER_GENERATOR__SELECTED_GROUP, oldSelectedGroup, selectedGroup)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public String getCharacterName() { return characterName; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ public void setCharacterName(String newCharacterName) { String oldCharacterName = characterName; characterName = newCharacterName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER_NAME, oldCharacterName, characterName)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated not */ public String getCurrentInstruction() { if (getGenerator() != null) { return getGenerator().getInstructions().get(getState()); } return "no generator set"; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER: if (character != null) msgs = ((InternalEObject)character).eInverseRemove(this, Shr5managementPackage.MANAGED_CHARACTER__CHRACTER_SOURCE, ManagedCharacter.class, msgs); return basicSetCharacter((ManagedCharacter)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 Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER: return basicSetCharacter(null, 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 Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER: if (resolve) return getCharacter(); return basicGetCharacter(); case Shr5managementPackage.CHARACTER_GENERATOR__GENERATOR: if (resolve) return getGenerator(); return basicGetGenerator(); case Shr5managementPackage.CHARACTER_GENERATOR__STATE: return getState(); case Shr5managementPackage.CHARACTER_GENERATOR__SELECTED_GROUP: if (resolve) return getSelectedGroup(); return basicGetSelectedGroup(); case Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER_NAME: return getCharacterName(); case Shr5managementPackage.CHARACTER_GENERATOR__CURRENT_INSTRUCTION: return getCurrentInstruction(); } 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 Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER: setCharacter((ManagedCharacter)newValue); return; case Shr5managementPackage.CHARACTER_GENERATOR__GENERATOR: setGenerator((G)newValue); return; case Shr5managementPackage.CHARACTER_GENERATOR__STATE: setState((GeneratorState)newValue); return; case Shr5managementPackage.CHARACTER_GENERATOR__SELECTED_GROUP: setSelectedGroup((CharacterGroup)newValue); return; case Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER_NAME: setCharacterName((String)newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER: setCharacter((ManagedCharacter)null); return; case Shr5managementPackage.CHARACTER_GENERATOR__GENERATOR: setGenerator((G)null); return; case Shr5managementPackage.CHARACTER_GENERATOR__STATE: setState(STATE_EDEFAULT); return; case Shr5managementPackage.CHARACTER_GENERATOR__SELECTED_GROUP: setSelectedGroup((CharacterGroup)null); return; case Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER_NAME: setCharacterName(CHARACTER_NAME_EDEFAULT); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER: return character != null; case Shr5managementPackage.CHARACTER_GENERATOR__GENERATOR: return generator != null; case Shr5managementPackage.CHARACTER_GENERATOR__STATE: return state != STATE_EDEFAULT; case Shr5managementPackage.CHARACTER_GENERATOR__SELECTED_GROUP: return selectedGroup != null; case Shr5managementPackage.CHARACTER_GENERATOR__CHARACTER_NAME: return CHARACTER_NAME_EDEFAULT == null ? characterName != null : !CHARACTER_NAME_EDEFAULT.equals(characterName); case Shr5managementPackage.CHARACTER_GENERATOR__CURRENT_INSTRUCTION: return CURRENT_INSTRUCTION_EDEFAULT == null ? getCurrentInstruction() != null : !CURRENT_INSTRUCTION_EDEFAULT.equals(getCurrentInstruction()); } 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(" (state: "); result.append(state); result.append(", characterName: "); result.append(characterName); result.append(')'); return result.toString(); } } // CharacterGeneratorImpl