Skip to content

Commit a8c38de

Browse files
committed
fixes opensourceBIM#1268 usage of styled IfcIndexedPolyCurve
1 parent 7f1661e commit a8c38de

File tree

1 file changed

+39
-23
lines changed

1 file changed

+39
-23
lines changed

PluginBase/src/org/bimserver/shared/HashMapVirtualObject.java

+39-23
Original file line numberDiff line numberDiff line change
@@ -120,22 +120,15 @@ private int getWrappedValueSize(Object val, EReference eReference) {
120120
if (val instanceof VirtualObject) {
121121
VirtualObject eObject = (VirtualObject) val;
122122
if (eReference.getEAnnotation("twodimensionalarray") != null) {
123-
int refSize = 6;
124-
EStructuralFeature eStructuralFeature = eObject.eClass().getEStructuralFeature("List");
125-
List<?> l = (List<?>)eObject.eGet(eStructuralFeature);
126-
for (Object o : l) {
127-
if (o instanceof VirtualObject) {
128-
refSize += 8;
129-
} else if (o instanceof WrappedVirtualObject) {
130-
refSize += ((WrappedVirtualObject)o).getSize();
131-
} else {
132-
refSize += getPrimitiveSize((EDataType) eStructuralFeature.getEType(), o);
133-
}
134-
}
135-
return refSize;
123+
return getEmbeddedListSize(eObject, "List");
136124
} else if (eObject.eClass().getEAnnotation("wrapped") != null) {
137125
VirtualObject wrappedValue = (VirtualObject) val;
138126
EStructuralFeature wrappedValueFeature = wrappedValue.eClass().getEStructuralFeature("wrappedValue");
127+
128+
if (wrappedValueFeature.isMany()) {
129+
return getEmbeddedListSize(eObject, "wrappedValue");
130+
}
131+
139132
Object wrappedVal = eObject.eGet(wrappedValueFeature);
140133
return 2 + getPrimitiveSize((EDataType) wrappedValueFeature.getEType(), wrappedVal);
141134
} else {
@@ -150,6 +143,22 @@ private int getWrappedValueSize(Object val, EReference eReference) {
150143
throw new RuntimeException("Programming error, should not happen " + val);
151144
}
152145
}
146+
147+
private int getEmbeddedListSize(VirtualObject eObject, String featureName) {
148+
int refSize = 6;
149+
EStructuralFeature eStructuralFeature = eObject.eClass().getEStructuralFeature(featureName);
150+
List<?> l = (List<?>)eObject.eGet(eStructuralFeature);
151+
for (Object o : l) {
152+
if (o instanceof VirtualObject) {
153+
refSize += 8;
154+
} else if (o instanceof WrappedVirtualObject) {
155+
refSize += ((WrappedVirtualObject)o).getSize();
156+
} else {
157+
refSize += getPrimitiveSize((EDataType) eStructuralFeature.getEType(), o);
158+
}
159+
}
160+
return refSize;
161+
}
153162

154163
private int getExactSize(VirtualObject virtualObject) {
155164
int size = 16;
@@ -371,16 +380,11 @@ private void writeList(VirtualObject virtualObject, ByteBuffer buffer, PackageMe
371380
if (o instanceof VirtualObject) {
372381
VirtualObject listObject = (VirtualObject)o;
373382
if (feature.getEAnnotation("twodimensionalarray") != null) {
374-
Short cid = getDatabaseInterface().getCidOfEClass((EClass) feature.getEType());
375-
376-
buffer.order(ByteOrder.LITTLE_ENDIAN);
377-
buffer.putShort((short) -cid);
378-
buffer.order(ByteOrder.BIG_ENDIAN);
379-
380-
EStructuralFeature lf = listObject.eClass().getEStructuralFeature("List");
381-
writeList(listObject, buffer, packageMetaData, lf);
382-
} else {
383-
if (listObject.eClass().getEAnnotation("wrapped") != null || listObject.eClass().getEStructuralFeature("wrappedValue") != null) {
383+
writeEmbeddedList(listObject, "List", (EClass) feature.getEType(), buffer, packageMetaData);
384+
} else if (listObject.eClass().getEAnnotation("wrapped") != null || listObject.eClass().getEStructuralFeature("wrappedValue") != null) {
385+
if (feature.isMany()) {
386+
writeEmbeddedList(listObject, "wrappedValue", listObject.eClass(), buffer, packageMetaData);
387+
} else {
384388
writeWrappedValue(getPid(), getRid(), listObject, buffer, packageMetaData);
385389
}
386390
}
@@ -406,6 +410,18 @@ private void writeList(VirtualObject virtualObject, ByteBuffer buffer, PackageMe
406410
}
407411
}
408412

413+
private void writeEmbeddedList(VirtualObject listObject, String featureName, EClass eClass, ByteBuffer buffer, PackageMetaData packageMetaData)
414+
throws BimserverDatabaseException {
415+
Short cid = getDatabaseInterface().getCidOfEClass(eClass);
416+
417+
buffer.order(ByteOrder.LITTLE_ENDIAN);
418+
buffer.putShort((short) -cid);
419+
buffer.order(ByteOrder.BIG_ENDIAN);
420+
421+
EStructuralFeature lf = listObject.eClass().getEStructuralFeature(featureName);
422+
writeList(listObject, buffer, packageMetaData, lf);
423+
}
424+
409425
private void writePrimitiveValue(EStructuralFeature feature, Object value, ByteBuffer buffer) throws BimserverDatabaseException {
410426
EClassifier type = feature.getEType();
411427
if (type == EcorePackage.eINSTANCE.getEString()) {

0 commit comments

Comments
 (0)