package net.osmand.plus.osmedit; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class OsmBugsDbHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; public static final String OSMBUGS_DB_NAME = "osmbugs"; //$NON-NLS-1$ private static final String OSMBUGS_TABLE_NAME = "osmbugs"; //$NON-NLS-1$ private static final String OSMBUGS_COL_ID = "id"; //$NON-NLS-1$ private static final String OSMBUGS_COL_TEXT = "text"; //$NON-NLS-1$ private static final String OSMBUGS_COL_LAT = "latitude"; //$NON-NLS-1$ private static final String OSMBUGS_COL_LON = "longitude"; //$NON-NLS-1$ private static final String OSMBUGS_COL_ACTION = "action"; //$NON-NLS-1$ private static final String OSMBUGS_COL_AUTHOR = "author"; //$NON-NLS-1$ private static final String OSMBUGS_TABLE_CREATE = "CREATE TABLE " + OSMBUGS_TABLE_NAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$ OSMBUGS_COL_ID + " INTEGER, " + OSMBUGS_COL_TEXT + " TEXT, " + //$NON-NLS-1$ //$NON-NLS-2$ OSMBUGS_COL_LAT + " double, " + OSMBUGS_COL_LON + " double, " + //$NON-NLS-1$ //$NON-NLS-2$ OSMBUGS_COL_ACTION + " TEXT, " + OSMBUGS_COL_AUTHOR + " TEXT);"; //$NON-NLS-1$ //$NON-NLS-2$ List<OsmNotesPoint> cache = null; public OsmBugsDbHelper(Context context) { super(context, OSMBUGS_DB_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(OSMBUGS_TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public List<OsmNotesPoint> getOsmbugsPoints() { if (cache == null) { SQLiteDatabase db = getReadableDatabase(); List<OsmNotesPoint> res = checkOsmbugsPoints(db); db.close(); return res; } return cache; } public boolean addOsmbugs(OsmNotesPoint p) { SQLiteDatabase db = getWritableDatabase(); if (db != null) { db.execSQL( "INSERT INTO " + OSMBUGS_TABLE_NAME + " (" + OSMBUGS_COL_ID + ", " + OSMBUGS_COL_TEXT + ", " + OSMBUGS_COL_LAT + "," + OSMBUGS_COL_LON + "," + OSMBUGS_COL_ACTION + "," + OSMBUGS_COL_AUTHOR + ")" + " VALUES (?, ?, ?, ?, ?, ?)", new Object[] { p.getId(), p.getText(), p.getLatitude(), p.getLongitude(), OsmPoint.stringAction.get(p.getAction()), p.getAuthor() }); //$NON-NLS-1$ //$NON-NLS-2$ checkOsmbugsPoints(db); db.close(); return true; } return false; } public boolean deleteAllBugModifications(OsmNotesPoint p) { SQLiteDatabase db = getWritableDatabase(); if (db != null) { db.execSQL("DELETE FROM " + OSMBUGS_TABLE_NAME + " WHERE " + OSMBUGS_COL_ID + " = ?", new Object[] { p.getId() }); //$NON-NLS-1$ //$NON-NLS-2$ checkOsmbugsPoints(db); db.close(); return true; } return false; } private List<OsmNotesPoint> checkOsmbugsPoints(SQLiteDatabase db){ List<OsmNotesPoint> cachedOsmbugsPoints = new ArrayList<OsmNotesPoint>(); if (db != null) { Cursor query = db.rawQuery("SELECT " + OSMBUGS_COL_ID + ", " + OSMBUGS_COL_TEXT + ", " + OSMBUGS_COL_LAT + "," + OSMBUGS_COL_LON + "," + OSMBUGS_COL_ACTION + "," + OSMBUGS_COL_AUTHOR + " FROM " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ OSMBUGS_TABLE_NAME, null); if (query.moveToFirst()) { do { OsmNotesPoint p = new OsmNotesPoint(); p.setId(query.getLong(0)); p.setText(query.getString(1)); p.setLatitude(query.getDouble(2)); p.setLongitude(query.getDouble(3)); p.setAction(query.getString(4)); p.setAuthor(query.getString(5)); cachedOsmbugsPoints.add(p); } while (query.moveToNext()); } query.close(); cache = cachedOsmbugsPoints; } return cachedOsmbugsPoints; } public long getMinID() { SQLiteDatabase db = getReadableDatabase(); long minID = 0; if (db != null) { Cursor query = db.rawQuery("SELECT MIN(" + OSMBUGS_COL_ID + ") FROM " + OSMBUGS_TABLE_NAME, null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ if (query.moveToFirst()) { minID = query.getLong(0); } query.close(); } return minID; } }