/*
* This file is part of JGrasstools (http://www.jgrasstools.org)
* (C) HydroloGIS - www.hydrologis.com
*
* JGrasstools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.jgrasstools.gears.io.geopaparazzi.forms;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.jgrasstools.gears.io.geopaparazzi.forms.items.ItemBoolean;
import org.jgrasstools.gears.io.geopaparazzi.forms.items.ItemCombo;
import org.jgrasstools.gears.io.geopaparazzi.forms.items.ItemLabel;
import org.jgrasstools.gears.io.geopaparazzi.forms.items.ItemText;
import org.jgrasstools.gears.io.geopaparazzi.forms.items.ItemTextArea;
import org.jgrasstools.gears.utils.files.FileUtilities;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Form utilities
*
* @author Andrea Antonello (www.hydrologis.com)
*/
public class Utilities {
public static final String ATTR_SECTIONNAME = "sectionname";
public static final String ATTR_SECTIONOBJECTSTR = "sectionobjectstr";
public static final String ATTR_FORMS = "forms";
public static final String ATTR_FORMNAME = "formname";
public static final String TAG_LONGNAME = "longname";
public static final String TAG_SHORTNAME = "shortname";
public static final String TAG_FORMS = "forms";
public static final String TAG_FORMITEMS = "formitems";
public static final String TAG_KEY = "key";
public static final String TAG_VALUE = "value";
public static final String TAG_VALUES = "values";
public static final String TAG_ITEMS = "items";
public static final String TAG_ITEM = "item";
public static final String TAG_TYPE = "type";
public static final String TAG_READONLY = "readonly";
public static final String TAG_SIZE = "size";
public static final String TAG_URL = "url";
public static void properties2Mainframe( MainFrame mainFrame, File templateFile ) throws Exception {
List<String> templateLinesList = FileUtilities.readFileToLinesList(templateFile);
String name = FileUtilities.getNameWithoutExtention(templateFile);
Section currentSection = new Section(name);
mainFrame.addSection(currentSection);
Form currentForm = null;
for( int i = 0; i < templateLinesList.size(); i++ ) {
String line = templateLinesList.get(i).trim();
if (line.length() == 0) {
continue;
}
if (line.startsWith("#")) {
String title = line.substring(1).trim();
currentForm = new Form(title);
currentSection.addForms(currentForm);
continue;
}
String[] split = line.split("\\|");
String type = split[0].trim();
if (type.equals("text")) {
String field = split[1].trim();
String mandatory = split[2].trim();
String value = "";
if (split.length == 4) {
value = split[3].trim();
}
ItemText item = new ItemText(null, field, value, Boolean.parseBoolean(mandatory), false);
currentForm.addItem(item);
} else if (type.startsWith("textarea")) {
String field = split[1].trim();
String mandatory = split[2].trim();
String value = "";
if (split.length == 4) {
value = split[3].trim();
}
ItemTextArea item = new ItemTextArea(null, field, value, Boolean.parseBoolean(mandatory), false);
currentForm.addItem(item);
} else if (type.startsWith("combo")) {
String field = split[1].trim();
String mandatory = split[2].trim();
String value = "";
if (split.length == 4) {
value = split[3].trim();
}
String comboItems = type.replaceFirst("combo:", "");
String[] itemsSplit = comboItems.split(",");
for( int j = 0; j < itemsSplit.length; j++ ) {
itemsSplit[j] = itemsSplit[j].trim();
}
ItemCombo combo = new ItemCombo(null, field, itemsSplit, value, Boolean.parseBoolean(mandatory));
currentForm.addItem(combo);
} else if (type.equals("checkbox")) {
String field = split[1].trim();
String mandatory = split[2].trim();
String value = "false";
if (split.length == 4) {
value = split[3].trim();
}
ItemBoolean checkbox = new ItemBoolean(null, field, value, Boolean.parseBoolean(mandatory));
currentForm.addItem(checkbox);
} else if (type.equals("label")) {
String label = "";
if (split.length > 1)
label = split[1].trim();
ItemLabel labelItem = new ItemLabel(label, 20, false);
currentForm.addItem(labelItem);
}
}
}
public static List<String> getFormNames4Section( JSONObject section ) throws JSONException {
List<String> names = new ArrayList<String>();
JSONArray jsonArray = section.getJSONArray(ATTR_FORMS);
if (jsonArray != null && jsonArray.length() > 0) {
for( int i = 0; i < jsonArray.length(); i++ ) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject.has(ATTR_FORMNAME)) {
String formName = jsonObject.getString(ATTR_FORMNAME);
names.add(formName);
}
}
}
return names;
}
public static JSONObject getForm4Name( String formName, JSONObject section ) throws JSONException {
JSONArray jsonArray = section.getJSONArray(ATTR_FORMS);
if (jsonArray != null && jsonArray.length() > 0) {
for( int i = 0; i < jsonArray.length(); i++ ) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject.has(ATTR_FORMNAME)) {
String tmpFormName = jsonObject.getString(ATTR_FORMNAME);
if (tmpFormName.equals(formName)) {
return jsonObject;
}
}
}
}
return null;
}
/**
* Utility method to get the formitems of a form object.
*
* <p>Note that the entering json object has to be one
* object of the main array, not THE main array itself,
* i.e. a choice was already done.
*
* @param jsonObj the single object.
* @return the array of items of the contained form or <code>null</code> if
* no form is contained.
* @throws JSONException
*/
public static JSONArray getFormItems( JSONObject formObj ) throws JSONException {
if (formObj.has(TAG_FORMITEMS)) {
JSONArray formItemsArray = formObj.getJSONArray(TAG_FORMITEMS);
return formItemsArray;
}
return null;
}
}