Files
cordova-plugin-dbcopy/src/android/sqlDB.java
T

223 lines
8.2 KiB
Java
Raw Normal View History

2014-04-10 16:08:44 +05:30
package me.rahul.plugins.sqlDB;
import org.apache.cordova.CallbackContext;
2017-03-08 14:40:21 +05:30
import org.apache.cordova.CordovaPlugin;
2014-04-10 16:08:44 +05:30
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
2017-03-08 14:40:21 +05:30
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
2014-04-10 16:08:44 +05:30
/**
* This class echoes a string called from JavaScript.
*/
public class sqlDB extends CordovaPlugin {
2017-03-08 14:40:21 +05:30
public static String dbname = "dbname";
PluginResult plresult = new PluginResult(PluginResult.Status.NO_RESULT);
2014-04-10 16:08:44 +05:30
private void sendPluginResponse(int code, String msg, boolean error, CallbackContext callbackContext) {
JSONObject response = new JSONObject();
try {
response.put("message", msg);
response.put("code", code);
2017-03-08 14:40:21 +05:30
if (error) {
plresult = new PluginResult(PluginResult.Status.ERROR,
response);
} else {
2017-03-08 14:40:21 +05:30
plresult = new PluginResult(PluginResult.Status.OK, response);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
plresult = new PluginResult(PluginResult.Status.ERROR,
e.getMessage());
}
callbackContext.sendPluginResult(plresult);
}
2017-03-08 14:40:21 +05:30
@Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException {
if (action.equalsIgnoreCase("copy")) {
this.copyDB(args.getString(0), "www", callbackContext);
return true;
} else if (action.equalsIgnoreCase("remove")) {
String db = args.getString(0);
File path = cordova.getActivity().getDatabasePath(db);
Boolean fileExists = path.exists();
if (fileExists) {
boolean deleted = path.delete();
if (deleted) {
sendPluginResponse(200, "Database Deleted", false, callbackContext);
} else {
sendPluginResponse(400, "Unable to Delete", true, callbackContext);
}
} else {
sendPluginResponse(404, "Invalid DB Location or DB Doesn't Exists", true, callbackContext);
2017-03-08 14:40:21 +05:30
}
return true;
} else if (action.equalsIgnoreCase("copyDbToStorage")) {
String db = args.getString(0);
String dest = args.getString(2);
this.copyDbToStorage(db, dest, callbackContext);
return true;
2017-03-08 14:40:21 +05:30
} else if (action.equalsIgnoreCase("copyDbFromStorage")) {
String db = args.getString(0);
String src = args.getString(2);
2017-03-08 19:02:58 +05:30
boolean deleteolddb = args.getBoolean(3);
this.copyDbFromStorage(db, src, deleteolddb, callbackContext);
2017-03-08 14:40:21 +05:30
return true;
2017-03-08 14:06:23 +01:00
} else if (action.equalsIgnoreCase("checkDbOnStorage")) {
2017-03-08 19:02:58 +05:30
String db = args.getString(0);
2017-03-08 14:06:23 +01:00
String src = args.getString(2);
this.checkDbOnStorage(db, src, callbackContext);
return true;
} else {
2017-03-08 14:40:21 +05:30
plresult = new PluginResult(PluginResult.Status.INVALID_ACTION);
callbackContext.sendPluginResult(plresult);
return false;
}
}
private void copyDB(String dbName, final String src, final CallbackContext callbackContext) {
final File dbpath;
dbname = dbName;
JSONObject response = new JSONObject();
final DatabaseHelper dbhelper = new DatabaseHelper(this.cordova
.getActivity().getApplicationContext());
dbpath = this.cordova.getActivity().getDatabasePath(dbname);
Boolean dbexists = dbpath.exists();
//Log.d("CordovaLog", "DatabasePath = " + dbpath + "&&&& dbname = " + dbname + "&&&&DB Exists =" + dbexists);
if (dbexists) {
sendPluginResponse(516, "DB Already Exists", true, callbackContext);
} else {
cordova.getThreadPool().execute(new Runnable() {
@Override
public void run() {
PluginResult plResult;
// TODO Auto-generated method stub
try {
dbhelper.createdatabase(dbpath, src, callbackContext);
// plResult = new PluginResult(PluginResult.Status.OK);
// callbackContext.sendPluginResult(plResult);
//sendPluginResponse(200,"Db Copied", false, callbackContext);
2017-03-08 14:40:21 +05:30
} catch (Exception e) {
// plResult = new PluginResult(PluginResult.Status.ERROR,
// e.getMessage());
// callbackContext.sendPluginResult(plResult);
2017-03-08 14:40:21 +05:30
sendPluginResponse(400, e.getMessage(), true, callbackContext);
}
}
2017-03-08 14:40:21 +05:30
});
}
}
2017-03-08 14:40:21 +05:30
private void newCopyDB(File source, File destination, CallbackContext callbackContext) {
try {
InputStream myInput = new FileInputStream(source);
OutputStream myOutput = new FileOutputStream(destination);
byte[] buffer = new byte[1024];
while ((myInput.read(buffer)) > -1) {
myOutput.write(buffer);
}
myOutput.flush();
myOutput.close();
myInput.close();
sendPluginResponse(200, "DB Copied Successfully", false, callbackContext);
} catch (IOException e) {
sendPluginResponse(400, e.getMessage(), true, callbackContext);
}
}
2017-03-08 19:02:58 +05:30
private void copyDbFromStorage(String db, String src, boolean deleteolddb, final CallbackContext callbackContext) {
2017-03-08 14:40:21 +05:30
File source;
if (src.indexOf("file://") != -1) {
source = new File(src.replace("file://", ""));
} else {
source = new File(src);
}
2017-03-08 14:40:21 +05:30
if (source.exists()) {
2017-03-08 19:02:58 +05:30
if (deleteolddb) {
2017-03-08 15:33:31 +05:30
File path = cordova.getActivity().getDatabasePath(db);
Boolean fileExists = path.exists();
if (fileExists) {
boolean deleted = path.delete();
if (deleted) {
this.copyDB(db, source.getAbsolutePath(), callbackContext);
} else {
sendPluginResponse(400, "Unable to Delete", true, callbackContext);
}
} else {
sendPluginResponse(404, "Old DB Doesn't Exists", true, callbackContext);
}
} else {
this.copyDB(db, source.getAbsolutePath(), callbackContext);
}
2017-03-08 14:40:21 +05:30
} else {
sendPluginResponse(404, "Invalid DB Source Location", true, callbackContext);
}
}
2017-03-08 19:02:58 +05:30
private void checkDbOnStorage(String db, String src, final CallbackContext callbackContext) {
File source;
2017-03-08 14:06:23 +01:00
if (src.indexOf("file://") != -1) {
source = new File(src.replace("file://", ""));
} else {
source = new File(src);
}
if (source.exists()) {
2017-03-08 19:02:58 +05:30
sendPluginResponse(200, "DB File Exists At Source Location", false, callbackContext);
} else {
2017-03-08 14:06:23 +01:00
sendPluginResponse(404, "Invalid DB Source Location", true, callbackContext);
}
}
2017-03-08 19:02:58 +05:30
2017-03-08 14:40:21 +05:30
private void copyDbToStorage(String dbname, String dest, final CallbackContext callbackContext) {
2017-03-08 19:02:58 +05:30
File source = cordova.getActivity().getDatabasePath(dbname);
2017-03-08 14:40:21 +05:30
File destFolder;
File destination;
if (dest.indexOf("file://") != -1) {
destination = new File(dest.replace("file://", "") + dbname);
destFolder = new File(dest.replace("file://", ""));
} else {
2017-03-08 13:45:32 +05:30
destination = new File(dest + dbname);
2017-03-08 14:40:21 +05:30
destFolder = new File(dest);
}
2017-03-08 14:40:21 +05:30
if (!destFolder.exists()) {
2017-03-08 13:45:32 +05:30
destFolder.mkdirs();
}
2017-03-08 14:40:21 +05:30
if (!destFolder.exists()) {
2017-03-08 09:56:50 +01:00
sendPluginResponse(404, "Invalid output DB Location", true, callbackContext);
2017-03-08 14:40:21 +05:30
return;
2017-03-08 09:56:50 +01:00
}
2017-03-08 14:40:21 +05:30
if (source.exists()) {
this.newCopyDB(source, destination, callbackContext);
} else {
sendPluginResponse(404, "Invalid DB Location or DB Doesn't Exists", true, callbackContext);
}
}
2014-04-10 16:08:44 +05:30
}