/*
* 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.Comparator;
import java.util.SortedSet;
import java.util.TreeSet;
import org.libreplan.business.advance.entities.DirectAdvanceAssignment;
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 NonCalculatedConsolidation extends Consolidation {
private SortedSet<NonCalculatedConsolidatedValue> consolidatedValues = new TreeSet<>(new ConsolidatedValueComparator());
@AfterCopy
private void instantiateConsolidatedValuesWithComparator() {
SortedSet<NonCalculatedConsolidatedValue> previous = consolidatedValues;
consolidatedValues = new TreeSet<>(new ConsolidatedValueComparator());
consolidatedValues.addAll(previous);
}
@OnCopy(Strategy.SHARE)
private DirectAdvanceAssignment directAdvanceAssignment;
public static NonCalculatedConsolidation create(Task task, DirectAdvanceAssignment directAdvanceAssignment) {
return create(new NonCalculatedConsolidation(task, directAdvanceAssignment));
}
public static NonCalculatedConsolidation create(Task task,
DirectAdvanceAssignment directAdvanceAssignment,
SortedSet<NonCalculatedConsolidatedValue> consolidatedValues) {
return create(new NonCalculatedConsolidation(task, directAdvanceAssignment, consolidatedValues));
}
/**
* Constructor for {@link DeepCopy}. DO NOT USE!
*/
public NonCalculatedConsolidation() {
}
protected NonCalculatedConsolidation(Task task,
DirectAdvanceAssignment directAdvanceAssignment,
SortedSet<NonCalculatedConsolidatedValue> consolidatedValues) {
this(task, directAdvanceAssignment);
this.setConsolidatedValues(consolidatedValues);
}
public NonCalculatedConsolidation(Task task, DirectAdvanceAssignment directAdvanceAssignment) {
super(task);
this.directAdvanceAssignment = directAdvanceAssignment;
}
@Override
public SortedSet<ConsolidatedValue> getConsolidatedValues() {
TreeSet<ConsolidatedValue> result = new TreeSet<>(new Comparator<ConsolidatedValue>() {
@Override
public int compare(ConsolidatedValue arg0, ConsolidatedValue arg1) {
return arg0.getDate().compareTo(arg1.getDate());
}
});
result.addAll(consolidatedValues);
return result;
}
public SortedSet<NonCalculatedConsolidatedValue> getNonCalculatedConsolidatedValues() {
return consolidatedValues;
}
public void setConsolidatedValues(SortedSet<NonCalculatedConsolidatedValue> consolidatedValues) {
this.consolidatedValues = consolidatedValues;
}
public void setDirectAdvanceAssignment(DirectAdvanceAssignment directAdvanceAssignment) {
this.directAdvanceAssignment = directAdvanceAssignment;
}
public DirectAdvanceAssignment getDirectAdvanceAssignment() {
return directAdvanceAssignment;
}
public void addConsolidatedValue(NonCalculatedConsolidatedValue value) {
if (!consolidatedValues.contains(value)) {
value.setConsolidation(this);
this.consolidatedValues.add(value);
}
}
@Override
public boolean isCalculated() {
return false;
}
@Override
public boolean isEmpty() {
return consolidatedValues.isEmpty();
}
}