private void returnCachedData(IfcModelInterface model, GeometryCache geometryCache, DatabaseSession databaseSession, int pid, int rid, boolean store) throws BimserverDatabaseException, ObjectAlreadyExistsException, IfcModelInterfaceException {
EClass productClass = model.getPackageMetaData().getEClass("IfcProduct");
List<IdEObject> products = model.getAllWithSubTypes(productClass);
for (IdEObject ifcProduct : products) {
GeometryCacheEntry geometryCacheEntry = geometryCache.get(ifcProduct.getExpressId());
if (geometryCacheEntry != null) {
GeometryData geometryData = databaseSession.create(GeometryPackage.eINSTANCE.getGeometryData(), pid, rid);
geometryData.setVertices(createBuffer(model, databaseSession, geometryCacheEntry.getVertices(), store, pid, rid));
geometryData.setNormals(createBuffer(model, databaseSession, geometryCacheEntry.getNormals(), store, pid, rid));
GeometryInfo geometryInfo = databaseSession.create(GeometryPackage.eINSTANCE.getGeometryInfo(), pid, rid);
Vector3f min = databaseSession.create(GeometryPackage.eINSTANCE.getVector3f(), pid, rid);
min.setX(geometryCacheEntry.getGeometryInfo().getBounds().getMin().getX());
min.setY(geometryCacheEntry.getGeometryInfo().getBounds().getMin().getY());
min.setZ(geometryCacheEntry.getGeometryInfo().getBounds().getMin().getZ());
Vector3f max = databaseSession.create(GeometryPackage.eINSTANCE.getVector3f(), pid, rid);
max.setX(geometryCacheEntry.getGeometryInfo().getBounds().getMax().getX());
max.setY(geometryCacheEntry.getGeometryInfo().getBounds().getMax().getY());
max.setZ(geometryCacheEntry.getGeometryInfo().getBounds().getMax().getZ());
Bounds bounds = GeometryFactory.eINSTANCE.createBounds();
bounds.setMin(min);
bounds.setMax(max);
geometryInfo.setBounds(bounds);
geometryInfo.setData(geometryData);
ifcProduct.eSet(ifcProduct.eClass().getEStructuralFeature("geometry"), geometryInfo);
}
}
}