/* * Copyright (C) 2014 The Context Engine Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package uk.ac.tvu.mdse.contextengine.db; import java.util.List; import java.util.Vector; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; public class ContextDBImpl implements ContextDB { private OpenDbHelper dbHelper; public static final String CONTEXTTABLE = "usable_contexts"; public ContextDBImpl(Context context) { dbHelper = new OpenDbHelper(context); } public void getDB(Context context) { dbHelper = new OpenDbHelper(context); } public void closeDB() { dbHelper.close(); } @Override public List<String> getUsableContextList(String applicationId) { List<String> contexts = new Vector<String>(); try { SQLiteDatabase sqlite = dbHelper.getReadableDatabase(); Cursor crsr = sqlite.rawQuery( "Select name, owner, permission from usable_contexts;", null); crsr.moveToFirst(); int numRows = crsr.getCount(); for (int i = 0; numRows > 0; i++) { if (crsr.getString(1).equalsIgnoreCase(applicationId)) { contexts.add(crsr.getString(i)); } else { if (crsr.getInt(3) == 0) { contexts.add(crsr.getString(i)); } } crsr.moveToNext(); } } catch (Exception sqlerror) { Log.v("Table read error", sqlerror.getMessage()); } return contexts; } @Override public String getDexFile(String componentName) { try { SQLiteDatabase sqlite = dbHelper.getReadableDatabase(); Cursor crsr = sqlite.rawQuery( "Select dex_file from usable_contexts where name='" + componentName + "';", null); crsr.moveToFirst(); int numRows = crsr.getCount(); if (numRows > 0) { return crsr.getString(0); } } catch (Exception sqlerror) { Log.v("Table read error", sqlerror.getMessage()); } return ""; } @Override public int getPermission(String componentName) { try { SQLiteDatabase sqlite = dbHelper.getReadableDatabase(); Cursor crsr = sqlite.rawQuery( "Select permission from usable_contexts where name='" + componentName + "';", null); crsr.moveToFirst(); int numRows = crsr.getCount(); if (numRows > 0) { return crsr.getInt(0); } } catch (Exception sqlerror) { Log.v("Table read error", sqlerror.getMessage()); } return 1; } @Override public boolean insertComponent(String packageName, String name, String owner, int permission, String dex_file) { try { SQLiteDatabase sqlite = dbHelper.getWritableDatabase(); ContentValues initialValues = new ContentValues(); initialValues.put("packagename", packageName); initialValues.put("name", name); initialValues.put("owner", owner); initialValues.put("permission", permission); initialValues.put("dex_file", dex_file); sqlite.insert(CONTEXTTABLE, null, initialValues); sqlite.close(); return true; } catch (Exception sqlerror) { Log.v("Table insert error", sqlerror.getMessage()); return false; } } @Override public boolean removeComponent(String name, String owner) { try { List<String> component = getLoadComponentInfo(owner, name); if (component.size() == 0 || component == null) { return false; } else { if (component.get(2).equalsIgnoreCase(owner)) { SQLiteDatabase sqlite = dbHelper.getWritableDatabase(); sqlite.delete(CONTEXTTABLE, "name = ?", new String[] {name}); return true; } return false; } } catch(Exception sqlerror) { Log.e("Error" , sqlerror.getMessage()); return false; } } @Override public String getPackageName(String componentName) { try { SQLiteDatabase sqlite = dbHelper.getReadableDatabase(); Cursor crsr = sqlite.rawQuery( "Select packageName from usable_contexts where name='" + componentName + "';", null); crsr.moveToFirst(); int numRows = crsr.getCount(); if (numRows > 0) { return crsr.getString(0); } } catch (Exception sqlerror) { Log.v("Table read error", sqlerror.getMessage()); } return ""; } @Override public List<String> getLoadComponentInfo(String applicationId, String componentName) { List<String> returnValues = new Vector<String>(); try { SQLiteDatabase sqlite = dbHelper.getReadableDatabase(); Cursor crsr = sqlite .rawQuery( "Select dex_file, packageName, owner, permission from usable_contexts where name='" + componentName + "';", null); crsr.moveToFirst(); int numRows = crsr.getCount(); if (numRows > 0) { String owner = crsr.getString(2); int permission = crsr.getInt(3); if (owner.equalsIgnoreCase(applicationId)) { returnValues.add(crsr.getString(0)); returnValues.add(crsr.getString(1)); returnValues.add(owner); returnValues.add(String.valueOf(permission)); } else { if (permission == 0) { returnValues.add(crsr.getString(0)); returnValues.add(crsr.getString(1)); returnValues.add(owner); returnValues.add(String.valueOf(permission)); } } } } catch (Exception sqlerror) { Log.v("Table read error", sqlerror.getMessage()); return null; } return returnValues; } @Override public List<String> getAppContextList(String applicationId) { List<String> contexts = new Vector<String>(); try { SQLiteDatabase sqlite = dbHelper.getReadableDatabase(); Cursor crsr = sqlite.rawQuery( "Select name from usable_contexts where owner ='" + applicationId + "';", null); crsr.moveToFirst(); int numRows = crsr.getCount(); for (int i = 0; numRows > 0; i++) { contexts.add(crsr.getString(i)); crsr.moveToNext(); } } catch (Exception sqlerror) { Log.v("Table read error", sqlerror.getMessage()); } return contexts; } }