com.onboard.service.collaboration.impl.StepServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.onboard.service.collaboration.impl.StepServiceImpl.java

Source

/*******************************************************************************
 * Copyright [2015] [Onboard team of SERC, Peking University]
 *
 * 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.onboard.service.collaboration.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.google.common.collect.Lists;
import com.onboard.domain.mapper.StepMapper;
import com.onboard.domain.mapper.base.BaseMapper;
import com.onboard.domain.mapper.model.StepExample;
import com.onboard.domain.model.IterationItemStatus;
import com.onboard.domain.model.Step;
import com.onboard.domain.model.type.ProjectItem;
import com.onboard.service.account.UserService;
import com.onboard.service.base.AbstractBaseService;
import com.onboard.service.collaboration.IdInProjectService;
import com.onboard.service.collaboration.IterationService;
import com.onboard.service.collaboration.KeywordService;
import com.onboard.service.collaboration.ProjectItemService;
import com.onboard.service.collaboration.ProjectService;
import com.onboard.service.collaboration.StepService;
import com.onboard.service.web.SessionService;

/**
 * {@link com.onboard.service.collaboration.StepService} Service implementation
 * 
 * @generated_by_elevenframework
 * 
 */
@Transactional
@Service("stepServiceBean")
public class StepServiceImpl extends AbstractBaseService<Step, StepExample>
        implements StepService, ProjectItemService {

    @Autowired
    private StepMapper stepMapper;

    @Autowired
    private SessionService sessionService;

    @Autowired
    private UserService userService;

    @Autowired
    private IdInProjectService idInProjectService;

    @Autowired
    private ProjectService projectService;

    @Autowired
    private IterationService iterationService;

    @Autowired
    private KeywordService keywordService;

    @Override
    public Step getById(int id) {
        Step step = stepMapper.selectByPrimaryKey(id);
        if (step == null) {
            return null;
        }
        if (step.getAssigneeId() != null) {
            step.setAssignee(userService.getById(step.getAssigneeId()));
        }
        return step;
    }

    @Override
    public Step create(Step item) {
        item.setCreatedTime(new Date());
        item.setCreatorId(sessionService.getCurrentUser().getId());
        item.setCreatorName(sessionService.getCurrentUser().getName());
        item.setCreatorAvatar(sessionService.getCurrentUser().getAvatar());
        item.setIdInProject(idInProjectService.getNextIdByProjectId(item.getProjectId()));
        if (item.getAssigneeId() == null) {
            item.setAssigneeId(sessionService.getCurrentUser().getId());
        }
        if (item.getDueDate() == null) {
            item.setDueDate(DateTime.now().withTimeAtStartOfDay().plusDays(1).plusSeconds(-1).toDate());
        }
        item.setDeleted(false);
        stepMapper.insert(item);
        iterationService.addIterable(item);
        return item;
    }

    @Override
    public Step updateSelective(Step item) {
        Step old = getById(item.getId());
        Date now = new Date();
        item.setUpdatedTime(now);
        if (!item.getDueDate().equals(old.getDueDate())) {
            DateTime dt = new DateTime(item.getDueDate());
            item.setDueDate(dt.withTimeAtStartOfDay().plusDays(1).plusSeconds(-1).toDate());
        }
        if (item.getStatus() != null && !item.getStatus().equals(old.getStatus())) {
            if (item.getStatus().equals(IterationItemStatus.CLOSED.getValue())) {
                item.setCompletedTime(now);
                item.setCompleterId(sessionService.getCurrentUser().getId());
                if (item.getAssigneeId() != null) {
                    keywordService.addKeywordToUser(item, item.getAssigneeId());
                }
            }
        }
        stepMapper.updateByPrimaryKeySelective(item);
        return item;
    }

    @Override
    public List<Step> getByAttachTypeAndId(String attachType, Integer attachId) {
        Step sample = new Step();
        sample.setAttachType(attachType);
        sample.setAttachId(attachId);
        List<Step> steps = stepMapper.selectByExample(new StepExample(sample));
        for (Step step : steps) {
            step.setAssignee(userService.getById(step.getAssigneeId()));
        }
        return steps;
    }

    @Override
    public ProjectItem getItemByIdInProject(Integer projectId, Integer idInProject) {
        Step sample = new Step();
        sample.setProjectId(projectId);
        sample.setIdInProject(idInProject);
        List<Step> steps = stepMapper.selectByExample(new StepExample(sample));
        if (steps.isEmpty()) {
            return null;
        }
        assert steps.size() == 1;
        return steps.get(0);
    }

    @Override
    public List<Step> getCompletedStepsBetweenDates(Integer companyId, Date since, Date until) {
        Step sample = new Step();
        sample.setCompanyId(companyId);
        sample.setStatus(IterationItemStatus.CLOSED.getValue());
        StepExample example = new StepExample(sample);

        DateTime dt = new DateTime(since);
        since = dt.withTimeAtStartOfDay().toDate();
        dt = new DateTime(until);
        until = dt.withTimeAtStartOfDay().plusDays(1).toDate();

        example.getOredCriteria().get(0).andCompletedTimeGreaterThanOrEqualTo(since)
                .andCompletedTimeLessThan(until);
        List<Step> results = stepMapper.selectByExample(example);

        for (Step step : results) {
            step.setProject(projectService.getById(step.getProjectId()));
        }
        return results;
    }

    @Override
    public List<Step> getOpenStepsBetweenDatesByUser(int companyId, Integer userId, Date since, Date until) {
        Step sample = new Step();
        sample.setCompanyId(companyId);
        sample.setAssigneeId(userId);
        StepExample example = new StepExample(sample);
        example.getOredCriteria().get(0).andDueDateGreaterThanOrEqualTo(since).andDueDateLessThan(until);
        example.getOredCriteria().get(0).andStatusNotEqualTo(IterationItemStatus.CLOSED.getValue());
        List<Step> results = stepMapper.selectByExample(example);
        return results;
    }

    @Override
    public TreeMap<Date, Map<Integer, List<Step>>> getCompletedStepsGroupByDateByUser(int companyId, int userId,
            List<Integer> projectList, Date until, int limit) {
        Step sample = new Step();
        sample.setAssigneeId(userId);
        sample.setDeleted(false);
        sample.setStatus(IterationItemStatus.CLOSED.getValue());
        sample.setCompanyId(companyId);
        StepExample example = new StepExample(sample);
        if (projectList != null) {
            if (projectList.size() > 0) {
                example.getOredCriteria().get(0).andProjectIdIn(projectList);
            } else {
                return new TreeMap<Date, Map<Integer, List<Step>>>();
            }
        }
        example.getOredCriteria().get(0).andCompletedTimeLessThanOrEqualTo(until);
        example.setLimit(limit);
        example.setOrderByClause("completedTime desc");
        List<Step> originSteps = stepMapper.selectByExample(example);
        if (originSteps == null || originSteps.size() == 0) {
            return new TreeMap<Date, Map<Integer, List<Step>>>();
        }
        List<Step> completedSteps = appendStepsOfLastDay(originSteps, until, example);

        return getStepsGroupByDate(completedSteps);

    }

    private List<Step> appendStepsOfLastDay(List<Step> steps, Date until, StepExample example) {
        if (steps != null && steps.size() > 0) {
            Step lastStep = steps.get(steps.size() - 1);
            Date newUntil = new DateTime(lastStep.getCompletedTime()).withTimeAtStartOfDay().toDate();
            example.getOredCriteria().get(0).andCompletedTimeBetween(newUntil, until);
            steps = stepMapper.selectByExample(example);
        }
        return steps;
    }

    private TreeMap<Date, Map<Integer, List<Step>>> getStepsGroupByDate(List<Step> steps) {
        TreeMap<Date, Map<Integer, List<Step>>> map = new TreeMap<Date, Map<Integer, List<Step>>>();
        Map<Date, List<Step>> stepsGroupByDateMap = new TreeMap<Date, List<Step>>();
        for (Step step : steps) {
            Date d = new DateTime(step.getCompletedTime()).withTimeAtStartOfDay().toDate();
            if (!stepsGroupByDateMap.containsKey(d)) {
                List<Step> list = Lists.newArrayList();
                list.add(step);
                stepsGroupByDateMap.put(d, list);
            } else {
                stepsGroupByDateMap.get(d).add(step);
            }
        }
        List<Date> dateKey = new ArrayList<Date>(stepsGroupByDateMap.keySet());
        for (Date date : dateKey) {
            Map<Integer, List<Step>> stepsGroupByProjectIdMap = new TreeMap<Integer, List<Step>>();
            for (Step step : stepsGroupByDateMap.get(date)) {
                Integer projectId = step.getProjectId();
                if (!stepsGroupByProjectIdMap.containsKey(projectId)) {
                    List<Step> list = new ArrayList<Step>();
                    list.add(step);
                    stepsGroupByProjectIdMap.put(projectId, list);
                } else {
                    stepsGroupByProjectIdMap.get(projectId).add(step);
                }
            }
            map.put(date, stepsGroupByProjectIdMap);

        }

        return map;
    }

    @Override
    public Map<Integer, List<Step>> getOpenStepsByUser(Integer userId, List<Integer> projectList) {
        Step sample = new Step();
        sample.setAssigneeId(userId);
        sample.setDeleted(false);
        StepExample example = new StepExample(sample);
        example.getOredCriteria().get(0).andStatusNotEqualTo(IterationItemStatus.CLOSED.getValue());

        if (projectList != null) {
            if (projectList.size() > 0) {
                example.getOredCriteria().get(0).andProjectIdIn(projectList);
            } else {
                return new TreeMap<Integer, List<Step>>();
            }
        }
        example.setOrderByClause("createdTime desc");
        List<Step> steps = stepMapper.selectByExample(example);
        if (steps == null || steps.size() == 0) {
            return new TreeMap<Integer, List<Step>>();
        }

        return getStepsGroupByProjectId(steps);
    }

    private Map<Integer, List<Step>> getStepsGroupByProjectId(List<Step> steps) {
        TreeMap<Integer, List<Step>> map = new TreeMap<Integer, List<Step>>();
        for (Step step : steps) {
            int projectId = step.getProjectId();
            if (!map.containsKey(projectId)) {
                List<Step> list = Lists.newArrayList();
                list.add(step);
                map.put(projectId, list);
            } else {
                map.get(projectId).add(step);
            }
        }

        return map;
    }

    @Override
    protected BaseMapper<Step, StepExample> getBaseMapper() {
        return stepMapper;
    }

    @Override
    public Step newItem() {
        return new Step();
    }

    @Override
    public StepExample newExample() {
        return new StepExample();
    }

    @Override
    public StepExample newExample(Step item) {
        return new StepExample(item);
    }

    @Override
    public List<Step> getBySample(Step item, int start, int limit) {
        StepExample example = newExample(item);
        example.setLimit(start, limit);
        example.setOrderByClause("createdTime desc");
        return getBaseMapper().selectByExample(example);
    }
}