@SuppressWarnings({ "unchecked", "rawtypes" }) private IdEObject copy(IfcModel target, IdEObject idEObject, boolean limitToNonGuids) throws IfcModelInterfaceException { if (target.contains(idEObject.getOid())) { return target.get(idEObject.getOid()); IdEObject newObject = (IdEObject) idEObject.eClass().getEPackage().getEFactoryInstance().create(idEObject.eClass()); ((IdEObjectImpl)newObject).setOid(idEObject.getOid()); if (newObject.getOid() != -1) { target.add(newObject.getOid(), newObject); for (EAttribute eAttribute : newObject.eClass().getEAllAttributes()) { newObject.eSet(eAttribute, idEObject.eGet(eAttribute)); for (EReference eReference : newObject.eClass().getEAllReferences()) { Object referencedObject = idEObject.eGet(eReference); if (referencedObject instanceof IdEObject) { IdEObject refEObject = (IdEObject)referencedObject; if (!limitToNonGuids || !(referencedObject instanceof IfcRoot) && !(referencedObject instanceof IfcGloballyUniqueId)) { newObject.eSet(eReference, copy(target, refEObject, limitToNonGuids)); List newList = (List)newObject.eGet(eReference); for (Object o : list) { if (!limitToNonGuids || !(o instanceof IfcRoot) && !(o instanceof IfcGloballyUniqueId)) {
protected int getExpressId(IdEObject object) { if (normalizeOids && object.getExpressId() == -1) { ((IdEObjectImpl)object).setExpressId(expressIdCounter ++); } return object.getExpressId(); }
@SuppressWarnings("unused") private ByteBuffer fillKeyBuffer(ByteBuffer buffer, IdEObject object) { if (DEVELOPER_DEBUG && object.getRid() > 100000 || object.getRid() < -100000) { LOGGER.debug("Improbable rid: " + object.getRid() + " - " + object); } return fillKeyBuffer(buffer, object.getPid(), object.getOid(), object.getRid()); }
private void indexGuid(IdEObject idEObject) { EClass ifcRootEclass = packageMetaData.getEClass("IfcRoot"); EStructuralFeature guidFeature = ifcRootEclass.getEStructuralFeature("GlobalId"); if (ifcRootEclass.isSuperTypeOf(idEObject.eClass())) { Object guid = idEObject.eGet(guidFeature); if (guid != null) { guidIndexed.put((String)guid, idEObject); } } }
@Override public boolean matches(IdEObject object) { if (object.eClass().isSuperTypeOf(reference.getEContainingClass())) { Object other = object.eGet(reference); if (other instanceof EList<?>) { EList<?> list = (EList<?>)other; for (Object eObject : list) { // TODO Actually the first test should suffice (object id), the second should always return the same because caching of the objects should allow only 1 per database session if (eObject == referencingObject || ((IdEObject)eObject).getOid() == referencingObject.getOid()) { return true; } } return false; } else { return other == referencingObject; } } return false; } }
@SuppressWarnings({ "rawtypes", "unchecked" }) private void setDoubleAsStringValues(IdEObject idEObject) { for (EAttribute eAttribute : idEObject.eClass().getEAllAttributes()) { if (eAttribute.getEType() == EcorePackage.eINSTANCE.getEDouble()) { EStructuralFeature asStringFeature = idEObject.eClass().getEStructuralFeature(eAttribute.getName() + "AsString"); if (asStringFeature != null) { if (eAttribute.isMany()) { List list = (List) idEObject.eGet(eAttribute); List listAsString = (List) idEObject.eGet(asStringFeature); for (int i = 0; i < list.size(); i++) { listAsString.set(i, "" + list.get(i)); } } else { idEObject.eSet(asStringFeature, "" + idEObject.eGet(eAttribute)); } } } } }
private <T extends IdEObject> T find(List<T> list, long oid) { for (T t : list) { if (t.getOid() == oid) { return t; } } return null; }
private void fixOidsFlat(IdEObject idEObject, OidProvider oidProvider, BiMap<Long, IdEObject> temp) { if (idEObject == null) { return; } if (temp.containsValue(idEObject)) { return; } ((IdEObjectImpl) idEObject).setOid(oidProvider.newOid(idEObject.eClass())); if (objects.containsValue(idEObject)) { temp.put(idEObject.getOid(), idEObject); } }
IdEObject wrappedObject = model.create(model.getPackageMetaData().getEClass(t),-1); if(jsonReader.nextName().equals("_v")){ EStructuralFeature wv = wrappedObject.eClass().getEStructuralFeature("wrappedValue"); wrappedObject.eSet(wv, readPrimitive(jsonReader, wv)); innerList.add(wrappedObject); IdEObject wrappedObject = (IdEObject) model.create(model.getPackageMetaData().getEClass(t), -1); if (jsonReader.nextName().equals("_v")) { EStructuralFeature wv = wrappedObject.eClass().getEStructuralFeature("wrappedValue"); wrappedObject.eSet(wv, readPrimitive(jsonReader, wv)); list.add(wrappedObject); } else { IdEObject refObject = (IdEObject) model.create(model.getPackageMetaData().getEClassIncludingDependencies(refType), refOid); ((IdEObjectImpl)refObject).setLoadingState(State.OPPOSITE_SETTING); model.add(refObject.getOid(), refObject); addToList(eStructuralFeature, index, list, refObject); ((IdEObjectImpl)refObject).setLoadingState(State.TO_BE_LOADED); IdEObject refObject = (IdEObject) model.create(referenceEClass, refOid); ((IdEObjectImpl)refObject).setLoadingState(State.OPPOSITE_SETTING); model.add(refObject.getOid(), refObject); addToList(eStructuralFeature, index, list, refObject); ((IdEObjectImpl)refObject).setLoadingState(State.TO_BE_LOADED); ((IdEObjectImpl)wrappedObject).setLoadingState(State.LOADING); if (eStructuralFeature.getEAnnotation("dbembed") != null) { for (EStructuralFeature eStructuralFeature2 : wrappedObject.eClass().getEAllStructuralFeatures()) { String fn = jsonReader.nextName();
public void delete(IdEObject object, Integer newRid) throws BimserverDatabaseException { checkOpen(); if (objectsToDelete == null) { objectsToDelete = new ObjectsToDelete(); } // if (perRecordVersioning(object)) { objectsToDelete.put(object.eClass(), object.getPid(), newRid, object.getOid()); if (objectsToCommit != null) { if (objectsToCommit.containsObject(object)) { objectsToCommit.remove(object); } } // } else { // TODO implement // throw new BimserverDatabaseException("This is not supported"); // } }
public long store(IdEObject object, int pid, int rid) throws BimserverDatabaseException { checkOpen(); if ((objectsToCommit == null || !objectsToCommit.containsObject(object)) && (objectsToDelete == null || !objectsToDelete.contains(object))) { objectCache.put(object.getOid(), object); boolean wrappedValue = object.eClass().getEAnnotation("wrapped") != null; if (!wrappedValue) { if (object.getOid() == -1) { long newOid = newOid(object.eClass()); ((IdEObjectImpl) object).setOid(newOid); } object.load(); ((IdEObjectImpl) object).setPid(pid); if (rid == Integer.MAX_VALUE) { ((IdEObjectImpl) object).setRid(object.getRid() + 1); } else { ((IdEObjectImpl) object).setRid(rid); } addToObjectsToCommit(object); } } return object.getOid(); }
red.eSet(nameFeature, "red"); red.eSet(redFeature, 0.5D); red.eSet(greenFeature, 0.0D); red.eSet(blueFeature, 0.0D); green.eSet(nameFeature, "green"); green.eSet(redFeature, 0D); green.eSet(greenFeature, 0.5D); green.eSet(blueFeature, 0D); blue.eSet(nameFeature, "blue"); blue.eSet(redFeature, 0D); blue.eSet(greenFeature, 0D); blue.eSet(blueFeature, 0.5D); if (added.contains(product.getOid())) { color = green; } else if (deleted.contains(product.getOid())) { color = red; } else if (modified.contains(product.getOid())) { color = blue;
@SuppressWarnings("unused") public IdEObject lazyLoad(IdEObject idEObject) throws BimserverDatabaseException { if (DEVELOPER_DEBUG) { LOGGER.info("Lazy loading " + idEObject.eClass().getName() + " " + idEObject.getOid()); } IfcModelInterface model = ((IdEObjectImpl)idEObject).getModel(); if (model == null) { Map<Integer, Long> pidToRoid = new HashMap<Integer, Long>(); model = createModel(getMetaDataManager().getPackageMetaData(idEObject.eClass().getEPackage().getName()), pidToRoid); } idEObject = get(idEObject, idEObject.getOid(), model, ((IdEObjectImpl) idEObject).getQueryInterface(), new TodoList()); if (idEObject != null) { if (DEVELOPER_DEBUG && idEObject.getRid() > 100000 || idEObject.getRid() < -100000) { LOGGER.debug("Improbable rid " + idEObject.getRid() + " - " + idEObject); } } return idEObject; }
if (idEObject.eClass().getEAnnotation("wrapped") == null) { try { model.addAllowMultiModel(oid, idEObject); if (isUnsetted) { if (feature.isUnsettable()) { idEObject.eUnset(feature); } else if (feature.isMany()) { idEObject.eSet(feature, feature.getDefaultValue()); idEObject.eSet(feature, newValue); if (DEVELOPER_DEBUG && idEObject.getRid() > 100000 || idEObject.getRid() < -100000) { LOGGER.debug("Improbable rid " + idEObject.getRid() + " - " + idEObject);
private void setColour(IdEObject color, IdEObject ifcSurfaceStyleRendering) { if (color != null) { EStructuralFeature diffuseColourFeature = ifcSurfaceStyleRendering.eClass().getEStructuralFeature("DiffuseColour"); EStructuralFeature reflectionColourFeature = ifcSurfaceStyleRendering.eClass().getEStructuralFeature("ReflectionColour"); EStructuralFeature specularColourFeature = ifcSurfaceStyleRendering.eClass().getEStructuralFeature("SpecularColour"); EStructuralFeature surfaceColourFeature = ifcSurfaceStyleRendering.eClass().getEStructuralFeature("SurfaceColour"); EStructuralFeature transmissionColourFeature = ifcSurfaceStyleRendering.eClass().getEStructuralFeature("TransmissionColour"); ifcSurfaceStyleRendering.eSet(diffuseColourFeature, color); ifcSurfaceStyleRendering.eSet(reflectionColourFeature, color); ifcSurfaceStyleRendering.eSet(specularColourFeature, color); ifcSurfaceStyleRendering.eSet(surfaceColourFeature, color); ifcSurfaceStyleRendering.eSet(transmissionColourFeature, color); } else { EStructuralFeature transparancyFeature = ifcSurfaceStyleRendering.eClass().getEStructuralFeature("Transparency"); ifcSurfaceStyleRendering.eSet(transparancyFeature, 0.5D); } }
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); } } }
private IdEObject readEmbeddedValue(EStructuralFeature feature, ByteBuffer buffer, EClass eClass, QueryInterface query) throws BimserverDatabaseException { IdEObject eObject = createInternal(eClass, query); for (EStructuralFeature eStructuralFeature : eClass.getEAllStructuralFeatures()) { if (eStructuralFeature.isMany()) { // Not implemented } else { if (eStructuralFeature.getEType() instanceof EDataType) { Object primitiveValue = readPrimitiveValue(eStructuralFeature.getEType(), buffer, query); ((IdEObjectImpl) eObject).setLoaded(); eObject.eSet(eStructuralFeature, primitiveValue); } else { buffer.order(ByteOrder.LITTLE_ENDIAN); short cid = buffer.getShort(); buffer.order(ByteOrder.BIG_ENDIAN); if (cid == -1) { // null, do nothing } else if (cid < 0) { // non minus one and negative cid means value is embedded in record EClass referenceClass = database.getEClassForCid((short) (-cid)); eObject.eSet(eStructuralFeature, readEmbeddedValue(eStructuralFeature, buffer, referenceClass, query)); } } } } return eObject; }