/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.github.geophile.erdo.consolidate;
import java.util.List;
import static com.github.geophile.erdo.consolidate.Consolidation.Element;
class FractalConsolidationPlanner extends ConsolidationPlanner
{
// ConsolidationPlanner interface
@Override
public boolean planConsolidation(Element newElement)
{
keepSmallest.planConsolidation(newElement);
if (keepSmallest.elementsToConsolidate() == null) {
dropLargest.planConsolidation(newElement);
consolidationElements = dropLargest.elementsToConsolidate();
} else {
consolidationElements = keepSmallest.elementsToConsolidate();
}
return consolidationElements != null;
}
@Override
public List<Element> elementsToConsolidate()
{
return consolidationElements;
}
@Override
public String type()
{
return "fractal";
}
// FractalConsolidationPlanner interface
public static FractalConsolidationPlanner durable(ConsolidationSet consolidationSet,
int minConsolidationMaps,
int minConsolidationSize)
{
return new FractalConsolidationPlanner
(consolidationSet,
KeepSmallestConsolidationPlanner.durable(consolidationSet,
minConsolidationMaps,
minConsolidationSize),
DropLargestConsolidationPlanner.durable(consolidationSet,
minConsolidationMaps,
minConsolidationSize));
}
public static FractalConsolidationPlanner nonDurable(ConsolidationSet consolidationSet,
int minConsolidationMaps,
int minConsolidationSize)
{
return new FractalConsolidationPlanner
(consolidationSet,
KeepSmallestConsolidationPlanner.nonDurable(consolidationSet,
minConsolidationMaps,
minConsolidationSize),
DropLargestConsolidationPlanner.nonDurable(consolidationSet,
minConsolidationMaps,
minConsolidationSize));
}
// For use by this class
private FractalConsolidationPlanner(ConsolidationSet consolidationSet,
KeepSmallestConsolidationPlanner keepSmallest,
DropLargestConsolidationPlanner dropLargest)
{
super(consolidationSet, keepSmallest.inputDurable(), keepSmallest.outputDurable());
assert keepSmallest.inputDurable() == dropLargest.inputDurable();
assert keepSmallest.outputDurable() == dropLargest.outputDurable();
this.keepSmallest = keepSmallest;
this.dropLargest = dropLargest;
}
// Object state
private final KeepSmallestConsolidationPlanner keepSmallest;
private final DropLargestConsolidationPlanner dropLargest;
private List<Element> consolidationElements;
}