ch.algotrader.service.MeasurementServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for ch.algotrader.service.MeasurementServiceImpl.java

Source

/***********************************************************************************
 * AlgoTrader Enterprise Trading Framework
 *
 * Copyright (C) 2015 AlgoTrader GmbH - All rights reserved
 *
 * All information contained herein is, and remains the property of AlgoTrader GmbH.
 * The intellectual and technical concepts contained herein are proprietary to
 * AlgoTrader GmbH. Modification, translation, reverse engineering, decompilation,
 * disassembly or reproduction of this material is strictly forbidden unless prior
 * written permission is obtained from AlgoTrader GmbH
 *
 * Fur detailed terms and conditions consult the file LICENSE.txt or contact
 *
 * AlgoTrader GmbH
 * Aeschstrasse 6
 * 8834 Schindellegi
 ***********************************************************************************/
package ch.algotrader.service;

import java.util.Date;

import org.apache.commons.lang.Validate;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import ch.algotrader.dao.strategy.MeasurementDao;
import ch.algotrader.dao.strategy.StrategyDao;
import ch.algotrader.entity.strategy.Measurement;
import ch.algotrader.entity.strategy.Strategy;
import ch.algotrader.esper.EngineManager;

/**
 * @author <a href="mailto:aflury@algotrader.ch">Andy Flury</a>
 */
@Transactional(propagation = Propagation.SUPPORTS)
public class MeasurementServiceImpl implements MeasurementService {

    private final MeasurementDao measurementDao;

    private final StrategyDao strategyDao;

    private final EngineManager engineManager;

    public MeasurementServiceImpl(final MeasurementDao measurementDao, final StrategyDao strategyDao,
            final EngineManager engineManager) {

        Validate.notNull(measurementDao, "MeasurementDao is null");
        Validate.notNull(strategyDao, "StrategyDao is null");
        Validate.notNull(engineManager, "EngineManager is null");

        this.measurementDao = measurementDao;
        this.strategyDao = strategyDao;
        this.engineManager = engineManager;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public Measurement createMeasurement(final String strategyName, final String name, final Object value) {

        Validate.notEmpty(strategyName, "Strategy name is empty");
        Validate.notEmpty(name, "Name is empty");
        Validate.notNull(value, "Value is null");

        return createMeasurement(strategyName, name, this.engineManager.getCurrentEPTime(), value);

    }

    /**
     * {@inheritDoc}
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public Measurement createMeasurement(final String strategyName, final String name, final Date date,
            final Object value) {

        Validate.notEmpty(strategyName, "Strategy name is empty");
        Validate.notEmpty(name, "Name is empty");
        Validate.notNull(date, "Date is null");
        Validate.notNull(value, "Value is null");

        Strategy strategy = this.strategyDao.findByName(strategyName);

        // find out if there is a measurement for specified strategyName, type and date
        Measurement measurement = this.measurementDao.findMeasurementByDate(strategyName, name, date);

        if (measurement == null) {

            measurement = Measurement.Factory.newInstance();

            measurement.setStrategy(strategy);
            measurement.setName(name);
            measurement.setDateTime(date);
            measurement.setValue(value);

            this.measurementDao.save(measurement);

        } else {

            measurement.setValue(value);
        }

        return measurement;

    }

    /**
     * {@inheritDoc}
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void deleteMeasurement(final long measurementId) {

        this.measurementDao.deleteById(measurementId);

    }
}