Package com.github.nmorel.gwtjackson.benchmark.client.mechanism

Source Code of com.github.nmorel.gwtjackson.benchmark.client.mechanism.Mechanism$ObjectMapperProviderPrototype

package com.github.nmorel.gwtjackson.benchmark.client.mechanism;

import java.util.ArrayList;
import java.util.List;

import com.github.nmorel.gwtjackson.benchmark.client.Criteria;
import com.github.nmorel.gwtjackson.benchmark.client.Operation;
import com.github.nmorel.gwtjackson.benchmark.client.data.DataContainer;
import com.github.nmorel.gwtjackson.benchmark.client.ui.ResultWidget;
import com.github.nmorel.gwtjackson.client.ObjectMapper;

/**
* @author Nicolas Morel
*/
public abstract class Mechanism {

    interface ObjectMapperProvider {

        ObjectMapper<DataContainer> getMapper();
    }

    class ObjectMapperProviderSingleton implements ObjectMapperProvider {

        private ObjectMapper<DataContainer> singleton = newMapper();

        @Override
        public ObjectMapper<DataContainer> getMapper() {
            return singleton;
        }
    }

    class ObjectMapperProviderPrototype implements ObjectMapperProvider {

        @Override
        public ObjectMapper<DataContainer> getMapper() {
            return newMapper();
        }
    }

    private ResultWidget result;

    protected Mechanism( String title ) {
        this.result = new ResultWidget( title );
    }

    public List<Operation> prepare( final DataContainer datas, Criteria criteria ) {
        final ObjectMapperProvider mapperProvider;
        if ( criteria.isSingletonMapper() ) {
            mapperProvider = new ObjectMapperProviderSingleton();
        } else {
            mapperProvider = new ObjectMapperProviderPrototype();
        }

        result.getResultSer().setVisible( criteria.isSerialization() );
        result.getResultDeser().setVisible( criteria.isDeserialization() );

        List<Operation> operations = new ArrayList<>();

        if ( criteria.isSerialization() ) {
            if ( criteria.isSingletonMapper() ) {
                // warmup the mapper
                mapperProvider.getMapper().write( datas );
            }
            operations.add( new Operation( criteria.getNbIterations(), result.getResultSer() ) {
                @Override
                protected void doExecute() {
                    mapperProvider.getMapper().write( datas );
                }
            } );
        }

        if ( criteria.isDeserialization() ) {
            final String jsonInput = mapperProvider.getMapper().write( datas );
            operations.add( new Operation( criteria.getNbIterations(), result.getResultDeser() ) {
                @Override
                protected void doExecute() {
                    mapperProvider.getMapper().read( jsonInput );
                }
            } );
        }

        return operations;
    }

    public ResultWidget getResult() {
        return result;
    }

    public void clear() {
        result.getResultSer().setResult( null );
        result.getResultDeser().setResult( null );
    }

    protected abstract ObjectMapper<DataContainer> newMapper();
}
TOP

Related Classes of com.github.nmorel.gwtjackson.benchmark.client.mechanism.Mechanism$ObjectMapperProviderPrototype

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.