Esempio n. 1
0
  public void merge(JsonSqlValueMap source) throws InvalidActionException {
    if (source == null) {
      throw new NullPointerException("Source object is NULL!");
    } else {
      if (source.getRows().size() > 0) {
        SqlTableRow row = source.getRows().get(source.getRows().size() - 1);

        if (!row.isLocked()) {
          throw new InvalidActionException("Source is not completed!");
        }

        if (rows.size() > 0 && !rows.get(rows.size() - 1).isLocked()) {
          throw new InvalidActionException("Target is not completed!");
        }

        if (fields == null) {
          generateFieldsList(row);
        } else {
          for (FieldData fieldData : row.getValueList()) {
            if (!fields.containsKey(fieldData.getName())) {
              KeyValuePair<String, SQLType> newField =
                  new KeyValuePair<>(
                      fieldData.getName(),
                      getFieldType(fieldData.getValueType(), fieldData.getValueData()));

              fields.put(fieldData.getName(), newField);
            } else {
              SQLType newFieldType =
                  getFieldType(fieldData.getValueType(), fieldData.getValueData());

              KeyValuePair<String, SQLType> existingField = fields.get(fieldData.getName());

              if (!existingField.getValue().equals(newFieldType)) {
                SQLType targetType = JDBCType.VARCHAR;

                if (existingField.getValue().equals(JDBCType.INTEGER)
                    && (newFieldType.equals(JDBCType.DOUBLE))) {
                  targetType = newFieldType;
                } else if (existingField.getValue().equals(JDBCType.NULL)) {
                  targetType = newFieldType;
                }

                existingField.setValue(targetType);
              }
            }
          }
        }

        rows.addAll(source.rows);
      }
    }
  }
Esempio n. 2
0
  private void generateFieldsList(SqlTableRow row) {
    if (row != null && row.isLocked()) {
      if (fields == null) {
        fields = new LinkedHashMap<>(row.size());
      }

      for (FieldData fieldData : row.getValueList()) {
        String fieldName = fieldData.getName();

        if (fieldName != null && !fields.containsKey(fieldName)) {
          KeyValuePair<String, SQLType> newField =
              new KeyValuePair<>(
                  fieldName, getFieldType(fieldData.getValueType(), fieldData.getValueData()));

          fields.put(fieldData.getName(), newField);
        }
      }
    }
  }