package it.geosolutions.geocollect.android.core.test;
import it.geosolutions.android.map.wfs.WFSGeoJsonFeatureLoader;
import it.geosolutions.geocollect.android.core.login.LoginActivity;
import it.geosolutions.geocollect.android.core.login.utils.NetworkUtil;
import it.geosolutions.geocollect.android.core.mission.MissionFeature;
import it.geosolutions.geocollect.android.core.mission.PendingMissionListActivity;
import it.geosolutions.geocollect.android.core.mission.utils.PersistenceUtils;
import it.geosolutions.geocollect.android.core.mission.utils.SQLiteCascadeFeatureLoader;
import it.geosolutions.geocollect.android.core.mission.utils.SpatialiteUtils;
import it.geosolutions.geocollect.android.template.TemplateDownloadTask;
import it.geosolutions.geocollect.model.config.MissionTemplate;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import jsqlite.Database;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import eu.geopaparazzi.library.util.ResourcesManager;
public class RemoteTemplateDownloadTest extends android.test.AndroidTestCase {
final static String TAG = RemoteTemplateDownloadTest.class.getSimpleName();
public void testDownload(){
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
final String authKey = prefs.getString(LoginActivity.PREFS_AUTH_KEY, null);
if(authKey != null && NetworkUtil.isOnline(getContext())){
final TemplateDownloadTask task = new TemplateDownloadTask(){
@Override
public void complete(final ArrayList<MissionTemplate> downloadedTemplates){
assertTrue(downloadedTemplates != null);
//1insert into databse
ArrayList<MissionTemplate> validTemplates = new ArrayList<MissionTemplate>();
if(downloadedTemplates != null && downloadedTemplates.size() > 0){
Database db = getSpatialiteDatabase();
for(MissionTemplate t : downloadedTemplates){
if(!PersistenceUtils.createOrUpdateTablesForTemplate(t, db)){
Log.e(PendingMissionListActivity.class.getSimpleName(), "error creating/updating tables for "+ t.nameField);
}else{
//if insert succesfull add to list of valid templates
validTemplates.add(t);
}
}
//2. save valid templates
PersistenceUtils.saveDownloadedTemplates(getContext(), validTemplates);
ArrayList<MissionTemplate> savedTemplates = PersistenceUtils.loadSavedTemplates(getContext());
assertNotNull(savedTemplates);
assertEquals(validTemplates.size(), savedTemplates.size());
try {
db.close();
} catch (jsqlite.Exception e) {
// ignore
}
}
}
};
task.execute(authKey);
}else if(authKey == null){
Log.e(TAG, "no authKey, cannot test template download");
}else {
Log.e(TAG, "not online, cannot test template download");
}
}
public void testLoader(){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
String username = prefs.getString(LoginActivity.PREFS_USER_EMAIL, null);
String password = prefs.getString(LoginActivity.PREFS_PASSWORD, null);
int page = 0;
int pagesize = 100;
ArrayList<MissionTemplate> savedTemplates = PersistenceUtils.loadSavedTemplates(getContext());
MissionTemplate t = savedTemplates.get(0);
Database db = getSpatialiteDatabase();
String tableName = t.schema_seg.localSourceStore;
WFSGeoJsonFeatureLoader wfsl = new WFSGeoJsonFeatureLoader(
getContext(),
t.schema_seg.URL,
t.schema_seg.baseParams,
t.schema_seg.typeName,
page*pagesize+1,
pagesize,
username,
password);
// Actual loader to test
SQLiteCascadeFeatureLoader loaderToTest = new SQLiteCascadeFeatureLoader(getContext(), wfsl, db, tableName);
// Start the test
List<MissionFeature> results = loaderToTest.loadInBackground();
//this is a quite specific test for the from90 test template, adjust in future
assertEquals(results.size(), 4);
if(savedTemplates.size() >= 2){
MissionTemplate t2 = savedTemplates.get(1);
String tableName2 = t2.schema_seg.localSourceStore;
WFSGeoJsonFeatureLoader wfsl2 = new WFSGeoJsonFeatureLoader(
getContext(),
t2.schema_seg.URL,
t2.schema_seg.baseParams,
t2.schema_seg.typeName,
page*pagesize+1,
pagesize,
username,
password);
// Actual loader to test
SQLiteCascadeFeatureLoader loaderToTest2 = new SQLiteCascadeFeatureLoader(getContext(), wfsl2, db, tableName2);
// Start the test
List<MissionFeature> results2 = loaderToTest2.loadInBackground();
//this is a quite specific test for the until5 template, adjust in future
assertEquals(results2.size(), 5);
}
try {
db.close();
} catch (jsqlite.Exception e) {
// ignore
}
}
public Database getSpatialiteDatabase(){
Database spatialiteDatabase = null;
try {
File sdcardDir = ResourcesManager.getInstance(getContext()).getSdcardDir();
File spatialDbFile = new File(sdcardDir, "geocollect/genova.sqlite");
if (!spatialDbFile.getParentFile().exists()) {
throw new RuntimeException();
}
spatialiteDatabase = new jsqlite.Database();
spatialiteDatabase.open(spatialDbFile.getAbsolutePath(), jsqlite.Constants.SQLITE_OPEN_READWRITE
| jsqlite.Constants.SQLITE_OPEN_CREATE);
Log.v("MISSION_DETAIL", SpatialiteUtils.queryVersions(spatialiteDatabase));
Log.v("MISSION_DETAIL", spatialiteDatabase.dbversion());
return spatialiteDatabase;
} catch (Exception e) {
Log.v("MISSION_DETAIL", Log.getStackTraceString(e));
return null;
}
}
}