public HashMapVirtualObject getByOid(PackageMetaData packageMetaData, DatabaseSession databaseSession, long roid, long oid) throws JsonParseException, JsonMappingException, IOException, QueryException, BimserverDatabaseException { Query query = new Query("test", packageMetaData); QueryPart queryPart = query.createQueryPart(); queryPart.addOid(oid); QueryObjectProvider queryObjectProvider = new QueryObjectProvider(databaseSession, bimServer, query, Collections.singleton(roid), packageMetaData); HashMapVirtualObject first = queryObjectProvider.next(); return first; }
for (QueryPart queryPart : query.getQueryParts()) { ObjectNode queryPartNode = OBJECT_MAPPER.createObjectNode(); if (queryPart.hasTypes()) { ArrayNode typesNode = OBJECT_MAPPER.createArrayNode(); queryPartNode.set("types", typesNode); for (TypeDef type : queryPart.getTypes()) { if (type.isIncludeSubTypes()) { ObjectNode typeDefNode = OBJECT_MAPPER.createObjectNode(); if (queryPart.getMinimumReuseThreshold() != -1) { queryPartNode.put("reuseLowerThreshold", queryPart.getMinimumReuseThreshold()); if (queryPart.hasOids()) { ArrayNode oidsNode = OBJECT_MAPPER.createArrayNode(); queryPartNode.set("oids", oidsNode); for (long oid : queryPart.getOids()) { oidsNode.add(oid); if (queryPart.hasInBoundingBox()) { ObjectNode inBoundingBoxNode = OBJECT_MAPPER.createObjectNode(); if (!Double.isNaN(queryPart.getInBoundingBox().getX())) { inBoundingBoxNode.put("x", queryPart.getInBoundingBox().getX()); if (!Double.isNaN(queryPart.getInBoundingBox().getY())) { inBoundingBoxNode.put("y", queryPart.getInBoundingBox().getY()); if (!Double.isNaN(queryPart.getInBoundingBox().getZ())) { inBoundingBoxNode.put("z", queryPart.getInBoundingBox().getZ());
private QueryPart createFilteredQueryPart(QueryPart input) throws QueryException { QueryPart result = new QueryPart(input.getPackageMetaData()); for (TypeDef typeDef : input.getTypes()) { result.addType(typeDef); } for (Include include : input.getIncludes()) { createFilteredInclude(result, include); } return result; }
public boolean hasReadOrIsGoingToRead(EClass eClass) { for (QueryPart queryPart : query.getQueryParts()) { boolean allNull = queryPart.getGuids() == null && queryPart.getNames() == null && queryPart.getOids() == null && queryPart.getInBoundingBox() == null && queryPart.getProperties() == null && queryPart.getClassifications() == null; if (queryPart.hasTypes()) { if (typeDefContains(queryPart, eClass)) { if (allNull) { return true; } } } else { return allNull; } } return false; }
if (hasTypes()) { sb.append(indent(indent) + "types\n"); for (TypeDef type : getTypes()) { sb.append(indent(indent + 1) + type.geteClass().getName() + ", " + type.isIncludeSubTypes() + "\n"); if (hasOids()) { sb.append(indent(indent) + "oids\n"); for (long oid : getOids()) { sb.append(indent(indent + 1) + oid + "\n"); if (hasGuids()) { sb.append(indent(indent) + "guids\n"); for (String guid : getGuids()) { sb.append(indent(indent + 1) + guid + "\n"); if (hasIncludes()) { sb.append(indent(indent) + "includes\n"); for (Include include : getIncludes()) { include.dump(indent + 1, sb); if (hasInBoundingBox()) { sb.append(indent(indent) + "inBoundingBox\n"); inBoundingBox.dump(indent + 1, sb); if (hasProperties()) { sb.append(indent(indent) + "properties\n"); for (String key : properties.keySet()) { sb.append(indent(indent + 1) + key + ": " + properties.get(key));
this.partialQuery = partialQuery; this.reusable = reusable; if (partialQuery.hasOids()) { Set<Long> oidsList = partialQuery.getOids(); this.oids = new HashMap<EClass, List<Long>>(); if (oidsList.size() == 0) { if (!partialQuery.hasTypes()) { if (oids == null) { if (reusable.getOidCounters() == null) { for (TypeDef typeDef : partialQuery.getTypes()) { set.add(typeDef.geteClass()); if (typeDef.isIncludeSubTypes()) { if (this.partialQuery.getGuids() != null) { this.guids = partialQuery.getGuids(); } else { guids = null; if (this.partialQuery.getNames() != null) { this.names = partialQuery.getNames(); } else { names = null; this.properties = partialQuery.getProperties(); this.classifications = partialQuery.getClassifications(); this.inBoundingBox = partialQuery.getInBoundingBox(); this.tiles = partialQuery.getTiles();
private void parseJsonQuery(Query query, ObjectNode objectNode) throws QueryException { QueryPart queryPart = new QueryPart(packageMetaData); if (objectNode.has("type")) { JsonNode typeNode = objectNode.get("type"); queryPart.setMinimumReuseThreshold(objectNode.get("reuseLowerThreshold").asInt()); queryPart.setIncludeAllFields(true); queryPart.addOid(oidNode.asLong()); } else { throw new QueryException("\"oid\" must be of type number"); JsonNode oidNode = oids.get(i); if (oidNode.isNumber()) { queryPart.addOid(oidNode.asLong()); } else { throw new QueryException("\"oids\"[" + i + "] must be of type number (" + oidNode + ")"); JsonNode guidNode = objectNode.get("guid"); if (guidNode.isTextual()) { queryPart.addGuid(guidNode.asText()); } else { throw new QueryException("\"guid\" must be of type string"); JsonNode nameNode = objectNode.get("name"); if (nameNode.isTextual()) { queryPart.addName(nameNode.asText()); } else { throw new QueryException("\"name\" must be of type string");
if (queryPart.hasReferences()) { for (Reference reference : queryPart.getReferences()) { apply(geometryFields, packageMetaData, reference.getInclude(), updatedIncludes); if (queryPart.hasIncludes()) { apply(geometryFields, packageMetaData, queryPart, updatedIncludes); if (queryPart.hasTypes()) { for (TypeDef typeDef : queryPart.getTypes()) { if (packageMetaData.getEClass("IfcProduct").isSuperTypeOf(typeDef.geteClass())) { Include include = queryPart.createInclude(); applyFields(geometryFields, new TypeDef(packageMetaData.getEClass("IfcProduct"), true), include); if (queryPart.isIncludeAllFields()) { Include newInclude = queryPart.createInclude(); applyFields(geometryFields, new TypeDef(packageMetaData.getEClass("IfcProduct"), true), newInclude);
queryPart.addType(packageMetaData.getEClass("IfcProduct"), true, excluded); Include product = queryPart.createInclude(); product.addType(packageMetaData.getEClass("IfcProduct"), true); product.addFieldDirect("geometry");
Query query2 = new Query(eClass.getName() + "Main query", packageMetaData); QueryPart queryPart2 = query2.createQueryPart(); queryPart2.addType(eClass, false); Include representationInclude = queryPart2.createInclude(); representationInclude.addType(eClass, false); representationInclude.addFieldDirect("Representation"); queryPart2.addInclude(objectPlacement); queryPart.addType(eClass, false); done.add(pd.getOid()); if (!optimizeMappedItems) { queryPart.addOid(pd.getOid()); queryPart.addOid(masterOid); queryPart3.addType(eClass, false); Include include3 = queryPart3.createInclude(); include3.addType(eClass, false); include3.addFieldDirect("Representation"); boolean goForIt2 = goForIt(list); if (goForIt2) { queryPart.addOid(next.getOid()); written++; if (written >= maxObjectsPerFile) {
if (geometry != null) { if (geometry.getData() == null || geometry.getData().getIndices() == null) { queryPart.addOid(geometry.getOid()); geometryInfoOidToOid.put(geometry.getOid(), ifcProduct.getOid()); if (queryPart.getOids() == null) { return; LOGGER.info("Loading geometry for " + queryPart.getOids().size() + " objects"); EClass geometryInfoClass = getPackageMetaData().getEClassIncludingDependencies("GeometryInfo"); Include include = queryPart.createInclude(); include.addType(geometryInfoClass, false); include.addField("data");
public QueryObjectProvider(DatabaseSession databaseSession, BimServer bimServer, Query query, Set<Long> roids, PackageMetaData packageMetaData) throws IOException, QueryException { this.databaseSession = databaseSession; this.bimServer = bimServer; this.query = query; this.roids = roids; this.packageMetaData = packageMetaData; stack = new ArrayDeque<StackFrame>(); stack.push(new StartFrame(this, roids)); for (QueryPart queryPart : query.getQueryParts()) { if (queryPart.hasOids()) { goingToRead.addAll(queryPart.getOids()); } } }
queryPart.addInclude(jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":IfcAnnotationContainedInStructure", true)); } else { queryPart.addInclude(jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":ContainedInStructure", true)); queryPart.addInclude(jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":IsTypedBy", true)); queryPart.addInclude(jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":Decomposes", true)); queryPart.addInclude(jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":OwnerHistory", true)); Include representationInclude = jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":RepresentationSpecificMapping", true); queryPart.addInclude(representationInclude); Include objectPlacement = jsonQueryObjectModelConverter.getDefineFromFile(queryNameSpace + ":ObjectPlacement", true); queryPart.addInclude(objectPlacement); if (packageMetaData.getEClass("IfcElement").isSuperTypeOf(eClass)) { Include openingsInclude = queryPart.createInclude(); openingsInclude.addType(packageMetaData.getEClass(eClass.getName()), false); openingsInclude.addField("HasOpenings");
@Override public void newObject(HashMapVirtualObject next) { if (eClass.isSuperTypeOf(next.eClass())) { if (next.eGet(GeometryRunner.this.streamingGeometryGenerator.representationFeature) != null) { if (originalQuery.getQueryParts().get(0).getOids().contains(next.getOid())) { objects.add(next); } } } } });
public Include createInclude() { Include include = new Include(packageMetaData); addInclude(include); return include; }
public QueryPart createQueryPart() { QueryPart queryPart = new QueryPart(packageMetaData); addQueryPart(queryPart); return queryPart; }
private void createFilteredInclude(QueryPart result, Include include) throws QueryException { Include newInclude = result.createInclude(); for (TypeDef typeDef : include.getTypes()) { newInclude.addType(typeDef); } for (EReference field : include.getFields()) { newInclude.addField(field); } for (Include include2 : include.getIncludes()) { newInclude.addInclude(createFilteredInclude(include2)); } }
@Override public IdEObject getByGuid(String guid) { IdEObject idEObject = super.getByGuid(guid); if (idEObject == null && !assumeCompletePreload) { try { modelState = ModelState.LOADING; Query query = new Query(getPackageMetaData()); QueryPart queryPart = query.createQueryPart(); queryPart.addGuid(guid); JsonQueryObjectModelConverter converter = new JsonQueryObjectModelConverter(getPackageMetaData()); long topicId = bimServerClient.getServiceInterface().download(Collections.singleton(roid), converter.toJson(query).toString(), getJsonSerializerOid(), false); waitForDonePreparing(topicId); processDownload(topicId); clientDebugInfo.incGuid(); bimServerClient.getServiceInterface().cleanupLongAction(topicId); modelState = ModelState.NONE; return super.getByGuid(guid); } catch (Exception e) { LOGGER.error("", e); } } return idEObject; }
Query query = new Query("test", packageMetaData); QueryPart queryPart = query.createQueryPart(); queryPart.addType(packageMetaData.getEClassIncludingDependencies("GeometryInfo"), true); QueryObjectProvider queryObjectProvider = new QueryObjectProvider(getDatabaseSession(), bimServer, query, java.util.Collections.singleton(roid), packageMetaData); HashMapVirtualObject next = queryObjectProvider.next();