FavouritesDbHelper.java :  » Map » osmand » net » osmand » Android Open Source

Android Open Source » Map » osmand 
osmand » net » osmand » FavouritesDbHelper.java
package net.osmand;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

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) {
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.