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.IPredictor;
20984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.content.Context;
21984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.os.RemoteException;
22984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport android.util.Log;
23984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
24984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.ArrayList;
25984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.List;
26984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.HashMap;
27984e52f31d596840cfa51b1238e1c43d2e1918f8saberianimport java.util.Map;
28984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
29984e52f31d596840cfa51b1238e1c43d2e1918f8saberian/** Predictor for the Learning framework.
30984e52f31d596840cfa51b1238e1c43d2e1918f8saberian */
31984e52f31d596840cfa51b1238e1c43d2e1918f8saberianpublic class BordeauxPredictor {
32984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    static final String TAG = "BordeauxPredictor";
33984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    static final String PREDICTOR_NOTAVAILABLE = "Predictor is not available.";
34984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private Context mContext;
35984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private String mName;
36984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    private IPredictor mPredictor;
37984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
38984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public boolean retrievePredictor() {
39984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (mPredictor == null)
40984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            mPredictor = BordeauxManagerService.getPredictor(mContext, mName);
41984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (mPredictor == null) {
42984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            Log.e(TAG, PREDICTOR_NOTAVAILABLE);
43984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            return false;
44984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
45984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return true;
46984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
47984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
48984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public BordeauxPredictor(Context context) {
49984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mContext = context;
50984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mName = "defaultPredictor";
51984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mPredictor = BordeauxManagerService.getPredictor(context, mName);
52984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
53984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
54984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public BordeauxPredictor(Context context, String name) {
55984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mContext = context;
56984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mName = name;
57984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        mPredictor = BordeauxManagerService.getPredictor(context, mName);
58984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
59984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
60984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public boolean reset() {
61984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (!retrievePredictor()){
62984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            Log.e(TAG, PREDICTOR_NOTAVAILABLE);
63984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            return false;
64984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
65984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        try {
66984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            mPredictor.ResetPredictor();
67984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            return true;
68984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        } catch (RemoteException e) {
69984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
70984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        return false;
71984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
72984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
73984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public void pushSample(String s) {
74984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (!retrievePredictor())
75984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            throw new RuntimeException(PREDICTOR_NOTAVAILABLE);
76984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        try {
77984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            mPredictor.pushNewSample(s);
78984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        } catch (RemoteException e) {
79984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            Log.e(TAG,"Exception: pushing a new example");
80984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            throw new RuntimeException(PREDICTOR_NOTAVAILABLE);
81984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
82984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
83984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
84984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public float getProbability(String s) {
85984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (!retrievePredictor())
86984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            throw new RuntimeException(PREDICTOR_NOTAVAILABLE);
87984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        try {
88984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            return mPredictor.getSampleProbability(s);
89984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        } catch (RemoteException e) {
90984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            Log.e(TAG,"Exception: getting sample probability");
91984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            throw new RuntimeException(PREDICTOR_NOTAVAILABLE);
92984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
93984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
94984e52f31d596840cfa51b1238e1c43d2e1918f8saberian
95984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    public boolean setParameter(String key, String value) {
96984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        if (!retrievePredictor())
97984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            throw new RuntimeException(PREDICTOR_NOTAVAILABLE);
98984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        try {
99984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            return mPredictor.setPredictorParameter(key, value);
100984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        } catch (RemoteException e) {
101984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            Log.e(TAG,"Exception: setting predictor parameter");
102984e52f31d596840cfa51b1238e1c43d2e1918f8saberian            throw new RuntimeException(PREDICTOR_NOTAVAILABLE);
103984e52f31d596840cfa51b1238e1c43d2e1918f8saberian        }
104984e52f31d596840cfa51b1238e1c43d2e1918f8saberian    }
105984e52f31d596840cfa51b1238e1c43d2e1918f8saberian}
106