Package org.libreplan.web.qualityforms

Source Code of org.libreplan.web.qualityforms.QualityFormModel

/*
* This file is part of LibrePlan
*
* Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
*                         Desenvolvemento Tecnolóxico de Galicia
* Copyright (C) 2010-2011 Igalia, S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.libreplan.web.qualityforms;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.Validate;
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
import org.libreplan.business.common.exceptions.ValidationException;
import org.libreplan.business.qualityforms.daos.IQualityFormDAO;
import org.libreplan.business.qualityforms.entities.QualityForm;
import org.libreplan.business.qualityforms.entities.QualityFormItem;
import org.libreplan.web.common.concurrentdetection.OnConcurrentModification;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
@Service
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
@OnConcurrentModification(goToPage = "/qualityforms/qualityForms.zul")
public class QualityFormModel implements IQualityFormModel {

    @Autowired
    private IQualityFormDAO qualityFormDAO;

    private QualityForm qualityForm;

    private List<QualityForm> listQualityForms = new ArrayList<QualityForm>();

    private final BigDecimal totalPercentage = new BigDecimal(100).setScale(2);

    public QualityFormModel() {

    }

    @Override
    @Transactional(readOnly=true)
    public List<QualityForm> getQualityForms(String predicate) {
        listQualityForms.clear();
        listQualityForms = qualityFormDAO.getAll();
        return listQualityForms;
    }

    public List<QualityForm> filterQualityForms(String predicate) {
        if ((predicate != null) && (!predicate.isEmpty())) {
            List<QualityForm> result = new ArrayList<QualityForm>();
            for (QualityForm qualityForm : listQualityForms) {
                if (qualityForm.getName().toLowerCase().contains(
                        predicate.toLowerCase())) {
                    result.add(qualityForm);
                }
            }
            return result;
        }
        return listQualityForms;
    }

    @Override
    @Transactional
    public void confirmDelete(QualityForm qualityForm) throws InstanceNotFoundException {
        qualityFormDAO.remove(qualityForm.getId());
    }

    @Override
    public void initCreate() {
        qualityForm = QualityForm.create("", "");
    }

    @Override
    public QualityForm getQualityForm() {
        return qualityForm;
    }

    @Override
    @Transactional
    public void confirmSave() throws ValidationException {
        qualityFormDAO.save(qualityForm);
    }

    @Override
    @Transactional(readOnly = true)
    public void initEdit(QualityForm qualityForm) {
        Validate.notNull(qualityForm);
        this.qualityForm = getFromDB(qualityForm);
    }

    private QualityForm getFromDB(QualityForm qualityForm) {
        return getFromDB(qualityForm.getId());
    }

    private QualityForm getFromDB(Long id) {
        try {
            QualityForm result = qualityFormDAO.find(id);
            reattachQualityFormItems(result);
            return result;
        } catch (InstanceNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    private void reattachQualityFormItems(QualityForm qualityForm) {
        for (QualityFormItem item : qualityForm.getQualityFormItems()) {
            item.getName();
        }
    }

    @Override
    @Transactional(readOnly = true)
    public List<QualityFormItem> getQualityFormItems() {
        // Safe copy
        List<QualityFormItem> items = new ArrayList<QualityFormItem>();
        if (qualityForm != null) {
            items.addAll(qualityForm.getQualityFormItems());
        }
        return items;
    }

    @Override
    public void addQualityFormItem() {
        QualityFormItem item = QualityFormItem.create();
        qualityForm.addQualityFormItemOnTop(item);
    }

    @Override
    public void confirmDeleteQualityFormItem(QualityFormItem item) {
        qualityForm.removeQualityFormItem(item);
    }

    @Override
    public boolean checkConstraintUniqueQualityFormItemName() {
        if (getQualityForm() != null) {
            return getQualityForm().isUniqueQualityFormItemsNameConstraint();
        }
        return true;
    }

    @Override
    public boolean checkConstraintUniqueQualityFormName() {
        if (getQualityForm() != null) {
            return getQualityForm().isUniqueQualityFormNameConstraint();
        }
        return true;
    }

    @Override
    public boolean checkConstraintOutOfRangeQualityFormItemPercentage(
            QualityFormItem item) {
        if ((getQualityForm() != null) && (item != null)) {
            return (!item.isQualityFormItemPercentageConstraint());
        }
        return true;
    }

    @Override
    public boolean checkConstraintUniqueQualityFormItemPercentage() {
        if (getQualityForm() != null) {
            return getQualityForm()
                    .isDuplicatesQualityFormItemPercentageConstraint();
        }
        return true;
    }

    public void downQualityFormItem(QualityFormItem qualityFormItem) {
        Integer newPosition = qualityFormItem.getPosition() + 1;
        this.getQualityForm().moveQualityFormItem(qualityFormItem, newPosition);
    }

    public void upQualityFormItem(QualityFormItem qualityFormItem) {
        Integer newPosition = qualityFormItem.getPosition() - 1;
        this.getQualityForm().moveQualityFormItem(qualityFormItem, newPosition);
    }

    @Override
    public boolean hasItemWithTotalPercentage() {
        // Check if the current quality form has any item with 100 percentage to
        // can report progress
        if (getQualityForm() != null) {
            for (QualityFormItem item : this.getQualityForm()
                    .getQualityFormItems()) {
                if (isTotalPercentage(item)) {
                    return true;
                }
            }
        }
        return false;
    }

    @Override
    public Boolean isTotalPercentage(QualityFormItem item) {
        return (item.getPercentage() != null) ? (item.getPercentage()
                .compareTo(totalPercentage) == 0) : false;
    }

    @Override
    @Transactional(readOnly = true)
    public void checkHasTasks(QualityForm qualityForm) throws ValidationException {
        qualityFormDAO.checkHasTasks(qualityForm);
    }
}
TOP

Related Classes of org.libreplan.web.qualityforms.QualityFormModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.