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: SubsetSupersetEObjectWithInverseResolvingEList.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 SubsetSupersetEObjectWithInverseResolvingEList<E>
023 extends SubsetSupersetEObjectWithInverseEList<E> {
024
025 private static final long serialVersionUID = 1L;
026
027 public static class Unsettable<E>
028 extends SubsetSupersetEObjectWithInverseResolvingEList<E> {
029
030 private static final long serialVersionUID = 1L;
031
032 public static class ManyInverse<E>
033 extends Unsettable<E> {
034
035 private static final long serialVersionUID = 1L;
036
037 public ManyInverse(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 hasManyInverse() {
046 return true;
047 }
048 }
049
050 protected boolean isSet;
051
052 public Unsettable(Class<?> dataClass, InternalEObject owner,
053 int featureID, int[] supersetFeatureIDs,
054 int[] subsetFeatureIDs, int inverseFeatureID) {
055 super(dataClass, owner, featureID, supersetFeatureIDs,
056 subsetFeatureIDs, inverseFeatureID);
057 }
058
059 @Override
060 protected void didChange() {
061 isSet = true;
062 }
063
064 @Override
065 public boolean isSet() {
066 return isSet;
067 }
068
069 @Override
070 public void unset() {
071 super.unset();
072
073 if (isNotificationRequired()) {
074 boolean oldIsSet = isSet;
075 isSet = false;
076
077 owner.eNotify(createNotification(Notification.UNSET, oldIsSet,
078 false));
079 } else {
080 isSet = false;
081 }
082 }
083 }
084
085 public static class ManyInverse<E>
086 extends SubsetSupersetEObjectWithInverseResolvingEList<E> {
087
088 private static final long serialVersionUID = 1L;
089
090 public ManyInverse(Class<?> dataClass, InternalEObject owner,
091 int featureID, int[] supersetFeatureIDs,
092 int[] subsetFeatureIDs, int inverseFeatureID) {
093 super(dataClass, owner, featureID, supersetFeatureIDs,
094 subsetFeatureIDs, inverseFeatureID);
095 }
096
097 @Override
098 protected boolean hasManyInverse() {
099 return true;
100 }
101 }
102
103 public SubsetSupersetEObjectWithInverseResolvingEList(Class<?> dataClass,
104 InternalEObject owner, int featureID, int[] supersetFeatureIDs,
105 int[] subsetFeatureIDs, int inverseFeatureID) {
106 super(dataClass, owner, featureID, supersetFeatureIDs,
107 subsetFeatureIDs, inverseFeatureID);
108 }
109
110 @Override
111 protected boolean hasProxies() {
112 return true;
113 }
114
115 @SuppressWarnings("unchecked")
116 @Override
117 protected E resolve(int index, E object) {
118 return (E) resolve(index, (EObject) object);
119 }
120
121 }