package net.osmand.plus; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import net.osmand.FavouritePoint; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class FavouritesDbHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String FAVOURITE_TABLE_NAME = "favourite"; //$NON-NLS-1$ private static final String FAVOURITE_COL_NAME = "name"; //$NON-NLS-1$ private static final String FAVOURITE_COL_LAT = "latitude"; //$NON-NLS-1$ private static final String FAVOURITE_COL_LON = "longitude"; //$NON-NLS-1$ private static final String FAVOURITE_TABLE_CREATE = "CREATE TABLE " + FAVOURITE_TABLE_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$ FAVOURITE_COL_NAME + " TEXT, " + FAVOURITE_COL_LAT + " double, " + //$NON-NLS-1$ //$NON-NLS-2$ FAVOURITE_COL_LON + " double);"; //$NON-NLS-1$ private List<FavouritePoint> favoritePointsFromGPXFile = null; private Map<String, FavouritePoint> favoritePoints = null; public FavouritesDbHelper(Context context) { super(context, FAVOURITE_TABLE_NAME, null, DATABASE_VERSION); } public List<FavouritePoint> getFavoritePointsFromGPXFile() { return favoritePointsFromGPXFile; } public void setFavoritePointsFromGPXFile(List<FavouritePoint> favoritePointsFromGPXFile) { this.favoritePointsFromGPXFile = favoritePointsFromGPXFile; } public boolean addFavourite(FavouritePoint p) { checkFavoritePoints(); SQLiteDatabase db = getWritableDatabase(); if (db != null) { // delete with same name before deleteFavourite(p); db.execSQL("INSERT INTO " + FAVOURITE_TABLE_NAME + " VALUES (?, ?, ?)", new Object[] { p.getName(), p.getLatitude(), p.getLongitude() }); //$NON-NLS-1$ //$NON-NLS-2$ favoritePoints.put(p.getName(), p); p.setStored(true); return true; } return false; } private void checkFavoritePoints(){ if(favoritePoints == null){ favoritePoints = new LinkedHashMap<String, FavouritePoint>(); SQLiteDatabase db = getReadableDatabase(); if (db != null) { Cursor query = db.rawQuery("SELECT " + FAVOURITE_COL_NAME + ", " + FAVOURITE_COL_LAT + "," + FAVOURITE_COL_LON + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ FAVOURITE_TABLE_NAME, null); favoritePoints.clear(); if (query.moveToFirst()) { do { FavouritePoint p = new FavouritePoint(); p.setName(query.getString(0)); p.setStored(true); p.setLatitude(query.getDouble(1)); p.setLongitude(query.getDouble(2)); favoritePoints.put(p.getName(), p); } while (query.moveToNext()); } query.close(); } } } public Collection<FavouritePoint> getFavouritePoints() { checkFavoritePoints(); return favoritePoints.values(); } public FavouritePoint getFavoritePointByName(String name){ checkFavoritePoints(); return favoritePoints.get(name); } public boolean editFavouriteName(FavouritePoint p, String newName) { checkFavoritePoints(); SQLiteDatabase db = getWritableDatabase(); if (db != null) { db.execSQL("UPDATE " + FAVOURITE_TABLE_NAME + " SET name = ? WHERE name = ?", new Object[] { newName, p.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ favoritePoints.remove(p.getName()); p.setName(newName); favoritePoints.put(newName, p); return true; } return false; } public boolean editFavourite(FavouritePoint p, double lat, double lon) { checkFavoritePoints(); SQLiteDatabase db = getWritableDatabase(); if (db != null) { db.execSQL("UPDATE " + FAVOURITE_TABLE_NAME + " SET latitude = ?, longitude = ? WHERE name = ?", new Object[] { lat, lon, p.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ p.setLatitude(lat); p.setLongitude(lon); return true; } return false; } public boolean deleteFavourite(FavouritePoint p) { checkFavoritePoints(); SQLiteDatabase db = getWritableDatabase(); if (db != null) { db.execSQL("DELETE FROM " + FAVOURITE_TABLE_NAME + " WHERE name = ?", new Object[] { p.getName() }); //$NON-NLS-1$ //$NON-NLS-2$ FavouritePoint fp = favoritePoints.remove(p.getName()); if(fp != null){ fp.setStored(false); } return true; } return false; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(FAVOURITE_TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }