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
19984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
20984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.bordeaux.services.StringString;
21984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.content.Context;
22984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.util.Log;
23984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.HashMap;
24984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.Map;
25984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.ArrayList;
26984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
27984e52f31d596840cfa51b1238e1c43d2e1918f8saberianclass AggregatorManager extends IAggregatorManager.Stub  {
28984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private final String TAG = "AggregatorMnager";
29984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private static HashMap<String, Aggregator> sFeatureMap;
30984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private static AggregatorManager mManager = null;
31984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
32984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private AggregatorManager() {
33984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        sFeatureMap = new HashMap<String, Aggregator>();
34984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
35984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
36984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public static AggregatorManager getInstance() {
37984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (mManager == null )
38984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            mManager = new AggregatorManager();
39984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return mManager;
40984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
41984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
42984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public String[] getListOfFeatures() {
43984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        String[] s = new String[sFeatureMap.size()];
44984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        int i = 0;
45984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        for (Map.Entry<String, Aggregator> x : sFeatureMap.entrySet()) {
46984e52f31d596840cfa51b1238e1c43d2e1918f8saberian           s[i] = x.getKey();
47984e52f31d596840cfa51b1238e1c43d2e1918f8saberian           i++;
48984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
49984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return s;
50984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
51984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
52984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public void registerAggregator(Aggregator agg, AggregatorManager m) {
53984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        agg.setManager(m);
54984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        String[] fl = agg.getListOfFeatures();
55984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        for ( int i  = 0; i< fl.length; i ++)
56984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            sFeatureMap.put(fl[i], agg);
57984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
58984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
59984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public ArrayList<StringString> getData(String dataName) {
60984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return getList(getDataMap(dataName));
61984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
62984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
63984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public Map<String, String> getDataMap(String dataName) {
64984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (sFeatureMap.get(dataName) != null)
65984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            return sFeatureMap.get(dataName).getFeatureValue(dataName);
66984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        else
67984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            Log.e(TAG, "There is no feature called " + dataName);
68984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return null;
69984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
70984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
71984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private ArrayList<StringString> getList(final Map<String, String> sample) {
72984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        ArrayList<StringString> StringString_sample = new ArrayList<StringString>();
73984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        for (Map.Entry<String, String> x : sample.entrySet()) {
74984e52f31d596840cfa51b1238e1c43d2e1918f8saberian           StringString v = new StringString();
75984e52f31d596840cfa51b1238e1c43d2e1918f8saberian           v.key = x.getKey();
76984e52f31d596840cfa51b1238e1c43d2e1918f8saberian           v.value = x.getValue();
77984e52f31d596840cfa51b1238e1c43d2e1918f8saberian           StringString_sample.add(v);
78984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
79984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return StringString_sample;
80984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
81984e52f31d596840cfa51b1238e1c43d2e1918f8saberian}
82