Skip to content

Package: VTableDomainModelReferenceImpl

VTableDomainModelReferenceImpl

nameinstructionbranchcomplexitylinemethod
VTableDomainModelReferenceImpl()
M: 0 C: 8
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
basicSetDomainModelReference(VDomainModelReference, NotificationChain)
M: 4 C: 25
86%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 1 C: 10
91%
M: 0 C: 1
100%
eGet(int, boolean, boolean)
M: 0 C: 14
100%
M: 0 C: 3
100%
M: 0 C: 3
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
eInverseRemove(InternalEObject, int, NotificationChain)
M: 20 C: 0
0%
M: 3 C: 0
0%
M: 3 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
eIsSet(int)
M: 0 C: 24
100%
M: 0 C: 9
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
eSet(int, Object)
M: 10 C: 12
55%
M: 1 C: 2
67%
M: 1 C: 2
67%
M: 3 C: 5
63%
M: 0 C: 1
100%
eStaticClass()
M: 0 C: 2
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
eUnset(int)
M: 14 C: 0
0%
M: 3 C: 0
0%
M: 3 C: 0
0%
M: 7 C: 0
0%
M: 1 C: 0
0%
getColumnDomainModelReferences()
M: 0 C: 14
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
getDomainModelReference()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getEStructuralFeatureIterator()
M: 38 C: 0
0%
M: 6 C: 0
0%
M: 4 C: 0
0%
M: 12 C: 0
0%
M: 1 C: 0
0%
getIterator()
M: 61 C: 0
0%
M: 10 C: 0
0%
M: 6 C: 0
0%
M: 16 C: 0
0%
M: 1 C: 0
0%
init(EObject)
M: 0 C: 15
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
notifyChange(ModelChangeNotification)
M: 57 C: 0
0%
M: 10 C: 0
0%
M: 6 C: 0
0%
M: 15 C: 0
0%
M: 1 C: 0
0%
resolve(EObject, boolean)
M: 24 C: 104
81%
M: 2 C: 14
88%
M: 2 C: 7
78%
M: 4 C: 26
87%
M: 0 C: 1
100%
setDomainModelReference(VDomainModelReference)
M: 10 C: 42
81%
M: 2 C: 8
80%
M: 2 C: 4
67%
M: 3 C: 15
83%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (c) 2011-2013 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Eugen Neufeld - initial API and implementation
13: */
14: package org.eclipse.emf.ecp.view.spi.table.model.impl;
15:
16: import java.text.MessageFormat;
17: import java.util.ArrayList;
18: import java.util.Collection;
19: import java.util.Collections;
20: import java.util.Iterator;
21: import java.util.List;
22: import java.util.NoSuchElementException;
23: import java.util.Set;
24:
25: import org.eclipse.emf.common.notify.Notification;
26: import org.eclipse.emf.common.notify.NotificationChain;
27: import org.eclipse.emf.common.notify.impl.AdapterImpl;
28: import org.eclipse.emf.common.util.EList;
29: import org.eclipse.emf.ecore.EClass;
30: import org.eclipse.emf.ecore.EObject;
31: import org.eclipse.emf.ecore.EReference;
32: import org.eclipse.emf.ecore.EStructuralFeature;
33: import org.eclipse.emf.ecore.EStructuralFeature.Setting;
34: import org.eclipse.emf.ecore.InternalEObject;
35: import org.eclipse.emf.ecore.impl.ENotificationImpl;
36: import org.eclipse.emf.ecore.util.EObjectContainmentEList;
37: import org.eclipse.emf.ecore.util.EcoreUtil;
38: import org.eclipse.emf.ecore.util.InternalEList;
39: import org.eclipse.emf.ecp.view.internal.table.model.Activator;
40: import org.eclipse.emf.ecp.view.internal.table.model.Messages;
41: import org.eclipse.emf.ecp.view.spi.model.DomainModelReferenceChangeListener;
42: import org.eclipse.emf.ecp.view.spi.model.ModelChangeNotification;
43: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
44: import org.eclipse.emf.ecp.view.spi.model.impl.VFeaturePathDomainModelReferenceImpl;
45: import org.eclipse.emf.ecp.view.spi.table.model.VTableDomainModelReference;
46: import org.eclipse.emf.ecp.view.spi.table.model.VTablePackage;
47: import org.eclipse.emfforms.spi.common.report.AbstractReport;
48:
49: /**
50: * <!-- begin-user-doc -->
51: * An implementation of the model object '<em><b>Domain Model Reference</b></em>'.
52: * <!-- end-user-doc -->
53: * <p>
54: * The following features are implemented:
55: * </p>
56: * <ul>
57: * <li>{@link org.eclipse.emf.ecp.view.spi.table.model.impl.VTableDomainModelReferenceImpl#getColumnDomainModelReferences
58: * <em>Column Domain Model References</em>}</li>
59: * <li>{@link org.eclipse.emf.ecp.view.spi.table.model.impl.VTableDomainModelReferenceImpl#getDomainModelReference
60: * <em>Domain Model Reference</em>}</li>
61: * </ul>
62: *
63: * @generated
64: */
65: @SuppressWarnings("deprecation")
66: public class VTableDomainModelReferenceImpl extends VFeaturePathDomainModelReferenceImpl implements
67:         VTableDomainModelReference {
68:         /**
69:          * The cached value of the '{@link #getColumnDomainModelReferences() <em>Column Domain Model References</em>}'
70:          * containment reference list.
71:          * <!-- begin-user-doc -->
72:          * <!-- end-user-doc -->
73:          *
74:          * @see #getColumnDomainModelReferences()
75:          * @generated
76:          * @ordered
77:          */
78:         protected EList<VDomainModelReference> columnDomainModelReferences;
79:
80:         /**
81:          * The cached value of the '{@link #getDomainModelReference() <em>Domain Model Reference</em>}' containment
82:          * reference.
83:          * <!-- begin-user-doc -->
84:          *
85:          * @since 1.5
86:          * <!-- end-user-doc -->
87:          * @see #getDomainModelReference()
88:          * @generated
89:          * @ordered
90:          */
91:         protected VDomainModelReference domainModelReference;
92:
93:         private final List<VDomainModelReference> resolvedColumns = new ArrayList<VDomainModelReference>();
94:
95:         /**
96:          * <!-- begin-user-doc -->
97:          * <!-- end-user-doc -->
98:          *
99:          * @generated
100:          */
101:         protected VTableDomainModelReferenceImpl() {
102:                 super();
103:         }
104:
105:         /**
106:          * <!-- begin-user-doc -->
107:          * <!-- end-user-doc -->
108:          *
109:          * @generated
110:          */
111:         @Override
112:         protected EClass eStaticClass() {
113:                 return VTablePackage.Literals.TABLE_DOMAIN_MODEL_REFERENCE;
114:         }
115:
116:         /**
117:          * <!-- begin-user-doc -->
118:          * <!-- end-user-doc -->
119:          *
120:          * @generated
121:          */
122:         @Override
123:         public EList<VDomainModelReference> getColumnDomainModelReferences() {
124:•                if (columnDomainModelReferences == null) {
125:                         columnDomainModelReferences = new EObjectContainmentEList<VDomainModelReference>(
126:                                 VDomainModelReference.class, this,
127:                                 VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__COLUMN_DOMAIN_MODEL_REFERENCES);
128:                 }
129:                 return columnDomainModelReferences;
130:         }
131:
132:         /**
133:          * <!-- begin-user-doc -->
134:          *
135:          * @since 1.5
136:          * <!-- end-user-doc -->
137:          * @generated
138:          */
139:         @Override
140:         public VDomainModelReference getDomainModelReference() {
141:                 return domainModelReference;
142:         }
143:
144:         /**
145:          * <!-- begin-user-doc -->
146:          *
147:          * @since 1.5
148:          * <!-- end-user-doc -->
149:          * @generated
150:          */
151:         public NotificationChain basicSetDomainModelReference(VDomainModelReference newDomainModelReference,
152:                 NotificationChain msgs) {
153:                 final VDomainModelReference oldDomainModelReference = domainModelReference;
154:                 domainModelReference = newDomainModelReference;
155:•                if (eNotificationRequired()) {
156:                         final ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
157:                                 VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE, oldDomainModelReference,
158:                                 newDomainModelReference);
159:•                        if (msgs == null) {
160:                                 msgs = notification;
161:                         } else {
162:                                 msgs.add(notification);
163:                         }
164:                 }
165:                 return msgs;
166:         }
167:
168:         /**
169:          * <!-- begin-user-doc -->
170:          *
171:          * @since 1.5
172:          * <!-- end-user-doc -->
173:          * @generated
174:          */
175:         @Override
176:         public void setDomainModelReference(VDomainModelReference newDomainModelReference) {
177:•                if (newDomainModelReference != domainModelReference) {
178:                         NotificationChain msgs = null;
179:•                        if (domainModelReference != null) {
180:                                 msgs = ((InternalEObject) domainModelReference).eInverseRemove(this,
181:                                         EOPPOSITE_FEATURE_BASE - VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE, null,
182:                                         msgs);
183:                         }
184:•                        if (newDomainModelReference != null) {
185:                                 msgs = ((InternalEObject) newDomainModelReference).eInverseAdd(this,
186:                                         EOPPOSITE_FEATURE_BASE - VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE, null,
187:                                         msgs);
188:                         }
189:                         msgs = basicSetDomainModelReference(newDomainModelReference, msgs);
190:•                        if (msgs != null) {
191:                                 msgs.dispatch();
192:                         }
193:•                } else if (eNotificationRequired()) {
194:                         eNotify(new ENotificationImpl(this, Notification.SET,
195:                                 VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE, newDomainModelReference,
196:                                 newDomainModelReference));
197:                 }
198:         }
199:
200:         /**
201:          * <!-- begin-user-doc -->
202:          * <!-- end-user-doc -->
203:          *
204:          * @generated
205:          */
206:         @Override
207:         public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
208:•                switch (featureID) {
209:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__COLUMN_DOMAIN_MODEL_REFERENCES:
210:                         return ((InternalEList<?>) getColumnDomainModelReferences()).basicRemove(otherEnd, msgs);
211:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE:
212:                         return basicSetDomainModelReference(null, msgs);
213:                 }
214:                 return super.eInverseRemove(otherEnd, featureID, msgs);
215:         }
216:
217:         /**
218:          * <!-- begin-user-doc -->
219:          * <!-- end-user-doc -->
220:          *
221:          * @generated
222:          */
223:         @Override
224:         public Object eGet(int featureID, boolean resolve, boolean coreType) {
225:•                switch (featureID) {
226:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__COLUMN_DOMAIN_MODEL_REFERENCES:
227:                         return getColumnDomainModelReferences();
228:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE:
229:                         return getDomainModelReference();
230:                 }
231:                 return super.eGet(featureID, resolve, coreType);
232:         }
233:
234:         /**
235:          * <!-- begin-user-doc -->
236:          * <!-- end-user-doc -->
237:          *
238:          * @generated
239:          */
240:         @SuppressWarnings("unchecked")
241:         @Override
242:         public void eSet(int featureID, Object newValue) {
243:•                switch (featureID) {
244:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__COLUMN_DOMAIN_MODEL_REFERENCES:
245:                         getColumnDomainModelReferences().clear();
246:                         getColumnDomainModelReferences().addAll((Collection<? extends VDomainModelReference>) newValue);
247:                         return;
248:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE:
249:                         setDomainModelReference((VDomainModelReference) newValue);
250:                         return;
251:                 }
252:                 super.eSet(featureID, newValue);
253:         }
254:
255:         /**
256:          * <!-- begin-user-doc -->
257:          * <!-- end-user-doc -->
258:          *
259:          * @generated
260:          */
261:         @Override
262:         public void eUnset(int featureID) {
263:•                switch (featureID) {
264:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__COLUMN_DOMAIN_MODEL_REFERENCES:
265:                         getColumnDomainModelReferences().clear();
266:                         return;
267:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE:
268:                         setDomainModelReference((VDomainModelReference) null);
269:                         return;
270:                 }
271:                 super.eUnset(featureID);
272:         }
273:
274:         /**
275:          * <!-- begin-user-doc -->
276:          * <!-- end-user-doc -->
277:          *
278:          * @generated
279:          */
280:         @Override
281:         public boolean eIsSet(int featureID) {
282:•                switch (featureID) {
283:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__COLUMN_DOMAIN_MODEL_REFERENCES:
284:•                        return columnDomainModelReferences != null && !columnDomainModelReferences.isEmpty();
285:                 case VTablePackage.TABLE_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCE:
286:•                        return domainModelReference != null;
287:                 }
288:                 return super.eIsSet(featureID);
289:         }
290:
291:         /**
292:          * {@inheritDoc}
293:          *
294:          * @see org.eclipse.emf.ecp.view.spi.model.impl.VFeaturePathDomainModelReferenceImpl#init(org.eclipse.emf.ecore.EObject)
295:          */
296:         @Override
297:         public boolean init(final EObject object) {
298:                 final boolean init = super.init(object);
299:                 eAdapters().add(new AdapterImpl() {
300:
301:                         /**
302:                          * {@inheritDoc}
303:                          *
304:                          * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
305:                          */
306:                         @Override
307:                         public void notifyChanged(Notification msg) {
308:                                 super.notifyChanged(msg);
309:                                 if (msg.getFeature() == VTablePackage.eINSTANCE
310:                                         .getTableDomainModelReference_ColumnDomainModelReferences()
311:                                         && msg.getEventType() == Notification.ADD) {
312:                                         resolve(object, false);
313:                                 }
314:                         }
315:
316:                 });
317:                 return init;
318:         }
319:
320:         @Override
321:         public Iterator<Setting> getIterator() {
322:•                if (lastResolvedEObject == null || leftReferences == null) {
323:                         final Set<Setting> settings = Collections.emptySet();
324:                         return settings.iterator();
325:                 }
326:                 EStructuralFeature feature;
327:•                if (getDomainModelReference() == null) {
328:                         feature = getDomainModelEFeature();
329:                 } else {
330:                         feature = getDomainModelReference().getIterator().next().getEStructuralFeature();
331:                 }
332:
333:                 final EStructuralFeature listFeature = feature;
334:
335:•                if (!EReference.class.isInstance(listFeature)) {
336:                         final Set<Setting> settings = Collections.emptySet();
337:                         return settings.iterator();
338:                 }
339:
340:•                if (!lastResolvedEObject.eClass().getEAllStructuralFeatures().contains(listFeature)) {
341:                         final List<Setting> settings = Collections.emptyList();
342:                         return settings.iterator();
343:                 }
344:                 final int numElems = 1 + resolvedColumns.size();
345:                 return new Iterator<EStructuralFeature.Setting>() {
346:                         int returnedElements = 0;
347:
348:                         @Override
349:                         public boolean hasNext() {
350:
351:                                 return numElems > returnedElements;
352:
353:                         }
354:
355:                         @Override
356:                         public Setting next() {
357:                                 Setting result = null;
358:                                 if (returnedElements == 0) {
359:                                         result = ((InternalEObject) lastResolvedEObject).eSetting(listFeature);
360:                                 } else {
361:                                         final Iterator<Setting> iterator = resolvedColumns.get(returnedElements - 1).getIterator();
362:                                         if (iterator.hasNext()) {
363:                                                 result = iterator.next();
364:                                         } else {
365:                                                 throw new NoSuchElementException(String.format(
366:                                                         "The iterator has %1$s but %2$s already has been returned!", numElems, returnedElements)); //$NON-NLS-1$
367:                                         }
368:                                 }
369:                                 returnedElements++;
370:                                 return result;
371:                         }
372:
373:                         @Override
374:                         public void remove() {
375:                                 // do nothing
376:                         }
377:
378:                 };
379:         }
380:
381:         /**
382:          * {@inheritDoc}
383:          *
384:          * @see org.eclipse.emf.ecp.view.spi.model.impl.VFeaturePathDomainModelReferenceImpl#getEStructuralFeatureIterator()
385:          */
386:         @Override
387:         public Iterator<EStructuralFeature> getEStructuralFeatureIterator() {
388:                 EStructuralFeature feature;
389:•                if (getDomainModelReference() == null) {
390:                         feature = getDomainModelEFeature();
391:                 } else {
392:                         final Iterator<EStructuralFeature> iterator = getDomainModelReference().getEStructuralFeatureIterator();
393:•                        if (!iterator.hasNext()) {
394:                                 return Collections.<EStructuralFeature> emptyList().iterator();
395:                         }
396:                         feature = iterator.next();
397:                 }
398:                 final EStructuralFeature listFeature = feature;
399:
400:•                if (!EReference.class.isInstance(feature)) {
401:                         final List<EStructuralFeature> features = Collections.emptyList();
402:                         return features.iterator();
403:                 }
404:                 return new Iterator<EStructuralFeature>() {
405:                         private int counter = 0;
406:
407:                         @Override
408:                         public boolean hasNext() {
409:                                 return getColumnDomainModelReferences().size() + 1 > counter;
410:
411:                         }
412:
413:                         @Override
414:                         public EStructuralFeature next() {
415:                                 EStructuralFeature result = null;
416:                                 if (0 == counter) {
417:                                         result = listFeature;
418:                                 } else {
419:                                         result = getColumnDomainModelReferences().get(counter - 1).getEStructuralFeatureIterator().next();
420:
421:                                 }
422:                                 counter++;
423:                                 return result;
424:                         }
425:
426:                         @Override
427:                         public void remove() {
428:                         }
429:                 };
430:
431:         }
432:
433:         @Override
434:         protected boolean resolve(EObject domainModel, boolean createMissingChildren) {
435:                 boolean result = false;
436:                 EStructuralFeature feature = null;
437:•                if (getDomainModelReference() == null) {
438:                         result = super.resolve(domainModel, createMissingChildren);
439:                         feature = getDomainModelEFeature();
440:                 } else {
441:                         result = getDomainModelReference().init(domainModel);
442:•                        if (getDomainModelReference().getIterator().hasNext()) {
443:                                 final Setting dmrSetting = getDomainModelReference().getIterator().next();
444:•                                if (dmrSetting != null) {
445:                                         lastResolvedEObject = dmrSetting.getEObject();
446:                                         feature = dmrSetting.getEStructuralFeature();
447:                                         leftReferences = new ArrayList<EReference>();
448:                                 }
449:                         }
450:                 }
451:                 resolvedColumns.clear();
452:•                if (result == false) {
453:                         return result;
454:                 }
455:
456:•                if (lastResolvedEObject == null) {
457:                         return result;
458:                 }
459:                 @SuppressWarnings("unchecked")
460:                 final List<EObject> eObjects = (List<EObject>) lastResolvedEObject.eGet(feature);
461:•                if (eObjects == null) {
462:                         Activator.getDefault().getReportService().report(
463:                                 new AbstractReport(MessageFormat.format(Messages.VTableDomainModelReferenceImpl_SingleValuedFeature,
464:                                         feature.getName(), lastResolvedEObject.getClass().getName())));
465:                         return false;
466:                 }
467:•                for (final EObject eObject : eObjects) {
468:•                        for (final VDomainModelReference columnReference : getColumnDomainModelReferences()) {
469:                                 final VDomainModelReference copy = EcoreUtil.copy(columnReference);
470:                                 copy.init(eObject);
471:                                 resolvedColumns.add(copy);
472:                         }
473:                 }
474:                 return result;
475:         }
476:
477:         @Override
478:         public void notifyChange(ModelChangeNotification notification) {
479:•                if (getDomainModelEFeature() != null) {
480:                         super.notifyChange(notification);
481:                         return;
482:                 }
483:
484:•                if (notification.getRawNotification().isTouch()) {
485:                         return;
486:                 }
487:                 final Iterator<EStructuralFeature> structuralFeatureIterator = getDomainModelReference()
488:                         .getEStructuralFeatureIterator();
489:•                while (structuralFeatureIterator.hasNext()) {
490:                         final EStructuralFeature feature = structuralFeatureIterator.next();
491:•                        if (feature.equals(notification.getStructuralFeature())) {
492:                                 cleanDiagnostic(feature.equals(notification.getStructuralFeature()), notification);
493:                                 resolve(rootEObject, false);
494:•                                for (final DomainModelReferenceChangeListener listener : getChangeListener()) {
495:                                         listener.notifyChange();
496:                                 }
497:                         }
498:                 }
499:         }
500: } // VTableDomainModelReferenceImpl