001    /**
002     * <copyright>
003     * </copyright>
004     *
005     * $Id$
006     */
007    package com.hammurapi.eventbus.snapshot.impl;
008    
009    import com.hammurapi.eventbus.snapshot.Handler;
010    import com.hammurapi.eventbus.snapshot.JoinInput;
011    import com.hammurapi.eventbus.snapshot.JoinInputCollector;
012    import com.hammurapi.eventbus.snapshot.JoinNode;
013    import com.hammurapi.eventbus.snapshot.Predicate;
014    import com.hammurapi.eventbus.snapshot.Snapshot;
015    import com.hammurapi.eventbus.snapshot.SnapshotPackage;
016    
017    import java.util.Collection;
018    
019    import org.eclipse.emf.common.notify.Notification;
020    import org.eclipse.emf.common.notify.NotificationChain;
021    
022    import org.eclipse.emf.common.util.EList;
023    
024    import org.eclipse.emf.ecore.EClass;
025    import org.eclipse.emf.ecore.InternalEObject;
026    
027    import org.eclipse.emf.ecore.impl.ENotificationImpl;
028    import org.eclipse.emf.ecore.impl.EObjectImpl;
029    
030    import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
031    import org.eclipse.emf.ecore.util.EObjectContainmentEList;
032    import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
033    import org.eclipse.emf.ecore.util.EcoreUtil;
034    import org.eclipse.emf.ecore.util.InternalEList;
035    
036    /**
037     * <!-- begin-user-doc -->
038     * An implementation of the model object '<em><b>Join Node</b></em>'.
039     * <!-- end-user-doc -->
040     * <p>
041     * The following features are implemented:
042     * <ul>
043     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getId <em>Id</em>}</li>
044     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getName <em>Name</em>}</li>
045     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getDetails <em>Details</em>}</li>
046     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getSnapshot <em>Snapshot</em>}</li>
047     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getCollectors <em>Collectors</em>}</li>
048     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getOutputIndices <em>Output Indices</em>}</li>
049     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getHandler <em>Handler</em>}</li>
050     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getNext <em>Next</em>}</li>
051     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getPredicate <em>Predicate</em>}</li>
052     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getPrev <em>Prev</em>}</li>
053     *   <li>{@link com.hammurapi.eventbus.snapshot.impl.JoinNodeImpl#getJoinInputs <em>Join Inputs</em>}</li>
054     * </ul>
055     * </p>
056     *
057     * @generated
058     */
059    public class JoinNodeImpl extends EObjectImpl implements JoinNode {
060            /**
061             * The default value of the '{@link #getId() <em>Id</em>}' attribute.
062             * <!-- begin-user-doc -->
063             * <!-- end-user-doc -->
064             * @see #getId()
065             * @generated
066             * @ordered
067             */
068            protected static final String ID_EDEFAULT = null;
069    
070            /**
071             * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
072             * <!-- begin-user-doc -->
073             * <!-- end-user-doc -->
074             * @see #getId()
075             * @generated
076             * @ordered
077             */
078            protected String id = ID_EDEFAULT;
079    
080            /**
081             * The default value of the '{@link #getName() <em>Name</em>}' attribute.
082             * <!-- begin-user-doc -->
083             * <!-- end-user-doc -->
084             * @see #getName()
085             * @generated
086             * @ordered
087             */
088            protected static final String NAME_EDEFAULT = null;
089    
090            /**
091             * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
092             * <!-- begin-user-doc -->
093             * <!-- end-user-doc -->
094             * @see #getName()
095             * @generated
096             * @ordered
097             */
098            protected String name = NAME_EDEFAULT;
099    
100            /**
101             * The default value of the '{@link #getDetails() <em>Details</em>}' attribute.
102             * <!-- begin-user-doc -->
103             * <!-- end-user-doc -->
104             * @see #getDetails()
105             * @generated
106             * @ordered
107             */
108            protected static final String DETAILS_EDEFAULT = null;
109    
110            /**
111             * The cached value of the '{@link #getDetails() <em>Details</em>}' attribute.
112             * <!-- begin-user-doc -->
113             * <!-- end-user-doc -->
114             * @see #getDetails()
115             * @generated
116             * @ordered
117             */
118            protected String details = DETAILS_EDEFAULT;
119    
120            /**
121             * The cached value of the '{@link #getCollectors() <em>Collectors</em>}' containment reference list.
122             * <!-- begin-user-doc -->
123             * <!-- end-user-doc -->
124             * @see #getCollectors()
125             * @generated
126             * @ordered
127             */
128            protected EList<JoinInputCollector> collectors;
129    
130            /**
131             * The cached value of the '{@link #getOutputIndices() <em>Output Indices</em>}' attribute list.
132             * <!-- begin-user-doc -->
133             * <!-- end-user-doc -->
134             * @see #getOutputIndices()
135             * @generated
136             * @ordered
137             */
138            protected EList<Integer> outputIndices;
139    
140            /**
141             * The cached value of the '{@link #getHandler() <em>Handler</em>}' reference.
142             * <!-- begin-user-doc -->
143             * <!-- end-user-doc -->
144             * @see #getHandler()
145             * @generated
146             * @ordered
147             */
148            protected Handler handler;
149    
150            /**
151             * The cached value of the '{@link #getNext() <em>Next</em>}' reference.
152             * <!-- begin-user-doc -->
153             * <!-- end-user-doc -->
154             * @see #getNext()
155             * @generated
156             * @ordered
157             */
158            protected JoinNode next;
159    
160            /**
161             * The cached value of the '{@link #getPredicate() <em>Predicate</em>}' containment reference.
162             * <!-- begin-user-doc -->
163             * <!-- end-user-doc -->
164             * @see #getPredicate()
165             * @generated
166             * @ordered
167             */
168            protected Predicate predicate;
169    
170            /**
171             * The cached value of the '{@link #getPrev() <em>Prev</em>}' reference list.
172             * <!-- begin-user-doc -->
173             * <!-- end-user-doc -->
174             * @see #getPrev()
175             * @generated
176             * @ordered
177             */
178            protected EList<JoinNode> prev;
179    
180            /**
181             * The cached value of the '{@link #getJoinInputs() <em>Join Inputs</em>}' reference list.
182             * <!-- begin-user-doc -->
183             * <!-- end-user-doc -->
184             * @see #getJoinInputs()
185             * @generated
186             * @ordered
187             */
188            protected EList<JoinInput> joinInputs;
189    
190            /**
191             * <!-- begin-user-doc -->
192             * <!-- end-user-doc -->
193             * @generated
194             */
195            protected JoinNodeImpl() {
196                    super();
197            }
198    
199            /**
200             * <!-- begin-user-doc -->
201             * <!-- end-user-doc -->
202             * @generated
203             */
204            @Override
205            protected EClass eStaticClass() {
206                    return SnapshotPackage.Literals.JOIN_NODE;
207            }
208    
209            /**
210             * <!-- begin-user-doc -->
211             * <!-- end-user-doc -->
212             * @generated
213             */
214            public String getId() {
215                    return id;
216            }
217    
218            /**
219             * <!-- begin-user-doc -->
220             * <!-- end-user-doc -->
221             * @generated
222             */
223            public void setId(String newId) {
224                    String oldId = id;
225                    id = newId;
226                    if (eNotificationRequired())
227                            eNotify(new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__ID, oldId, id));
228            }
229    
230            /**
231             * <!-- begin-user-doc -->
232             * <!-- end-user-doc -->
233             * @generated
234             */
235            public String getName() {
236                    return name;
237            }
238    
239            /**
240             * <!-- begin-user-doc -->
241             * <!-- end-user-doc -->
242             * @generated
243             */
244            public void setName(String newName) {
245                    String oldName = name;
246                    name = newName;
247                    if (eNotificationRequired())
248                            eNotify(new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__NAME, oldName, name));
249            }
250    
251            /**
252             * <!-- begin-user-doc -->
253             * <!-- end-user-doc -->
254             * @generated
255             */
256            public String getDetails() {
257                    return details;
258            }
259    
260            /**
261             * <!-- begin-user-doc -->
262             * <!-- end-user-doc -->
263             * @generated
264             */
265            public void setDetails(String newDetails) {
266                    String oldDetails = details;
267                    details = newDetails;
268                    if (eNotificationRequired())
269                            eNotify(new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__DETAILS, oldDetails, details));
270            }
271    
272            /**
273             * <!-- begin-user-doc -->
274             * <!-- end-user-doc -->
275             * @generated
276             */
277            public Snapshot getSnapshot() {
278                    if (eContainerFeatureID() != SnapshotPackage.JOIN_NODE__SNAPSHOT) return null;
279                    return (Snapshot)eContainer();
280            }
281    
282            /**
283             * <!-- begin-user-doc -->
284             * <!-- end-user-doc -->
285             * @generated
286             */
287            public NotificationChain basicSetSnapshot(Snapshot newSnapshot, NotificationChain msgs) {
288                    msgs = eBasicSetContainer((InternalEObject)newSnapshot, SnapshotPackage.JOIN_NODE__SNAPSHOT, msgs);
289                    return msgs;
290            }
291    
292            /**
293             * <!-- begin-user-doc -->
294             * <!-- end-user-doc -->
295             * @generated
296             */
297            public void setSnapshot(Snapshot newSnapshot) {
298                    if (newSnapshot != eInternalContainer() || (eContainerFeatureID() != SnapshotPackage.JOIN_NODE__SNAPSHOT && newSnapshot != null)) {
299                            if (EcoreUtil.isAncestor(this, newSnapshot))
300                                    throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
301                            NotificationChain msgs = null;
302                            if (eInternalContainer() != null)
303                                    msgs = eBasicRemoveFromContainer(msgs);
304                            if (newSnapshot != null)
305                                    msgs = ((InternalEObject)newSnapshot).eInverseAdd(this, SnapshotPackage.SNAPSHOT__ELEMENTS, Snapshot.class, msgs);
306                            msgs = basicSetSnapshot(newSnapshot, msgs);
307                            if (msgs != null) msgs.dispatch();
308                    }
309                    else if (eNotificationRequired())
310                            eNotify(new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__SNAPSHOT, newSnapshot, newSnapshot));
311            }
312    
313            /**
314             * <!-- begin-user-doc -->
315             * <!-- end-user-doc -->
316             * @generated
317             */
318            public EList<JoinInputCollector> getCollectors() {
319                    if (collectors == null) {
320                            collectors = new EObjectContainmentEList<JoinInputCollector>(JoinInputCollector.class, this, SnapshotPackage.JOIN_NODE__COLLECTORS);
321                    }
322                    return collectors;
323            }
324    
325            /**
326             * <!-- begin-user-doc -->
327             * <!-- end-user-doc -->
328             * @generated
329             */
330            public EList<Integer> getOutputIndices() {
331                    if (outputIndices == null) {
332                            outputIndices = new EDataTypeUniqueEList<Integer>(Integer.class, this, SnapshotPackage.JOIN_NODE__OUTPUT_INDICES);
333                    }
334                    return outputIndices;
335            }
336    
337            /**
338             * <!-- begin-user-doc -->
339             * <!-- end-user-doc -->
340             * @generated
341             */
342            public Handler getHandler() {
343                    if (handler != null && handler.eIsProxy()) {
344                            InternalEObject oldHandler = (InternalEObject)handler;
345                            handler = (Handler)eResolveProxy(oldHandler);
346                            if (handler != oldHandler) {
347                                    if (eNotificationRequired())
348                                            eNotify(new ENotificationImpl(this, Notification.RESOLVE, SnapshotPackage.JOIN_NODE__HANDLER, oldHandler, handler));
349                            }
350                    }
351                    return handler;
352            }
353    
354            /**
355             * <!-- begin-user-doc -->
356             * <!-- end-user-doc -->
357             * @generated
358             */
359            public Handler basicGetHandler() {
360                    return handler;
361            }
362    
363            /**
364             * <!-- begin-user-doc -->
365             * <!-- end-user-doc -->
366             * @generated
367             */
368            public NotificationChain basicSetHandler(Handler newHandler, NotificationChain msgs) {
369                    Handler oldHandler = handler;
370                    handler = newHandler;
371                    if (eNotificationRequired()) {
372                            ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__HANDLER, oldHandler, newHandler);
373                            if (msgs == null) msgs = notification; else msgs.add(notification);
374                    }
375                    return msgs;
376            }
377    
378            /**
379             * <!-- begin-user-doc -->
380             * <!-- end-user-doc -->
381             * @generated
382             */
383            public void setHandler(Handler newHandler) {
384                    if (newHandler != handler) {
385                            NotificationChain msgs = null;
386                            if (handler != null)
387                                    msgs = ((InternalEObject)handler).eInverseRemove(this, SnapshotPackage.HANDLER__JOIN_NODE, Handler.class, msgs);
388                            if (newHandler != null)
389                                    msgs = ((InternalEObject)newHandler).eInverseAdd(this, SnapshotPackage.HANDLER__JOIN_NODE, Handler.class, msgs);
390                            msgs = basicSetHandler(newHandler, msgs);
391                            if (msgs != null) msgs.dispatch();
392                    }
393                    else if (eNotificationRequired())
394                            eNotify(new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__HANDLER, newHandler, newHandler));
395            }
396    
397            /**
398             * <!-- begin-user-doc -->
399             * <!-- end-user-doc -->
400             * @generated
401             */
402            public JoinNode getNext() {
403                    if (next != null && next.eIsProxy()) {
404                            InternalEObject oldNext = (InternalEObject)next;
405                            next = (JoinNode)eResolveProxy(oldNext);
406                            if (next != oldNext) {
407                                    if (eNotificationRequired())
408                                            eNotify(new ENotificationImpl(this, Notification.RESOLVE, SnapshotPackage.JOIN_NODE__NEXT, oldNext, next));
409                            }
410                    }
411                    return next;
412            }
413    
414            /**
415             * <!-- begin-user-doc -->
416             * <!-- end-user-doc -->
417             * @generated
418             */
419            public JoinNode basicGetNext() {
420                    return next;
421            }
422    
423            /**
424             * <!-- begin-user-doc -->
425             * <!-- end-user-doc -->
426             * @generated
427             */
428            public NotificationChain basicSetNext(JoinNode newNext, NotificationChain msgs) {
429                    JoinNode oldNext = next;
430                    next = newNext;
431                    if (eNotificationRequired()) {
432                            ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__NEXT, oldNext, newNext);
433                            if (msgs == null) msgs = notification; else msgs.add(notification);
434                    }
435                    return msgs;
436            }
437    
438            /**
439             * <!-- begin-user-doc -->
440             * <!-- end-user-doc -->
441             * @generated
442             */
443            public void setNext(JoinNode newNext) {
444                    if (newNext != next) {
445                            NotificationChain msgs = null;
446                            if (next != null)
447                                    msgs = ((InternalEObject)next).eInverseRemove(this, SnapshotPackage.JOIN_NODE__PREV, JoinNode.class, msgs);
448                            if (newNext != null)
449                                    msgs = ((InternalEObject)newNext).eInverseAdd(this, SnapshotPackage.JOIN_NODE__PREV, JoinNode.class, msgs);
450                            msgs = basicSetNext(newNext, msgs);
451                            if (msgs != null) msgs.dispatch();
452                    }
453                    else if (eNotificationRequired())
454                            eNotify(new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__NEXT, newNext, newNext));
455            }
456    
457            /**
458             * <!-- begin-user-doc -->
459             * <!-- end-user-doc -->
460             * @generated
461             */
462            public Predicate getPredicate() {
463                    return predicate;
464            }
465    
466            /**
467             * <!-- begin-user-doc -->
468             * <!-- end-user-doc -->
469             * @generated
470             */
471            public NotificationChain basicSetPredicate(Predicate newPredicate, NotificationChain msgs) {
472                    Predicate oldPredicate = predicate;
473                    predicate = newPredicate;
474                    if (eNotificationRequired()) {
475                            ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__PREDICATE, oldPredicate, newPredicate);
476                            if (msgs == null) msgs = notification; else msgs.add(notification);
477                    }
478                    return msgs;
479            }
480    
481            /**
482             * <!-- begin-user-doc -->
483             * <!-- end-user-doc -->
484             * @generated
485             */
486            public void setPredicate(Predicate newPredicate) {
487                    if (newPredicate != predicate) {
488                            NotificationChain msgs = null;
489                            if (predicate != null)
490                                    msgs = ((InternalEObject)predicate).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SnapshotPackage.JOIN_NODE__PREDICATE, null, msgs);
491                            if (newPredicate != null)
492                                    msgs = ((InternalEObject)newPredicate).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SnapshotPackage.JOIN_NODE__PREDICATE, null, msgs);
493                            msgs = basicSetPredicate(newPredicate, msgs);
494                            if (msgs != null) msgs.dispatch();
495                    }
496                    else if (eNotificationRequired())
497                            eNotify(new ENotificationImpl(this, Notification.SET, SnapshotPackage.JOIN_NODE__PREDICATE, newPredicate, newPredicate));
498            }
499    
500            /**
501             * <!-- begin-user-doc -->
502             * <!-- end-user-doc -->
503             * @generated
504             */
505            public EList<JoinNode> getPrev() {
506                    if (prev == null) {
507                            prev = new EObjectWithInverseResolvingEList<JoinNode>(JoinNode.class, this, SnapshotPackage.JOIN_NODE__PREV, SnapshotPackage.JOIN_NODE__NEXT);
508                    }
509                    return prev;
510            }
511    
512            /**
513             * <!-- begin-user-doc -->
514             * <!-- end-user-doc -->
515             * @generated
516             */
517            public EList<JoinInput> getJoinInputs() {
518                    if (joinInputs == null) {
519                            joinInputs = new EObjectWithInverseResolvingEList<JoinInput>(JoinInput.class, this, SnapshotPackage.JOIN_NODE__JOIN_INPUTS, SnapshotPackage.JOIN_INPUT__JOIN_NODE);
520                    }
521                    return joinInputs;
522            }
523    
524            /**
525             * <!-- begin-user-doc -->
526             * <!-- end-user-doc -->
527             * @generated
528             */
529            @SuppressWarnings("unchecked")
530            @Override
531            public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
532                    switch (featureID) {
533                            case SnapshotPackage.JOIN_NODE__SNAPSHOT:
534                                    if (eInternalContainer() != null)
535                                            msgs = eBasicRemoveFromContainer(msgs);
536                                    return basicSetSnapshot((Snapshot)otherEnd, msgs);
537                            case SnapshotPackage.JOIN_NODE__HANDLER:
538                                    if (handler != null)
539                                            msgs = ((InternalEObject)handler).eInverseRemove(this, SnapshotPackage.HANDLER__JOIN_NODE, Handler.class, msgs);
540                                    return basicSetHandler((Handler)otherEnd, msgs);
541                            case SnapshotPackage.JOIN_NODE__NEXT:
542                                    if (next != null)
543                                            msgs = ((InternalEObject)next).eInverseRemove(this, SnapshotPackage.JOIN_NODE__PREV, JoinNode.class, msgs);
544                                    return basicSetNext((JoinNode)otherEnd, msgs);
545                            case SnapshotPackage.JOIN_NODE__PREV:
546                                    return ((InternalEList<InternalEObject>)(InternalEList<?>)getPrev()).basicAdd(otherEnd, msgs);
547                            case SnapshotPackage.JOIN_NODE__JOIN_INPUTS:
548                                    return ((InternalEList<InternalEObject>)(InternalEList<?>)getJoinInputs()).basicAdd(otherEnd, msgs);
549                    }
550                    return super.eInverseAdd(otherEnd, featureID, msgs);
551            }
552    
553            /**
554             * <!-- begin-user-doc -->
555             * <!-- end-user-doc -->
556             * @generated
557             */
558            @Override
559            public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
560                    switch (featureID) {
561                            case SnapshotPackage.JOIN_NODE__SNAPSHOT:
562                                    return basicSetSnapshot(null, msgs);
563                            case SnapshotPackage.JOIN_NODE__COLLECTORS:
564                                    return ((InternalEList<?>)getCollectors()).basicRemove(otherEnd, msgs);
565                            case SnapshotPackage.JOIN_NODE__HANDLER:
566                                    return basicSetHandler(null, msgs);
567                            case SnapshotPackage.JOIN_NODE__NEXT:
568                                    return basicSetNext(null, msgs);
569                            case SnapshotPackage.JOIN_NODE__PREDICATE:
570                                    return basicSetPredicate(null, msgs);
571                            case SnapshotPackage.JOIN_NODE__PREV:
572                                    return ((InternalEList<?>)getPrev()).basicRemove(otherEnd, msgs);
573                            case SnapshotPackage.JOIN_NODE__JOIN_INPUTS:
574                                    return ((InternalEList<?>)getJoinInputs()).basicRemove(otherEnd, msgs);
575                    }
576                    return super.eInverseRemove(otherEnd, featureID, msgs);
577            }
578    
579            /**
580             * <!-- begin-user-doc -->
581             * <!-- end-user-doc -->
582             * @generated
583             */
584            @Override
585            public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
586                    switch (eContainerFeatureID()) {
587                            case SnapshotPackage.JOIN_NODE__SNAPSHOT:
588                                    return eInternalContainer().eInverseRemove(this, SnapshotPackage.SNAPSHOT__ELEMENTS, Snapshot.class, msgs);
589                    }
590                    return super.eBasicRemoveFromContainerFeature(msgs);
591            }
592    
593            /**
594             * <!-- begin-user-doc -->
595             * <!-- end-user-doc -->
596             * @generated
597             */
598            @Override
599            public Object eGet(int featureID, boolean resolve, boolean coreType) {
600                    switch (featureID) {
601                            case SnapshotPackage.JOIN_NODE__ID:
602                                    return getId();
603                            case SnapshotPackage.JOIN_NODE__NAME:
604                                    return getName();
605                            case SnapshotPackage.JOIN_NODE__DETAILS:
606                                    return getDetails();
607                            case SnapshotPackage.JOIN_NODE__SNAPSHOT:
608                                    return getSnapshot();
609                            case SnapshotPackage.JOIN_NODE__COLLECTORS:
610                                    return getCollectors();
611                            case SnapshotPackage.JOIN_NODE__OUTPUT_INDICES:
612                                    return getOutputIndices();
613                            case SnapshotPackage.JOIN_NODE__HANDLER:
614                                    if (resolve) return getHandler();
615                                    return basicGetHandler();
616                            case SnapshotPackage.JOIN_NODE__NEXT:
617                                    if (resolve) return getNext();
618                                    return basicGetNext();
619                            case SnapshotPackage.JOIN_NODE__PREDICATE:
620                                    return getPredicate();
621                            case SnapshotPackage.JOIN_NODE__PREV:
622                                    return getPrev();
623                            case SnapshotPackage.JOIN_NODE__JOIN_INPUTS:
624                                    return getJoinInputs();
625                    }
626                    return super.eGet(featureID, resolve, coreType);
627            }
628    
629            /**
630             * <!-- begin-user-doc -->
631             * <!-- end-user-doc -->
632             * @generated
633             */
634            @SuppressWarnings("unchecked")
635            @Override
636            public void eSet(int featureID, Object newValue) {
637                    switch (featureID) {
638                            case SnapshotPackage.JOIN_NODE__ID:
639                                    setId((String)newValue);
640                                    return;
641                            case SnapshotPackage.JOIN_NODE__NAME:
642                                    setName((String)newValue);
643                                    return;
644                            case SnapshotPackage.JOIN_NODE__DETAILS:
645                                    setDetails((String)newValue);
646                                    return;
647                            case SnapshotPackage.JOIN_NODE__SNAPSHOT:
648                                    setSnapshot((Snapshot)newValue);
649                                    return;
650                            case SnapshotPackage.JOIN_NODE__COLLECTORS:
651                                    getCollectors().clear();
652                                    getCollectors().addAll((Collection<? extends JoinInputCollector>)newValue);
653                                    return;
654                            case SnapshotPackage.JOIN_NODE__OUTPUT_INDICES:
655                                    getOutputIndices().clear();
656                                    getOutputIndices().addAll((Collection<? extends Integer>)newValue);
657                                    return;
658                            case SnapshotPackage.JOIN_NODE__HANDLER:
659                                    setHandler((Handler)newValue);
660                                    return;
661                            case SnapshotPackage.JOIN_NODE__NEXT:
662                                    setNext((JoinNode)newValue);
663                                    return;
664                            case SnapshotPackage.JOIN_NODE__PREDICATE:
665                                    setPredicate((Predicate)newValue);
666                                    return;
667                            case SnapshotPackage.JOIN_NODE__PREV:
668                                    getPrev().clear();
669                                    getPrev().addAll((Collection<? extends JoinNode>)newValue);
670                                    return;
671                            case SnapshotPackage.JOIN_NODE__JOIN_INPUTS:
672                                    getJoinInputs().clear();
673                                    getJoinInputs().addAll((Collection<? extends JoinInput>)newValue);
674                                    return;
675                    }
676                    super.eSet(featureID, newValue);
677            }
678    
679            /**
680             * <!-- begin-user-doc -->
681             * <!-- end-user-doc -->
682             * @generated
683             */
684            @Override
685            public void eUnset(int featureID) {
686                    switch (featureID) {
687                            case SnapshotPackage.JOIN_NODE__ID:
688                                    setId(ID_EDEFAULT);
689                                    return;
690                            case SnapshotPackage.JOIN_NODE__NAME:
691                                    setName(NAME_EDEFAULT);
692                                    return;
693                            case SnapshotPackage.JOIN_NODE__DETAILS:
694                                    setDetails(DETAILS_EDEFAULT);
695                                    return;
696                            case SnapshotPackage.JOIN_NODE__SNAPSHOT:
697                                    setSnapshot((Snapshot)null);
698                                    return;
699                            case SnapshotPackage.JOIN_NODE__COLLECTORS:
700                                    getCollectors().clear();
701                                    return;
702                            case SnapshotPackage.JOIN_NODE__OUTPUT_INDICES:
703                                    getOutputIndices().clear();
704                                    return;
705                            case SnapshotPackage.JOIN_NODE__HANDLER:
706                                    setHandler((Handler)null);
707                                    return;
708                            case SnapshotPackage.JOIN_NODE__NEXT:
709                                    setNext((JoinNode)null);
710                                    return;
711                            case SnapshotPackage.JOIN_NODE__PREDICATE:
712                                    setPredicate((Predicate)null);
713                                    return;
714                            case SnapshotPackage.JOIN_NODE__PREV:
715                                    getPrev().clear();
716                                    return;
717                            case SnapshotPackage.JOIN_NODE__JOIN_INPUTS:
718                                    getJoinInputs().clear();
719                                    return;
720                    }
721                    super.eUnset(featureID);
722            }
723    
724            /**
725             * <!-- begin-user-doc -->
726             * <!-- end-user-doc -->
727             * @generated
728             */
729            @Override
730            public boolean eIsSet(int featureID) {
731                    switch (featureID) {
732                            case SnapshotPackage.JOIN_NODE__ID:
733                                    return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
734                            case SnapshotPackage.JOIN_NODE__NAME:
735                                    return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
736                            case SnapshotPackage.JOIN_NODE__DETAILS:
737                                    return DETAILS_EDEFAULT == null ? details != null : !DETAILS_EDEFAULT.equals(details);
738                            case SnapshotPackage.JOIN_NODE__SNAPSHOT:
739                                    return getSnapshot() != null;
740                            case SnapshotPackage.JOIN_NODE__COLLECTORS:
741                                    return collectors != null && !collectors.isEmpty();
742                            case SnapshotPackage.JOIN_NODE__OUTPUT_INDICES:
743                                    return outputIndices != null && !outputIndices.isEmpty();
744                            case SnapshotPackage.JOIN_NODE__HANDLER:
745                                    return handler != null;
746                            case SnapshotPackage.JOIN_NODE__NEXT:
747                                    return next != null;
748                            case SnapshotPackage.JOIN_NODE__PREDICATE:
749                                    return predicate != null;
750                            case SnapshotPackage.JOIN_NODE__PREV:
751                                    return prev != null && !prev.isEmpty();
752                            case SnapshotPackage.JOIN_NODE__JOIN_INPUTS:
753                                    return joinInputs != null && !joinInputs.isEmpty();
754                    }
755                    return super.eIsSet(featureID);
756            }
757    
758            /**
759             * <!-- begin-user-doc -->
760             * <!-- end-user-doc -->
761             * @generated
762             */
763            @Override
764            public String toString() {
765                    if (eIsProxy()) return super.toString();
766    
767                    StringBuffer result = new StringBuffer(super.toString());
768                    result.append(" (id: ");
769                    result.append(id);
770                    result.append(", name: ");
771                    result.append(name);
772                    result.append(", details: ");
773                    result.append(details);
774                    result.append(", outputIndices: ");
775                    result.append(outputIndices);
776                    result.append(')');
777                    return result.toString();
778            }
779    
780    } //JoinNodeImpl