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