• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.server.healthconnect.fitness.aggregation;
18 
19 import android.annotation.IntDef;
20 
21 import com.android.server.healthconnect.storage.utils.SqlJoin;
22 
23 import java.lang.annotation.Retention;
24 import java.lang.annotation.RetentionPolicy;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Objects;
28 
29 /**
30  * Collection of parameters of {@link AggregateRecordRequest}.
31  *
32  * @hide
33  */
34 public final class AggregateParams {
35     private final String mTableName;
36 
37     /** Column used for time filtering. Start time for interval records. */
38     private String mTimeColumnName;
39 
40     private final List<String> mColumnsToFetch;
41     private SqlJoin mJoin;
42 
43     // Additional column used for time filtering. End time for interval records,
44     // null for other records.
45     @SuppressWarnings("NullAway") // TODO(b/317029272): fix this suppression
46     private String mExtraTimeColumnName = null;
47 
48     private String mTimeOffsetColumnName;
49 
50     private PriorityAggregationExtraParams mPriorityAggregationExtraParams;
51 
52     @SuppressWarnings("NullAway") // TODO(b/317029272): fix this suppression
AggregateParams(String tableName, List<String> columnsToFetch)53     public AggregateParams(String tableName, List<String> columnsToFetch) {
54         this(tableName, columnsToFetch, null);
55     }
56 
57     @SuppressWarnings("NullAway.Init") // TODO(b/317029272): fix this suppression
AggregateParams( String tableName, List<String> columnsToFetch, Class<?> priorityColumnDataType)58     public AggregateParams(
59             String tableName, List<String> columnsToFetch, Class<?> priorityColumnDataType) {
60         mTableName = tableName;
61         mColumnsToFetch = new ArrayList<>();
62         mColumnsToFetch.addAll(columnsToFetch);
63 
64         // TODO(b/277776749): remove dependency on columns orders
65         mPriorityAggregationExtraParams =
66                 new PriorityAggregationExtraParams(columnsToFetch.get(0), priorityColumnDataType);
67     }
68 
getJoin()69     public SqlJoin getJoin() {
70         return mJoin;
71     }
72 
getTableName()73     public String getTableName() {
74         return mTableName;
75     }
76 
getTimeColumnName()77     public String getTimeColumnName() {
78         return mTimeColumnName;
79     }
80 
getExtraTimeColumnName()81     public String getExtraTimeColumnName() {
82         return mExtraTimeColumnName;
83     }
84 
getColumnsToFetch()85     public List<String> getColumnsToFetch() {
86         return mColumnsToFetch;
87     }
88 
getTimeOffsetColumnName()89     public String getTimeOffsetColumnName() {
90         return mTimeOffsetColumnName;
91     }
92 
93     /** Sets join type. */
setJoin(SqlJoin join)94     public AggregateParams setJoin(SqlJoin join) {
95         mJoin = join;
96         return this;
97     }
98 
setTimeColumnName(String columnName)99     public AggregateParams setTimeColumnName(String columnName) {
100         mTimeColumnName = columnName;
101         return this;
102     }
103 
104     /** Appends additional columns to fetch. */
appendAdditionalColumns(List<String> additionColumns)105     public AggregateParams appendAdditionalColumns(List<String> additionColumns) {
106         mColumnsToFetch.addAll(additionColumns);
107         return this;
108     }
109 
110     /** Sets params for priority aggregation. */
setPriorityAggregationExtraParams( PriorityAggregationExtraParams extraParams)111     public AggregateParams setPriorityAggregationExtraParams(
112             PriorityAggregationExtraParams extraParams) {
113         mPriorityAggregationExtraParams = extraParams;
114         return this;
115     }
116 
117     /** Returns params for priority aggregation. */
getPriorityAggregationExtraParams()118     public PriorityAggregationExtraParams getPriorityAggregationExtraParams() {
119         return mPriorityAggregationExtraParams;
120     }
121 
setExtraTimeColumn(String extraTimeColumn)122     public AggregateParams setExtraTimeColumn(String extraTimeColumn) {
123         mExtraTimeColumnName = extraTimeColumn;
124         return this;
125     }
126 
setOffsetColumnToFetch(String mainTimeColumnOffset)127     public AggregateParams setOffsetColumnToFetch(String mainTimeColumnOffset) {
128         Objects.requireNonNull(mainTimeColumnOffset);
129         mTimeOffsetColumnName = mainTimeColumnOffset;
130         return this;
131     }
132 
133     /** Collections of parameters of priority AggregationRequest. */
134     public static class PriorityAggregationExtraParams {
135 
136         public static final int VALUE_TYPE_LONG = 0;
137         public static final int VALUE_TYPE_DOUBLE = 1;
138 
139         /** @hide */
140         @IntDef({
141             VALUE_TYPE_LONG,
142             VALUE_TYPE_DOUBLE,
143         })
144         @Retention(RetentionPolicy.SOURCE)
145         public @interface ValueColumnType {}
146 
147         @ValueColumnType private int mColumnToAggregateType;
148 
149         private String mColumnToAggregateName;
150         private String mExcludeIntervalEndColumnName;
151         private String mExcludeIntervalStartColumnName;
152 
153         @SuppressWarnings("NullAway.Init") // TODO(b/317029272): fix this suppression
PriorityAggregationExtraParams( String excludeIntervalStartColumnName, String excludeIntervalEndColumnName)154         public PriorityAggregationExtraParams(
155                 String excludeIntervalStartColumnName, String excludeIntervalEndColumnName) {
156             mExcludeIntervalStartColumnName = excludeIntervalStartColumnName;
157             mExcludeIntervalEndColumnName = excludeIntervalEndColumnName;
158         }
159 
160         @SuppressWarnings("NullAway.Init") // TODO(b/317029272): fix this suppression
PriorityAggregationExtraParams( String columnToAggregateName, Class<?> aggregationType)161         public PriorityAggregationExtraParams(
162                 String columnToAggregateName, Class<?> aggregationType) {
163             mColumnToAggregateName = columnToAggregateName;
164             // TODO(b/277776749): use intdef instead of unlimited Class<?>
165             mColumnToAggregateType =
166                     (aggregationType == Long.class ? VALUE_TYPE_LONG : VALUE_TYPE_DOUBLE);
167         }
168 
getExcludeIntervalStartColumnName()169         public String getExcludeIntervalStartColumnName() {
170             return mExcludeIntervalStartColumnName;
171         }
172 
getExcludeIntervalEndColumnName()173         public String getExcludeIntervalEndColumnName() {
174             return mExcludeIntervalEndColumnName;
175         }
176 
177         @ValueColumnType
getColumnToAggregateType()178         public int getColumnToAggregateType() {
179             return mColumnToAggregateType;
180         }
181 
getColumnToAggregateName()182         public String getColumnToAggregateName() {
183             return mColumnToAggregateName;
184         }
185     }
186 }
187