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