001 /*
002 * Copyright (c) 2006 IBM Corporation and others.
003 * All rights reserved. This program and the accompanying materials
004 * are made available under the terms of the Eclipse Public License v1.0
005 * which accompanies this distribution, and is available at
006 * http://www.eclipse.org/legal/epl-v10.html
007 *
008 * Contributors:
009 * IBM - initial API and implementation
010 *
011 * $Id: SubsetSupersetEObjectContainmentWithInverseEList.java,v 1.3 2006/12/14 15:47:33 khussey Exp $
012 */
013 package org.eclipse.uml2.common.util;
014
015 import org.eclipse.emf.common.notify.Notification;
016 import org.eclipse.emf.ecore.EObject;
017 import org.eclipse.emf.ecore.InternalEObject;
018
019 /**
020 * @since 1.2
021 */
022 public class SubsetSupersetEObjectContainmentWithInverseEList<E>
023 extends SubsetSupersetEObjectContainmentEList<E> {
024
025 private static final long serialVersionUID = 1L;
026
027 public static class Unsettable<E>
028 extends SubsetSupersetEObjectContainmentWithInverseEList<E> {
029
030 private static final long serialVersionUID = 1L;
031
032 public static class Resolving<E>
033 extends Unsettable<E> {
034
035 private static final long serialVersionUID = 1L;
036
037 public Resolving(Class<?> dataClass, InternalEObject owner,
038 int featureID, int[] supersetFeatureIDs,
039 int[] subsetFeatureIDs, int inverseFeatureID) {
040 super(dataClass, owner, featureID, supersetFeatureIDs,
041 subsetFeatureIDs, inverseFeatureID);
042 }
043
044 @Override
045 protected boolean hasProxies() {
046 return true;
047 }
048
049 @SuppressWarnings("unchecked")
050 @Override
051 protected E resolve(int index, E object) {
052 return (E) resolve(index, (EObject) object);
053 }
054 }
055
056 protected boolean isSet;
057
058 public Unsettable(Class<?> dataClass, InternalEObject owner,
059 int featureID, int[] supersetFeatureIDs,
060 int[] subsetFeatureIDs, int inverseFeatureID) {
061 super(dataClass, owner, featureID, supersetFeatureIDs,
062 subsetFeatureIDs, inverseFeatureID);
063 }
064
065 @Override
066 protected void didChange() {
067 isSet = true;
068 }
069
070 @Override
071 public boolean isSet() {
072 return isSet;
073 }
074
075 @Override
076 public void unset() {
077 super.unset();
078
079 if (isNotificationRequired()) {
080 boolean oldIsSet = isSet;
081 isSet = false;
082
083 owner.eNotify(createNotification(Notification.UNSET, oldIsSet,
084 false));
085 } else {
086 isSet = false;
087 }
088 }
089 }
090
091 public static class Resolving<E>
092 extends SubsetSupersetEObjectContainmentWithInverseEList<E> {
093
094 private static final long serialVersionUID = 1L;
095
096 public Resolving(Class<?> dataClass, InternalEObject owner,
097 int featureID, int[] supersetFeatureIDs,
098 int[] subsetFeatureIDs, int inverseFeatureID) {
099 super(dataClass, owner, featureID, supersetFeatureIDs,
100 subsetFeatureIDs, inverseFeatureID);
101 }
102
103 @Override
104 protected boolean hasProxies() {
105 return true;
106 }
107
108 @SuppressWarnings("unchecked")
109 @Override
110 protected E resolve(int index, E object) {
111 return (E) resolve(index, (EObject) object);
112 }
113 }
114
115 protected final int inverseFeatureID;
116
117 public SubsetSupersetEObjectContainmentWithInverseEList(Class<?> dataClass,
118 InternalEObject owner, int featureID, int[] supersetFeatureIDs,
119 int[] subsetFeatureIDs, int inverseFeatureID) {
120 super(dataClass, owner, featureID, supersetFeatureIDs, subsetFeatureIDs);
121
122 this.inverseFeatureID = inverseFeatureID;
123 }
124
125 @Override
126 protected boolean hasNavigableInverse() {
127 return true;
128 }
129
130 @Override
131 public int getInverseFeatureID() {
132 return inverseFeatureID;
133 }
134
135 @Override
136 public Class<?> getInverseFeatureClass() {
137 return dataClass;
138 }
139
140 }