+package pl.org.nowoczesnapolska.wlmobi;
+
+/*
+ @author Radek Czajka
+ */
+
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import android.util.Log;
+import android.content.res.AssetManager;
+
+import com.phonegap.api.Plugin;
+import com.phonegap.api.PluginResult;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import pl.org.nowoczesnapolska.wlmobi.Downloader;
+
+public class DBPut extends Plugin{
+
+ @Override
+ public PluginResult execute(String action, JSONArray args, String callbackId) {
+ if (action.equals("put")) {
+ try {
+ return this.put(args.getString(0), args.getString(1), args.getString(2));
+ } catch (JSONException e) {
+ return new PluginResult(PluginResult.Status.ERROR, "Param errrors");
+ }
+ }
+ else if (action.equals("fetch")) {
+ try {
+ return this.fetch(args.getString(0));
+ } catch (JSONException e) {
+ return new PluginResult(PluginResult.Status.ERROR, "Param errrors");
+ }
+ }
+ else {
+ return new PluginResult(PluginResult.Status.INVALID_ACTION);
+ }
+ }
+
+ private PluginResult fetch(String url) {
+ String fileName = "0000000000000001.db";
+ String targetPath = "/data/data/" + this.ctx.getPackageName() + "/app_database/file__0/";
+
+ Log.d("DBPut", "database path: " + targetPath + " / " + fileName);
+
+ Downloader d = new Downloader();
+ return d.downloadUrl(url, targetPath, fileName, "true");
+ }
+
+
+ private PluginResult put(String assetPath, String targetPath, String overwrite) {
+ // this hard-coding is kinda creepy, should probably create the db and use getDatabasePath instead
+ String absoluteTargetPath = "/data/data/" + this.ctx.getPackageName() + "/app_database/" + targetPath;
+ int index = absoluteTargetPath.lastIndexOf('/');
+ String targetDir = absoluteTargetPath.substring(0, index);
+
+ try {
+ File dir = new File(targetDir);
+ if(!dir.exists()) {
+ Log.d("DBPut", "directory " + targetDir + " created");
+ dir.mkdirs();
+ }
+
+ File fout = new File(absoluteTargetPath);
+
+ if(overwrite.equals("false") && fout.exists()) {
+ Log.d("DBPut", "File already exists");
+ return new PluginResult(PluginResult.Status.OK, "exist");
+ }
+
+ FileOutputStream fos = new FileOutputStream(fout);
+
+ AssetManager assetManager = this.ctx.getResources().getAssets();
+ InputStream is = assetManager.open(assetPath);
+
+ byte[] buffer = new byte[1024];
+ int len1 = 0;
+
+ while ( (len1 = is.read(buffer)) > 0 ) {
+ fos.write(buffer,0, len1);
+ }
+
+ fos.close();
+
+ Log.d("DBPut", "Copied to " + absoluteTargetPath);
+ } catch (IOException e) {
+ Log.d("DBPut", "Error: " + e);
+ return new PluginResult(PluginResult.Status.ERROR, "Error: " + e);
+ }
+ return new PluginResult(PluginResult.Status.OK, absoluteTargetPath);
+ }
+}
\ No newline at end of file