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