Lines 44-49
Link Here
|
44 |
import org.eclipse.emf.ecore.resource.Resource; |
44 |
import org.eclipse.emf.ecore.resource.Resource; |
45 |
import org.eclipse.emf.ecore.resource.ResourceSet; |
45 |
import org.eclipse.emf.ecore.resource.ResourceSet; |
46 |
import org.eclipse.emf.ecore.util.EcoreUtil; |
46 |
import org.eclipse.emf.ecore.util.EcoreUtil; |
|
|
47 |
import org.eclipse.emf.ecore.util.FeatureMapUtil; |
47 |
import org.eclipse.emf.ecore.xmi.XMLResource; |
48 |
import org.eclipse.emf.ecore.xmi.XMLResource; |
48 |
import org.eclipse.emf.transaction.TransactionalEditingDomain; |
49 |
import org.eclipse.emf.transaction.TransactionalEditingDomain; |
49 |
import org.eclipse.emf.transaction.impl.InternalTransaction; |
50 |
import org.eclipse.emf.transaction.impl.InternalTransaction; |
Lines 239-250
Link Here
|
239 |
&& (resource != null)) |
240 |
&& (resource != null)) |
240 |
uriFragment = resource.getURIFragment(eObject); |
241 |
uriFragment = resource.getURIFragment(eObject); |
241 |
|
242 |
|
242 |
EReference reference = eObject.eContainmentFeature(); |
243 |
EcoreUtil.remove(eObject); |
243 |
|
|
|
244 |
if (reference.isMany()) |
245 |
((Collection) container.eGet(reference)).remove(eObject); |
246 |
else |
247 |
container.eSet(reference, null); |
248 |
|
244 |
|
249 |
if ((options & MDestroyOption.NO_EVENTS) == 0) |
245 |
if ((options & MDestroyOption.NO_EVENTS) == 0) |
250 |
sendDestroyEvent(domain, eObject); |
246 |
sendDestroyEvent(domain, eObject); |
Lines 1016-1024
Link Here
|
1016 |
private static class TeardownAction { |
1012 |
private static class TeardownAction { |
1017 |
|
1013 |
|
1018 |
private EObject container = null; |
1014 |
private EObject container = null; |
1019 |
|
|
|
1020 |
private EReference reference = null; |
1015 |
private EReference reference = null; |
1021 |
|
|
|
1022 |
private EObject object = null; |
1016 |
private EObject object = null; |
1023 |
|
1017 |
|
1024 |
/** |
1018 |
/** |
Lines 1036-1054
Link Here
|
1036 |
* Execute the action. |
1030 |
* Execute the action. |
1037 |
*/ |
1031 |
*/ |
1038 |
public void execute() { |
1032 |
public void execute() { |
1039 |
|
|
|
1040 |
if (object == null) { |
1033 |
if (object == null) { |
1041 |
|
|
|
1042 |
if (container.eIsSet(reference)) { |
1034 |
if (container.eIsSet(reference)) { |
1043 |
|
1035 |
if (FeatureMapUtil.isMany(container, reference)) { |
1044 |
if (reference.isMany()) { |
|
|
1045 |
|
1046 |
List objects = (List) container.eGet(reference); |
1036 |
List objects = (List) container.eGet(reference); |
1047 |
|
1037 |
|
1048 |
if (reference.isContainment()) { |
1038 |
if (reference.isContainment()) { |
1049 |
|
|
|
1050 |
if (!objects.isEmpty()) { |
1039 |
if (!objects.isEmpty()) { |
1051 |
|
|
|
1052 |
Collection destroyed = new ArrayList(objects); |
1040 |
Collection destroyed = new ArrayList(objects); |
1053 |
|
1041 |
|
1054 |
for (Iterator i = destroyed.iterator(); i |
1042 |
for (Iterator i = destroyed.iterator(); i |
Lines 1057-1065
Link Here
|
1057 |
} |
1045 |
} |
1058 |
|
1046 |
|
1059 |
} else { |
1047 |
} else { |
1060 |
|
|
|
1061 |
if (!objects.isEmpty()) { |
1048 |
if (!objects.isEmpty()) { |
1062 |
|
|
|
1063 |
Collection detached = new ArrayList(objects); |
1049 |
Collection detached = new ArrayList(objects); |
1064 |
|
1050 |
|
1065 |
for (Iterator i = detached.iterator(); i |
1051 |
for (Iterator i = detached.iterator(); i |
Lines 1067-1102
Link Here
|
1067 |
|
1053 |
|
1068 |
EObject eObject = (EObject) i.next(); |
1054 |
EObject eObject = (EObject) i.next(); |
1069 |
|
1055 |
|
1070 |
((Collection) container.eGet(reference)) |
1056 |
EcoreUtil.remove(container,reference,eObject); |
1071 |
.remove(eObject); |
|
|
1072 |
} |
1057 |
} |
1073 |
} |
1058 |
} |
1074 |
} |
1059 |
} |
1075 |
|
1060 |
|
1076 |
} else { |
1061 |
} else { |
1077 |
|
|
|
1078 |
if (reference.isContainment()) { |
1062 |
if (reference.isContainment()) { |
1079 |
|
|
|
1080 |
object = (EObject) container.eGet(reference); |
1063 |
object = (EObject) container.eGet(reference); |
1081 |
|
1064 |
|
1082 |
if (object != null) |
1065 |
if (object != null) |
1083 |
EObjectUtil.destroy(object); |
1066 |
EObjectUtil.destroy(object); |
1084 |
} else |
1067 |
} else { |
1085 |
container.eSet(reference, null); |
1068 |
object = (EObject)container.eGet(reference); |
|
|
1069 |
EcoreUtil.remove(container, reference, object); |
1070 |
} |
1086 |
} |
1071 |
} |
1087 |
} |
1072 |
} |
1088 |
|
1073 |
|
1089 |
} else { |
1074 |
} else { |
1090 |
|
1075 |
if (reference.isContainment()) { |
1091 |
if (reference.isContainment()) |
|
|
1092 |
EObjectUtil.destroy(object); |
1076 |
EObjectUtil.destroy(object); |
1093 |
|
1077 |
} else { |
1094 |
else { |
1078 |
EcoreUtil.remove(container, reference, object); |
1095 |
|
|
|
1096 |
if (reference.isMany()) |
1097 |
((Collection) container.eGet(reference)).remove(object); |
1098 |
else |
1099 |
container.eSet(reference, null); |
1100 |
} |
1079 |
} |
1101 |
} |
1080 |
} |
1102 |
} |
1081 |
} |
Lines 1109-1116
Link Here
|
1109 |
EObject newObject, EReference reference, EClass type, |
1088 |
EObject newObject, EReference reference, EClass type, |
1110 |
EObject referencer) { |
1089 |
EObject referencer) { |
1111 |
|
1090 |
|
1112 |
if (reference.isMany()) { |
1091 |
if (FeatureMapUtil.isMany(referencer, reference)) { |
1113 |
|
|
|
1114 |
List list = (List) referencer.eGet(reference); |
1092 |
List list = (List) referencer.eGet(reference); |
1115 |
|
1093 |
|
1116 |
int position = list.indexOf(eObject); |
1094 |
int position = list.indexOf(eObject); |
Lines 1125-1131
Link Here
|
1125 |
referencer.eSet(reference, newObject); |
1103 |
referencer.eSet(reference, newObject); |
1126 |
|
1104 |
|
1127 |
else |
1105 |
else |
1128 |
referencer.eSet(reference, null); |
1106 |
referencer.eUnset(reference); |
1129 |
} |
1107 |
} |
1130 |
|
1108 |
|
1131 |
/** |
1109 |
/** |
Lines 1140-1146
Link Here
|
1140 |
boolean ignore = false; |
1118 |
boolean ignore = false; |
1141 |
|
1119 |
|
1142 |
for (Iterator k = ignoredObjects.iterator(); k.hasNext();) { |
1120 |
for (Iterator k = ignoredObjects.iterator(); k.hasNext();) { |
1143 |
|
|
|
1144 |
EObject ignored = (EObject) k.next(); |
1121 |
EObject ignored = (EObject) k.next(); |
1145 |
|
1122 |
|
1146 |
if (EObjectUtil.contains(ignored, referencer)) { |
1123 |
if (EObjectUtil.contains(ignored, referencer)) { |
Lines 1151-1158
Link Here
|
1151 |
|
1128 |
|
1152 |
if (!ignore) { |
1129 |
if (!ignore) { |
1153 |
|
1130 |
|
1154 |
if (reference.isMany()) { |
1131 |
if (FeatureMapUtil.isMany(referencer, reference)) { |
1155 |
|
|
|
1156 |
EList list = (EList) referencer.eGet(reference); |
1132 |
EList list = (EList) referencer.eGet(reference); |
1157 |
int existingIndex = list.indexOf(replacement); |
1133 |
int existingIndex = list.indexOf(replacement); |
1158 |
|
1134 |
|
Lines 1165-1171
Link Here
|
1165 |
int index = list.indexOf(referenced); |
1141 |
int index = list.indexOf(referenced); |
1166 |
list.add(index, replacement); |
1142 |
list.add(index, replacement); |
1167 |
} |
1143 |
} |
1168 |
|
|
|
1169 |
} else |
1144 |
} else |
1170 |
referencer.eSet(reference, replacement); |
1145 |
referencer.eSet(reference, replacement); |
1171 |
} |
1146 |
} |