package org.redcross.openmapkit.odkcollect.tag; import android.app.Activity; import android.widget.CheckBox; import android.widget.EditText; import android.widget.TextView; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * Structure for ODK OSM Tag elements in XForm. * Created by Nicholas Hallahan nhallahan@spatialdev.com */ public class ODKTag { private String key; private String label; private LinkedHashMap<String, ODKTagItem> items = new LinkedHashMap<>(); private Map<Integer, ODKTagItem> buttonIdToODKTagItemHash = new HashMap<>(); private List<CheckBox> checkBoxes = new ArrayList<>(); public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getLabel() { return label; } public ODKTagItem getItem(String value) { return items.get(value); } public Collection<ODKTagItem> getItems() { return items.values(); } public void setLabel(String label) { this.label = label; } public void addItem(ODKTagItem item) { items.put(item.getValue(), item); } public void putButtonIdToTagItemHash(Integer id, ODKTagItem tagItem) { buttonIdToODKTagItemHash.put(id, tagItem); } public String getTagItemValueFromButtonId(Integer id) { ODKTagItem item = buttonIdToODKTagItemHash.get(id); if (item != null) { return item.getValue(); } return null; } public TextView createTagKeyTextView(Activity activity) { TextView tv = new TextView(activity); if (label != null) { tv.setText(label); } else { tv.setText(key); } return tv; } public TextView createTagValueTextView(Activity activity, String initialTagVal) { EditText et = new EditText(activity); if (initialTagVal != null) { et.setText(initialTagVal); } return et; } public void addCheckbox(CheckBox cb) { checkBoxes.add(cb); } public boolean hasCheckedTagValues() { for (CheckBox cb : checkBoxes) { if (cb.isChecked()) { return true; } } return false; } public String getSemiColonDelimitedTagValues(String customValues) { Set<String> values = new HashSet<>(); for (CheckBox cb : checkBoxes) { if (cb.isChecked()) { int id = cb.getId(); ODKTagItem item = buttonIdToODKTagItemHash.get(id); if (item != null) { values.add(item.getValue()); } } } if (customValues != null) { customValues = customValues.trim(); String[] customValuesArr = customValues.split(";"); if (customValuesArr.length > 0) { for (int i = 0; i < customValuesArr.length; i++) { String customVal = customValuesArr[i]; values.add(customVal); } } } return StringUtils.join(values, ";"); } }