Search in sources :

Example 1 with ColumnInfo

use of org.killbill.billing.util.api.ColumnInfo in project killbill by killbill.

the class DatabaseExportDao method exportDataForAccount.

public void exportDataForAccount(final DatabaseExportOutputStream out, final InternalTenantContext context) {
    if (context.getAccountRecordId() == null || context.getTenantRecordId() == null) {
        return;
    }
    final List<DefaultColumnInfo> columns = databaseSchemaDao.getColumnInfoList();
    if (columns.size() == 0) {
        return;
    }
    final List<ColumnInfo> columnsForTable = new ArrayList<ColumnInfo>();
    // The list of columns is ordered by table name first
    String lastSeenTableName = columns.get(0).getTableName();
    for (final ColumnInfo column : columns) {
        if (!column.getTableName().equals(lastSeenTableName)) {
            exportDataForAccountAndTable(out, columnsForTable, context);
            lastSeenTableName = column.getTableName();
            columnsForTable.clear();
        }
        columnsForTable.add(column);
    }
    exportDataForAccountAndTable(out, columnsForTable, context);
}
Also used : DefaultColumnInfo(org.killbill.billing.util.validation.DefaultColumnInfo) ArrayList(java.util.ArrayList) ColumnInfo(org.killbill.billing.util.api.ColumnInfo) DefaultColumnInfo(org.killbill.billing.util.validation.DefaultColumnInfo)

Example 2 with ColumnInfo

use of org.killbill.billing.util.api.ColumnInfo in project killbill by killbill.

the class DatabaseExportDao method exportDataForAccountAndTable.

private void exportDataForAccountAndTable(final DatabaseExportOutputStream out, final List<ColumnInfo> columnsForTable, final InternalTenantContext context) {
    TableType tableType = TableType.OTHER;
    final String tableName = columnsForTable.get(0).getTableName();
    if (TableName.ACCOUNT.getTableName().equals(tableName)) {
        tableType = TableType.KB_ACCOUNT;
    } else if (TableName.ACCOUNT_HISTORY.getTableName().equals(tableName)) {
        tableType = TableType.KB_ACCOUNT_HISTORY;
    }
    boolean firstColumn = true;
    final StringBuilder queryBuilder = new StringBuilder("select ");
    for (final ColumnInfo column : columnsForTable) {
        if (!firstColumn) {
            queryBuilder.append(", ");
        } else {
            firstColumn = false;
        }
        queryBuilder.append(column.getColumnName());
        if (tableType == TableType.OTHER) {
            if (column.getColumnName().equals(TableType.KB_PER_ACCOUNT.getAccountRecordIdColumnName())) {
                tableType = TableType.KB_PER_ACCOUNT;
            } else if (column.getColumnName().equals(TableType.NOTIFICATION.getAccountRecordIdColumnName())) {
                tableType = TableType.NOTIFICATION;
            }
        }
    }
    // Don't export non-account specific tables
    if (tableType == TableType.OTHER) {
        return;
    }
    // Build the query - make sure to filter by account and tenant!
    queryBuilder.append(" from ").append(tableName).append(" where ").append(tableType.getAccountRecordIdColumnName()).append(" = :accountRecordId and ").append(tableType.getTenantRecordIdColumnName()).append("  = :tenantRecordId");
    // Notify the stream that we're about to write data for a different table
    out.newTable(tableName, columnsForTable);
    dbi.withHandle(new HandleCallback<Void>() {

        @Override
        public Void withHandle(final Handle handle) throws Exception {
            final ResultIterator<Map<String, Object>> iterator = handle.createQuery(queryBuilder.toString()).bind("accountRecordId", context.getAccountRecordId()).bind("tenantRecordId", context.getTenantRecordId()).iterator();
            try {
                while (iterator.hasNext()) {
                    final Map<String, Object> row = iterator.next();
                    out.write(row);
                }
            } finally {
                iterator.close();
            }
            return null;
        }
    });
}
Also used : ResultIterator(org.skife.jdbi.v2.ResultIterator) ColumnInfo(org.killbill.billing.util.api.ColumnInfo) DefaultColumnInfo(org.killbill.billing.util.validation.DefaultColumnInfo) Handle(org.skife.jdbi.v2.Handle) Map(java.util.Map)

Example 3 with ColumnInfo

use of org.killbill.billing.util.api.ColumnInfo in project killbill by killbill.

the class CSVExportOutputStream method newTable.

@Override
public void newTable(final String tableName, final List<ColumnInfo> columnsForTable) {
    currentTableName = tableName;
    final CsvSchema.Builder builder = CsvSchema.builder();
    // Remove quoting of character which applies (somewhat arbitrarily, Tatu???) for string whose length is greater than MAX_QUOTE_CHECK = 24 -- See CVSWriter#_mayNeedQuotes
    builder.disableQuoteChar();
    builder.setColumnSeparator('|');
    for (final ColumnInfo columnInfo : columnsForTable) {
        builder.addColumn(columnInfo.getColumnName(), getColumnTypeFromSqlType(columnInfo.getDataType()));
    }
    currentCSVSchema = builder.build();
    writer = mapper.writer(currentCSVSchema);
    shouldWriteHeader = true;
}
Also used : CsvSchema(com.fasterxml.jackson.dataformat.csv.CsvSchema) ColumnInfo(org.killbill.billing.util.api.ColumnInfo)

Aggregations

ColumnInfo (org.killbill.billing.util.api.ColumnInfo)3 DefaultColumnInfo (org.killbill.billing.util.validation.DefaultColumnInfo)2 CsvSchema (com.fasterxml.jackson.dataformat.csv.CsvSchema)1 ArrayList (java.util.ArrayList)1 Map (java.util.Map)1 Handle (org.skife.jdbi.v2.Handle)1 ResultIterator (org.skife.jdbi.v2.ResultIterator)1