package com.almalence.plugins.vf.barcodescanner;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Date;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
/* <!-- +++
import com.almalence.opencam_plus.ApplicationScreen;
+++ --> */
//<!-- -+-
import com.almalence.opencam.ApplicationScreen;
//-+- -->
public class BarcodeStorageHelper
{
private static final String FILENAME = "scanned_barcodes.txt";
private static ArrayList<Barcode> barcodesList;
public static void addBarcode(Barcode barcode)
{
int position = searchForBarcode(barcode);
if (position >= 0)
{
String oldFile = barcodesList.get(position).getFile();
if (oldFile != null)
{
File file = new File(oldFile);
if (file.exists())
{
file.delete();
}
}
barcodesList.remove(position);
}
barcodesList.add(barcode);
saveBarcodesToFile();
}
// Search for barcode.
// Return pos, or -1 if not found.
private static int searchForBarcode(Barcode barcode)
{
if (barcodesList == null)
{
readBarcodesFromFile();
}
int res = -1;
String data = barcode.getData();
for (int i = 0; i < barcodesList.size(); i++)
{
String s = barcodesList.get(i).getData();
if (s.equals(data))
{
res = i;
return res;
}
}
return res;
}
private static void saveBarcodesToFile()
{
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < barcodesList.size(); i++)
{
jsonArray.put(barcodesList.get(i).getJSONObject());
}
writeToFile(jsonArray.toString());
}
private static void readBarcodesFromFile()
{
String json = readFromFile();
try
{
barcodesList = new ArrayList<Barcode>();
JSONArray array = new JSONArray(json);
for (int i = 0; i < array.length(); i++)
{
JSONObject item = array.getJSONObject(i);
Barcode barcode = new Barcode(item.getString("data"), item.getString("format"), item.getString("type"),
new Date(item.getLong("date")), item.getString("file"));
barcodesList.add(barcode);
}
} catch (JSONException e)
{
e.printStackTrace();
}
if (barcodesList == null)
{
barcodesList = new ArrayList<Barcode>();
}
}
public static void removeBarcode(Barcode barcode)
{
int position = searchForBarcode(barcode);
if (position >= 0)
{
barcodesList.remove(position);
if (barcode.getFile() != null)
{
File file = new File(barcode.getFile());
if (file.exists())
{
file.delete();
}
}
saveBarcodesToFile();
}
}
public static void removeAll()
{
for (Barcode barcode : barcodesList)
{
if (barcode.getFile() != null)
{
File file = new File(barcode.getFile());
if (file.exists())
{
file.delete();
}
}
}
barcodesList.clear();
saveBarcodesToFile();
}
public static ArrayList<Barcode> getBarcodesList()
{
if (barcodesList == null)
{
readBarcodesFromFile();
}
return barcodesList;
}
private static void writeToFile(String data)
{
try
{
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(ApplicationScreen.getMainContext().openFileOutput(
FILENAME, Context.MODE_PRIVATE)));
bw.write(data);
bw.close();
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
private static String readFromFile()
{
String readString = "";
FileInputStream fis = null;
try
{
fis = ApplicationScreen.getMainContext().openFileInput(FILENAME);
InputStreamReader isr = new InputStreamReader(fis);
StringBuilder sb = new StringBuilder();
char[] inputBuffer = new char[2048];
int l;
while ((l = isr.read(inputBuffer)) != -1)
{
sb.append(inputBuffer, 0, l);
}
readString = sb.toString();
fis.close();
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} finally
{
if (fis != null)
{
fis = null;
}
}
return readString;
}
}