001// Generated by delombok at Fri Oct 04 16:05:59 CEST 2024 002/* 003 * Copyright (c) 2010-2024 Mark Allen, Norbert Bartels. 004 * 005 * Permission is hereby granted, free of charge, to any person obtaining a copy 006 * of this software and associated documentation files (the "Software"), to deal 007 * in the Software without restriction, including without limitation the rights 008 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 009 * copies of the Software, and to permit persons to whom the Software is 010 * furnished to do so, subject to the following conditions: 011 * 012 * The above copyright notice and this permission notice shall be included in 013 * all copies or substantial portions of the Software. 014 * 015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 018 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 020 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 021 * THE SOFTWARE. 022 */ 023package com.restfb; 024 025import java.io.Serializable; 026import java.util.ArrayList; 027import java.util.HashMap; 028import java.util.List; 029import java.util.Map; 030import com.restfb.json.Json; 031import com.restfb.json.JsonObject; 032import com.restfb.util.StringUtils; 033 034public class DebugHeaderInfo implements Serializable { 035 /** 036 * x-fb-debug 037 */ 038 private final String debug; 039 /** 040 * x-fb-rev 041 */ 042 private final String rev; 043 /** 044 * x-fb-trace-id 045 */ 046 private final String traceId; 047 /** 048 * the use version 049 */ 050 private final Version usedVersion; 051 /** 052 * x-app-usage 053 */ 054 private final HeaderUsage appUsage; 055 /** 056 * x-page-usage 057 */ 058 private final HeaderUsage pageUsage; 059 /** 060 * x-ad-account-usage 061 */ 062 private final HeaderUsage adAccountUsage; 063 private final BusinessUseCaseUsage businessUseCaseUsage; 064 065 private DebugHeaderInfo(String debug, String rev, String traceId, Version version, String appUsage, String pageUsage, String adAccountUsage, String businessUsage) { 066 this.debug = debug; 067 this.rev = rev; 068 this.traceId = traceId; 069 this.usedVersion = version; 070 this.appUsage = createUsage(appUsage); 071 this.pageUsage = createUsage(pageUsage); 072 this.adAccountUsage = createUsage(adAccountUsage); 073 this.businessUseCaseUsage = createBusinessUsage(businessUsage); 074 } 075 076 /** 077 * get Facebook response header field <code>x-fb-debug</code> 078 * 079 * @return the Facebook response header field <code>x-fb-debug</code> 080 */ 081 public String getDebug() { 082 return debug; 083 } 084 085 /** 086 * get Facebook response header field <code>x-fb-rev</code> 087 * 088 * @return the Facebook response header field <code>x-fb-rev</code> 089 */ 090 public String getRev() { 091 return rev; 092 } 093 094 /** 095 * get Facebook response header field <code>x-fb-trace-id</code> 096 * 097 * @return the Facebook response header field x-fb-trace-id 098 */ 099 public String getTraceId() { 100 return traceId; 101 } 102 103 /** 104 * get the version, facebook used internally to fulfill the request 105 * 106 * @return the version, facebook used internally to fulfill the request 107 */ 108 public Version getUsedVersion() { 109 return usedVersion; 110 } 111 112 /** 113 * get Facebook response header field <code>x-app-usage</code> 114 * 115 * @return the Facebook response header field x-app-usage 116 */ 117 public HeaderUsage getAppUsage() { 118 return appUsage; 119 } 120 121 /** 122 * get Facebook response header field <code>x-page-usage</code> 123 * 124 * @return the Facebook response header field x-page-usage 125 */ 126 public HeaderUsage getPageUsage() { 127 return pageUsage; 128 } 129 130 /** 131 * get Facebook response header field <code>x-ad-account-usage</code> 132 * 133 * @return the Facebook response header field x-ad-account-usage 134 */ 135 public HeaderUsage getAdAccountUsage() { 136 return adAccountUsage; 137 } 138 139 public BusinessUseCaseUsage getBusinessUseCaseUsage() { 140 return businessUseCaseUsage; 141 } 142 143 private BusinessUseCaseUsage createBusinessUsage(String businessUsageInformation) { 144 if (StringUtils.isBlank(businessUsageInformation)) { 145 return null; 146 } 147 try { 148 DefaultJsonMapper jsonMapper = new DefaultJsonMapper(); 149 JsonObject jsonObject = Json.parse(businessUsageInformation).asObject(); 150 BusinessUseCaseUsage usage = new BusinessUseCaseUsage(); 151 for (String key : jsonObject.names()) { 152 usage.put(key, jsonMapper.toJavaList(jsonObject.get(key).toString(), InnerBusinessUseCaseUsage.class)); 153 } 154 return usage; 155 } catch (Exception e) { 156 return null; 157 } 158 } 159 160 private HeaderUsage createUsage(String usageInformation) { 161 if (StringUtils.isBlank(usageInformation)) { 162 return null; 163 } 164 try { 165 JsonObject jsonValue = Json.parse(usageInformation).asObject(); 166 if (jsonValue.names().size() == 1 && jsonValue.contains("acc_id_util_pct")) { 167 return new HeaderUsage(jsonValue.getDouble("acc_id_util_pct", 0.0)); 168 } 169 return new HeaderUsage(jsonValue.getInt("call_count", -1), jsonValue.getInt("total_time", -1), jsonValue.getInt("total_cputime", -1)); 170 } catch (Exception e) { 171 return new HeaderUsage(usageInformation); 172 } 173 } 174 175 176 /** 177 * business use case based usage object. 178 * <p> 179 * This usage object is used in Graph API 3.3+ and provides access to the complete set of inner objects. 180 */ 181 public static class BusinessUseCaseUsage implements Serializable { 182 private Map<String, List<InnerBusinessUseCaseUsage>> usageMap = new HashMap<>(); 183 184 /** 185 * add a new list of usages that belongs to the business id to the outer object 186 * 187 * @param key 188 * the business id the list of usages is connected with 189 * @param businessUseCaseUsageList 190 * the list of usages 191 */ 192 void put(String key, List<InnerBusinessUseCaseUsage> businessUseCaseUsageList) { 193 usageMap.put(key, businessUseCaseUsageList); 194 } 195 196 /** 197 * returns the usage list that belongs to the given business id 198 * 199 * @param businessId 200 * the business ids you like to fetch the usage list for 201 * @return the list of usages 202 */ 203 public List<InnerBusinessUseCaseUsage> get(String businessId) { 204 return usageMap.get(businessId); 205 } 206 207 /** 208 * returns the list of Business Ids that are provided in the the business use case usage header 209 * 210 * @return list of business ids 211 */ 212 public List<String> getBusinessIds() { 213 return new ArrayList<>(usageMap.keySet()); 214 } 215 } 216 217 218 public static class InnerBusinessUseCaseUsage implements Serializable { 219 /** 220 * Percentage of calls made for this business id/business ad account 221 */ 222 @Facebook("call_count") 223 private Integer callCount; 224 /** 225 * Percentage of the total CPU time that has been used 226 */ 227 @Facebook("total_cputime") 228 private Integer totalCputime; 229 /** 230 * Percentage of the total time that has been used 231 */ 232 @Facebook("total_time") 233 private Integer totalTime; 234 /** 235 * Type of rate limit logic being applied 236 */ 237 @Facebook 238 private String type; 239 /** 240 * Time in minutes to resume calls 241 */ 242 @Facebook("estimated_time_to_regain_access") 243 private Integer estimatedTimeToRegainAccess; 244 245 /** 246 * Percentage of calls made for this business id/business ad account 247 */ 248 @java.lang.SuppressWarnings("all") 249 public Integer getCallCount() { 250 return this.callCount; 251 } 252 253 /** 254 * Percentage of the total CPU time that has been used 255 */ 256 @java.lang.SuppressWarnings("all") 257 public Integer getTotalCputime() { 258 return this.totalCputime; 259 } 260 261 /** 262 * Percentage of the total time that has been used 263 */ 264 @java.lang.SuppressWarnings("all") 265 public Integer getTotalTime() { 266 return this.totalTime; 267 } 268 269 /** 270 * Type of rate limit logic being applied 271 */ 272 @java.lang.SuppressWarnings("all") 273 public String getType() { 274 return this.type; 275 } 276 277 /** 278 * Time in minutes to resume calls 279 */ 280 @java.lang.SuppressWarnings("all") 281 public Integer getEstimatedTimeToRegainAccess() { 282 return this.estimatedTimeToRegainAccess; 283 } 284 } 285 286 287 public static class HeaderUsage implements Serializable { 288 HeaderUsage(String percentage) { 289 this.percentage = percentage; 290 this.percentageOnly = true; 291 this.adAccountHeader = false; 292 } 293 294 HeaderUsage(Integer callCount, Integer totalTime, Integer totalCputime) { 295 this.callCount = callCount; 296 this.totalTime = totalTime; 297 this.totalCputime = totalCputime; 298 this.percentageOnly = false; 299 this.adAccountHeader = false; 300 } 301 302 HeaderUsage(Double percentage) { 303 this.accIdUtilPct = percentage; 304 this.percentageOnly = false; 305 this.adAccountHeader = true; 306 } 307 308 private final boolean percentageOnly; 309 private final boolean adAccountHeader; 310 private String percentage; 311 private Integer callCount; 312 private Integer totalTime; 313 private Integer totalCputime; 314 private Double accIdUtilPct; 315 316 @java.lang.SuppressWarnings("all") 317 public boolean isPercentageOnly() { 318 return this.percentageOnly; 319 } 320 321 @java.lang.SuppressWarnings("all") 322 public boolean isAdAccountHeader() { 323 return this.adAccountHeader; 324 } 325 326 @java.lang.SuppressWarnings("all") 327 public String getPercentage() { 328 return this.percentage; 329 } 330 331 @java.lang.SuppressWarnings("all") 332 public Integer getCallCount() { 333 return this.callCount; 334 } 335 336 @java.lang.SuppressWarnings("all") 337 public Integer getTotalTime() { 338 return this.totalTime; 339 } 340 341 @java.lang.SuppressWarnings("all") 342 public Integer getTotalCputime() { 343 return this.totalCputime; 344 } 345 346 @java.lang.SuppressWarnings("all") 347 public Double getAccIdUtilPct() { 348 return this.accIdUtilPct; 349 } 350 } 351 352 353 public static class DebugHeaderInfoFactory implements Serializable { 354 private String debug; 355 private String rev; 356 private String traceId; 357 private Version version; 358 private String appUsage; 359 private String pageUsage; 360 private String adAccountUsage; 361 private String businessUseCaseUsage; 362 363 public static DebugHeaderInfoFactory create() { 364 return new DebugHeaderInfoFactory(); 365 } 366 367 public DebugHeaderInfoFactory setVersion(Version version) { 368 this.version = version; 369 return this; 370 } 371 372 public DebugHeaderInfoFactory setDebug(String debug) { 373 this.debug = debug; 374 return this; 375 } 376 377 public DebugHeaderInfoFactory setRev(String rev) { 378 this.rev = rev; 379 return this; 380 } 381 382 public DebugHeaderInfoFactory setTraceId(String traceId) { 383 this.traceId = traceId; 384 return this; 385 } 386 387 public DebugHeaderInfoFactory setAppUsage(String appUsage) { 388 this.appUsage = appUsage; 389 return this; 390 } 391 392 public DebugHeaderInfoFactory setPageUsage(String pageUsage) { 393 this.pageUsage = pageUsage; 394 return this; 395 } 396 397 public DebugHeaderInfoFactory setAdAccountUsage(String adAccountUsage) { 398 this.adAccountUsage = adAccountUsage; 399 return this; 400 } 401 402 public DebugHeaderInfoFactory setBusinessUseCaseUsage(String businessUseCaseUsage) { 403 this.businessUseCaseUsage = businessUseCaseUsage; 404 return this; 405 } 406 407 public DebugHeaderInfo build() { 408 return new DebugHeaderInfo(this.debug, this.rev, this.traceId, this.version, this.appUsage, this.pageUsage, this.adAccountUsage, this.businessUseCaseUsage); 409 } 410 } 411}