Home | History | Annotate | Download | only in item
      1 /*
      2  * Copyright (C) 2016 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 package com.android.loganalysis.item;
     17 
     18 import org.json.JSONArray;
     19 import org.json.JSONException;
     20 import org.json.JSONObject;
     21 
     22 import java.util.Arrays;
     23 import java.util.Collection;
     24 import java.util.HashSet;
     25 import java.util.LinkedList;
     26 import java.util.Set;
     27 
     28 
     29 /**
     30  * An {@link IItem} used to store location dumps.
     31  */
     32 public class LocationDumpsItem implements IItem {
     33 
     34     /** Constant for JSON output */
     35     public static final String LOCATION_CLIENTS = "LOCATION_CLIENTS";
     36 
     37     private Collection<LocationInfoItem> mLocationClients =
     38             new LinkedList<LocationInfoItem>();
     39 
     40     public static class LocationInfoItem extends GenericItem {
     41         /** Constant for JSON output */
     42         public static final String PACKAGE = "PACKAGE";
     43         /** Constant for JSON output */
     44         public static final String EFFECTIVE_INTERVAL = "EFFECTIVE_INTERVAL";
     45         /** Constant for JSON output */
     46         public static final String MIN_INTERVAL = "MIN_INTERVAL";
     47         /** Constant for JSON output */
     48         public static final String MAX_INTERVAL = "MAX_INTERVAL";
     49         /** Constant for JSON output */
     50         public static final String REQUEST_PRIORITY = "PRIORITY";
     51         /** Constant for JSON output */
     52         public static final String LOCATION_DURATION = "LOCATION_DURATION";
     53 
     54         private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList(
     55                 PACKAGE, EFFECTIVE_INTERVAL, MIN_INTERVAL, MAX_INTERVAL, REQUEST_PRIORITY,
     56                 LOCATION_DURATION ));
     57         /**
     58          * The constructor for {@link LocationInfoItem}
     59          *
     60          * @param packageName The package that requests location
     61          * @param effective Effective interval of location request
     62          * @param min Min interval of location request
     63          * @param max Max interval of location request
     64          * @param priority The priority of the request
     65          * @param duration Duration of the request
     66          */
     67         public LocationInfoItem(String packageName, int effective, int min, int max,
     68                 String priority, int duration) {
     69             super(ATTRIBUTES);
     70             setAttribute(PACKAGE, packageName);
     71             setAttribute(EFFECTIVE_INTERVAL, effective);
     72             setAttribute(MIN_INTERVAL, min);
     73             setAttribute(MAX_INTERVAL, max);
     74             setAttribute(REQUEST_PRIORITY, priority);
     75             setAttribute(LOCATION_DURATION, duration);
     76         }
     77 
     78         /**
     79          * Get the name of the package
     80          */
     81         public String getPackage() {
     82             return (String) getAttribute(PACKAGE);
     83         }
     84 
     85         /**
     86          * Get the effective location interval
     87          */
     88         public int getEffectiveInterval() {
     89             return (int) getAttribute(EFFECTIVE_INTERVAL);
     90         }
     91 
     92         /**
     93          * Get the min location interval
     94          */
     95         public int getMinInterval() {
     96             return (int) getAttribute(MIN_INTERVAL);
     97         }
     98 
     99         /**
    100          * Get the max location interval
    101          */
    102         public int getMaxInterval() {
    103             return (int) getAttribute(MAX_INTERVAL);
    104         }
    105 
    106         /**
    107          * Get the priority of location request
    108          */
    109         public String getPriority() {
    110             return (String) getAttribute(REQUEST_PRIORITY);
    111         }
    112 
    113         /**
    114          * Get the location duration
    115          */
    116         public int getDuration() {
    117             return (int) getAttribute(LOCATION_DURATION);
    118         }
    119 
    120     }
    121 
    122     /**
    123      * Add a location client {@link LocationDumpsItem}.
    124      *
    125      * @param packageName The package that requests location
    126      * @param effective Effective interval of location request
    127      * @param min Min interval of location request
    128      * @param max Max interval of location request
    129      * @param priority The priority of the request
    130      * @param duration Duration of the request
    131      */
    132     public void addLocationClient(String packageName, int effective, int min, int max,
    133             String priority, int duration) {
    134         mLocationClients.add(new LocationInfoItem(packageName, effective, min, max, priority,
    135                 duration));
    136     }
    137 
    138     public Collection<LocationInfoItem> getLocationClients() {
    139         return mLocationClients;
    140     }
    141 
    142     /**
    143      * {@inheritDoc}
    144      */
    145     @Override
    146     public IItem merge(IItem other) throws ConflictingItemException {
    147         throw new ConflictingItemException("Location dumps items cannot be merged");
    148     }
    149 
    150     /**
    151      * {@inheritDoc}
    152      */
    153     @Override
    154     public boolean isConsistent(IItem other) {
    155         return false;
    156     }
    157 
    158     /**
    159      * {@inheritDoc}
    160      */
    161     @Override
    162     public JSONObject toJson() {
    163         JSONObject object = new JSONObject();
    164         if (mLocationClients != null) {
    165             try {
    166                 JSONArray locationClients = new JSONArray();
    167                 for (LocationInfoItem locationClient : mLocationClients) {
    168                     locationClients.put(locationClient.toJson());
    169                 }
    170                 object.put(LOCATION_CLIENTS, locationClients);
    171             } catch (JSONException e) {
    172                 // Ignore
    173             }
    174         }
    175 
    176         return object;
    177     }
    178 }
    179