Package com.buschmais.xo.test.trace.api

Source Code of com.buschmais.xo.test.trace.api.TraceDatastoreProvider

package com.buschmais.xo.test.trace.api;

import com.buschmais.xo.api.XOException;
import com.buschmais.xo.api.bootstrap.XOUnit;
import com.buschmais.xo.spi.bootstrap.XODatastoreProvider;
import com.buschmais.xo.spi.datastore.Datastore;
import com.buschmais.xo.spi.datastore.DatastoreEntityMetadata;
import com.buschmais.xo.spi.datastore.DatastoreRelationMetadata;
import com.buschmais.xo.spi.interceptor.InterceptorFactory;
import com.buschmais.xo.spi.reflection.ClassHelper;
import com.buschmais.xo.test.trace.impl.TraceMonitor;
import com.buschmais.xo.test.trace.impl.TraceDatastore;
import com.buschmais.xo.test.trace.impl.TraceMonitorInterceptor;

import java.util.Arrays;
import java.util.Properties;

/**
* {@link XODatastoreProvider} implementation allowing tracing on delegates.
*/
public class TraceDatastoreProvider<EntityMetadata extends DatastoreEntityMetadata<EntityDiscriminator>, EntityDiscriminator, RelationMetadata extends DatastoreRelationMetadata<RelationDiscriminator>, RelationDiscriminator> implements XODatastoreProvider<EntityMetadata, EntityDiscriminator, RelationMetadata, RelationDiscriminator> {

    public static final String DELEGATE_KEY = TraceDatastoreProvider.class.getPackage().getName() + ".DelegateProvider";

    @Override
    public Datastore<?, EntityMetadata, EntityDiscriminator, RelationMetadata, RelationDiscriminator> createDatastore(XOUnit xoUnit) {
        Properties properties = xoUnit.getProperties();
        String delegateProviderName = properties.getProperty(DELEGATE_KEY);
        if (delegateProviderName == null) {
            throw new XOException("Property '" + DELEGATE_KEY + "' must be specified using the class name of a data store provider.");
        }
        Class<XODatastoreProvider> delegateProviderType = ClassHelper.getType(delegateProviderName);
        XODatastoreProvider<EntityMetadata, EntityDiscriminator, RelationMetadata, RelationDiscriminator> delegateProvider = ClassHelper.newInstance(delegateProviderType);
        Datastore<?, EntityMetadata, EntityDiscriminator, RelationMetadata, RelationDiscriminator> delegateDatastore = delegateProvider.createDatastore(xoUnit);
        TraceMonitor traceMonitor = new TraceMonitor(xoUnit);
        InterceptorFactory interceptorFactory = new InterceptorFactory(Arrays.asList(new TraceMonitorInterceptor(traceMonitor)));
        return new TraceDatastore<>(interceptorFactory.addInterceptor(delegateDatastore, Datastore.class), interceptorFactory, traceMonitor);
    }
}
TOP

Related Classes of com.buschmais.xo.test.trace.api.TraceDatastoreProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.