private void processSubInclude(Query query, CanInclude parentInclude, JsonNode includeNode) throws QueryException { if (includeNode instanceof ObjectNode) { ObjectNode innerInclude = (ObjectNode)includeNode; parentInclude.addInclude(parseInclude(query, innerInclude, null, parentInclude)); } else if (includeNode.isTextual()) { String includeName = includeNode.asText(); if (includeName.contains(":")) { parentInclude.addIncludeReference(getDefineFromFile(includeName, true), includeName); } else { Include otherInclude = query.getDefine(includeName); if (otherInclude == null) { throw new QueryException("Cannot find define \"" + includeName + "\""); } parentInclude.addIncludeReference(otherInclude, includeName); } } else { throw new QueryException("\"include\" must be of type object or string"); } }
private void addType(ObjectNode objectNode, CanInclude queryPart, String type, boolean includeAllSubTypes, List<String> excluded) throws QueryException { if (type.equals("Object")) { // no type filter return; } EClass eClass = packageMetaData.getEClassIncludingDependencies(type); if (eClass == null) { throw new QueryException("Type \"" + type + "\" not found"); } Set<EClass> excludedEClasses = null; if (excluded != null) { excludedEClasses = new HashSet<>(); for (String excl : excluded) { excludedEClasses.add(packageMetaData.getEClassIncludingDependencies(excl)); } } queryPart.addType(eClass, includeAllSubTypes, excludedEClasses); }
if (canInclude.hasIncludes()) { for (Include existingInclude : canInclude.getIncludes()) { apply(geometryFields, packageMetaData, existingInclude, updatedIncludes); if (canInclude.hasReferences()) { for (Reference reference : canInclude.getReferences()) { apply(geometryFields, packageMetaData, reference.getInclude(), updatedIncludes); if (canInclude.hasTypes()) { for (TypeDef typeDef : canInclude.getTypes()) { if (ifcProduct.isSuperTypeOf(typeDef.geteClass()) || ((EClass)typeDef.geteClass()).isSuperTypeOf(ifcProduct)) { Include include = canInclude.createInclude(); applyFields(geometryFields, new TypeDef(ifcProduct, true), include);
protected void processPossibleIncludes(HashMapVirtualObject object, EClass previousType, CanInclude canInclude) throws QueryException, BimserverDatabaseException { if (object != null) { if (canInclude.hasReferences()) { for (Reference reference : canInclude.getReferences()) { processPossibleInclude(object, canInclude, reference.getInclude()); } } if (canInclude.hasIncludes()) { for (Include include : canInclude.getIncludes()) { processPossibleInclude(object, canInclude, include); } } if (canInclude.isIncludeAllFields()) { for (EReference eReference : object.eClass().getEAllReferences()) { Include include = new Include(reusable.getPackageMetaData()); include.addType(object.eClass(), false); include.addField(eReference.getName()); if (canInclude.hasIncludes()) { for (Include include2 : canInclude.getIncludes()) { include.addInclude(include2); } } processPossibleInclude(object, canInclude, include); } } if (canInclude instanceof Include) { processPossibleInclude(object, null, (Include) canInclude); } } }
throw new QueryException("Type " + typeNode.asText() + " not found"); include.addType(eClass, false); } else if (typeNode.isObject()) { if (!typeNode.has("name")) { include.addType(eClass, typeNode.has("includeAllSubTypes") ? typeNode.get("includeAllSubTypes").asBoolean() : false, excludes); Iterator<String> fieldNames = typeNode.fieldNames(); while (fieldNames.hasNext()) {