@SuppressWarnings("unchecked") @Override public <T extends IdEObject> T create(Class<T> clazz, OidProvider oidProvider) throws IfcModelInterfaceException, ObjectAlreadyExistsException { return (T) create(packageMetaData.getEClass(clazz), oidProvider); }
@Override public <T extends IdEObject> List<T> getAllWithSubTypes(Class<T> interfaceClass) { return getAllWithSubTypes(packageMetaData.getEClass(interfaceClass)); }
public IdEObject copyBasicObjects(IfcModelInterface model, Map<IdEObject, IdEObject> bigMap) throws IfcModelInterfaceException { PackageMetaData packageMetaData = model.getPackageMetaData(); IdEObject newProject = null; for (IdEObject idEObject : model.getAllWithSubTypes(packageMetaData.getEClass("IfcProject"))) { newProject = copy(idEObject, false, skipRepresentation); bigMap.put(newProject, idEObject); } IdEObject newOwnerHistory = null; for (IdEObject idEObject : model.getAllWithSubTypes(packageMetaData.getEClass("IfcOwnerHistory"))) { newOwnerHistory = copy(idEObject, false, skipRepresentation); bigMap.put(newOwnerHistory, idEObject); } for (IdEObject idEObject : model.getAllWithSubTypes(packageMetaData.getEClass("IfcUnit"))) { bigMap.put(copy(idEObject, false, skipRepresentation), idEObject); } for (IdEObject idEObject : model.getAllWithSubTypes(packageMetaData.getEClass("IfcUnitAssignment"))) { bigMap.put(copy(idEObject, false, skipRepresentation), idEObject); } return newOwnerHistory; } }
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); } } }
@SuppressWarnings("unchecked") @Override public <T extends IdEObject> T createAndAdd(Class<T> clazz) throws IfcModelInterfaceException, ObjectAlreadyExistsException { EClass eClass = packageMetaData.getEClass(clazz); IdEObjectImpl object = (IdEObjectImpl) eClass.getEPackage().getEFactoryInstance().create(eClass); object.setLoadingState(State.LOADED); long oid = oidCounter++; add(oid, object); return (T) object; }
public void buildNameIndex() { nameIndex = new HashMap<EClass, Map<String, IdEObject>>(); for (EClassifier classifier : objects.values().iterator().next().eClass().getEPackage().getEClassifiers()) { if (classifier instanceof EClass) { Map<String, IdEObject> map = new TreeMap<String, IdEObject>(); nameIndex.put((EClass) classifier, map); } } EClass ifcRootEclass = packageMetaData.getEClass("IfcRoot"); EStructuralFeature nameFeature = ifcRootEclass.getEStructuralFeature("Name"); for (Long key : objects.keySet()) { IdEObject value = objects.get((Long) key); if (ifcRootEclass.isSuperTypeOf(value.eClass())) { Object name = value.eGet(nameFeature); if (name != null) { nameIndex.get(value.eClass()).put((String)name, value); } } } }
@SuppressWarnings("unchecked") private void createPresentationStyleAssignmentStyles(IfcModelInterface model, String representationIdentifier, IdEObject ifcPresentationStyleAssignment, IdEObject color) throws IfcModelInterfaceException { if (representationIdentifier.equals("Body")) { IdEObject ifcPresentationStyleSelect = model.create(model.getPackageMetaData().getEClass("IfcSurfaceStyle")); EStructuralFeature stylesFeature = ifcPresentationStyleAssignment.eClass().getEStructuralFeature("Styles"); List<IdEObject> list = (List<IdEObject>) ifcPresentationStyleAssignment.eGet(stylesFeature); list.add(ifcPresentationStyleSelect); createSurfaceStyleStyles(model, representationIdentifier, ifcPresentationStyleSelect, color); } else { // Unimplemented } }
public void buildGuidIndex() { guidIndex = new HashMap<EClass, Map<String, IdEObject>>(); if (objects.isEmpty()) { return; } for (EClassifier classifier : objects.values().iterator().next().eClass().getEPackage().getEClassifiers()) { if (classifier instanceof EClass) { Map<String, IdEObject> map = new TreeMap<String, IdEObject>(); guidIndex.put((EClass) classifier, map); } } EClass ifcRootEclass = packageMetaData.getEClass("IfcRoot"); EStructuralFeature guidFeature = ifcRootEclass.getEStructuralFeature("GlobalId"); for (Long key : objects.keySet()) { IdEObject value = objects.get((Long) key); if (ifcRootEclass.isSuperTypeOf(value.eClass())) { Object guid = value.eGet(guidFeature); if (guid != null) { guidIndex.get(value.eClass()).put((String)guid, value); } } } }
@SuppressWarnings("unchecked") private void createSurfaceStyleStyles(IfcModelInterface model, String representationIdentifier, IdEObject ifcSurfaceStyle, IdEObject color) throws IfcModelInterfaceException { EClass ifcSurfaceStyleRenderingClass = model.getPackageMetaData().getEClass("IfcSurfaceStyleRendering"); IdEObject ifcSurfaceStyleRendering = model.create(ifcSurfaceStyleRenderingClass); EStructuralFeature stylesFeature = ifcSurfaceStyle.eClass().getEStructuralFeature("Styles"); ((List<IdEObject>)(ifcSurfaceStyle.eGet(stylesFeature))).add(ifcSurfaceStyleRendering); setColour(color, ifcSurfaceStyleRendering); }
@SuppressWarnings("unchecked") private void createStyledByItems(IfcModelInterface model, IdEObject ifcRepresentationItem, String representationIdentifier, IdEObject color) throws IfcModelInterfaceException { IdEObject ifcStyledItem = model.create(model.getPackageMetaData().getEClass("IfcStyledItem")); EStructuralFeature styledByItemFeature = ifcStyledItem.eClass().getEStructuralFeature("StyledByItem"); List<IdEObject> list = (List<IdEObject>) ifcRepresentationItem.eGet(styledByItemFeature); list.add(ifcStyledItem); createStyledItemStyles(model, representationIdentifier, ifcStyledItem, color); }
@SuppressWarnings("unchecked") private void createStyledItemStyles(IfcModelInterface model, String representationIdentifier, IdEObject ifcStyledItem, IdEObject color) throws IfcModelInterfaceException { IdEObject ifcPresentationStyleAssignment = model.create(model.getPackageMetaData().getEClass("IfcPresentationStyleAssignment")); EStructuralFeature stylesFeature = ifcStyledItem.eClass().getEStructuralFeature("Styles"); List<IdEObject> list = (List<IdEObject>) ifcStyledItem.eGet(stylesFeature); list.add(ifcPresentationStyleAssignment); createPresentationStyleAssignmentStyles(model, representationIdentifier, ifcPresentationStyleAssignment, color); }
public ObjectIdentifier getOidOfGuid(String schema, String guid, int pid, int rid) throws BimserverDatabaseException { PackageMetaData packageMetaData = getMetaDataManager().getPackageMetaData(schema); for (EClass eClass : packageMetaData.getAllSubClasses(packageMetaData.getEClass("IfcRoot"))) { RecordIterator recordIterator = database.getKeyValueStore().getRecordIterator(eClass.getEPackage().getName() + "_" + eClass.getName(), BinUtils.intToByteArray(pid), BinUtils.intToByteArray(pid), this);
private void writeWrappedValue(int pid, int rid, VirtualObject wrappedValue, ByteBuffer buffer, PackageMetaData packageMetaData) throws BimserverDatabaseException { EStructuralFeature eStructuralFeature = wrappedValue.eClass().getEStructuralFeature("wrappedValue"); if (eStructuralFeature == null) { throw new BimserverDatabaseException("No wrappedValue on " + wrappedValue.eClass().getName()); } Short cid = getDatabaseInterface().getCidOfEClass(wrappedValue.eClass()); buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.putShort((short) -cid); buffer.order(ByteOrder.BIG_ENDIAN); writePrimitiveValue(eStructuralFeature, wrappedValue.eGet(eStructuralFeature), buffer); if (wrappedValue.eClass().getName().equals("IfcGloballyUniqueId")) { EClass eClass = packageMetaData.getEClass("IfcGloballyUniqueId"); if (wrappedValue.getOid() == -1) { ((VirtualObject) wrappedValue).setOid(getDatabaseInterface().newOid(eClass)); } getDatabaseInterface().save(wrappedValue); } }
private float processUnits(DatabaseSession databaseSession, QueryContext queryContext) throws QueryException, IOException, BimserverDatabaseException { Query query = new Query("Unit query", packageMetaData); QueryPart unitQueryPart = query.createQueryPart(); unitQueryPart.addType(packageMetaData.getEClass("IfcProject"), false); Include unitsInContextInclude = unitQueryPart.createInclude(); unitsInContextInclude.addType(packageMetaData.getEClass("IfcProject"), false); unitsInContextInclude.addField("UnitsInContext"); Include units = unitsInContextInclude.createInclude(); units.addType(packageMetaData.getEClass("IfcUnitAssignment"), false); units.addField("Units"); Include unit = units.createInclude(); unit.addType(packageMetaData.getEClass("IfcSIUnit"), false); if (packageMetaData.getEClass("IfcSIUnit").isSuperTypeOf(next.eClass())) { if (next.get("UnitType") == packageMetaData.getEEnumLiteral("IfcUnitEnum", "LENGTHUNIT").getInstance()) { Object prefix = next.get("Prefix");
private void writeWrappedValue(int pid, int rid, Object value, ByteBuffer buffer, PackageMetaData packageMetaData) throws BimserverDatabaseException { IdEObject wrappedValue = (IdEObject) value; EStructuralFeature eStructuralFeature = wrappedValue.eClass().getEStructuralFeature("wrappedValue"); Short cid = database.getCidOfEClass(wrappedValue.eClass()); buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.putShort((short) -cid); buffer.order(ByteOrder.BIG_ENDIAN); writePrimitiveValue(eStructuralFeature, wrappedValue.eGet(eStructuralFeature), buffer); if (eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDouble() || eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDoubleObject()) { EStructuralFeature fe = wrappedValue.eClass().getEStructuralFeature("wrappedValueAsString"); writePrimitiveValue(fe, wrappedValue.eGet(fe), buffer); } if (wrappedValue.eClass().getName().equals("IfcGloballyUniqueId")) { EClass eClass = packageMetaData.getEClass("IfcGloballyUniqueId"); if (wrappedValue.getOid() == -1) { ((IdEObjectImpl) wrappedValue).setOid(newOid(eClass)); } ByteBuffer valueBuffer = convertObjectToByteArray(wrappedValue, ByteBuffer.allocate(getExactSize(wrappedValue, packageMetaData, true)), packageMetaData); ByteBuffer keyBuffer = createKeyBuffer(pid, wrappedValue.getOid(), rid); try { database.getKeyValueStore().storeNoOverwrite(eClass.getEPackage().getName() + "_" + eClass.getName(), keyBuffer.array(), valueBuffer.array(), this); database.incrementCommittedWrites(1); } catch (BimserverLockConflictException e) { LOGGER.error("", e); } } }
return; EClass ifcProduct = packageMetaData.getEClass("IfcProduct"); updatedIncludes.add(canInclude); if (canInclude.hasIncludes()) {
@Override public SGeometryInfo execute() throws UserException, BimserverDatabaseException, BimserverLockConflictException { Revision revision = getDatabaseSession().get(roid, OldQuery.getDefault()); Project project = revision.getProject(); PackageMetaData packageMetaData = bimServer.getMetaDataManager().getPackageMetaData(project.getSchema()); IdEObject ifcProduct = getDatabaseSession().get(oid, new OldQuery(packageMetaData, project.getId(), revision.getId(), revision.getOid())); if (ifcProduct == null) { throw new UserException("Object with oid " + oid + " not found"); } EStructuralFeature geometryFeature = packageMetaData.getEClass("IfcProduct").getEStructuralFeature("geometry"); GeometryInfo geometry = (GeometryInfo) ifcProduct.eGet(geometryFeature); SGeometryInfo convertToSObject = bimServer.getSConverter().convertToSObject(geometry); return convertToSObject; } }
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); } } }