1984e52f31d596840cfa51b1238e1c43d2e1918f8saberian/*
2984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * Copyright (C) 2012 The Android Open Source Project
3984e52f31d596840cfa51b1238e1c43d2e1918f8saberian *
4984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * Licensed under the Apache License, Version 2.0 (the "License");
5984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * you may not use this file except in compliance with the License.
6984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * You may obtain a copy of the License at
7984e52f31d596840cfa51b1238e1c43d2e1918f8saberian *
8984e52f31d596840cfa51b1238e1c43d2e1918f8saberian *      http://www.apache.org/licenses/LICENSE-2.0
9984e52f31d596840cfa51b1238e1c43d2e1918f8saberian *
10984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * Unless required by applicable law or agreed to in writing, software
11984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * distributed under the License is distributed on an "AS IS" BASIS,
12984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * See the License for the specific language governing permissions and
14984e52f31d596840cfa51b1238e1c43d2e1918f8saberian * limitations under the License.
15984e52f31d596840cfa51b1238e1c43d2e1918f8saberian */
16984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
17984e52f31d596840cfa51b1238e1c43d2e1918f8saberianpackage android.bordeaux.services;
18984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
19984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.bordeaux.services.IAggregatorManager;
20984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.bordeaux.services.StringString;
21984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.content.Context;
22984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.os.RemoteException;
23984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.util.Log;
24984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.List;
25984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.ArrayList;
26984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.HashMap;
27984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.Map;
28984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
29984e52f31d596840cfa51b1238e1c43d2e1918f8saberian/** AggregatorManger for Learning framework.
30984e52f31d596840cfa51b1238e1c43d2e1918f8saberian */
31984e52f31d596840cfa51b1238e1c43d2e1918f8saberianpublic class BordeauxAggregatorManager {
32984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    static final String TAG = "BordeauxAggregatorManager";
33984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    static final String AggregatorManager_NOTAVAILABLE = "AggregatorManager not Available";
34984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private Context mContext;
35984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private IAggregatorManager mAggregatorManager;
36984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
37984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public boolean retrieveAggregatorManager() {
38984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (mAggregatorManager == null) {
39f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin            mAggregatorManager = BordeauxManagerService.getAggregatorManager(mContext);
40f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin            if (mAggregatorManager == null) {
41f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin                Log.e(TAG, AggregatorManager_NOTAVAILABLE);
42f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin                return false;
43f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin            }
44984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
45984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return true;
46984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
47984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
48984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public BordeauxAggregatorManager (Context context) {
49984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mContext = context;
50984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mAggregatorManager = BordeauxManagerService.getAggregatorManager(mContext);
51984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
52984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
53984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public Map<String, String> GetData(final String dataName) {
54984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (!retrieveAggregatorManager())
55984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
56984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        try {
57984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            return getMap(mAggregatorManager.getData(dataName));
58984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        } catch (RemoteException e) {
59984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            Log.e(TAG,"Exception in Getting " + dataName);
60984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
61984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
62984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
63984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
649c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua    public List<String> getLocationClusters() {
659c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        if (!retrieveAggregatorManager())
669c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
679c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        try {
689c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            return mAggregatorManager.getLocationClusters();
699c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        } catch (RemoteException e) {
709c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            Log.e(TAG,"Error getting location clusters");
719c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
729c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        }
739c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua    }
749c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua
75828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua    public List<String> getTimeOfDayValues() {
76828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        if (!retrieveAggregatorManager())
77828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
78828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        try {
79828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            return mAggregatorManager.getTimeOfDayValues();
80828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        } catch (RemoteException e) {
81828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            Log.e(TAG,"Error getting time of day values");
82828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
83828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        }
84828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua    }
85828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua
86828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua    public List<String> getDayOfWeekValues() {
87828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        if (!retrieveAggregatorManager())
88828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
89828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        try {
90828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            return mAggregatorManager.getDayOfWeekValues();
91828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        } catch (RemoteException e) {
92828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            Log.e(TAG,"Error getting day of week values");
93828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
94828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        }
95828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua    }
96828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua
979c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua    public boolean setFakeLocation(final String name) {
989c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        if (!retrieveAggregatorManager())
999c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
1009c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        try {
1019c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            return mAggregatorManager.setFakeLocation(name);
1029c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        } catch (RemoteException e) {
1039c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            Log.e(TAG,"Error setting fake location:" + name);
1049c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
1059c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        }
1069c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua    }
1079c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua
108828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua    public boolean setFakeTimeOfDay(final String time_of_day) {
109828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        if (!retrieveAggregatorManager())
110828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
111828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        try {
112828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            return mAggregatorManager.setFakeTimeOfDay(time_of_day);
113828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        } catch (RemoteException e) {
114828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            Log.e(TAG,"Error setting fake time of day:" + time_of_day);
115828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
116828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        }
117828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua    }
118828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua
119828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua    public boolean setFakeDayOfWeek(final String day_of_week) {
120828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        if (!retrieveAggregatorManager())
121828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
122828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        try {
123828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            return mAggregatorManager.setFakeDayOfWeek(day_of_week);
124828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        } catch (RemoteException e) {
125828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            Log.e(TAG,"Error setting fake day of week:" + day_of_week);
126828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
127828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua        }
128828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua    }
129828043fd24533ff38eeef18322e0db2a611bfd5fWei Hua
1309c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua    public boolean getFakeMode() {
1319c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        if (!retrieveAggregatorManager())
1329c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
1339c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        try {
1349c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            return mAggregatorManager.getFakeMode();
1359c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        } catch (RemoteException e) {
1369c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            Log.e(TAG,"Error getting fake mode");
1379c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua            throw new RuntimeException(AggregatorManager_NOTAVAILABLE);
1389c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua        }
1399c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua    }
1409c3a7dc466e2f8de02e15030b2b7f4096ba97e5aWei Hua
141984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private Map<String, String> getMap(final List<StringString> sample) {
142f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin        HashMap<String, String> map = new HashMap<String, String>();
143f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin        for (int i =0; i < sample.size(); i++) {
144f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin            map.put(sample.get(i).key, sample.get(i).value);
145f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin        }
146f0f78449e8ab7d63894964c54b6ef390ca9ce044Ruei-sung Lin        return (Map) map;
147984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
148984e52f31d596840cfa51b1238e1c43d2e1918f8saberian}
149