/******************************************************************************* * Created by Orlando Aliaga * Copyright 2017 Prey Inc. All rights reserved. * License: GPLv3 * Full license at "/LICENSE" ******************************************************************************/ package com.prey.net.offline; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import com.prey.PreyLogger; import java.util.ArrayList; import java.util.List; public class OfflineOpenHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 2; private static final String DATABASE_NAME = "Offline.db"; public static final String OFFLINE_TABLE_NAME = "offline"; public static final String COLUMN_OFFLINE_ID = "_offline_id"; public static final String COLUMN_URL = "_url"; public static final String COLUMN_TYPE = "_type"; public static final String COLUMN_PARAMETERS = "_parameters"; public static final String COLUMN_REQUEST_METHOD = "_requestMethod"; public static final String COLUMN_CONTENT_TYPE = "_contentType"; public static final String COLUMN_AUTHORIZATION = "_authorization"; public static final String COLUMN_STATUS = "_status"; public static final String COLUMN_CORRELATION_ID = "_correlationId"; public static final String COLUMN_FILES = "_files"; private static final String OFFLINE_TABLE_CREATE = "CREATE TABLE " + OFFLINE_TABLE_NAME + " (" + COLUMN_OFFLINE_ID + " TEXT PRIMARY KEY, " + COLUMN_URL + " TEXT," + COLUMN_TYPE + " TEXT," + COLUMN_PARAMETERS + " TEXT," + COLUMN_REQUEST_METHOD + " TEXT," + COLUMN_CONTENT_TYPE + " TEXT," + COLUMN_AUTHORIZATION + " TEXT," + COLUMN_STATUS + " TEXT," + COLUMN_CORRELATION_ID + " TEXT," + COLUMN_FILES + " TEXT" + ");"; public OfflineOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { try { db.execSQL(OFFLINE_TABLE_CREATE); } catch (Exception e) { PreyLogger.e("Error creating table: " + e.getMessage(), e); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { try { db.execSQL("DROP TABLE IF EXISTS " + OFFLINE_TABLE_CREATE); } catch (Exception e) { PreyLogger.e("Erase error table: " + e.getMessage(), e); } onCreate(db); } public void insertOffline(OfflineDto dto) { SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COLUMN_OFFLINE_ID, dto.getOfflineId()); values.put(COLUMN_URL, dto.getUrl()); values.put(COLUMN_TYPE, dto.getType()); values.put(COLUMN_PARAMETERS, dto.getParameters()); values.put(COLUMN_REQUEST_METHOD, dto.getRequestMethod()); values.put(COLUMN_CONTENT_TYPE, dto.getContentType()); values.put(COLUMN_AUTHORIZATION, dto.getAuthorization()); values.put(COLUMN_STATUS, dto.getStatus()); values.put(COLUMN_CORRELATION_ID, dto.getCorrelationId()); values.put(COLUMN_FILES, dto.getFiles()); PreyLogger.d("___db insert:" + dto.toString()); database.insert(OFFLINE_TABLE_NAME, null, values); database.close(); } public void updateOffline(OfflineDto dto) { SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COLUMN_URL, dto.getUrl()); values.put(COLUMN_TYPE, dto.getType()); values.put(COLUMN_PARAMETERS, dto.getParameters()); values.put(COLUMN_REQUEST_METHOD, dto.getRequestMethod()); values.put(COLUMN_CONTENT_TYPE, dto.getContentType()); values.put(COLUMN_AUTHORIZATION, dto.getAuthorization()); values.put(COLUMN_STATUS, dto.getStatus()); values.put(COLUMN_CORRELATION_ID, dto.getCorrelationId()); values.put(COLUMN_FILES, dto.getFiles()); String selection = COLUMN_OFFLINE_ID + " = ?"; String[] selectionArgs = {dto.getOfflineId()}; PreyLogger.d("___db update:" + dto.toString()); database.update(OFFLINE_TABLE_NAME, values, selection, selectionArgs); database.close(); } public void deleteOffline(String id) { SQLiteDatabase database = this.getWritableDatabase(); String deleteQuery = "DELETE FROM " + OFFLINE_TABLE_NAME + " where " + COLUMN_OFFLINE_ID + "='" + id + "'"; PreyLogger.d("query" + deleteQuery); database.execSQL(deleteQuery); database.close(); } public void deleteAllOffline() { SQLiteDatabase database = this.getWritableDatabase(); String deleteQuery = "DELETE FROM " + OFFLINE_TABLE_NAME ; PreyLogger.d("query" + deleteQuery); database.execSQL(deleteQuery); database.close(); } public List<OfflineDto> getAllOffline() { List<OfflineDto> list = new ArrayList<OfflineDto>(); String selectQuery = "SELECT * FROM " + OFFLINE_TABLE_NAME; SQLiteDatabase database = this.getReadableDatabase(); Cursor cursor = database.rawQuery(selectQuery, null); if (cursor.moveToFirst()) { do { OfflineDto dto = new OfflineDto(); dto.setOfflineId(cursor.getString(0)); dto.setUrl(cursor.getString(1)); dto.setType(cursor.getString(2)); dto.setParameters(cursor.getString(3)); dto.setRequestMethod(cursor.getString(4)); dto.setContentType(cursor.getString(5)); dto.setAuthorization(cursor.getString(6)); dto.setStatus(cursor.getString(7)); dto.setCorrelationId(cursor.getString(8)); dto.setFiles(cursor.getString(9)); list.add(dto); } while (cursor.moveToNext()); } return list; } public OfflineDto getOffline(String id) { SQLiteDatabase database = this.getReadableDatabase(); String selectQuery = "SELECT * FROM " + OFFLINE_TABLE_NAME + " where " + COLUMN_OFFLINE_ID + "='" + id + "'"; Cursor cursor = database.rawQuery(selectQuery, null); OfflineDto dto = null; if (cursor.moveToFirst()) { do { dto = new OfflineDto(); dto.setOfflineId(cursor.getString(0)); dto.setUrl(cursor.getString(1)); dto.setType(cursor.getString(2)); dto.setParameters(cursor.getString(3)); dto.setRequestMethod(cursor.getString(4)); dto.setContentType(cursor.getString(5)); dto.setAuthorization(cursor.getString(6)); dto.setStatus(cursor.getString(7)); dto.setCorrelationId(cursor.getString(8)); dto.setFiles(cursor.getString(9)); } while (cursor.moveToNext()); } return dto; } }