Пример #1
0
 private void collectColumnValues(RecordsContainer rContainer, XSQLBluePrintNode bpn) {
   Collection<?> subChildren = XSQLODLUtils.getChildrenCollection(rContainer.currentObject);
   Record r = new Record();
   r.element = rContainer.currentObject;
   for (Object stc : subChildren) {
     if (stc.getClass().getName().endsWith("ImmutableUnkeyedListEntryNode")) {
       r.fitCriteria = false;
       rContainer.currentObject = stc;
       collectColumnValues(rContainer, bpn);
     } else if (stc.getClass().getName().endsWith("ImmutableAugmentationNode")) {
       Map<?, ?> values = XSQLODLUtils.getChildren(stc);
       for (Object key : values.keySet()) {
         Object val = values.get(key);
         if (val.getClass().getName().endsWith("ImmutableLeafNode")) {
           Object value = XSQLODLUtils.getValue(val);
           String k = XSQLODLUtils.getNodeName(val);
           if (value != null) {
             r.data.put(bpn.getBluePrintNodeName() + "." + k, value.toString());
           }
         }
       }
     } else if (stc.getClass().getName().endsWith("ImmutableLeafNode")) {
       String k = XSQLODLUtils.getNodeName(stc);
       Object value = XSQLODLUtils.getValue(stc);
       if (value != null) {
         r.data.put(bpn.getBluePrintNodeName() + "." + k, value.toString());
       }
     }
   }
   if (r.fitCriteria) {
     rContainer.records.add(r);
   }
 }
Пример #2
0
  public List<Record> addRecords(
      Object element,
      XSQLBluePrintNode node,
      boolean root,
      String tableName,
      XSQLBluePrint bluePrint) {
    List<Record> result = new LinkedList<Record>();
    String nodeID = XSQLODLUtils.getNodeIdentiofier(element);
    if (node.getODLTableName().equals(nodeID)) {
      XSQLBluePrintNode bluePrintNode = bluePrint.getBluePrintNodeByODLTableName(nodeID)[0];
      RecordsContainer rContainer = new RecordsContainer();
      rContainer.currentObject = element;
      XSQLBluePrintNode bpn = this.tablesInQueryMap.get(bluePrintNode.getBluePrintNodeName());
      if (this.criteria.containsKey(bluePrintNode.getBluePrintNodeName()) || bpn != null) {
        collectColumnValues(rContainer, bpn);
        for (Record r : rContainer.records) {
          if (!(isObjectFitCriteria(r.data, bpn.getBluePrintNodeName()) == 1)) {
            r.fitCriteria = false;
          }
          if (r.fitCriteria) {
            Record rec = new Record();
            rec.element = r.element;
            addToData(rec, bpn, bluePrint, r.data);
            rContainer.fitRecords.add(rec);
          }
        }
        if (rContainer.fitRecords.isEmpty()) return EMPTY_RESULT;
      }
      if (rContainer.records.isEmpty()) {
        Record rec = new Record();
        rec.element = rContainer.currentObject;
        if (root) {
          addRecord(rec.data);
        } else {
          result.add(rec);
        }
      } else {
        for (Record rec : rContainer.fitRecords) {
          if (root) {
            addRecord(rec.data);
          } else {
            result.add(rec);
          }
        }
      }
      return result;
    }

    XSQLBluePrintNode parent = node.getParent();
    List<Record> subRecords = addRecords(element, parent, false, tableName, bluePrint);
    for (Record subRec : subRecords) {
      List<Object> subO = getChildren(subRec.element, tableName, bluePrint);
      if (subO != null) {
        for (Object subData : subO) {
          RecordsContainer rContainer = new RecordsContainer();
          rContainer.currentObject = subData;

          String recID = XSQLODLUtils.getNodeIdentiofier(rContainer.currentObject);
          XSQLBluePrintNode eNodes[] = bluePrint.getBluePrintNodeByODLTableName(recID);
          XSQLBluePrintNode bpn = null;
          for (XSQLBluePrintNode eNode : eNodes) {
            bpn = this.tablesInQueryMap.get(eNode.getBluePrintNodeName());
            if (bpn != null) {
              break;
            }
          }
          if (bpn != null) {
            collectColumnValues(rContainer, bpn);
            for (Record r : rContainer.records) {
              if ((isObjectFitCriteria(r.data, bpn.getBluePrintNodeName()) == 1)) {
                Record rec = new Record();
                rec.data.putAll(subRec.data);
                rec.element = r.element;
                addToData(rec, bpn, bluePrint, r.data);
              } else {
                r.fitCriteria = false;
              }
            }
          }
          if (rContainer.records.isEmpty()) {
            Record rec = new Record();
            rec.data.putAll(subRec.data);
            rec.element = rContainer.currentObject;
            if (root) {
              if (!rec.data.isEmpty()) {
                addRecord(rec.data);
              }
            } else {
              result.add(rec);
            }
          } else {
            for (Record r : rContainer.records) {
              r.data.putAll(subRec.data);
              if (r.fitCriteria) {
                if (root) {
                  if (!r.data.isEmpty()) {
                    addRecord(r.data);
                  }
                } else {
                  result.add(r);
                }
              }
            }
          }
        }
      }
    }
    return result;
  }