Skip to content

Package: VCustomDomainModelReferenceImpl

VCustomDomainModelReferenceImpl

nameinstructionbranchcomplexitylinemethod
VCustomDomainModelReferenceImpl()
M: 0 C: 12
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
eGet(int, boolean, boolean)
M: 6 C: 15
71%
M: 1 C: 4
80%
M: 1 C: 4
80%
M: 1 C: 5
83%
M: 0 C: 1
100%
eInverseRemove(InternalEObject, int, NotificationChain)
M: 15 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
eIsSet(int)
M: 18 C: 38
68%
M: 7 C: 14
67%
M: 5 C: 8
62%
M: 0 C: 6
100%
M: 0 C: 1
100%
eSet(int, Object)
M: 33 C: 0
0%
M: 5 C: 0
0%
M: 5 C: 0
0%
M: 12 C: 0
0%
M: 1 C: 0
0%
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: 22 C: 0
0%
M: 5 C: 0
0%
M: 5 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
getBundleName()
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%
getClassName()
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%
getDomainModelReferences()
M: 0 C: 14
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
getEStructuralFeatureIterator()
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getFullPathIterator()
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getIterator()
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
init(EObject)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
isControlChecked()
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%
loadObject(String, String)
M: 26 C: 22
46%
M: 2 C: 2
50%
M: 2 C: 1
33%
M: 8 C: 7
47%
M: 0 C: 1
100%
notifyChange(ModelChangeNotification)
M: 16 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
resolve(EObject)
M: 2 C: 66
97%
M: 2 C: 8
80%
M: 2 C: 4
67%
M: 1 C: 15
94%
M: 0 C: 1
100%
setBundleName(String)
M: 0 C: 21
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
setClassName(String)
M: 11 C: 10
48%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 2 C: 4
67%
M: 0 C: 1
100%
setControlChecked(boolean)
M: 0 C: 21
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
static {...}
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
toString()
M: 46 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2014 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.custom.model.impl;
15:
16: import java.util.Collection;
17: import java.util.Iterator;
18: import java.util.LinkedHashSet;
19: import java.util.Set;
20: import java.util.Stack;
21:
22: import org.eclipse.core.runtime.Platform;
23: import org.eclipse.emf.common.notify.Notification;
24: import org.eclipse.emf.common.notify.NotificationChain;
25: import org.eclipse.emf.common.util.EList;
26: import org.eclipse.emf.ecore.EClass;
27: import org.eclipse.emf.ecore.EObject;
28: import org.eclipse.emf.ecore.EStructuralFeature;
29: import org.eclipse.emf.ecore.EStructuralFeature.Setting;
30: import org.eclipse.emf.ecore.InternalEObject;
31: import org.eclipse.emf.ecore.impl.ENotificationImpl;
32: import org.eclipse.emf.ecore.util.EObjectContainmentEList;
33: import org.eclipse.emf.ecore.util.InternalEList;
34: import org.eclipse.emf.ecp.view.spi.custom.model.ECPHardcodedReferences;
35: import org.eclipse.emf.ecp.view.spi.custom.model.VCustomDomainModelReference;
36: import org.eclipse.emf.ecp.view.spi.custom.model.VCustomPackage;
37: import org.eclipse.emf.ecp.view.spi.model.ModelChangeNotification;
38: import org.eclipse.emf.ecp.view.spi.model.SettingPath;
39: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
40: import org.eclipse.emf.ecp.view.spi.model.impl.VDomainModelReferenceImpl;
41: import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
42: import org.osgi.framework.Bundle;
43:
44: /**
45: * <!-- begin-user-doc -->
46: * An implementation of the model object '<em><b>Domain Model Reference</b></em>'.
47: *
48: * @since 1.3
49: * <!-- end-user-doc -->
50: * <p>
51: * The following features are implemented:
52: * </p>
53: * <ul>
54: * <li>{@link org.eclipse.emf.ecp.view.spi.custom.model.impl.VCustomDomainModelReferenceImpl#getDomainModelReferences
55: * <em>Domain Model References</em>}</li>
56: * <li>{@link org.eclipse.emf.ecp.view.spi.custom.model.impl.VCustomDomainModelReferenceImpl#getBundleName
57: * <em>Bundle Name</em>}</li>
58: * <li>{@link org.eclipse.emf.ecp.view.spi.custom.model.impl.VCustomDomainModelReferenceImpl#getClassName
59: * <em>Class Name</em>}</li>
60: * <li>{@link org.eclipse.emf.ecp.view.spi.custom.model.impl.VCustomDomainModelReferenceImpl#isControlChecked
61: * <em>Control Checked</em>}</li>
62: * </ul>
63: *
64: * @generated
65: */
66: public class VCustomDomainModelReferenceImpl extends VDomainModelReferenceImpl implements VCustomDomainModelReference {
67:         /**
68:          * The cached value of the '{@link #getDomainModelReferences() <em>Domain Model References</em>}' containment
69:          * reference list.
70:          * <!-- begin-user-doc -->
71:          * <!-- end-user-doc -->
72:          *
73:          * @see #getDomainModelReferences()
74:          * @generated
75:          * @ordered
76:          */
77:         protected EList<VDomainModelReference> domainModelReferences;
78:
79:         /**
80:          * The default value of the '{@link #getBundleName() <em>Bundle Name</em>}' attribute.
81:          * <!-- begin-user-doc -->
82:          * <!-- end-user-doc -->
83:          *
84:          * @see #getBundleName()
85:          * @generated
86:          * @ordered
87:          */
88:         protected static final String BUNDLE_NAME_EDEFAULT = null;
89:
90:         /**
91:          * The cached value of the '{@link #getBundleName() <em>Bundle Name</em>}' attribute.
92:          * <!-- begin-user-doc -->
93:          * <!-- end-user-doc -->
94:          *
95:          * @see #getBundleName()
96:          * @generated
97:          * @ordered
98:          */
99:         protected String bundleName = BUNDLE_NAME_EDEFAULT;
100:
101:         /**
102:          * The default value of the '{@link #getClassName() <em>Class Name</em>}' attribute.
103:          * <!-- begin-user-doc -->
104:          * <!-- end-user-doc -->
105:          *
106:          * @see #getClassName()
107:          * @generated
108:          * @ordered
109:          */
110:         protected static final String CLASS_NAME_EDEFAULT = null;
111:
112:         /**
113:          * The cached value of the '{@link #getClassName() <em>Class Name</em>}' attribute.
114:          * <!-- begin-user-doc -->
115:          * <!-- end-user-doc -->
116:          *
117:          * @see #getClassName()
118:          * @generated
119:          * @ordered
120:          */
121:         protected String className = CLASS_NAME_EDEFAULT;
122:
123:         /**
124:          * The default value of the '{@link #isControlChecked() <em>Control Checked</em>}' attribute.
125:          * <!-- begin-user-doc -->
126:          * <!-- end-user-doc -->
127:          *
128:          * @see #isControlChecked()
129:          * @generated
130:          * @ordered
131:          */
132:         protected static final boolean CONTROL_CHECKED_EDEFAULT = false;
133:
134:         /**
135:          * The cached value of the '{@link #isControlChecked() <em>Control Checked</em>}' attribute.
136:          * <!-- begin-user-doc -->
137:          * <!-- end-user-doc -->
138:          *
139:          * @see #isControlChecked()
140:          * @generated
141:          * @ordered
142:          */
143:         protected boolean controlChecked = CONTROL_CHECKED_EDEFAULT;
144:
145:         /**
146:          * <!-- begin-user-doc -->
147:          * <!-- end-user-doc -->
148:          *
149:          * @generated
150:          */
151:         protected VCustomDomainModelReferenceImpl() {
152:                 super();
153:         }
154:
155:         /**
156:          * <!-- begin-user-doc -->
157:          * <!-- end-user-doc -->
158:          *
159:          * @generated
160:          */
161:         @Override
162:         protected EClass eStaticClass() {
163:                 return VCustomPackage.Literals.CUSTOM_DOMAIN_MODEL_REFERENCE;
164:         }
165:
166:         /**
167:          * <!-- begin-user-doc -->
168:          * <!-- end-user-doc -->
169:          *
170:          * @generated
171:          */
172:         @Override
173:         public EList<VDomainModelReference> getDomainModelReferences() {
174:•                if (domainModelReferences == null) {
175:                         domainModelReferences = new EObjectContainmentEList<VDomainModelReference>(VDomainModelReference.class,
176:                                 this, VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCES);
177:                 }
178:                 return domainModelReferences;
179:         }
180:
181:         /**
182:          * <!-- begin-user-doc -->
183:          * <!-- end-user-doc -->
184:          *
185:          * @generated
186:          */
187:         @Override
188:         public String getBundleName() {
189:                 return bundleName;
190:         }
191:
192:         /**
193:          * <!-- begin-user-doc -->
194:          * <!-- end-user-doc -->
195:          *
196:          * @generated
197:          */
198:         @Override
199:         public void setBundleName(String newBundleName) {
200:                 final String oldBundleName = bundleName;
201:                 bundleName = newBundleName;
202:•                if (eNotificationRequired()) {
203:                         eNotify(new ENotificationImpl(this, Notification.SET,
204:                                 VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__BUNDLE_NAME, oldBundleName, bundleName));
205:                 }
206:         }
207:
208:         /**
209:          * <!-- begin-user-doc -->
210:          * <!-- end-user-doc -->
211:          *
212:          * @generated
213:          */
214:         @Override
215:         public String getClassName() {
216:                 return className;
217:         }
218:
219:         /**
220:          * <!-- begin-user-doc -->
221:          * <!-- end-user-doc -->
222:          *
223:          * @generated
224:          */
225:         @Override
226:         public void setClassName(String newClassName) {
227:                 final String oldClassName = className;
228:                 className = newClassName;
229:•                if (eNotificationRequired()) {
230:                         eNotify(new ENotificationImpl(this, Notification.SET,
231:                                 VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CLASS_NAME, oldClassName, className));
232:                 }
233:         }
234:
235:         /**
236:          * <!-- begin-user-doc -->
237:          * <!-- end-user-doc -->
238:          *
239:          * @generated
240:          */
241:         @Override
242:         public boolean isControlChecked() {
243:                 return controlChecked;
244:         }
245:
246:         /**
247:          * <!-- begin-user-doc -->
248:          * <!-- end-user-doc -->
249:          *
250:          * @generated
251:          */
252:         @Override
253:         public void setControlChecked(boolean newControlChecked) {
254:                 final boolean oldControlChecked = controlChecked;
255:                 controlChecked = newControlChecked;
256:•                if (eNotificationRequired()) {
257:                         eNotify(new ENotificationImpl(this, Notification.SET,
258:                                 VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CONTROL_CHECKED, oldControlChecked, controlChecked));
259:                 }
260:         }
261:
262:         /**
263:          * <!-- begin-user-doc -->
264:          * <!-- end-user-doc -->
265:          *
266:          * @generated
267:          */
268:         @Override
269:         public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
270:•                switch (featureID) {
271:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCES:
272:                         return ((InternalEList<?>) getDomainModelReferences()).basicRemove(otherEnd, msgs);
273:                 }
274:                 return super.eInverseRemove(otherEnd, featureID, msgs);
275:         }
276:
277:         /**
278:          * <!-- begin-user-doc -->
279:          * <!-- end-user-doc -->
280:          *
281:          * @generated
282:          */
283:         @Override
284:         public Object eGet(int featureID, boolean resolve, boolean coreType) {
285:•                switch (featureID) {
286:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCES:
287:                         return getDomainModelReferences();
288:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__BUNDLE_NAME:
289:                         return getBundleName();
290:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CLASS_NAME:
291:                         return getClassName();
292:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CONTROL_CHECKED:
293:                         return isControlChecked();
294:                 }
295:                 return super.eGet(featureID, resolve, coreType);
296:         }
297:
298:         /**
299:          * <!-- begin-user-doc -->
300:          * <!-- end-user-doc -->
301:          *
302:          * @generated
303:          */
304:         @SuppressWarnings("unchecked")
305:         @Override
306:         public void eSet(int featureID, Object newValue) {
307:•                switch (featureID) {
308:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCES:
309:                         getDomainModelReferences().clear();
310:                         getDomainModelReferences().addAll((Collection<? extends VDomainModelReference>) newValue);
311:                         return;
312:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__BUNDLE_NAME:
313:                         setBundleName((String) newValue);
314:                         return;
315:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CLASS_NAME:
316:                         setClassName((String) newValue);
317:                         return;
318:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CONTROL_CHECKED:
319:                         setControlChecked((Boolean) newValue);
320:                         return;
321:                 }
322:                 super.eSet(featureID, newValue);
323:         }
324:
325:         /**
326:          * <!-- begin-user-doc -->
327:          * <!-- end-user-doc -->
328:          *
329:          * @generated
330:          */
331:         @Override
332:         public void eUnset(int featureID) {
333:•                switch (featureID) {
334:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCES:
335:                         getDomainModelReferences().clear();
336:                         return;
337:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__BUNDLE_NAME:
338:                         setBundleName(BUNDLE_NAME_EDEFAULT);
339:                         return;
340:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CLASS_NAME:
341:                         setClassName(CLASS_NAME_EDEFAULT);
342:                         return;
343:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CONTROL_CHECKED:
344:                         setControlChecked(CONTROL_CHECKED_EDEFAULT);
345:                         return;
346:                 }
347:                 super.eUnset(featureID);
348:         }
349:
350:         /**
351:          * <!-- begin-user-doc -->
352:          * <!-- end-user-doc -->
353:          *
354:          * @generated
355:          */
356:         @Override
357:         public boolean eIsSet(int featureID) {
358:•                switch (featureID) {
359:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__DOMAIN_MODEL_REFERENCES:
360:•                        return domainModelReferences != null && !domainModelReferences.isEmpty();
361:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__BUNDLE_NAME:
362:•                        return BUNDLE_NAME_EDEFAULT == null ? bundleName != null : !BUNDLE_NAME_EDEFAULT.equals(bundleName);
363:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CLASS_NAME:
364:•                        return CLASS_NAME_EDEFAULT == null ? className != null : !CLASS_NAME_EDEFAULT.equals(className);
365:                 case VCustomPackage.CUSTOM_DOMAIN_MODEL_REFERENCE__CONTROL_CHECKED:
366:                         return controlChecked != CONTROL_CHECKED_EDEFAULT;
367:                 }
368:                 return super.eIsSet(featureID);
369:         }
370:
371:         /**
372:          * <!-- begin-user-doc -->
373:          * <!-- end-user-doc -->
374:          *
375:          * @generated
376:          */
377:         @Override
378:         public String toString() {
379:•                if (eIsProxy()) {
380:                         return super.toString();
381:                 }
382:
383:                 final StringBuffer result = new StringBuffer(super.toString());
384:                 result.append(" (bundleName: "); //$NON-NLS-1$
385:                 result.append(bundleName);
386:                 result.append(", className: "); //$NON-NLS-1$
387:                 result.append(className);
388:                 result.append(", controlChecked: "); //$NON-NLS-1$
389:                 result.append(controlChecked);
390:                 result.append(')');
391:                 return result.toString();
392:         }
393:
394:         private boolean resolve(EObject eObject) {
395:•                if (getBundleName() == null || getClassName() == null) {
396:                         return false;
397:                 }
398:                 final ECPHardcodedReferences customControl = loadObject(getBundleName(), getClassName());
399:•                if (customControl == null) {
400:                         return false;
401:                 }
402:•                if (!isControlChecked()) {
403:                         // read stuff from control
404:                         final Set<VDomainModelReference> controlReferences = new LinkedHashSet<VDomainModelReference>();
405:                         controlReferences.addAll(customControl.getNeededDomainModelReferences());
406:                         controlReferences.addAll(getDomainModelReferences());
407:                         getDomainModelReferences().clear();
408:                         getDomainModelReferences().addAll(controlReferences);
409:                         setControlChecked(true);
410:                 }
411:                 // resolve references from control
412:                 boolean result = true;
413:•                for (final VDomainModelReference domainModelReference : getDomainModelReferences()) {
414:                         result &= domainModelReference.init(eObject);
415:                 }
416:                 return result;
417:         }
418:
419:         @Deprecated
420:         @Override
421:         public boolean init(EObject object) {
422:                 return resolve(object);
423:         }
424:
425:         private static ECPHardcodedReferences loadObject(String bundleName, String clazz) {
426:                 final Bundle bundle = Platform.getBundle(bundleName);
427:•                if (bundle == null) {
428:                         new ClassNotFoundException(String.format(LocalizationServiceHelper.getString(
429:                                 VCustomDomainModelReferenceImpl.class, "BundleNotFound_ExceptionMessage"), clazz, bundleName)); //$NON-NLS-1$
430:                         return null;
431:                 }
432:                 try {
433:                         final Class<?> loadClass = bundle.loadClass(clazz);
434:•                        if (!ECPHardcodedReferences.class.isAssignableFrom(loadClass)) {
435:                                 return null;
436:                         }
437:                         return ECPHardcodedReferences.class.cast(loadClass.newInstance());
438:                 } catch (final ClassNotFoundException ex) {
439:                         return null;
440:                 } catch (final InstantiationException ex) {
441:                         return null;
442:                 } catch (final IllegalAccessException ex) {
443:                         return null;
444:                 }
445:
446:         }
447:
448:         /**
449:          * {@inheritDoc}
450:          *
451:          * @see org.eclipse.emf.ecp.view.spi.model.VDomainModelReference#getIterator()
452:          * @generated NOT
453:          */
454:         @Deprecated
455:         @Override
456:         public Iterator<Setting> getIterator() {
457:                 return new ExistingIteratorIterator<EStructuralFeature.Setting>() {
458:                         @Override
459:                         protected Iterator<Setting> getSubIterator(VDomainModelReference domainModelReference) {
460:                                 return domainModelReference.getIterator();
461:                         }
462:                 };
463:         }
464:
465:         /**
466:          * {@inheritDoc}
467:          *
468:          * @see org.eclipse.emf.ecp.view.spi.model.VDomainModelReference#getEStructuralFeatureIterator()
469:          * @generated NOT
470:          */
471:         @Deprecated
472:         @Override
473:         public Iterator<EStructuralFeature> getEStructuralFeatureIterator() {
474:                 return new ExistingIteratorIterator<EStructuralFeature>() {
475:                         @Override
476:                         protected Iterator<EStructuralFeature> getSubIterator(VDomainModelReference domainModelReference) {
477:                                 return domainModelReference.getEStructuralFeatureIterator();
478:                         }
479:                 };
480:         }
481:
482:         /**
483:          * Private helper class to iterate over sub iterators.
484:          *
485:          * @author Eugen Neufeld
486:          * @author jfaltermeier
487:          *
488:          * @param <T> the type to iterate over
489:          */
490:         private abstract class ExistingIteratorIterator<T> implements Iterator<T> {
491:
492:                 private final Stack<Iterator<T>> subIterators = new Stack<Iterator<T>>();
493:
494:                 ExistingIteratorIterator() {
495:                         for (int i = getDomainModelReferences().size() - 1; i >= 0; i--) {
496:                                 final VDomainModelReference vDomainModelReference = getDomainModelReferences().get(i);
497:                                 final Iterator<T> subIterator = getSubIterator(vDomainModelReference);
498:                                 if (subIterator.hasNext()) {
499:                                         subIterators.push(subIterator);
500:                                 }
501:                         }
502:
503:                 }
504:
505:                 @Override
506:                 public boolean hasNext() {
507:                         return !subIterators.isEmpty() && subIterators.peek().hasNext();
508:                 }
509:
510:                 @Override
511:                 public T next() {
512:                         final T next = subIterators.peek().next();
513:                         if (!subIterators.peek().hasNext()) {
514:                                 subIterators.pop();
515:                         }
516:                         return next;
517:                 }
518:
519:                 @Override
520:                 public void remove() {
521:                         throw new UnsupportedOperationException();
522:                 }
523:
524:                 protected abstract Iterator<T> getSubIterator(VDomainModelReference domainModelReference);
525:         }
526:
527:         /**
528:          * {@inheritDoc}
529:          *
530:          * @see org.eclipse.emf.ecp.view.spi.model.VDomainModelReference#getFullPathIterator()
531:          */
532:         @Deprecated
533:         @Override
534:         public Iterator<SettingPath> getFullPathIterator() {
535:                 return new ExistingIteratorIterator<SettingPath>() {
536:                         @Override
537:                         protected Iterator<SettingPath> getSubIterator(VDomainModelReference domainModelReference) {
538:                                 return domainModelReference.getFullPathIterator();
539:                         }
540:                 };
541:         }
542:
543:         /**
544:          * {@inheritDoc}
545:          *
546:          * @see org.eclipse.emf.ecp.view.spi.model.ModelChangeListener#notifyChange(org.eclipse.emf.ecp.view.spi.model.ModelChangeNotification)
547:          */
548:         @Override
549:         public void notifyChange(ModelChangeNotification notification) {
550:•                for (final VDomainModelReference dmr : getDomainModelReferences()) {
551:                         dmr.notifyChange(notification);
552:                 }
553:         }
554:
555: } // VCustomDomainModelReferenceImpl