• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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;
18 
19 import android.annotation.Nullable;
20 
21 import com.android.adservices.LogUtil;
22 
23 import org.json.JSONArray;
24 import org.json.JSONException;
25 import org.json.JSONObject;
26 
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.Objects;
32 
33 
34 /**
35  * POJO for AggregatableAttributionFilterMap.
36  */
37 public class FilterMap {
38 
39     private Map<String, List<String>> mAttributionFilterMap;
40 
FilterMap()41     FilterMap() {
42         mAttributionFilterMap = new HashMap<>();
43     }
44 
45     @Override
equals(Object obj)46     public boolean equals(Object obj) {
47         if (!(obj instanceof FilterMap)) {
48             return false;
49         }
50         FilterMap attributionFilterMap = (FilterMap) obj;
51         return Objects.equals(mAttributionFilterMap, attributionFilterMap.mAttributionFilterMap);
52     }
53 
54     @Override
hashCode()55     public int hashCode() {
56         return Objects.hash(mAttributionFilterMap);
57     }
58 
59     /**
60      * Returns the attribution filter map.
61      */
getAttributionFilterMap()62     public Map<String, List<String>> getAttributionFilterMap() {
63         return mAttributionFilterMap;
64     }
65 
66     /**
67      * Serializes the object into a {@link JSONObject}.
68      *
69      * @return serialized {@link JSONObject}.
70      */
71     @Nullable
serializeAsJson()72     public JSONObject serializeAsJson() {
73         if (mAttributionFilterMap == null) {
74             return null;
75         }
76 
77         try {
78             JSONObject result = new JSONObject();
79             for (String key : mAttributionFilterMap.keySet()) {
80                 result.put(key, new JSONArray(mAttributionFilterMap.get(key)));
81             }
82 
83             return result;
84         } catch (JSONException e) {
85             LogUtil.d(e, "Failed to serialize filtermap.");
86             return null;
87         }
88     }
89 
90     /**
91      * Builder for {@link FilterMap}.
92      */
93     public static final class Builder {
94         private final FilterMap mBuilding;
95 
Builder()96         public Builder() {
97             mBuilding = new FilterMap();
98         }
99 
100         /**
101          * See {@link FilterMap#getAttributionFilterMap()}.
102          */
setAttributionFilterMap(Map<String, List<String>> attributionFilterMap)103         public Builder setAttributionFilterMap(Map<String, List<String>> attributionFilterMap) {
104             mBuilding.mAttributionFilterMap = attributionFilterMap;
105             return this;
106         }
107 
108         /**
109          * Builds FilterMap from JSONObject.
110          */
buildFilterData(JSONObject jsonObject)111         public Builder buildFilterData(JSONObject jsonObject)
112                 throws JSONException {
113             Map<String, List<String>> filterMap = new HashMap<>();
114             for (String key : jsonObject.keySet()) {
115                 JSONArray jsonArray = jsonObject.getJSONArray(key);
116                 List<String> filterMapList = new ArrayList<>();
117                 for (int i = 0; i < jsonArray.length(); i++) {
118                     filterMapList.add(jsonArray.getString(i));
119                 }
120                 filterMap.put(key, filterMapList);
121             }
122             mBuilding.mAttributionFilterMap = filterMap;
123             return this;
124         }
125 
126         /**
127          * Build the {@link FilterMap}.
128          */
build()129         public FilterMap build() {
130             return mBuilding;
131         }
132     }
133 }
134