private GranularityLayer makeSingleLayerFromSpec(GranularitySpec spec) { Granularity gran = spec.gran; return new GranularityLayer(gran, gran.times(2), spec.includeStart.divideBy(gran), spec.excludeStart.divideBy(gran)); }
public RollUpStructure build() { if (specs.size() < 1) { throw new IllegalStateException("Attempted to build a structure with < 1 layer"); } if (specs.size() == 1) { return new RollUpStructure(Arrays.asList(makeSingleLayerFromSpec(specs.get(0)))); } sort(specs); massageFinestSpecToAlignOnParentGranularity(); massageSpecsWithAutoEndTimes(); massageSpecsToAlignOnParentGranularities(); massageLargestSpecToContainChildGranularity(); List<GranularityLayer> layers = new ArrayList<GranularityLayer>(); for (int i=0; i<specs.size(); i++) { GranularitySpec spec = specs.get(i); Granularity gran = spec.gran; Granularity parentGran = spec.gran; if (i != specs.size() - 1) { parentGran = specs.get(i+1).gran; } layers.add(new GranularityLayer(gran, parentGran, spec.includeStart.divideBy(gran), spec.excludeStart.divideBy(gran))); } return new RollUpStructure(layers); }