Search in sources :

Example 1 with RecordListenerProvider

use of org.jooq.RecordListenerProvider in project jOOQ by jOOQ.

the class DAOImpl method providers.

private RecordListenerProvider[] providers(final RecordListenerProvider[] providers, final Object object) {
    RecordListenerProvider[] result = Arrays.copyOf(providers, providers.length + 1);
    result[providers.length] = new DefaultRecordListenerProvider(new DefaultRecordListener() {

        private final void end(RecordContext ctx) {
            Record record = ctx.record();
            // TODO: [#2536] Use mapper()
            if (record != null)
                record.into(object);
        }

        @Override
        public final void storeEnd(RecordContext ctx) {
            end(ctx);
        }

        @Override
        public final void insertEnd(RecordContext ctx) {
            end(ctx);
        }

        @Override
        public final void updateEnd(RecordContext ctx) {
            end(ctx);
        }

        @Override
        public final void deleteEnd(RecordContext ctx) {
            end(ctx);
        }
    });
    return result;
}
Also used : RecordContext(org.jooq.RecordContext) RecordListenerProvider(org.jooq.RecordListenerProvider) UpdatableRecord(org.jooq.UpdatableRecord) Record(org.jooq.Record)

Example 2 with RecordListenerProvider

use of org.jooq.RecordListenerProvider in project jOOQ by jOOQ.

the class RecordDelegate method operate.

@SuppressWarnings("unchecked")
final <E extends Exception> R operate(RecordOperation<? super R, E> operation) throws E {
    RecordListenerProvider[] providers = null;
    RecordListener[] listeners = null;
    DefaultRecordContext ctx = null;
    E exception = null;
    if (configuration != null) {
        providers = configuration.recordListenerProviders();
        if (providers != null && providers.length > 0) {
            listeners = new RecordListener[providers.length];
            ctx = new DefaultRecordContext(configuration, executeType(), record);
            for (int i = 0; i < providers.length; i++) {
                listeners[i] = providers[i].provide();
            }
        }
    }
    if (listeners != null) {
        for (RecordListener listener : listeners) {
            switch(type) {
                case LOAD:
                    listener.loadStart(ctx);
                    break;
                case REFRESH:
                    listener.refreshStart(ctx);
                    break;
                case STORE:
                    listener.storeStart(ctx);
                    break;
                case INSERT:
                    listener.insertStart(ctx);
                    break;
                case UPDATE:
                    listener.updateStart(ctx);
                    break;
                case DELETE:
                    listener.deleteStart(ctx);
                    break;
                default:
                    throw new IllegalStateException("Type not supported: " + type);
            }
        }
    }
    // [#1684] Do not attach configuration if settings say no
    if (attachRecords(configuration)) {
        record.attach(configuration);
    }
    if (operation != null) {
        try {
            operation.operate(record);
        }// [#2770][#3036] Exceptions must not propagate before listeners receive "end" events
         catch (Exception e) {
            exception = (E) e;
            // Do not propagate these exception types to client code as they're not really "exceptions"
            if (!(e instanceof ControlFlowSignal)) {
                if (ctx != null)
                    ctx.exception = e;
                if (listeners != null)
                    for (RecordListener listener : listeners) listener.exception(ctx);
            }
        }
    }
    if (listeners != null) {
        for (RecordListener listener : listeners) {
            switch(type) {
                case LOAD:
                    listener.loadEnd(ctx);
                    break;
                case REFRESH:
                    listener.refreshEnd(ctx);
                    break;
                case STORE:
                    listener.storeEnd(ctx);
                    break;
                case INSERT:
                    listener.insertEnd(ctx);
                    break;
                case UPDATE:
                    listener.updateEnd(ctx);
                    break;
                case DELETE:
                    listener.deleteEnd(ctx);
                    break;
                default:
                    throw new IllegalStateException("Type not supported: " + type);
            }
        }
    }
    if (exception != null) {
        throw exception;
    }
    return record;
}
Also used : WRITE(org.jooq.ExecuteType.WRITE) RecordListenerProvider(org.jooq.RecordListenerProvider) RecordListener(org.jooq.RecordListener) ControlFlowSignal(org.jooq.exception.ControlFlowSignal)

Aggregations

RecordListenerProvider (org.jooq.RecordListenerProvider)2 WRITE (org.jooq.ExecuteType.WRITE)1 Record (org.jooq.Record)1 RecordContext (org.jooq.RecordContext)1 RecordListener (org.jooq.RecordListener)1 UpdatableRecord (org.jooq.UpdatableRecord)1 ControlFlowSignal (org.jooq.exception.ControlFlowSignal)1