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 writeReference(IdEObject object, Object value, ByteBuffer buffer, EStructuralFeature feature) throws BimserverDatabaseException { IdEObject idEObject = (IdEObject) value; if (idEObject.getOid() < 0) { throw new BimserverDatabaseException("Writing a reference with oid " + idEObject.getOid() + ", this is not supposed to happen, referenced: " + idEObject.getOid() + " " + value + " from " + object.getOid() + " " + object); } buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.putLong(idEObject.getOid()); buffer.order(ByteOrder.BIG_ENDIAN); }
public void fixOids() { BiMap<Long, IdEObject> temp = HashBiMap.create(); for (IdEObject object : objects.values()) { temp.put(object.getOid(), object); } objects = temp; }
public void changeOid(IdEObject object) { objects.inverse().remove(object); objects.put(object.getOid(), object); }
@Override public void remove(IdEObject object) { try { bimServerClient.getLowLevelInterface().removeObject(getTransactionId(), object.getOid()); } catch (PublicInterfaceNotFoundException e) { LOGGER.error("", e); } catch (ServerException e) { LOGGER.error("", e); } catch (UserException e) { LOGGER.error("", e); } }
private ObjectNode objectToJson(IdEObject idEObject) { ObjectNode objectNode = OBJECT_MAPPER.createObjectNode(); if (idEObject.getOid() != -1) { objectNode.put("oid", idEObject.getOid()); } if (idEObject instanceof IfcProduct) { IfcProduct ifcProduct = (IfcProduct)idEObject; if (ifcProduct.getName() != null) { objectNode.put("name", ifcProduct.getName()); } if (ifcProduct.getGlobalId() != null) { objectNode.put("guid", ifcProduct.getGlobalId()); } } return objectNode; }
public void load(IdEObject object) { if (((IdEObjectImpl) object).getLoadingState() == State.LOADING) { return; } loadExplicit(object.getOid()); }
public void put(IdEObject idEObject) { getMap(idEObject).forcePut(idEObject, idEObject.getOid()); }
@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; } }
private void processTodoList(IfcModelInterface model, TodoList todoList, QueryInterface query) throws BimserverDatabaseException { IdEObject idEObject = todoList.poll(); while (idEObject != null) { IdEObject result = get(idEObject, idEObject.getOid(), model, query, todoList); if (result == null) { throw new BimserverDatabaseException("Object not found: " + query.getPid() + " " + query.getRid() + " " + idEObject.getOid() + " " + idEObject.eClass().getName()); } if (!model.contains(result.getOid())) { try { model.addAllowMultiModel(result.getOid(), result); } catch (IfcModelInterfaceException e) { throw new BimserverDatabaseException(e); } } idEObject = todoList.poll(); } }
public void addToObjectsToCommit(IdEObject idEObject) throws BimserverDatabaseException { if (idEObject.getOid() == -1) { throw new BimserverDatabaseException("Cannot store object with oid -1"); } if (objectsToCommit == null) { objectsToCommit = new ObjectsToCommit(); } objectsToCommit.put(idEObject); }
public <T extends IdEObject> Map<Long, T> query(IfcModelInterface model, Condition condition, Class<T> clazz, QueryInterface query) throws BimserverDatabaseException { Map<Long, T> map = new HashMap<Long, T>(); Set<EClass> eClasses = new HashSet<EClass>(); condition.getEClassRequirements(eClasses); for (EClass eClass : eClasses) { TodoList todoList = new TodoList(); getMap(eClass, model, query, todoList); processTodoList(model, todoList, query); List<IdEObject> list = new ArrayList<IdEObject>(model.getValues()); for (IdEObject object : list) { if (clazz.isInstance(object)) { if (condition.matches(object)) { map.put(object.getOid(), clazz.cast(object)); } } } } return map; }
public boolean contains(IdEObject object) { return set.contains(new RecordIdentifierPlusType(object.eClass(), object.getPid(), object.getOid(), object.getRid())); } }
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); } }
@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()); }
public <T extends IdEObject> T create(Class<T> clazz) throws IfcModelInterfaceException { T object = model.create(clazz); if (object instanceof IfcRoot) { ((IfcRoot)object).setGlobalId(GuidCompressor.getNewIfcGloballyUniqueId()); if (defaultOwnerHistory != null) { ((IfcRoot)object).setOwnerHistory(defaultOwnerHistory); } } if (addOnCreate) { model.add(object.getOid(), object); } return object; }
@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; }
private void write(IdEObject object) throws IOException { if (object.eClass().getEAnnotation("wrapped") != null) { EStructuralFeature wrappedFeature = object.eClass().getEStructuralFeature("wrappedValue"); print("{"); print("\"_t\":\"" + object.eClass().getName() + "\","); print("\"_v\":"); writePrimitive(wrappedFeature, object.eGet(wrappedFeature)); print("}"); } else { print("" + object.getOid()); } }
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"); // } }