From 612504ca1e572ff91d5c76584d0f1ffaac001c72 Mon Sep 17 00:00:00 2001 From: Jean Palate Date: Fri, 4 Dec 2015 12:48:05 +0100 Subject: [PATCH] Small corrections --- src/main/java/demetra/cli/sa/XmlSaTs.java | 2 +- .../demetra/cli/sa/XmlSaTsCollection.java | 2 +- .../java/demetra/cli/various/TsAggregate.java | 92 ++++++++----------- 3 files changed, 41 insertions(+), 55 deletions(-) diff --git a/src/main/java/demetra/cli/sa/XmlSaTs.java b/src/main/java/demetra/cli/sa/XmlSaTs.java index 76c3319..3bc8760 100644 --- a/src/main/java/demetra/cli/sa/XmlSaTs.java +++ b/src/main/java/demetra/cli/sa/XmlSaTs.java @@ -51,7 +51,7 @@ public final class XmlSaTs implements IXmlConverter { public SaTool.SaTs create() { SaTool.SaTs result = new SaTool.SaTs(); result.setName(name); - result.setMoniker(new TsMoniker(source, identifier)); + result.setMoniker(TsMoniker.createDynamicMoniker()); result.setAlgorithm(algorithm); result.setSpec(spec); if (invalidDataCause == null && values != null) { diff --git a/src/main/java/demetra/cli/sa/XmlSaTsCollection.java b/src/main/java/demetra/cli/sa/XmlSaTsCollection.java index 529eba0..83f80df 100644 --- a/src/main/java/demetra/cli/sa/XmlSaTsCollection.java +++ b/src/main/java/demetra/cli/sa/XmlSaTsCollection.java @@ -51,7 +51,7 @@ public final class XmlSaTsCollection implements IXmlConverter { - + public static void main(String[] args) { BasicCliLauncher.run(args, Parser::new, TsAggregate::new, o -> o.so); } - + public static final class Parameters { - + StandardOptions so; public InputOptions input; - public List weights; + public List weights; public OutputOptions output; } - + @Override public void exec(Parameters params) throws Exception { TsCollectionInformation input = params.input.readValue(XmlTsCollection.class); - - if (input.items.size() != params.weights.size()) { + + if (!params.weights.isEmpty() && input.items.size() != params.weights.size()) { throw new IllegalArgumentException("Invalid weights list size"); } - + TsCollectionInformation result = new TsCollectionInformation(); - - if (!input.items.isEmpty()) { + + if (!params.weights.isEmpty()) { result.items.add(process(input.items, params.weights)); + } else { + result.items.add(process(input.items, null)); } - + params.output.writeValue(XmlTsCollection.class, result); } - + @VisibleForTesting - static TsInformation process(List input, List weights) { + static TsInformation process(List input, List weights) { TsInformation result = new TsInformation(); result.metaData = processMeta(input); result.data = processData(input, weights); + result.name = "aggregate"; return result; } - + @VisibleForTesting static MetaData processMeta(List input) { Map tmp = new HashMap<>(); @@ -103,47 +107,29 @@ static MetaData processMeta(List input) { } return new MetaData(tmp); } - + @VisibleForTesting - static TsData processData(List input, List weights) { - int totalWeights = weights.get(0); - TsPeriod minPeriod = input.get(0).data.getStart(); - TsPeriod maxPeriod = input.get(0).data.getLastPeriod(); + static TsData processData(List input, List weights) { + TsAggregator agg = new TsAggregator(); for (int i = 1; i < input.size(); i++) { - TsData item = input.get(i).data; - totalWeights += weights.get(i); - minPeriod = min(minPeriod, item.getStart()); - maxPeriod = max(maxPeriod, item.getLastPeriod()); - } - - TsData data = new TsData(minPeriod, maxPeriod.minus(minPeriod) + 1); - data.getValues().setMissingValues(0); - for (int i = 0; i < input.size(); i++) { - TsData item = input.get(i).data; - int baseIdx = item.getStart().minus(minPeriod); - for (int j = 0; j < item.getLength(); j++) { - data.set(baseIdx + j, data.get(j) + item.get(j) * weights.get(i) / totalWeights); + if (weights != null) { + agg.add(input.get(i).data, weights.get(i)); + } else { + agg.add(input.get(i).data); } } - return data; - } - - private static TsPeriod min(TsPeriod l, TsPeriod r) { - return l.isBefore(r) ? l : r; + + return agg.sum(); } - - private static TsPeriod max(TsPeriod l, TsPeriod r) { - return l.isAfter(r) ? l : r; - } - + @VisibleForTesting static final class Parser extends BasicArgsParser { - + private final ComposedOptionSpec so = newStandardOptionsSpec(parser); private final ComposedOptionSpec input = newInputOptionsSpec(parser); - private final ComposedOptionSpec> weights = new WeightsSpec(parser); + private final ComposedOptionSpec> weights = new WeightsSpec(parser); private final ComposedOptionSpec output = newOutputOptionsSpec(parser); - + @Override protected TsAggregate.Parameters parse(OptionSet o) { Parameters result = new Parameters(); @@ -154,24 +140,24 @@ protected TsAggregate.Parameters parse(OptionSet o) { return result; } } - + @NbBundle.Messages({ "tsaggregate.weights=Comma-separated list of weights" }) - private static final class WeightsSpec implements ComposedOptionSpec> { - - private final OptionSpec weights; - + private static final class WeightsSpec implements ComposedOptionSpec> { + + private final OptionSpec weights; + public WeightsSpec(OptionParser p) { this.weights = p .acceptsAll(asList("w", "weights"), Bundle.tsaggregate_weights()) .withRequiredArg() - .ofType(Integer.class) + .ofType(Double.class) .withValuesSeparatedBy(','); } - + @Override - public List value(OptionSet o) { + public List value(OptionSet o) { return weights.values(o); } }