diff options
| author | Kristen Kozak <sebright@google.com> | 2017-05-10 12:09:14 -0700 |
|---|---|---|
| committer | Kristen Kozak <sebright@google.com> | 2017-05-10 12:14:54 -0700 |
| commit | 7e64d4d5142f2e02d647cd4a7c8d3fd39c52b044 (patch) | |
| tree | 9c0663fa852617366c272a5b34f88c2aa8a49a3b | |
| parent | c47993f827beb57db8a72494fe5bbc4cde117f80 (diff) | |
| download | platform_external_opencensus-java-7e64d4d5142f2e02d647cd4a7c8d3fd39c52b044.tar.gz platform_external_opencensus-java-7e64d4d5142f2e02d647cd4a7c8d3fd39c52b044.tar.bz2 platform_external_opencensus-java-7e64d4d5142f2e02d647cd4a7c8d3fd39c52b044.zip | |
Use AutoValue to implement View.
| -rw-r--r-- | core/src/main/java/com/google/instrumentation/stats/View.java | 84 | ||||
| -rw-r--r-- | core/src/test/java/com/google/instrumentation/stats/ViewTest.java | 55 |
2 files changed, 83 insertions, 56 deletions
diff --git a/core/src/main/java/com/google/instrumentation/stats/View.java b/core/src/main/java/com/google/instrumentation/stats/View.java index 30443338..34ed8b95 100644 --- a/core/src/main/java/com/google/instrumentation/stats/View.java +++ b/core/src/main/java/com/google/instrumentation/stats/View.java @@ -13,18 +13,20 @@ package com.google.instrumentation.stats; +import com.google.auto.value.AutoValue; import com.google.instrumentation.common.Function; import com.google.instrumentation.common.Timestamp; import com.google.instrumentation.stats.ViewDescriptor.DistributionViewDescriptor; import com.google.instrumentation.stats.ViewDescriptor.IntervalViewDescriptor; - import java.util.ArrayList; import java.util.Collections; import java.util.List; +import javax.annotation.concurrent.Immutable; /** * The aggregated data for a particular {@link ViewDescriptor}. */ +@Immutable public abstract class View { /** * The {@link ViewDescriptor} associated with this {@link View}. @@ -45,109 +47,83 @@ public abstract class View { /** * A {@link View} for distribution-based aggregations. */ - public static final class DistributionView extends View { + @Immutable + @AutoValue + public abstract static class DistributionView extends View { /** * Constructs a new {@link DistributionView}. */ public static DistributionView create(DistributionViewDescriptor distributionViewDescriptor, List<DistributionAggregation> distributionAggregations, Timestamp start, Timestamp end) { - return new DistributionView(distributionViewDescriptor, distributionAggregations, start, end); + return new AutoValue_View_DistributionView( + distributionViewDescriptor, + Collections.unmodifiableList( + new ArrayList<DistributionAggregation>(distributionAggregations)), + start, + end); } + @Override + public abstract DistributionViewDescriptor getViewDescriptor(); + /** * The {@link DistributionAggregation}s associated with this {@link DistributionView}. * * <p>Note: The returned list is unmodifiable, attempts to update it will throw an * UnsupportedOperationException. */ - public List<DistributionAggregation> getDistributionAggregations() { - return distributionAggregations; - } + public abstract List<DistributionAggregation> getDistributionAggregations(); /** * Returns start timestamp for this aggregation. */ - public Timestamp getStart() { - return start; - } + public abstract Timestamp getStart(); /** * Returns end timestamp for this aggregation. */ - public Timestamp getEnd() { - return end; - } + public abstract Timestamp getEnd(); @Override - public DistributionViewDescriptor getViewDescriptor() { - return distributionViewDescriptor; - } - - @Override - public <T> T match( + public final <T> T match( Function<DistributionView, T> p0, Function<IntervalView, T> p1) { return p0.apply(this); } - - private final DistributionViewDescriptor distributionViewDescriptor; - private final List<DistributionAggregation> distributionAggregations; - private final Timestamp start; - private final Timestamp end; - - private DistributionView(DistributionViewDescriptor distributionViewDescriptor, - List<DistributionAggregation> distributionAggregations, Timestamp start, Timestamp end) { - this.distributionViewDescriptor = distributionViewDescriptor; - this.distributionAggregations = - Collections.unmodifiableList( - new ArrayList<DistributionAggregation>(distributionAggregations)); - this.start = start; - this.end = end; - } } /** * A {@link View} for interval-base aggregations. */ - public static final class IntervalView extends View { + @Immutable + @AutoValue + public abstract static class IntervalView extends View { /** * Constructs a new {@link IntervalView}. */ public static IntervalView create(IntervalViewDescriptor intervalViewDescriptor, List<IntervalAggregation> intervalAggregations) { - return new IntervalView(intervalViewDescriptor, intervalAggregations); + return new AutoValue_View_IntervalView( + intervalViewDescriptor, + Collections.unmodifiableList(new ArrayList<IntervalAggregation>(intervalAggregations))); } + @Override + public abstract IntervalViewDescriptor getViewDescriptor(); + /** * The {@link IntervalAggregation}s associated with this {@link IntervalView}. * * <p>Note: The returned list is unmodifiable, attempts to update it will throw an * UnsupportedOperationException. */ - public List<IntervalAggregation> getIntervalAggregations() { - return intervalAggregations; - } - - @Override - public IntervalViewDescriptor getViewDescriptor() { - return intervalViewDescriptor; - } + public abstract List<IntervalAggregation> getIntervalAggregations(); @Override - public <T> T match( + public final <T> T match( Function<DistributionView, T> p0, Function<IntervalView, T> p1) { return p1.apply(this); } - - private final IntervalViewDescriptor intervalViewDescriptor; - private final List<IntervalAggregation> intervalAggregations; - - private IntervalView(IntervalViewDescriptor intervalViewDescriptor, - List<IntervalAggregation> intervalAggregations) { - this.intervalViewDescriptor = intervalViewDescriptor; - this.intervalAggregations = - Collections.unmodifiableList(new ArrayList<IntervalAggregation>(intervalAggregations)); - } } } diff --git a/core/src/test/java/com/google/instrumentation/stats/ViewTest.java b/core/src/test/java/com/google/instrumentation/stats/ViewTest.java index 7a1dd483..73462b19 100644 --- a/core/src/test/java/com/google/instrumentation/stats/ViewTest.java +++ b/core/src/test/java/com/google/instrumentation/stats/ViewTest.java @@ -14,9 +14,9 @@ package com.google.instrumentation.stats; import static com.google.common.truth.Truth.assertThat; - import static org.junit.Assert.assertTrue; +import com.google.common.testing.EqualsTester; import com.google.instrumentation.common.Duration; import com.google.instrumentation.common.Function; import com.google.instrumentation.common.Timestamp; @@ -28,8 +28,8 @@ import com.google.instrumentation.stats.View.DistributionView; import com.google.instrumentation.stats.View.IntervalView; import com.google.instrumentation.stats.ViewDescriptor.DistributionViewDescriptor; import com.google.instrumentation.stats.ViewDescriptor.IntervalViewDescriptor; - import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; @@ -104,6 +104,57 @@ public final class ViewTest { })); } + @Test + public void testViewEquals() { + DistributionViewDescriptor dViewDescriptor = + DistributionViewDescriptor.create( + name, + description, + measurementDescriptor, + DistributionAggregationDescriptor.create(Arrays.asList(10.0)), + tagKeys); + List<DistributionAggregation> dAggregations = + Arrays.asList( + DistributionAggregation.create( + 5, 5.0, 15.0, Range.create(1.0, 5.0), tags1, Arrays.asList(1L))); + IntervalViewDescriptor iViewDescriptor = + IntervalViewDescriptor.create( + name, + description, + measurementDescriptor, + IntervalAggregationDescriptor.create(Arrays.asList(Duration.fromMillis(111))), + tagKeys); + List<IntervalAggregation> iAggregations = + Arrays.asList( + IntervalAggregation.create( + tags1, Arrays.asList(Interval.create(Duration.fromMillis(111), 10, 100)))); + + new EqualsTester() + .addEqualityGroup( + DistributionView.create( + dViewDescriptor, + dAggregations, + Timestamp.fromMillis(1000), + Timestamp.fromMillis(2000)), + DistributionView.create( + dViewDescriptor, + dAggregations, + Timestamp.fromMillis(1000), + Timestamp.fromMillis(2000))) + .addEqualityGroup( + DistributionView.create( + dViewDescriptor, + dAggregations, + Timestamp.fromMillis(1000), + Timestamp.fromMillis(3000))) + .addEqualityGroup( + IntervalView.create(iViewDescriptor, iAggregations), + IntervalView.create(iViewDescriptor, iAggregations)) + .addEqualityGroup( + IntervalView.create(iViewDescriptor, Collections.<IntervalAggregation>emptyList())) + .testEquals(); + } + // tag keys private static final TagKey K1 = TagKey.create("k1"); private static final TagKey K2 = TagKey.create("k2"); |
