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

Java tutorial

Introduction

Here is the source code for com.onboard.service.collaboration.impl.IterationServiceImpl.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.Date;
import java.util.List;

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.IterationAttachMapper;
import com.onboard.domain.mapper.IterationMapper;
import com.onboard.domain.mapper.base.BaseMapper;
import com.onboard.domain.mapper.model.IterationAttachExample;
import com.onboard.domain.mapper.model.IterationExample;
import com.onboard.domain.model.Iteration;
import com.onboard.domain.model.Iteration.IterationStatus;
import com.onboard.domain.model.IterationAttach;
import com.onboard.domain.model.Project;
import com.onboard.domain.model.type.BaseOperateItem;
import com.onboard.domain.model.type.Iterable;
import com.onboard.service.base.AbstractBaseService;
import com.onboard.service.collaboration.IterationService;
import com.onboard.service.collaboration.ProjectService;
import com.onboard.service.common.identifiable.IdentifiableManager;
import com.onboard.service.web.SessionService;

/**
 * {@link com.onboard.service.collaboration.IterationService} Service implementation
 * 
 * @generated_by_elevenframework
 * 
 */
@Transactional
@Service("iterationServiceBean")
public class IterationServiceImpl extends AbstractBaseService<Iteration, IterationExample>
        implements IterationService {

    @Autowired
    private IterationMapper iterationMapper;

    @Autowired
    private IterationAttachMapper iterationAttachMapper;

    @Autowired
    // TODO: to delete
    private SessionService sessionService;

    @Autowired
    private IdentifiableManager identifiableManager;

    @Autowired
    private ProjectService projectService;

    @Override
    public Iteration getById(int id) {
        Iteration iteration = iterationMapper.selectByPrimaryKey(id);
        if (iteration == null) {
            return null;
        }
        iteration.setIterables(getIterablesWithBoardablesByIteration(id));
        return iteration;
    }

    @Override
    protected Iteration fillItemBeforeCreate(Iteration item) {
        if (item.getEndTime() != null) {
            DateTime dt = new DateTime(item.getEndTime());
            item.setEndTime(dt.withTimeAtStartOfDay().plusDays(1).plusSeconds(-1).toDate());
        }
        item.setStatus(Iteration.IterationStatus.CREATED.getValue());
        item.setCreatorId(sessionService.getCurrentUser().getId());
        item.setCreatorAvatar(sessionService.getCurrentUser().getAvatar());
        item.setCreatorName(sessionService.getCurrentUser().getUsername());
        return item;
    }

    @Override
    public Iteration updateSelective(Iteration item) {
        if (item == null || item.getId() == null) {
            return null;
        }
        Iteration original = iterationMapper.selectByPrimaryKey(item.getId());
        if (item.getEndTime() != null) {
            DateTime dt = new DateTime(item.getEndTime());
            item.setEndTime(dt.withTimeAtStartOfDay().plusDays(1).plusSeconds(-1).toDate());
        }
        if (isCompleteIteration(original, item)) {
            // 
            item.setEndTime(new Date());
            addNewIterationForProject(item, projectService.getById(original.getProjectId()));
        }
        item.setUpdated(new Date());
        iterationMapper.updateByPrimaryKeySelective(item);
        return item;
    }

    private boolean isCompleteIteration(Iteration original, Iteration updated) {
        return updated.getStatus() != null && !original.getStatus().equals(IterationStatus.COMPLETED.getValue())
                && updated.getStatus().equals(IterationStatus.COMPLETED.getValue());
    }

    @Override
    public Iteration getCurrentIterationByProjectId(int projectId) {
        Iteration iteration = new Iteration();
        iteration.setProjectId(projectId);
        IterationExample iterationExample = new IterationExample(iteration);
        List<String> status = Lists.newArrayList(IterationStatus.ACTIVE.getValue(),
                IterationStatus.CREATED.getValue());
        iterationExample.getOredCriteria().get(0).andStatusIn(status);
        List<Iteration> iterations = iterationMapper.selectByExample(iterationExample);
        if (iterations.isEmpty()) {
            return null;
        }
        iterations.get(0).setIterables(getIterablesWithBoardablesByIteration(iterations.get(0).getId()));
        return iterations.get(0);
    }

    @Override
    public List<Iteration> getCompleteIterationsByProjectId(int projectId) {
        Iteration sample = new Iteration();
        sample.setProjectId(projectId);
        IterationExample example = new IterationExample(sample);
        example.setOrderByClause("id desc");
        example.getOredCriteria().get(0).andStatusIn(Lists.newArrayList(IterationStatus.COMPLETED.getValue()));
        List<Iteration> iterations = iterationMapper.selectByExample(example);
        for (Iteration iteration : iterations) {
            iteration.setIterables(getIterablesByIteration(iteration.getId()));
        }
        return iterations;
    }

    @Override
    public List<Iteration> getCompleteIterationsByProjectId(int projectId, int start, int limit) {
        Iteration sample = new Iteration();
        sample.setProjectId(projectId);
        IterationExample example = new IterationExample(sample);
        example.setLimit(start, limit);
        example.setOrderByClause("id desc");
        example.getOredCriteria().get(0).andStatusIn(Lists.newArrayList(IterationStatus.COMPLETED.getValue()));
        List<Iteration> iterations = iterationMapper.selectByExample(example);
        for (Iteration iteration : iterations) {
            iteration.setIterables(getIterablesByIteration(iteration.getId()));
        }
        return iterations;
    }

    private Iteration addNewIterationForProject(Iteration lastIteration, Project project) {
        Iteration iteration = addNewIterationForProject(project);

        List<IterationAttach> iteratiAttachs = getIterationAttachsByIteration(lastIteration.getId());
        for (IterationAttach iterationAttach : iteratiAttachs) {
            if (iterationAttach.getIterable().getCompleted()) {
                iterationAttach.setCompleted(true);
                iterationAttach.setCompletedTime(new Date());
                iterationAttachMapper.updateByPrimaryKey(iterationAttach);
            } else {
                IterationAttach newIterationAttach = new IterationAttach(iterationAttach);
                newIterationAttach.setIterationId(iteration.getId());
                iterationAttachMapper.insert(newIterationAttach);
            }
        }
        return iteration;
    }

    @Override
    public Iteration addNewIterationForProject(Project project) {
        DateTime now = DateTime.now();
        Iteration iteration = new Iteration();
        iteration.setCompanyId(project.getCompanyId());
        iteration.setDeleted(false);
        iteration.setCreated(new Date());
        iteration.setUpdated(new Date());
        iteration.setCreatorId(-1);
        iteration.setEndTime(now.withTimeAtStartOfDay().plusDays(7).plusSeconds(-1).toDate());
        iteration.setProjectId(project.getId());
        iteration.setStartTime(now.withTimeAtStartOfDay().toDate());
        iteration.setStatus(IterationStatus.CREATED.getValue());
        iteration.setCreatorAvatar(sessionService.getCurrentUser().getAvatar());
        iteration.setCreatorId(sessionService.getCurrentUser().getId());
        iteration.setCreatorName(sessionService.getCurrentUser().getName());
        iterationMapper.insert(iteration);
        return iteration;
    }

    @Override
    public List<Iterable> getIterablesWithBoardablesByIteration(Integer iterationId) {
        IterationAttach sample = new IterationAttach();
        sample.setIterationId(iterationId);
        List<IterationAttach> iterationAttachs = iterationAttachMapper
                .selectByExample(new IterationAttachExample(sample));
        List<Iterable> iterables = Lists.newArrayList();
        for (IterationAttach iterationAttach : iterationAttachs) {
            BaseOperateItem identifiable = identifiableManager.getIdentifiableWithDetailByTypeAndId(
                    iterationAttach.getObjectType(), iterationAttach.getObjectId());
            if (identifiable != null && !identifiable.getDeleted()) {
                iterables.add((Iterable) identifiable);
            }
        }
        return iterables;
    }

    @Override
    public List<Iterable> getIterablesByIteration(Integer iterationId) {
        List<IterationAttach> iterationAttachs = getIterationAttachsByIteration(iterationId);
        List<Iterable> iterables = Lists.newArrayList();
        for (IterationAttach iterationAttach : iterationAttachs) {
            Iterable iterable = iterationAttach.getIterable();
            iterable.setIterationCompleted(iterationAttach.getCompleted());
            iterable.setIterationCompletedTime(iterationAttach.getCompletedTime());
            iterables.add(iterable);
        }
        return iterables;
    }

    private List<IterationAttach> getIterationAttachsByIteration(Integer iterationId) {
        IterationAttach sample = new IterationAttach();
        sample.setIterationId(iterationId);
        List<IterationAttach> iterationAttachs = iterationAttachMapper
                .selectByExample(new IterationAttachExample(sample));
        List<IterationAttach> result = Lists.newArrayList();
        for (IterationAttach iterationAttach : iterationAttachs) {
            BaseOperateItem identifiable = identifiableManager
                    .getIdentifiableByTypeAndId(iterationAttach.getObjectType(), iterationAttach.getObjectId());
            if (identifiable == null || identifiable.getDeleted()) {
                continue;
            }
            iterationAttach.setIterable((Iterable) identifiable);
            result.add(iterationAttach);
        }
        return result;
    }

    @Override
    public void addIterable(IterationAttach iterationAttach) {
        if (!iterationAttachMapper.selectByExample(new IterationAttachExample(iterationAttach)).isEmpty()) {
            return;
        }
        iterationAttach.setCompleted(false);
        iterationAttachMapper.insert(iterationAttach);
    }

    @Override
    public void removeIterable(IterationAttach iterationAttach) {
        iterationAttachMapper.deleteByExample(new IterationAttachExample(iterationAttach));
    }

    @Override
    public void removeIterable(Iterable iterable, Integer iterationId) {
        IterationAttach iterationAttach = new IterationAttach();
        iterationAttach.setIterationId(iterationId);
        iterationAttach.setObjectId(iterable.getId());
        iterationAttach.setObjectType(iterable.getType());
        removeIterable(iterationAttach);
    }

    @Override
    public void addIterable(Iterable iterable) {
        IterationAttach iterationAttach = new IterationAttach();
        iterationAttach.setCompleted(false);
        Iteration iteration = getCurrentIterationByProjectId(iterable.getProjectId());
        iterationAttach.setIterationId(iteration.getId());
        iterationAttach.setIterable(iterable);
        addIterable(iterationAttach);
    }

    @Override
    protected BaseMapper<Iteration, IterationExample> getBaseMapper() {
        return iterationMapper;
    }

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

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

    @Override
    public IterationExample newExample(Iteration item) {
        return new IterationExample(item);
    }

}