package org.redcross.openmapkit.odkcollect;
import android.content.Intent;
import android.os.Bundle;
import com.spatialdev.osm.model.OSMElement;
import org.redcross.openmapkit.odkcollect.tag.ODKTag;
import org.redcross.openmapkit.odkcollect.tag.ODKTagItem;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
/**
* Created by Nicholas Hallahan on 2/9/15.
* nhallahan@spatialdev.com
* * *
*/
public class ODKCollectHandler {
private static ODKCollectData odkCollectData;
public static void registerIntent(Intent intent) {
String action = intent.getAction();
if(action != null && action.equals("android.intent.action.SEND")) {
if (intent.getType().equals("text/plain")) {
Bundle extras = intent.getExtras();
if(extras != null) {
// extract data from intent extras
String formId = extras.getString("FORM_ID");
String formFileName = extras.getString("FORM_FILE_NAME");
String instanceId = extras.getString("INSTANCE_ID");
String instanceDir = extras.getString("INSTANCE_DIR");
String previousOSMEditFileName = extras.getString("OSM_EDIT_FILE_NAME");
LinkedHashMap<String, ODKTag> requiredTags = generateRequiredOSMTagsFromBundle(extras);
odkCollectData = new ODKCollectData(formId,
formFileName,
instanceId,
instanceDir,
previousOSMEditFileName,
requiredTags);
}
}
}
}
public static boolean isODKCollectMode() {
if (odkCollectData != null) {
return true;
}
return false;
}
public static boolean isStandaloneMode() {
if (odkCollectData == null) {
return true;
}
return false;
}
public static ODKCollectData getODKCollectData() {
return odkCollectData;
}
/**
* Saves an OSM Element as XML in ODK Collect.
* * *
* @param el
* @return The full path of the saved OSM XML File
*/
public static String saveXmlInODKCollect(OSMElement el, String osmUserName) {
try {
odkCollectData.consumeOSMElement(el, osmUserName);
odkCollectData.deleteOldOSMEdit();
odkCollectData.writeXmlToOdkCollectInstanceDir();
return odkCollectData.getOSMFileFullPath();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private static LinkedHashMap<String, ODKTag> generateRequiredOSMTagsFromBundle(Bundle extras) {
List<String> tagKeys = extras.getStringArrayList("TAG_KEYS");
if (tagKeys == null || tagKeys.size() == 0) {
return null;
}
LinkedHashMap<String, ODKTag> tags = new LinkedHashMap<>();
for (String key : tagKeys) {
ODKTag tag = new ODKTag();
tags.put(key, tag);
tag.setKey(key);
String label = extras.getString("TAG_LABEL." + key);
if (label != null) {
tag.setLabel(label);
}
List<String> values = extras.getStringArrayList("TAG_VALUES." + key);
if (values != null && values.size() > 0) {
for (String value : values) {
ODKTagItem tagItem = new ODKTagItem();
tagItem.setValue(value);
String valueLabel = extras.getString("TAG_VALUE_LABEL." + key + "." + value);
if (valueLabel != null) {
tagItem.setLabel(valueLabel);
}
tag.addItem(tagItem);
}
}
}
return tags;
}
}