001    /*
002     * Copyright (c) 2003, 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: SupersetEObjectContainmentWithInverseEList.java,v 1.4 2006/12/14 15:47:32 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    @Deprecated
020    public class SupersetEObjectContainmentWithInverseEList<E>
021                    extends SupersetEObjectContainmentEList<E> {
022    
023            private static final long serialVersionUID = 1L;
024    
025            public static class Unsettable<E>
026                            extends SupersetEObjectContainmentWithInverseEList<E> {
027    
028                    private static final long serialVersionUID = 1L;
029    
030                    public static class Resolving<E>
031                                    extends Unsettable<E> {
032    
033                            private static final long serialVersionUID = 1L;
034    
035                            public Resolving(Class<?> dataClass, InternalEObject owner,
036                                            int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
037                                    super(dataClass, owner, featureID, subsetFeatureIDs,
038                                            inverseFeatureID);
039                            }
040    
041                            public Resolving(Class<?> dataClass, InternalEObject owner,
042                                            int featureID, int subsetFeatureID, int inverseFeatureID) {
043                                    this(dataClass, owner, featureID, new int[]{subsetFeatureID},
044                                            inverseFeatureID);
045                            }
046    
047                            @Override
048                            protected boolean hasProxies() {
049                                    return true;
050                            }
051    
052                            @SuppressWarnings("unchecked")
053                            @Override
054                            protected E resolve(int index, E object) {
055                                    return (E) resolve(index, (EObject) object);
056                            }
057                    }
058    
059                    protected boolean isSet;
060    
061                    public Unsettable(Class<?> dataClass, InternalEObject owner,
062                                    int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
063                            super(dataClass, owner, featureID, subsetFeatureIDs,
064                                    inverseFeatureID);
065                    }
066    
067                    public Unsettable(Class<?> dataClass, InternalEObject owner,
068                                    int featureID, int subsetFeatureID, int inverseFeatureID) {
069                            this(dataClass, owner, featureID, new int[]{subsetFeatureID},
070                                    inverseFeatureID);
071                    }
072    
073                    @Override
074                    protected void didChange() {
075                            isSet = true;
076                    }
077    
078                    @Override
079                    public boolean isSet() {
080                            return isSet;
081                    }
082    
083                    @Override
084                    public void unset() {
085                            super.unset();
086    
087                            if (isNotificationRequired()) {
088                                    boolean oldIsSet = isSet;
089                                    isSet = false;
090    
091                                    owner.eNotify(createNotification(Notification.UNSET, oldIsSet,
092                                            false));
093                            } else {
094                                    isSet = false;
095                            }
096                    }
097            }
098    
099            public static class Resolving<E>
100                            extends SupersetEObjectContainmentWithInverseEList<E> {
101    
102                    private static final long serialVersionUID = 1L;
103    
104                    public Resolving(Class<?> dataClass, InternalEObject owner,
105                                    int featureID, int[] subsetFeatureIDs, int inverseFeatureID) {
106                            super(dataClass, owner, featureID, subsetFeatureIDs,
107                                    inverseFeatureID);
108                    }
109    
110                    public Resolving(Class<?> dataClass, InternalEObject owner,
111                                    int featureID, int subsetFeatureID, int inverseFeatureID) {
112                            this(dataClass, owner, featureID, new int[]{subsetFeatureID},
113                                    inverseFeatureID);
114                    }
115    
116                    @Override
117                    protected boolean hasProxies() {
118                            return true;
119                    }
120    
121                    @SuppressWarnings("unchecked")
122                    @Override
123                    protected E resolve(int index, E object) {
124                            return (E) resolve(index, (EObject) object);
125                    }
126            }
127    
128            protected final int inverseFeatureID;
129    
130            public SupersetEObjectContainmentWithInverseEList(Class<?> dataClass,
131                            InternalEObject owner, int featureID, int[] subsetFeatureIDs,
132                            int inverseFeatureID) {
133                    super(dataClass, owner, featureID, subsetFeatureIDs);
134    
135                    this.inverseFeatureID = inverseFeatureID;
136            }
137    
138            public SupersetEObjectContainmentWithInverseEList(Class<?> dataClass,
139                            InternalEObject owner, int featureID, int subsetFeatureID,
140                            int inverseFeatureID) {
141                    this(dataClass, owner, featureID, new int[]{subsetFeatureID},
142                            inverseFeatureID);
143            }
144    
145            @Override
146            protected boolean hasNavigableInverse() {
147                    return true;
148            }
149    
150            @Override
151            public int getInverseFeatureID() {
152                    return inverseFeatureID;
153            }
154    
155            @Override
156            public Class<?> getInverseFeatureClass() {
157                    return dataClass;
158            }
159    
160    }