com.mothsoft.alexis.rest.dataset.v1.impl.DataSetResourceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.mothsoft.alexis.rest.dataset.v1.impl.DataSetResourceImpl.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.rest.dataset.v1.impl;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import javax.persistence.EntityNotFoundException;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.apache.log4j.Logger;
import org.springframework.transaction.annotation.Transactional;

import com.mothsoft.alexis.domain.DateConstants;
import com.mothsoft.alexis.domain.TimeUnits;
import com.mothsoft.alexis.rest.dataset.v1.Correlation;
import com.mothsoft.alexis.rest.dataset.v1.DataSet;
import com.mothsoft.alexis.rest.dataset.v1.DataSetPoint;
import com.mothsoft.alexis.rest.dataset.v1.DataSetResource;
import com.mothsoft.alexis.security.CurrentUserUtil;
import com.mothsoft.alexis.service.DataSetService;

@Transactional
public class DataSetResourceImpl implements DataSetResource {

    private static final Logger logger = Logger.getLogger(DataSetResourceImpl.class);

    private DataSetService service;

    public DataSetResourceImpl(final DataSetService service) {
        this.service = service;
    }

    @Override
    public List<DataSetPoint> findAndAggregatePointsGroupedByUnit(Long dataSetId, Timestamp startDate,
            Timestamp endDate, String units) {
        final TimeUnits unitEnum;

        if (units == null) {
            final long duration = endDate.getTime() - startDate.getTime();
            if (duration >= DateConstants.ONE_WEEK_IN_MILLISECONDS) {
                unitEnum = TimeUnits.DAY;
            } else {
                unitEnum = TimeUnits.HOUR;
            }
        } else {
            unitEnum = TimeUnits.valueOf(units);
        }

        final List<com.mothsoft.alexis.domain.DataSetPoint> pointDomains = this.service
                .findAndAggregatePointsGroupedByUnit(dataSetId, startDate, endDate, unitEnum);
        return toDto(pointDomains);
    }

    private List<DataSetPoint> toDto(List<com.mothsoft.alexis.domain.DataSetPoint> points) {
        final List<DataSetPoint> dtos = new ArrayList<DataSetPoint>(points.size());

        for (final com.mothsoft.alexis.domain.DataSetPoint point : points) {
            dtos.add(new DataSetPoint(point.getX(), point.getY()));
        }

        return dtos;
    }

    @Override
    public DataSet getDataSet(Long id) {
        return toDto(service.get(id));
    }

    @Override
    public List<DataSet> list() {
        final List<com.mothsoft.alexis.domain.DataSet> domains = this.service
                .listDataSets(CurrentUserUtil.getCurrentUserId());

        final List<DataSet> dtos = new ArrayList<DataSet>(domains.size());

        for (final com.mothsoft.alexis.domain.DataSet domain : domains) {
            dtos.add(toDto(domain));
        }

        return dtos;
    }

    @Override
    public Correlation correlate(Long dataSetAId, Long dataSetBId, Timestamp startDate, Timestamp endDate,
            String units) {
        if (units == null) {
            final Response response = Response.status(Status.BAD_REQUEST)
                    .entity("Invalid Request: parameter 'units' expected").build();
            throw new WebApplicationException(response);
        }
        final TimeUnits unitEnum = TimeUnits.valueOf(units);

        com.mothsoft.alexis.domain.DataSet ds1 = null;
        com.mothsoft.alexis.domain.DataSet ds2 = null;

        try {
            ds1 = this.service.get(dataSetAId);
            ds2 = this.service.get(dataSetBId);
        } catch (final EntityNotFoundException nfe) {
            final Response response = Response.status(Status.BAD_REQUEST).entity("Invalid Request: unknown dataset")
                    .build();
            throw new WebApplicationException(response);
        }

        if (startDate == null) {
            final Calendar calendar = new GregorianCalendar(1900, 0, 1);
            startDate = new Timestamp(calendar.getTime().getTime());
            logger.debug("Start Date: " + startDate.toLocaleString());
        }

        if (endDate == null) {
            endDate = new Timestamp(System.currentTimeMillis());
            logger.debug("End Date: " + endDate.toLocaleString());
        }

        return new Correlation(this.service.correlate(ds1, ds2, startDate, endDate, unitEnum));
    }

    public com.mothsoft.alexis.rest.dataset.v1.DataSet toDto(final com.mothsoft.alexis.domain.DataSet domain) {
        final com.mothsoft.alexis.rest.dataset.v1.DataSet dto = new com.mothsoft.alexis.rest.dataset.v1.DataSet();

        dto.setId(domain.getId());
        dto.setName(domain.getName());
        dto.setUserId(domain.getUserId());
        dto.setType(domain.getType().getName());

        if (domain.getParentDataSet() != null) {
            dto.setParentDataSetId(domain.getParentDataSet().getId());
            dto.setParentDataSetName(domain.getParentDataSet().getName());
        }

        return dto;
    }

}