/* * 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.business.planner.entities.consolidations; import java.util.SortedSet; import java.util.TreeSet; import org.libreplan.business.advance.entities.IndirectAdvanceAssignment; import org.libreplan.business.planner.entities.Task; import org.libreplan.business.util.deepcopy.AfterCopy; import org.libreplan.business.util.deepcopy.DeepCopy; import org.libreplan.business.util.deepcopy.OnCopy; import org.libreplan.business.util.deepcopy.Strategy; /** * @author Susana Montes Pedreira <smontes@wirelessgalicia.com> */ public class CalculatedConsolidation extends Consolidation { private SortedSet<CalculatedConsolidatedValue> consolidatedValues = new TreeSet<>(new ConsolidatedValueComparator()); @OnCopy(Strategy.SHARE) private IndirectAdvanceAssignment indirectAdvanceAssignment; /** * Constructor for {@link DeepCopy}. DO NOT USE! */ public CalculatedConsolidation() { } public CalculatedConsolidation(Task task, IndirectAdvanceAssignment indirectAdvanceAssignment) { super(task); this.indirectAdvanceAssignment = indirectAdvanceAssignment; } protected CalculatedConsolidation(Task task, IndirectAdvanceAssignment indirectAdvanceAssignment, SortedSet<CalculatedConsolidatedValue> consolidatedValues) { this(task, indirectAdvanceAssignment); this.setConsolidatedValues(consolidatedValues); } @AfterCopy private void instantiateConsolidatedValuesWithComparator() { SortedSet<CalculatedConsolidatedValue> previous = consolidatedValues; consolidatedValues = new TreeSet<>(new ConsolidatedValueComparator()); consolidatedValues.addAll(previous); } public static CalculatedConsolidation create(Task task, IndirectAdvanceAssignment indirectAdvanceAssignment) { return create(new CalculatedConsolidation(task, indirectAdvanceAssignment)); } public static CalculatedConsolidation create(Task task, IndirectAdvanceAssignment indirectAdvanceAssignment, SortedSet<CalculatedConsolidatedValue> consolidatedValues) { return create(new CalculatedConsolidation(task, indirectAdvanceAssignment, consolidatedValues)); } @Override public SortedSet<ConsolidatedValue> getConsolidatedValues() { SortedSet<ConsolidatedValue> result; result = new TreeSet<>(new ConsolidatedValueComparator()); result.addAll(consolidatedValues); return result; } public SortedSet<CalculatedConsolidatedValue> getCalculatedConsolidatedValues() { return consolidatedValues; } public void setConsolidatedValues(SortedSet<CalculatedConsolidatedValue> consolidatedValues) { this.consolidatedValues = consolidatedValues; } public void setIndirectAdvanceAssignment(IndirectAdvanceAssignment indirectAdvanceAssignment) { this.indirectAdvanceAssignment = indirectAdvanceAssignment; } public IndirectAdvanceAssignment getIndirectAdvanceAssignment() { return indirectAdvanceAssignment; } public void addConsolidatedValue(CalculatedConsolidatedValue value) { if (!consolidatedValues.contains(value)) { value.setConsolidation(this); this.consolidatedValues.add(value); } } @Override public boolean isCalculated() { return true; } @Override public boolean isEmpty() { return consolidatedValues.isEmpty(); } }