pt.ist.expenditureTrackingSystem.domain.authorizations.DelegatedAuthorization.java Source code

Java tutorial

Introduction

Here is the source code for pt.ist.expenditureTrackingSystem.domain.authorizations.DelegatedAuthorization.java

Source

/*
 * @(#)DelegatedAuthorization.java
 *
 * Copyright 2009 Instituto Superior Tecnico
 * Founding Authors: Luis Cruz, Nuno Ochoa, Paulo Abrantes
 * 
 *      https://fenix-ashes.ist.utl.pt/
 * 
 *   This file is part of the Expenditure Tracking Module.
 *
 *   The Expenditure Tracking Module is free software: you can
 *   redistribute it and/or modify it under the terms of the GNU Lesser General
 *   Public License as published by the Free Software Foundation, either version 
 *   3 of the License, or (at your option) any later version.
 *
 *   The Expenditure Tracking Module 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 Lesser General Public License for more details.
 *
 *   You should have received a copy of the GNU Lesser General Public License
 *   along with the Expenditure Tracking Module. If not, see <http://www.gnu.org/licenses/>.
 * 
 */
package pt.ist.expenditureTrackingSystem.domain.authorizations;

import module.finance.util.Money;

import org.joda.time.LocalDate;

import pt.ist.expenditureTrackingSystem._development.Bundle;
import pt.ist.expenditureTrackingSystem.domain.organization.Person;
import pt.ist.expenditureTrackingSystem.domain.organization.Unit;
import pt.ist.expenditureTrackingSystem.domain.util.DomainException;
import pt.ist.fenixframework.Atomic;

/**
 * 
 * @author Paulo Abrantes
 * @author Luis Cruz
 * 
 */
public class DelegatedAuthorization extends DelegatedAuthorization_Base {

    DelegatedAuthorization(Person delegatedPerson, Unit unit, Authorization authorization, Boolean canDelegate,
            LocalDate endDate, Money maxAmount) {
        super();
        checkParameters(authorization, delegatedPerson, unit, canDelegate, endDate, maxAmount);
        setPerson(delegatedPerson);
        setAuthorization(authorization);
        setCanDelegate(canDelegate);
        setUnit(unit);
        setStartDate(new LocalDate());
        setEndDate(endDate);
        setMaxAmount(maxAmount);
    }

    private void checkParameters(Authorization authorization, Person delegatedPerson, Unit unit,
            Boolean canDelegate, LocalDate endDate, Money maxAmount) {
        if (authorization == null || delegatedPerson == null || canDelegate == null || unit == null) {
            throw new DomainException(Bundle.EXPENDITURE, "error.authorization.person.and.delegation.are.required");
        }

        if (authorization.getEndDate() != null && ((endDate != null && endDate.isAfter(authorization.getEndDate())
                || (authorization.getEndDate() != null && endDate == null)))) {
            throw new DomainException(Bundle.EXPENDITURE,
                    "error.authorization.cannot.be.delegated.after.your.end.date");
        }

        if (!unit.isSubUnit(authorization.getUnit())) {
            throw new DomainException(Bundle.EXPENDITURE, "error.unit.is.not.subunit.of.authorization.unit");
        }

        if (maxAmount == null || maxAmount.isGreaterThan(authorization.getMaxAmount())) {
            throw new DomainException(Bundle.EXPENDITURE,
                    "error.maxAmount.cannot.be.greater.than.authorization.maxAmount");
        }

    }

    public Person getDelegatingPerson() {
        return getAuthorization().getPerson();
    }

    @Atomic
    public static void delegate(Authorization authorization, Person person, Unit unit, Boolean canDelegate,
            LocalDate endDate, Money maxAmount) {
        new DelegatedAuthorization(person, unit, authorization, canDelegate, endDate, maxAmount);
    }

    @Override
    public boolean isPersonAbleToRevokeDelegatedAuthorization(Person person) {
        return getDelegatingPerson() == person
                || getAuthorization().isPersonAbleToRevokeDelegatedAuthorization(person);
    }

    @Override
    public void delete() {
        setAuthorization(null);
        super.delete();
    }

    @Deprecated
    public boolean hasAuthorization() {
        return getAuthorization() != null;
    }

}