001    /**
002     * <copyright>
003     * </copyright>
004     *
005     * $Id$
006     */
007    package com.hammurapi.review.impl;
008    
009    import org.eclipse.emf.common.notify.Notification;
010    import org.eclipse.emf.common.notify.NotificationChain;
011    import org.eclipse.emf.ecore.EClass;
012    import org.eclipse.emf.ecore.InternalEObject;
013    import org.eclipse.emf.ecore.impl.ENotificationImpl;
014    import org.eclipse.emf.ecore.impl.EObjectImpl;
015    import org.eclipse.emf.ecore.util.EcoreUtil;
016    
017    import com.hammurapi.review.Inspector;
018    import com.hammurapi.review.LanguageElement;
019    import com.hammurapi.review.Observation;
020    import com.hammurapi.review.Report;
021    import com.hammurapi.review.ReviewPackage;
022    
023    /**
024     * <!-- begin-user-doc -->
025     * An implementation of the model object '<em><b>Observation</b></em>'.
026     * <!-- end-user-doc -->
027     * <p>
028     * The following features are implemented:
029     * <ul>
030     *   <li>{@link com.hammurapi.review.impl.ObservationImpl#getSource <em>Source</em>}</li>
031     *   <li>{@link com.hammurapi.review.impl.ObservationImpl#getReport <em>Report</em>}</li>
032     *   <li>{@link com.hammurapi.review.impl.ObservationImpl#getReportedBy <em>Reported By</em>}</li>
033     * </ul>
034     * </p>
035     *
036     * @generated
037     */
038    public class ObservationImpl extends EObjectImpl implements Observation {
039            /**
040             * The cached value of the '{@link #getReport() <em>Report</em>}' reference.
041             * <!-- begin-user-doc -->
042             * <!-- end-user-doc -->
043             * @see #getReport()
044             * @generated
045             * @ordered
046             */
047            protected Report report;
048    
049            /**
050             * The cached value of the '{@link #getReportedBy() <em>Reported By</em>}' reference.
051             * <!-- begin-user-doc -->
052             * <!-- end-user-doc -->
053             * @see #getReportedBy()
054             * @generated
055             * @ordered
056             */
057            protected Inspector reportedBy;
058    
059            /**
060             * <!-- begin-user-doc -->
061             * <!-- end-user-doc -->
062             * @generated
063             */
064            protected ObservationImpl() {
065                    super();
066            }
067    
068            /**
069             * <!-- begin-user-doc -->
070             * <!-- end-user-doc -->
071             * @generated
072             */
073            @Override
074            protected EClass eStaticClass() {
075                    return ReviewPackage.Literals.OBSERVATION;
076            }
077    
078            /**
079             * <!-- begin-user-doc -->
080             * <!-- end-user-doc -->
081             * @generated
082             */
083            public LanguageElement getSource() {
084                    if (eContainerFeatureID() != ReviewPackage.OBSERVATION__SOURCE) return null;
085                    return (LanguageElement)eContainer();
086            }
087    
088            /**
089             * <!-- begin-user-doc -->
090             * <!-- end-user-doc -->
091             * @generated
092             */
093            public NotificationChain basicSetSource(LanguageElement newSource, NotificationChain msgs) {
094                    msgs = eBasicSetContainer((InternalEObject)newSource, ReviewPackage.OBSERVATION__SOURCE, msgs);
095                    return msgs;
096            }
097    
098            /**
099             * <!-- begin-user-doc -->
100             * <!-- end-user-doc -->
101             * @generated
102             */
103            public void setSource(LanguageElement newSource) {
104                    if (newSource != eInternalContainer() || (eContainerFeatureID() != ReviewPackage.OBSERVATION__SOURCE && newSource != null)) {
105                            if (EcoreUtil.isAncestor(this, newSource))
106                                    throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
107                            NotificationChain msgs = null;
108                            if (eInternalContainer() != null)
109                                    msgs = eBasicRemoveFromContainer(msgs);
110                            if (newSource != null)
111                                    msgs = ((InternalEObject)newSource).eInverseAdd(this, ReviewPackage.LANGUAGE_ELEMENT__OBSERVATIONS, LanguageElement.class, msgs);
112                            msgs = basicSetSource(newSource, msgs);
113                            if (msgs != null) msgs.dispatch();
114                    }
115                    else if (eNotificationRequired())
116                            eNotify(new ENotificationImpl(this, Notification.SET, ReviewPackage.OBSERVATION__SOURCE, newSource, newSource));
117            }
118    
119            /**
120             * <!-- begin-user-doc -->
121             * <!-- end-user-doc -->
122             * @generated
123             */
124            public Report getReport() {
125                    if (report != null && report.eIsProxy()) {
126                            InternalEObject oldReport = (InternalEObject)report;
127                            report = (Report)eResolveProxy(oldReport);
128                            if (report != oldReport) {
129                                    if (eNotificationRequired())
130                                            eNotify(new ENotificationImpl(this, Notification.RESOLVE, ReviewPackage.OBSERVATION__REPORT, oldReport, report));
131                            }
132                    }
133                    return report;
134            }
135    
136            /**
137             * <!-- begin-user-doc -->
138             * <!-- end-user-doc -->
139             * @generated
140             */
141            public Report basicGetReport() {
142                    return report;
143            }
144    
145            /**
146             * <!-- begin-user-doc -->
147             * <!-- end-user-doc -->
148             * @generated
149             */
150            public NotificationChain basicSetReport(Report newReport, NotificationChain msgs) {
151                    Report oldReport = report;
152                    report = newReport;
153                    if (eNotificationRequired()) {
154                            ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ReviewPackage.OBSERVATION__REPORT, oldReport, newReport);
155                            if (msgs == null) msgs = notification; else msgs.add(notification);
156                    }
157                    return msgs;
158            }
159    
160            /**
161             * <!-- begin-user-doc -->
162             * <!-- end-user-doc -->
163             * @generated
164             */
165            public void setReport(Report newReport) {
166                    if (newReport != report) {
167                            NotificationChain msgs = null;
168                            if (report != null)
169                                    msgs = ((InternalEObject)report).eInverseRemove(this, ReviewPackage.REPORT__OBSERVATIONS, Report.class, msgs);
170                            if (newReport != null)
171                                    msgs = ((InternalEObject)newReport).eInverseAdd(this, ReviewPackage.REPORT__OBSERVATIONS, Report.class, msgs);
172                            msgs = basicSetReport(newReport, msgs);
173                            if (msgs != null) msgs.dispatch();
174                    }
175                    else if (eNotificationRequired())
176                            eNotify(new ENotificationImpl(this, Notification.SET, ReviewPackage.OBSERVATION__REPORT, newReport, newReport));
177            }
178    
179            /**
180             * <!-- begin-user-doc -->
181             * <!-- end-user-doc -->
182             * @generated
183             */
184            public Inspector getReportedBy() {
185                    if (reportedBy != null && reportedBy.eIsProxy()) {
186                            InternalEObject oldReportedBy = (InternalEObject)reportedBy;
187                            reportedBy = (Inspector)eResolveProxy(oldReportedBy);
188                            if (reportedBy != oldReportedBy) {
189                                    if (eNotificationRequired())
190                                            eNotify(new ENotificationImpl(this, Notification.RESOLVE, ReviewPackage.OBSERVATION__REPORTED_BY, oldReportedBy, reportedBy));
191                            }
192                    }
193                    return reportedBy;
194            }
195    
196            /**
197             * <!-- begin-user-doc -->
198             * <!-- end-user-doc -->
199             * @generated
200             */
201            public Inspector basicGetReportedBy() {
202                    return reportedBy;
203            }
204    
205            /**
206             * <!-- begin-user-doc -->
207             * <!-- end-user-doc -->
208             * @generated
209             */
210            public void setReportedBy(Inspector newReportedBy) {
211                    Inspector oldReportedBy = reportedBy;
212                    reportedBy = newReportedBy;
213                    if (eNotificationRequired())
214                            eNotify(new ENotificationImpl(this, Notification.SET, ReviewPackage.OBSERVATION__REPORTED_BY, oldReportedBy, reportedBy));
215            }
216    
217            /**
218             * <!-- begin-user-doc -->
219             * <!-- end-user-doc -->
220             * @generated
221             */
222            @Override
223            public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
224                    switch (featureID) {
225                            case ReviewPackage.OBSERVATION__SOURCE:
226                                    if (eInternalContainer() != null)
227                                            msgs = eBasicRemoveFromContainer(msgs);
228                                    return basicSetSource((LanguageElement)otherEnd, msgs);
229                            case ReviewPackage.OBSERVATION__REPORT:
230                                    if (report != null)
231                                            msgs = ((InternalEObject)report).eInverseRemove(this, ReviewPackage.REPORT__OBSERVATIONS, Report.class, msgs);
232                                    return basicSetReport((Report)otherEnd, msgs);
233                    }
234                    return super.eInverseAdd(otherEnd, featureID, msgs);
235            }
236    
237            /**
238             * <!-- begin-user-doc -->
239             * <!-- end-user-doc -->
240             * @generated
241             */
242            @Override
243            public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
244                    switch (featureID) {
245                            case ReviewPackage.OBSERVATION__SOURCE:
246                                    return basicSetSource(null, msgs);
247                            case ReviewPackage.OBSERVATION__REPORT:
248                                    return basicSetReport(null, msgs);
249                    }
250                    return super.eInverseRemove(otherEnd, featureID, msgs);
251            }
252    
253            /**
254             * <!-- begin-user-doc -->
255             * <!-- end-user-doc -->
256             * @generated
257             */
258            @Override
259            public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
260                    switch (eContainerFeatureID()) {
261                            case ReviewPackage.OBSERVATION__SOURCE:
262                                    return eInternalContainer().eInverseRemove(this, ReviewPackage.LANGUAGE_ELEMENT__OBSERVATIONS, LanguageElement.class, msgs);
263                    }
264                    return super.eBasicRemoveFromContainerFeature(msgs);
265            }
266    
267            /**
268             * <!-- begin-user-doc -->
269             * <!-- end-user-doc -->
270             * @generated
271             */
272            @Override
273            public Object eGet(int featureID, boolean resolve, boolean coreType) {
274                    switch (featureID) {
275                            case ReviewPackage.OBSERVATION__SOURCE:
276                                    return getSource();
277                            case ReviewPackage.OBSERVATION__REPORT:
278                                    if (resolve) return getReport();
279                                    return basicGetReport();
280                            case ReviewPackage.OBSERVATION__REPORTED_BY:
281                                    if (resolve) return getReportedBy();
282                                    return basicGetReportedBy();
283                    }
284                    return super.eGet(featureID, resolve, coreType);
285            }
286    
287            /**
288             * <!-- begin-user-doc -->
289             * <!-- end-user-doc -->
290             * @generated
291             */
292            @Override
293            public void eSet(int featureID, Object newValue) {
294                    switch (featureID) {
295                            case ReviewPackage.OBSERVATION__SOURCE:
296                                    setSource((LanguageElement)newValue);
297                                    return;
298                            case ReviewPackage.OBSERVATION__REPORT:
299                                    setReport((Report)newValue);
300                                    return;
301                            case ReviewPackage.OBSERVATION__REPORTED_BY:
302                                    setReportedBy((Inspector)newValue);
303                                    return;
304                    }
305                    super.eSet(featureID, newValue);
306            }
307    
308            /**
309             * <!-- begin-user-doc -->
310             * <!-- end-user-doc -->
311             * @generated
312             */
313            @Override
314            public void eUnset(int featureID) {
315                    switch (featureID) {
316                            case ReviewPackage.OBSERVATION__SOURCE:
317                                    setSource((LanguageElement)null);
318                                    return;
319                            case ReviewPackage.OBSERVATION__REPORT:
320                                    setReport((Report)null);
321                                    return;
322                            case ReviewPackage.OBSERVATION__REPORTED_BY:
323                                    setReportedBy((Inspector)null);
324                                    return;
325                    }
326                    super.eUnset(featureID);
327            }
328    
329            /**
330             * <!-- begin-user-doc -->
331             * <!-- end-user-doc -->
332             * @generated
333             */
334            @Override
335            public boolean eIsSet(int featureID) {
336                    switch (featureID) {
337                            case ReviewPackage.OBSERVATION__SOURCE:
338                                    return getSource() != null;
339                            case ReviewPackage.OBSERVATION__REPORT:
340                                    return report != null;
341                            case ReviewPackage.OBSERVATION__REPORTED_BY:
342                                    return reportedBy != null;
343                    }
344                    return super.eIsSet(featureID);
345            }
346    
347    } //ObservationImpl