com.mothsoft.alexis.service.impl.DataSetServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.mothsoft.alexis.service.impl.DataSetServiceImpl.java

Source

/*   Copyright 2012 Tim Garrett, Mothsoft LLC
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package com.mothsoft.alexis.service.impl;

import java.sql.Timestamp;
import java.util.List;

import javax.persistence.EntityNotFoundException;

import org.springframework.transaction.annotation.Transactional;

import com.mothsoft.alexis.dao.DataSetDao;
import com.mothsoft.alexis.dao.DataSetPointDao;
import com.mothsoft.alexis.dao.DataSetTypeDao;
import com.mothsoft.alexis.dao.TopicDao;
import com.mothsoft.alexis.domain.DataSet;
import com.mothsoft.alexis.domain.DataSetPoint;
import com.mothsoft.alexis.domain.DataSetType;
import com.mothsoft.alexis.domain.TimeUnits;
import com.mothsoft.alexis.domain.Topic;
import com.mothsoft.alexis.domain.TopicActivityDataSet;
import com.mothsoft.alexis.engine.numeric.CorrelationCalculator;
import com.mothsoft.alexis.security.CurrentUserUtil;
import com.mothsoft.alexis.service.DataSetService;

@Transactional
public class DataSetServiceImpl implements DataSetService {

    private DataSetDao dataSetDao;
    private DataSetTypeDao dataSetTypeDao;
    private DataSetPointDao dataSetPointDao;
    private TopicDao topicDao;
    private CorrelationCalculator correlationCalculator;

    public DataSetServiceImpl(final DataSetDao dataSetDao, final DataSetTypeDao dataSetTypeDao,
            final DataSetPointDao dataSetPointDao, final TopicDao topicDao,
            final CorrelationCalculator correlationCalculator) {
        this.dataSetDao = dataSetDao;
        this.dataSetTypeDao = dataSetTypeDao;
        this.dataSetPointDao = dataSetPointDao;
        this.topicDao = topicDao;
        this.correlationCalculator = correlationCalculator;
    }

    @Override
    public void addDataSet(DataSet set) {
        this.dataSetDao.add(set);
    }

    @Override
    public void addDataSetType(DataSetType type) {
        this.dataSetTypeDao.add(type);
    }

    @Override
    public double[][] correlate(List<DataSet> dataSets, Timestamp startDate, Timestamp endDate,
            TimeUnits granularity) {
        for (final DataSet dataSet : dataSets) {
            if (dataSet.getUserId() != null) {
                CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(dataSet.getUserId());
            }
        }
        return this.correlationCalculator.correlate(dataSets, startDate, endDate, granularity);
    }

    @Override
    public double correlate(DataSet ds1, DataSet ds2, Timestamp startDate, Timestamp endDate,
            TimeUnits granularity) {
        if (ds1.getUserId() != null) {
            CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(ds1.getUserId());
        }
        if (ds2.getUserId() != null) {
            CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(ds2.getUserId());
        }
        return this.correlationCalculator.correlate(ds1, ds2, startDate, endDate, granularity);
    }

    @Override
    public DataSetType findDataSetType(String name) {
        return this.dataSetTypeDao.findSystemDataSetType(name);
    }

    @Override
    public DataSet get(Long id) {
        final DataSet dataSet = this.dataSetDao.get(id);

        if (dataSet == null) {
            throw new EntityNotFoundException("DataSet:" + id + " not found.");
        }

        if (dataSet.getUserId() != null) {
            CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(dataSet.getUserId());
        }

        return dataSet;
    }

    @Override
    public List<DataSet> listDataSets(Long userId) {
        CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(userId);
        return this.dataSetDao.list(userId);
    }

    @Override
    public void updateDataSet(DataSet set) {
        CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(set.getUserId());
        this.dataSetDao.update(set);
    }

    @Override
    public DataSet findAggregateTopicActivityDataSet(Long userId) {
        CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(userId);
        return this.dataSetDao.findAggregateTopicActivityDataSet(userId);
    }

    @Override
    public List<DataSetPoint> findAndAggregatePointsGroupedByUnit(Long dataSetId, Timestamp startDate,
            Timestamp endDate, TimeUnits granularity) {
        final DataSet dataSet = this.get(dataSetId);

        if (dataSet.getUserId() != null) {
            CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(dataSet.getUserId());
        }

        return this.dataSetPointDao.findAndAggregatePointsGroupedByUnit(dataSet, startDate, endDate, granularity);
    }

    @Override
    public List<TopicActivityDataSet> findMostActiveTopicDataSets(Long userId, Timestamp startDate,
            Timestamp endDate, int limit) {
        CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(userId);
        return this.dataSetDao.findMostActiveTopicDataSets(userId, startDate, endDate, limit);
    }

    @Override
    public TopicActivityDataSet findTopicActivityDataSet(Long topicId) {
        final Topic topic = this.topicDao.get(topicId);
        CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(topic.getUserId());
        return this.dataSetDao.findTopicActivityDataSet(topicId);
    }

    @Override
    public List<TopicActivityDataSet> findTopicActivityDataSets(Long userId) {
        CurrentUserUtil.assertAuthenticatedUserOrAdminOrSystem(userId);
        return this.dataSetDao.findTopicActivityDataSetsByUser(userId);
    }

}