aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristen Kozak <sebright@google.com>2017-05-10 12:09:14 -0700
committerKristen Kozak <sebright@google.com>2017-05-10 12:14:54 -0700
commit7e64d4d5142f2e02d647cd4a7c8d3fd39c52b044 (patch)
tree9c0663fa852617366c272a5b34f88c2aa8a49a3b
parentc47993f827beb57db8a72494fe5bbc4cde117f80 (diff)
downloadplatform_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.java84
-rw-r--r--core/src/test/java/com/google/instrumentation/stats/ViewTest.java55
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");