• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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.adservices.service.measurement.aggregation;
18 
19 import android.annotation.Nullable;
20 
21 import com.android.adservices.service.Flags;
22 import com.android.adservices.service.measurement.FilterMap;
23 import com.android.adservices.service.measurement.util.Filter;
24 
25 import org.json.JSONException;
26 import org.json.JSONObject;
27 
28 import java.util.List;
29 import java.util.Objects;
30 
31 /** Named Budget containing the budget name and filters info. */
32 public class AggregatableNamedBudget {
33     @Nullable private final String mName;
34     @Nullable private final List<FilterMap> mFilterSet;
35     @Nullable private final List<FilterMap> mNotFilterSet;
36 
AggregatableNamedBudget(JSONObject budgetObj, Flags flags)37     public AggregatableNamedBudget(JSONObject budgetObj, Flags flags) throws JSONException {
38         mName =
39                 !budgetObj.isNull(NamedBudgetContract.NAME)
40                         ? budgetObj.getString(NamedBudgetContract.NAME)
41                         : null;
42         Filter filter = new Filter(flags);
43 
44         mFilterSet =
45                 !budgetObj.isNull(Filter.FilterContract.FILTERS)
46                         ? filter.deserializeFilterSet(
47                                 budgetObj.getJSONArray(Filter.FilterContract.FILTERS))
48                         : null;
49 
50         mNotFilterSet =
51                 !budgetObj.isNull(Filter.FilterContract.NOT_FILTERS)
52                         ? filter.deserializeFilterSet(
53                                 budgetObj.getJSONArray(Filter.FilterContract.NOT_FILTERS))
54                         : null;
55     }
56 
57     @Override
equals(Object obj)58     public boolean equals(Object obj) {
59         if (!(obj instanceof AggregatableNamedBudget)) {
60             return false;
61         }
62         AggregatableNamedBudget budgetObj = (AggregatableNamedBudget) obj;
63         return Objects.equals(mName, budgetObj.mName)
64                 && Objects.equals(mFilterSet, budgetObj.mFilterSet)
65                 && Objects.equals(mNotFilterSet, budgetObj.mNotFilterSet);
66     }
67 
68     @Override
hashCode()69     public int hashCode() {
70         return Objects.hash(mName, mFilterSet, mNotFilterSet);
71     }
72 
73     /** Budget name to match with source. */
74     @Nullable
getName()75     public String getName() {
76         return mName;
77     }
78 
79     /** Returns NamedBudget filters. */
80     @Nullable
getFilterSet()81     public List<FilterMap> getFilterSet() {
82         return mFilterSet;
83     }
84 
85     /** Returns NamedBudget not_filters, the reverse of filter. */
86     @Nullable
getNotFilterSet()87     public List<FilterMap> getNotFilterSet() {
88         return mNotFilterSet;
89     }
90 
91     /** NamedBudget field keys. */
92     public interface NamedBudgetContract {
93         String NAMED_BUDGETS = "named_budgets";
94         String NAME = "name";
95     }
96 }
97