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