Search in sources :

Example 1 with RecordIdIdMappings

use of org.killbill.billing.util.dao.RecordIdIdMappings in project killbill by killbill.

the class DefaultAuditDao method buildAuditLogsFromModelDao.

private Iterator<AuditLog> buildAuditLogsFromModelDao(final Iterator<AuditLogModelDao> auditLogsForAccountRecordId, final InternalTenantContext tenantContext) {
    final Map<TableName, Map<Long, UUID>> recordIdIdsCache = new HashMap<TableName, Map<Long, UUID>>();
    final Map<TableName, Map<Long, UUID>> historyRecordIdIdsCache = new HashMap<TableName, Map<Long, UUID>>();
    return Iterators.<AuditLogModelDao, AuditLog>transform(auditLogsForAccountRecordId, new Function<AuditLogModelDao, AuditLog>() {

        @Override
        public AuditLog apply(final AuditLogModelDao input) {
            // If input is for e.g. TAG_DEFINITION_HISTORY, retrieve TAG_DEFINITIONS
            // For tables without history, e.g. TENANT, originalTableNameForHistoryTableName will be null
            final TableName originalTableNameForHistoryTableName = findTableNameForHistoryTableName(input.getTableName());
            final ObjectType objectType;
            final UUID auditedEntityId;
            if (originalTableNameForHistoryTableName != null) {
                // input point to a history entry
                objectType = originalTableNameForHistoryTableName.getObjectType();
                if (historyRecordIdIdsCache.get(originalTableNameForHistoryTableName) == null) {
                    if (TableName.ACCOUNT.equals(originalTableNameForHistoryTableName)) {
                        final Iterable<RecordIdIdMappings> mappings = nonEntitySqlDao.getHistoryRecordIdIdMappingsForAccountsTable(originalTableNameForHistoryTableName.getTableName(), input.getTableName().getTableName(), tenantContext);
                        historyRecordIdIdsCache.put(originalTableNameForHistoryTableName, RecordIdIdMappings.toMap(mappings));
                    } else if (TableName.TAG_DEFINITIONS.equals(originalTableNameForHistoryTableName)) {
                        final Iterable<RecordIdIdMappings> mappings = nonEntitySqlDao.getHistoryRecordIdIdMappingsForTablesWithoutAccountRecordId(originalTableNameForHistoryTableName.getTableName(), input.getTableName().getTableName(), tenantContext);
                        historyRecordIdIdsCache.put(originalTableNameForHistoryTableName, RecordIdIdMappings.toMap(mappings));
                    } else {
                        final Iterable<RecordIdIdMappings> mappings = nonEntitySqlDao.getHistoryRecordIdIdMappings(originalTableNameForHistoryTableName.getTableName(), input.getTableName().getTableName(), tenantContext);
                        historyRecordIdIdsCache.put(originalTableNameForHistoryTableName, RecordIdIdMappings.toMap(mappings));
                    }
                }
                auditedEntityId = historyRecordIdIdsCache.get(originalTableNameForHistoryTableName).get(input.getTargetRecordId());
            } else {
                objectType = input.getTableName().getObjectType();
                if (recordIdIdsCache.get(input.getTableName()) == null) {
                    final Iterable<RecordIdIdMappings> mappings = nonEntitySqlDao.getRecordIdIdMappings(input.getTableName().getTableName(), tenantContext);
                    recordIdIdsCache.put(input.getTableName(), RecordIdIdMappings.toMap(mappings));
                }
                auditedEntityId = recordIdIdsCache.get(input.getTableName()).get(input.getTargetRecordId());
            }
            return new DefaultAuditLog(input, objectType, auditedEntityId);
        }

        private TableName findTableNameForHistoryTableName(final TableName historyTableName) {
            for (final TableName tableName : TableName.values()) {
                if (historyTableName.equals(tableName.getHistoryTableName())) {
                    return tableName;
                }
            }
            return null;
        }
    });
}
Also used : HashMap(java.util.HashMap) DefaultAuditLog(org.killbill.billing.util.audit.DefaultAuditLog) AuditLog(org.killbill.billing.util.audit.AuditLog) TableName(org.killbill.billing.util.dao.TableName) ObjectType(org.killbill.billing.ObjectType) DefaultAccountAuditLogsForObjectType(org.killbill.billing.util.audit.DefaultAccountAuditLogsForObjectType) DefaultAuditLog(org.killbill.billing.util.audit.DefaultAuditLog) RecordIdIdMappings(org.killbill.billing.util.dao.RecordIdIdMappings) UUID(java.util.UUID) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

HashMap (java.util.HashMap)1 Map (java.util.Map)1 UUID (java.util.UUID)1 ObjectType (org.killbill.billing.ObjectType)1 AuditLog (org.killbill.billing.util.audit.AuditLog)1 DefaultAccountAuditLogsForObjectType (org.killbill.billing.util.audit.DefaultAccountAuditLogsForObjectType)1 DefaultAuditLog (org.killbill.billing.util.audit.DefaultAuditLog)1 RecordIdIdMappings (org.killbill.billing.util.dao.RecordIdIdMappings)1 TableName (org.killbill.billing.util.dao.TableName)1