diff --git a/.idea/misc.xml b/.idea/misc.xml
index e4a5fa4..e284b1d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -13,7 +13,7 @@
-
+
diff --git a/app/src/androidTest/java/no/nilsnh/uibevents/ApplicationTest.java b/app/src/androidTest/java/no/nilsnh/uibevents/ApplicationTest.java
index 266caaf..098e3e1 100644
--- a/app/src/androidTest/java/no/nilsnh/uibevents/ApplicationTest.java
+++ b/app/src/androidTest/java/no/nilsnh/uibevents/ApplicationTest.java
@@ -1,21 +1,50 @@
package no.nilsnh.uibevents;
import android.app.Application;
+import android.content.ContentValues;
+import android.test.AndroidTestCase;
import android.test.ApplicationTestCase;
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import java.util.ArrayList;
+
import no.nilsnh.uibevents.data.EventContract;
import no.nilsnh.uibevents.data.EventDbHelper;
/**
* Testing Fundamentals
*/
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
+public class ApplicationTest extends AndroidTestCase {
+ public void setUp() {}
+
+ public void testFetchFromApi() throws Throwable {
+ EventDbHelper db = new EventDbHelper();
+ String result = db.fetchWebEventData();
+ assertNotNull(result);
}
- public void testEventDb() throws Throwable {
+ public void testParseJsonEvent() {
+ ArrayList events = null;
+ try {
+ events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ assertTrue(events.size() == 2);
+ }
+
+ public void testInsertIntoTextFile() {
+ ArrayList events = null;
+ try {
+ events = EventDbHelper.parseJsonEvents(TestUtils.getExampleJson());
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ getContext().getContentResolver()
+ .insert(EventContract.EventEntry.CONTENT_URI, events.get(0));
EventDbHelper db = new EventDbHelper();
- db.fetchWebEventData();
+ assertTrue(db.getStoredData().contains(events.get(0)));
}
}
\ No newline at end of file
diff --git a/app/src/androidTest/java/no/nilsnh/uibevents/TestUtils.java b/app/src/androidTest/java/no/nilsnh/uibevents/TestUtils.java
new file mode 100644
index 0000000..d948c38
--- /dev/null
+++ b/app/src/androidTest/java/no/nilsnh/uibevents/TestUtils.java
@@ -0,0 +1,33 @@
+package no.nilsnh.uibevents;
+
+public class TestUtils {
+
+ public static String getExampleJson() {
+ return "{\n" +
+ " \"from_date\": \"2015-04-16T16:40:41+02:00\",\n" +
+ " \"events\": [\n" +
+ " {\n" +
+ " \"type\": \"exhibition\",\n" +
+ " \"title\": \" The Norwegian Constitution \\\"VI: 1814 - 2014\\\"\",\n" +
+ " \"date_from\": \"2014-05-11 22:00:00Z\",\n" +
+ " \"date_to\": \"2016-12-31 15:00:00Z\",\n" +
+ " \"location\": null,\n" +
+ " \"lead\": null,\n" +
+ " \"id\": 70450,\n" +
+ " \"path\": \"universitymuseum/70450/norwegian-constitution-vi-1814-2014\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"type\": \"exhibition\",\n" +
+ " \"title\": \"Grunnlovsutstillingen \\\"Vi 1814-2014\\\"\",\n" +
+ " \"date_from\": \"2014-05-12 10:00:00Z\",\n" +
+ " \"date_to\": \"2016-12-31 11:00:00Z\",\n" +
+ " \"location\": \"De kulturhistoriske samlinger, Haakon Sheteligs plass 10\",\n" +
+ " \"lead\": \"En annerledes og nyskapende utstilling om demokrati for ungdom og voksne. \",\n" +
+ " \"id\": 48468,\n" +
+ " \"path\": \"grunnlovsjubileet2014/48468/grunnlovsutstillingen-vi-1814-2014\"\n" +
+ " }\n" +
+ " ]\n" +
+ "}";
+ }
+
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2e76da8..d672f0d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -18,6 +18,11 @@
+
diff --git a/app/src/main/java/no/nilsnh/uibevents/data/Event.java b/app/src/main/java/no/nilsnh/uibevents/data/Event.java
new file mode 100644
index 0000000..e4159e9
--- /dev/null
+++ b/app/src/main/java/no/nilsnh/uibevents/data/Event.java
@@ -0,0 +1,21 @@
+package no.nilsnh.uibevents.data;
+
+import android.content.ContentValues;
+import android.net.Uri;
+
+import java.util.Date;
+
+public class Event {
+
+ private String id;
+ private String type;
+ private String title;
+ private Date dateFrom;
+ private Date dateTo;
+ private String location;
+ private String details;
+ private Uri url;
+
+ public Event(ContentValues values) {
+ }
+}
diff --git a/app/src/main/java/no/nilsnh/uibevents/data/EventContract.java b/app/src/main/java/no/nilsnh/uibevents/data/EventContract.java
index eb907ca..bc1e46d 100644
--- a/app/src/main/java/no/nilsnh/uibevents/data/EventContract.java
+++ b/app/src/main/java/no/nilsnh/uibevents/data/EventContract.java
@@ -2,6 +2,7 @@ package no.nilsnh.uibevents.data;
import android.content.ContentResolver;
import android.content.ContentUris;
+import android.content.ContentValues;
import android.net.Uri;
import android.provider.BaseColumns;
@@ -13,25 +14,27 @@ public class EventContract {
public static final String PATH_EVENT = "event";
public static final class EventEntry implements BaseColumns {
- public static final Uri CONTENT_URI = BASE_CONTENT_URI;
+ public static final Uri CONTENT_URI =
+ BASE_CONTENT_URI.buildUpon().appendPath(PATH_EVENT).build();
public static final String CONTENT_TYPE =
ContentResolver.CURSOR_DIR_BASE_TYPE + "/" + CONTENT_AUTHORITY + "/" + PATH_EVENT;
public static final String CONTENT_ITEM_TYPE =
ContentResolver.CURSOR_ITEM_BASE_TYPE + "/" + CONTENT_AUTHORITY + "/" + PATH_EVENT;
- public static final Integer COLUMN_EVENT_ID = 1;
- public static final Integer COLUMN_EVENT_TYPE = 2;
- public static final Integer COLUMN_EVENT_TITLE = 3;
- public static final Integer COLUMN_EVENT_DATE_FROM = 4;
- public static final Integer COLUMN_EVENT_DATE_TO = 5;
- public static final Integer COLUMN_EVENT_DATE_LOCATION = 6;
- public static final Integer COLUMN_EVENT_DETAILS = 7;
- public static final Integer COLUMN_EVENT_URL = 8;
+ public static final String TABLE_NAME = "event";
+
+ public static final String COLUMN_EVENT_ID = "id";
+ public static final String COLUMN_EVENT_TYPE = "type";
+ public static final String COLUMN_EVENT_TITLE = "title";
+ public static final String COLUMN_EVENT_DATE_FROM = "date_from";
+ public static final String COLUMN_EVENT_DATE_TO = "date_to";
+ public static final String COLUMN_EVENT_LOCATION = "location";
+ public static final String COLUMN_EVENT_DETAILS = "details";
+ public static final String COLUMN_EVENT_URL = "url";
public static Uri buildEventUri(long id) {
return ContentUris.withAppendedId(CONTENT_URI, id);
}
}
-
}
diff --git a/app/src/main/java/no/nilsnh/uibevents/data/EventDbHelper.java b/app/src/main/java/no/nilsnh/uibevents/data/EventDbHelper.java
index 5cafc6b..425414a 100644
--- a/app/src/main/java/no/nilsnh/uibevents/data/EventDbHelper.java
+++ b/app/src/main/java/no/nilsnh/uibevents/data/EventDbHelper.java
@@ -4,7 +4,9 @@ import android.content.ContentValues;
import android.content.Context;
import android.util.Log;
+import org.json.JSONArray;
import org.json.JSONException;
+import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
@@ -17,6 +19,8 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashSet;
public class EventDbHelper {
@@ -34,7 +38,7 @@ public class EventDbHelper {
this.ctx = context;
}
- public void fetchWebEventData() {
+ public String fetchWebEventData() {
// These two need to be declared outside the try/catch
// so that they can be closed in the finally block.
HttpURLConnection urlConnection = null;
@@ -55,7 +59,7 @@ public class EventDbHelper {
StringBuffer buffer = new StringBuffer();
if (inputStream == null) {
// Nothing to do.
- return;
+ return eventJsonStr;
}
reader = new BufferedReader(new InputStreamReader(inputStream));
@@ -69,7 +73,7 @@ public class EventDbHelper {
if (buffer.length() == 0) {
// Stream was empty. No point in parsing.
- return;
+ return eventJsonStr;
}
eventJsonStr = buffer.toString();
} catch (IOException e) {
@@ -88,7 +92,36 @@ public class EventDbHelper {
}
}
}
- return;
+ return eventJsonStr;
+ }
+
+ public static ArrayList parseJsonEvents(String data) throws JSONException {
+ ArrayList parsedEvents = new ArrayList<>();
+ JSONArray events = new JSONObject(data).getJSONArray("events");
+ for (int i = 0; i < events.length(); i++) {
+ JSONObject event = events.getJSONObject(i);
+
+ Integer id = event.getInt("id");
+ String type = event.getString("type");
+ String title = event.getString("title");
+ String date_from = event.getString("date_from");
+ String date_to = event.getString("date_to");
+ String location = event.getString("location");
+ String details = event.getString("lead");
+ String url = event.getString("path");
+
+ ContentValues cValues = new ContentValues();
+ event.put(EventContract.EventEntry.COLUMN_EVENT_ID, id);
+ event.put(EventContract.EventEntry.COLUMN_EVENT_TYPE, type);
+ event.put(EventContract.EventEntry.COLUMN_EVENT_TITLE, title);
+ event.put(EventContract.EventEntry.COLUMN_EVENT_DATE_FROM, date_from);
+ event.put(EventContract.EventEntry.COLUMN_EVENT_DATE_TO, date_to);
+ event.put(EventContract.EventEntry.COLUMN_EVENT_LOCATION, location);
+ event.put(EventContract.EventEntry.COLUMN_EVENT_DETAILS, details);
+ event.put(EventContract.EventEntry.COLUMN_EVENT_URL, url);
+ parsedEvents.add(cValues);
+ }
+ return parsedEvents;
}
public void saveFile(String data) {
@@ -104,40 +137,81 @@ public class EventDbHelper {
}
}
- public String getStoredData() {
+ public ArrayList getStoredData() {
File file = new File(filename);
if(file.exists()){
- //Read text from file
- StringBuilder text = new StringBuilder();
-
+ ArrayList eventStrings = new ArrayList<>();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
-
while ((line = br.readLine()) != null) {
- text.append(line);
- text.append('n');
+ eventStrings.add(line);
}
}
catch (IOException e) {
e.printStackTrace();
}
- return text.toString();
+
+ String[] eventDetailsString = null;
+ ContentValues eventDetailsCValue = new ContentValues();
+ ArrayList events = new ArrayList<>();
+ for (String event: eventStrings) {
+ eventDetailsString = event.split(";");
+ eventDetailsCValue.put("id", eventDetailsString[0]);
+ eventDetailsCValue.put("type", eventDetailsString[1]);
+ eventDetailsCValue.put("title", eventDetailsString[2]);
+ eventDetailsCValue.put("date_from", eventDetailsString[3]);
+ eventDetailsCValue.put("date_to", eventDetailsString[4]);
+ eventDetailsCValue.put("location", eventDetailsString[5]);
+ eventDetailsCValue.put("details", eventDetailsString[6]);
+ eventDetailsCValue.put("url", eventDetailsString[7]);
+ events.add(eventDetailsCValue);
+ }
+ return events;
}
else {
- return "Was not able to find file";
+ Log.d(LOG_TAG, "Was not able to find file");
+ return null;
}
}
public Long insert(ContentValues values) {
+ File file = new File(ctx.getFilesDir(),filename);
+ //First retrieve all data,then check if the value is already stored.
+ ArrayList storedValues = getStoredData();
+
+ //If no data exist already create new arrayList
+ if (storedValues == null) storedValues = new ArrayList<>();
+
+ //If the new data is already there stop execution.
+ if (storedValues.contains(values)) return null;
+
+ storedValues.add(values);
+ Integer storedDataPosition = storedValues.indexOf(values);
+
+ //Write new data to textFile
try {
+
+ if (!file.exists()) file.createNewFile();
+
BufferedWriter buf = new BufferedWriter(new FileWriter(filename, true));
+ for (ContentValues event : storedValues) {
+ buf.write(event.getAsString("id") + ";");
+ buf.write(event.getAsString("type") + ";");
+ buf.write(event.getAsString("title") + ";");
+ buf.write(event.getAsString("date_from") + ";");
+ buf.write(event.getAsString("date_to") + ";");
+ buf.write(event.getAsString("location") + ";");
+ buf.write(event.getAsString("details") + ";");
+ buf.write(event.getAsString("url"));
+ buf.newLine();
+ }
+ buf.close();
} catch (IOException e) {
e.printStackTrace();
}
-
- return null;
+ return Long.valueOf(storedDataPosition);
}
}
diff --git a/app/src/main/java/no/nilsnh/uibevents/data/EventProvider.java b/app/src/main/java/no/nilsnh/uibevents/data/EventProvider.java
index bdf7ffd..82949f3 100644
--- a/app/src/main/java/no/nilsnh/uibevents/data/EventProvider.java
+++ b/app/src/main/java/no/nilsnh/uibevents/data/EventProvider.java
@@ -6,13 +6,12 @@ import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
-public class EventProvider extends ContentProvider{
+public class EventProvider extends ContentProvider {
private EventDbHelper eventDbHelper;
private static final UriMatcher sUriMatcher = buildUriMatcher();
static final int EVENT = 100;
-
@Override
public boolean onCreate() {
eventDbHelper = new EventDbHelper(getContext());
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 58e04b2..2d1038e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,4 +3,5 @@
Hello world!
Settings
+ no.nilsnh.uibevents