/** * Copyright (C) 2010 Orbeon, Inc. * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU Lesser General Public License as published by the Free Software Foundation; either version * 2.1 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 Lesser General Public License for more details. * * The full text of the license is available at http://www.gnu.org/copyleft/lesser.html */ package org.orbeon.oxf.xforms; import org.orbeon.oxf.common.ValidationException; import org.orbeon.oxf.properties.Properties; import org.orbeon.oxf.xml.dom4j.LocationData; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; public class XFormsProperties { public static final String[] EMPTY_STRING_ARRAY = new String[]{}; public static final String XFORMS_PROPERTY_PREFIX = "oxf.xforms."; // Document properties public static final String FUNCTION_LIBRARY_PROPERTY = "function-library"; public static final String STATE_HANDLING_PROPERTY = "state-handling"; public static final String STATE_HANDLING_SERVER_VALUE = "server"; public static final String STATE_HANDLING_CLIENT_VALUE = "client"; public static final String NOSCRIPT_SUPPORT_PROPERTY = "noscript-support"; public static final String NOSCRIPT_PROPERTY = "noscript"; public static final String NOSCRIPT_TEMPLATE = "noscript-template"; public static final String NOSCRIPT_TEMPLATE_STATIC_VALUE = "static"; public static final String READONLY_APPEARANCE_PROPERTY = "readonly-appearance"; public static final String READONLY_APPEARANCE_STATIC_VALUE = "static"; public static final String READONLY_APPEARANCE_DYNAMIC_VALUE = "dynamic"; public static final String READONLY_APPEARANCE_STATIC_SELECT_PROPERTY = "readonly-appearance.static.select"; public static final String READONLY_APPEARANCE_STATIC_SELECT1_PROPERTY = "readonly-appearance.static.select1"; public static final String ORDER_PROPERTY = "order"; public static final String DEFAULT_ORDER_PROPERTY = "label control help alert hint"; public static final String HOST_LANGUAGE = "host-language"; public static final String LABEL_ELEMENT_NAME_PROPERTY = "label-element"; public static final String HINT_ELEMENT_NAME_PROPERTY = "hint-element"; public static final String HELP_ELEMENT_NAME_PROPERTY = "help-element"; public static final String ALERT_ELEMENT_NAME_PROPERTY = "alert-element"; public static final String LABEL_APPEARANCE_PROPERTY = "label.appearance"; public static final String HINT_APPEARANCE_PROPERTY = "hint.appearance"; public static final String HELP_APPEARANCE_PROPERTY = "help.appearance"; public static final String UPLOAD_MAX_SIZE_PROPERTY = "upload.max-size"; public static final String UPLOAD_MAX_SIZE_AGGREGATE_PROPERTY = "upload.max-size-aggregate"; public static final String UPLOAD_MAX_SIZE_AGGREGATE_EXPRESSION_PROPERTY = "upload.max-size-aggregate-expression"; public static final String UPLOAD_MEDIATYPES_PROPERTY = "upload.mediatypes"; public static final String EXTERNAL_EVENTS_PROPERTY = "external-events"; public static final String OPTIMIZE_GET_ALL_PROPERTY = "optimize-get-all"; public static final String OPTIMIZE_LOCAL_SUBMISSION_REPLACE_ALL_PROPERTY = "optimize-local-submission"; public static final String LOCAL_SUBMISSION_FORWARD_PROPERTY = "local-submission-forward"; public static final String LOCAL_SUBMISSION_INCLUDE_PROPERTY = "local-submission-include"; public static final String LOCAL_INSTANCE_INCLUDE_PROPERTY = "local-instance-include"; // public static final String XFORMS_OPTIMIZE_LOCAL_INSTANCE_LOADS_PROPERTY = "optimize-local-instance-loads"; public static final String EXPOSE_XPATH_TYPES_PROPERTY = "expose-xpath-types"; public static final String AJAX_UPDATE_FULL_THRESHOLD = "ajax.update.full.threshold"; public static final String NO_UPDATES = "no-updates"; public static final String TYPE_OUTPUT_FORMAT_PROPERTY_PREFIX = "format.output."; public static final String TYPE_INPUT_FORMAT_PROPERTY_PREFIX = "format.input."; public static final String DATE_FORMAT_PROPERTY = TYPE_OUTPUT_FORMAT_PROPERTY_PREFIX + "date"; public static final String DATETIME_FORMAT_PROPERTY = TYPE_OUTPUT_FORMAT_PROPERTY_PREFIX + "dateTime"; public static final String TIME_FORMAT_PROPERTY = TYPE_OUTPUT_FORMAT_PROPERTY_PREFIX + "time"; public static final String DECIMAL_FORMAT_PROPERTY = TYPE_OUTPUT_FORMAT_PROPERTY_PREFIX + "decimal"; public static final String INTEGER_FORMAT_PROPERTY = TYPE_OUTPUT_FORMAT_PROPERTY_PREFIX + "integer"; public static final String FLOAT_FORMAT_PROPERTY = TYPE_OUTPUT_FORMAT_PROPERTY_PREFIX + "float"; public static final String DOUBLE_FORMAT_PROPERTY = TYPE_OUTPUT_FORMAT_PROPERTY_PREFIX + "double"; public static final String DATE_FORMAT_INPUT_PROPERTY = TYPE_INPUT_FORMAT_PROPERTY_PREFIX + "date"; public static final String TIME_FORMAT_INPUT_PROPERTY = TYPE_INPUT_FORMAT_PROPERTY_PREFIX + "time"; public static final String DATEPICKER_NAVIGATOR_PROPERTY = "datepicker.navigator"; public static final String DATEPICKER_TWO_MONTHS_PROPERTY = "datepicker.two-months"; public static final String SHOW_ERROR_DIALOG_PROPERTY = "show-error-dialog"; public static final String SHOW_RECOVERABLE_ERRORS_PROPERTY = "show-recoverable-errors"; public static final String LOGIN_PAGE_DETECTION_REGEXP = "login-page-detection-regexp"; public static final String CLIENT_EVENTS_MODE_PROPERTY = "client.events.mode"; public static final String CLIENT_EVENTS_FILTER_PROPERTY = "client.events.filter"; public static final String SESSION_HEARTBEAT_PROPERTY = "session-heartbeat"; public static final String SESSION_HEARTBEAT_DELAY_PROPERTY = "session-heartbeat-delay"; public static final String DELAY_BEFORE_INCREMENTAL_REQUEST_PROPERTY = "delay-before-incremental-request"; public static final String INTERNAL_SHORT_DELAY_PROPERTY = "internal-short-delay"; public static final String DELAY_BEFORE_DISPLAY_LOADING_PROPERTY = "delay-before-display-loading"; // Could be `upload.delay-before-progress-refresh` for consistency with new properties public static final String DELAY_BEFORE_UPLOAD_PROGRESS_REFRESH_PROPERTY = "delay-before-upload-progress-refresh"; public static final String REVISIT_HANDLING_PROPERTY = "revisit-handling"; public static final String REVISIT_HANDLING_RESTORE_VALUE = "restore"; public static final String REVISIT_HANDLING_RELOAD_VALUE = "reload"; public static final String HELP_HANDLER_PROPERTY = "help-handler"; public static final String HELP_TOOLTIP_PROPERTY = "help-tooltip"; public static final String ASYNC_SUBMISSION_POLL_DELAY = "submission-poll-delay"; // TODO: Make these global properties, see https://github.com/orbeon/orbeon-forms/issues/1391 public static final String DELAY_BEFORE_AJAX_TIMEOUT_PROPERTY = "delay-before-ajax-timeout"; public static final String UPLOAD_DELAY_BEFORE_XFORMS_TIMEOUT_PROPERTY = "upload.delay-before-xforms-timeout"; public static final String RETRY_DELAY_INCREMENT = "retry.delay-increment"; public static final String RETRY_MAX_DELAY = "retry.max-delay"; public static final String USE_ARIA = "use-aria"; public static final String XFORMS11_SWITCH_PROPERTY = "xforms11-switch"; public static final String ENCRYPT_ITEM_VALUES_PROPERTY = "encrypt-item-values"; public static final String XPATH_ANALYSIS_PROPERTY = "xpath-analysis"; public static final String CALCULATE_ANALYSIS_PROPERTY = "analysis.calculate"; // TODO: Make this a global property: right now it is used 1/2 global, 1/2 document public static final String CACHE_DOCUMENT_PROPERTY = "cache.document"; public static final boolean CACHE_DOCUMENT_DEFAULT = true; public static final String SANITIZE_PROPERTY = "sanitize"; public static final String ASSETS_BASELINE_EXCLUDES_PROPERTY = "assets.baseline.excludes"; public static class PropertyDefinition { public final String name; public final Object defaultValue; public final boolean isPropagateToClient; public PropertyDefinition(String name, String defaultValue, boolean propagateToClient) { this.name = name; this.defaultValue = defaultValue; isPropagateToClient = propagateToClient; } public PropertyDefinition(String name, boolean defaultValue, boolean propagateToClient) { this.name = name; this.defaultValue = defaultValue; isPropagateToClient = propagateToClient; } public PropertyDefinition(String name, int defaultValue, boolean propagateToClient) { this.name = name; this.defaultValue = defaultValue; isPropagateToClient = propagateToClient; } public final Object parseProperty(String value) { if (defaultValue instanceof Integer) { return Integer.parseInt(value); } else if (defaultValue instanceof Boolean) { return Boolean.valueOf(value); } else { return value; } } public void validate(Object value, LocationData locationData) {} } public static final PropertyDefinition[] SUPPORTED_DOCUMENT_PROPERTIES_DEFAULTS = { new PropertyDefinition(STATE_HANDLING_PROPERTY, STATE_HANDLING_SERVER_VALUE, false) { @Override public void validate(Object value, LocationData locationData) { final String stringValue = value.toString(); if (!(stringValue.equals(XFormsProperties.STATE_HANDLING_SERVER_VALUE) || stringValue.equals(XFormsProperties.STATE_HANDLING_CLIENT_VALUE))) throw new ValidationException("Invalid xxf:" + name + " property value value: " + stringValue, locationData); } }, new PropertyDefinition(READONLY_APPEARANCE_PROPERTY, READONLY_APPEARANCE_DYNAMIC_VALUE, false) { @Override public void validate(Object value, LocationData locationData) { final String stringValue = value.toString(); if (! XFormsUtils.maybeAVT(stringValue) && !(stringValue.equals(XFormsProperties.READONLY_APPEARANCE_STATIC_VALUE) || stringValue.equals(XFormsProperties.READONLY_APPEARANCE_DYNAMIC_VALUE))) throw new ValidationException("Invalid xxf:" + name + " property value value: " + stringValue, locationData); } }, new PropertyDefinition( DATE_FORMAT_PROPERTY, "if (. castable as xs:date) then format-date(xs:date(.), '[FNn] [MNn] [D], [Y] [ZN]', 'en', (), ()) else .", false ), new PropertyDefinition( DATETIME_FORMAT_PROPERTY, "if (. castable as xs:dateTime) then format-dateTime(xs:dateTime(.), '[FNn] [MNn] [D], [Y] [H01]:[m01]:[s01] [ZN]', 'en', (), ()) else .", false ), new PropertyDefinition( TIME_FORMAT_PROPERTY, "if (. castable as xs:time) then format-time(xs:time(.), '[H01]:[m01]:[s01] [ZN]', 'en', (), ()) else .", false ), new PropertyDefinition( DECIMAL_FORMAT_PROPERTY, "if (. castable as xs:decimal) then format-number(xs:decimal(.),'###,###,###,##0.00') else .", false ), new PropertyDefinition( INTEGER_FORMAT_PROPERTY, "if (. castable as xs:integer) then format-number(xs:integer(.),'###,###,###,##0') else .", false ), new PropertyDefinition( FLOAT_FORMAT_PROPERTY, "if (. castable as xs:float) then format-number(xs:float(.),'#,##0.000') else .", false ), new PropertyDefinition( DOUBLE_FORMAT_PROPERTY, "if (. castable as xs:double) then format-number(xs:double(.),'#,##0.000') else .", false ), new PropertyDefinition(FUNCTION_LIBRARY_PROPERTY , "", false), new PropertyDefinition(NOSCRIPT_SUPPORT_PROPERTY , true, false), new PropertyDefinition(NOSCRIPT_PROPERTY , false, false), new PropertyDefinition(NOSCRIPT_TEMPLATE , NOSCRIPT_TEMPLATE_STATIC_VALUE, false), new PropertyDefinition(READONLY_APPEARANCE_STATIC_SELECT_PROPERTY , "full", false), new PropertyDefinition(READONLY_APPEARANCE_STATIC_SELECT1_PROPERTY , "full", false), new PropertyDefinition(ORDER_PROPERTY , DEFAULT_ORDER_PROPERTY, false), new PropertyDefinition(HOST_LANGUAGE , "xhtml", false), new PropertyDefinition(LABEL_ELEMENT_NAME_PROPERTY , "label", false), new PropertyDefinition(HINT_ELEMENT_NAME_PROPERTY , "span", false), new PropertyDefinition(HELP_ELEMENT_NAME_PROPERTY , "span", false), new PropertyDefinition(ALERT_ELEMENT_NAME_PROPERTY , "span", false), new PropertyDefinition(LABEL_APPEARANCE_PROPERTY , "full", false), new PropertyDefinition(HINT_APPEARANCE_PROPERTY , "full", false), new PropertyDefinition(HELP_APPEARANCE_PROPERTY , "dialog", false), new PropertyDefinition(UPLOAD_MAX_SIZE_PROPERTY , "", false), // blank default (see #2956) new PropertyDefinition(UPLOAD_MAX_SIZE_AGGREGATE_PROPERTY , "", false), new PropertyDefinition(UPLOAD_MAX_SIZE_AGGREGATE_EXPRESSION_PROPERTY , "", false), new PropertyDefinition(UPLOAD_MEDIATYPES_PROPERTY , "*/*", false), new PropertyDefinition(UPLOAD_DELAY_BEFORE_XFORMS_TIMEOUT_PROPERTY , 45000, false), new PropertyDefinition(EXTERNAL_EVENTS_PROPERTY , "", false), new PropertyDefinition(OPTIMIZE_GET_ALL_PROPERTY , true, false), new PropertyDefinition(OPTIMIZE_LOCAL_SUBMISSION_REPLACE_ALL_PROPERTY, true, false), new PropertyDefinition(LOCAL_SUBMISSION_FORWARD_PROPERTY , true, false), new PropertyDefinition(LOCAL_SUBMISSION_INCLUDE_PROPERTY , false, false), new PropertyDefinition(LOCAL_INSTANCE_INCLUDE_PROPERTY , false, false), new PropertyDefinition(EXPOSE_XPATH_TYPES_PROPERTY , false, false), new PropertyDefinition(SHOW_RECOVERABLE_ERRORS_PROPERTY , 10, false), new PropertyDefinition(ENCRYPT_ITEM_VALUES_PROPERTY , true, false), new PropertyDefinition(ASYNC_SUBMISSION_POLL_DELAY , 10 * 1000, false), new PropertyDefinition(AJAX_UPDATE_FULL_THRESHOLD , 20, false), new PropertyDefinition(NO_UPDATES , false, false), new PropertyDefinition(XFORMS11_SWITCH_PROPERTY , false, false), new PropertyDefinition(XPATH_ANALYSIS_PROPERTY , false, false), new PropertyDefinition(CALCULATE_ANALYSIS_PROPERTY , false, false), new PropertyDefinition(CACHE_DOCUMENT_PROPERTY , CACHE_DOCUMENT_DEFAULT, false), new PropertyDefinition(SANITIZE_PROPERTY , "", false), new PropertyDefinition(ASSETS_BASELINE_EXCLUDES_PROPERTY , "", false), // Properties to propagate to the client new PropertyDefinition(RETRY_DELAY_INCREMENT , 5000, true), new PropertyDefinition(RETRY_MAX_DELAY , 30000, true), new PropertyDefinition(USE_ARIA , false, true), new PropertyDefinition(SESSION_HEARTBEAT_PROPERTY , true, true), new PropertyDefinition(SESSION_HEARTBEAT_DELAY_PROPERTY , 12 * 60 * 60 * 800, true), // dynamic; 80 % of 12 hours in ms new PropertyDefinition(DELAY_BEFORE_INCREMENTAL_REQUEST_PROPERTY , 500, true), new PropertyDefinition(DELAY_BEFORE_AJAX_TIMEOUT_PROPERTY , 30000, true), new PropertyDefinition(INTERNAL_SHORT_DELAY_PROPERTY , 10, true), new PropertyDefinition(DELAY_BEFORE_DISPLAY_LOADING_PROPERTY , 500, true), new PropertyDefinition(DELAY_BEFORE_UPLOAD_PROGRESS_REFRESH_PROPERTY , 2000, true), new PropertyDefinition(REVISIT_HANDLING_PROPERTY , REVISIT_HANDLING_RESTORE_VALUE, true), new PropertyDefinition(HELP_HANDLER_PROPERTY , false, true), // dynamic new PropertyDefinition(HELP_TOOLTIP_PROPERTY , false, true), new PropertyDefinition(DATE_FORMAT_INPUT_PROPERTY , "[M]/[D]/[Y]", true), new PropertyDefinition(TIME_FORMAT_INPUT_PROPERTY , "[h]:[m]:[s] [P]", true), new PropertyDefinition(DATEPICKER_NAVIGATOR_PROPERTY , true, true), new PropertyDefinition(DATEPICKER_TWO_MONTHS_PROPERTY , false, true), new PropertyDefinition(SHOW_ERROR_DIALOG_PROPERTY , true, true), new PropertyDefinition(LOGIN_PAGE_DETECTION_REGEXP , "", true), new PropertyDefinition(CLIENT_EVENTS_MODE_PROPERTY , "default", true), new PropertyDefinition(CLIENT_EVENTS_FILTER_PROPERTY , "", true), }; public static final Map<String, PropertyDefinition> SUPPORTED_DOCUMENT_PROPERTIES; static { final Map<String, PropertyDefinition> tempMap = new HashMap<String, PropertyDefinition>(); for (final PropertyDefinition propertyDefinition: SUPPORTED_DOCUMENT_PROPERTIES_DEFAULTS) { tempMap.put(propertyDefinition.name, propertyDefinition); } SUPPORTED_DOCUMENT_PROPERTIES = Collections.unmodifiableMap(tempMap); } // Global properties public static final String GZIP_STATE_PROPERTY = XFORMS_PROPERTY_PREFIX + "gzip-state"; // global but could possibly be per document public static final boolean GZIP_STATE_DEFAULT = true; public static final String HOST_LANGUAGE_AVTS_PROPERTY = XFORMS_PROPERTY_PREFIX + "host-language-avts"; // global but should be per document public static final String ADDITIONAL_AVT_ELEMENT_NAMESPACES = XFORMS_PROPERTY_PREFIX + "additional-avt-element-namespaces"; // global but should be per document public static final String ADDITIONAL_REF_ID_ATTRIBUTE_NAMES = XFORMS_PROPERTY_PREFIX + "additional-ref-id-attribute-names"; // global but should be per document public static final boolean HOST_LANGUAGE_AVTS_DEFAULT = false; public static final String MINIMAL_RESOURCES_PROPERTY = XFORMS_PROPERTY_PREFIX + "minimal-resources"; public static final boolean MINIMAL_RESOURCES_PROPERTY_DEFAULT = true; public static final String COMBINE_RESOURCES_PROPERTY = XFORMS_PROPERTY_PREFIX + "combine-resources"; public static final boolean COMBINE_RESOURCES_PROPERTY_DEFAULT = true; public static final String CACHE_COMBINED_RESOURCES_PROPERTY = XFORMS_PROPERTY_PREFIX + "cache-combined-resources"; public static final boolean CACHE_COMBINED_RESOURCES_DEFAULT = false; public static final String JAVASCRIPT_AT_BOTTOM_PROPERTY = XFORMS_PROPERTY_PREFIX + "resources.javascript-at-bottom"; public static final boolean JAVASCRIPT_AT_BOTTOM_PROPERTY_DEFAULT = true; public static final String ENCODE_VERSION_PROPERTY = XFORMS_PROPERTY_PREFIX + "resources.encode-version"; public static final boolean ENCODE_VERSION_PROPERTY_DEFAULT = true; public static final String DEBUG_LOGGING_PROPERTY = XFORMS_PROPERTY_PREFIX + "logging.debug"; public static final String ERROR_LOGGING_PROPERTY = XFORMS_PROPERTY_PREFIX + "logging.error"; public static final String DEBUG_LOG_XPATH_ANALYSIS_PROPERTY = XFORMS_PROPERTY_PREFIX + "debug.log-xpath-analysis"; public static final String DEBUG_REQUEST_STATS_PROPERTY = XFORMS_PROPERTY_PREFIX + "debug.log-request-stats"; public static final String LOCATION_MODE_PROPERTY = XFORMS_PROPERTY_PREFIX + "location-mode"; // == Global properties ============================================================================================ /** * Return a PropertyDefinition given a property name. * * @param propertyName property name * @return PropertyDefinition */ public static PropertyDefinition getPropertyDefinition(String propertyName) { return SUPPORTED_DOCUMENT_PROPERTIES.get(propertyName); } public static Set<String> getDebugLogging() { final Set<String> result = Properties.instance().getPropertySet().getNmtokens(DEBUG_LOGGING_PROPERTY); return (result != null) ? result : Collections.<String>emptySet(); } public static Set<String> getErrorLogging() { final Set<String> result = Properties.instance().getPropertySet().getNmtokens(ERROR_LOGGING_PROPERTY); return (result != null) ? result : Collections.<String>emptySet(); } public static boolean isCacheDocument() { return Properties.instance().getPropertySet().getBoolean (CACHE_DOCUMENT_PROPERTY, CACHE_DOCUMENT_DEFAULT); } public static boolean isGZIPState() { return Properties.instance().getPropertySet().getBoolean (GZIP_STATE_PROPERTY, GZIP_STATE_DEFAULT); } public static boolean isHostLanguageAVTs() { return Properties.instance().getPropertySet().getBoolean (HOST_LANGUAGE_AVTS_PROPERTY, HOST_LANGUAGE_AVTS_DEFAULT); } public static String[] getAdditionalAvtElementNamespaces() { final String additionalElementNamespacesStr = Properties.instance().getPropertySet().getString (ADDITIONAL_AVT_ELEMENT_NAMESPACES); return additionalElementNamespacesStr != null ? additionalElementNamespacesStr.split("\\s+") : EMPTY_STRING_ARRAY; } public static String[] getAdditionalRefIdAttributeNames() { String additionalRefIdAttributeNames = Properties.instance().getPropertySet().getString (ADDITIONAL_REF_ID_ATTRIBUTE_NAMES); return additionalRefIdAttributeNames != null ? additionalRefIdAttributeNames.split("\\s+") : EMPTY_STRING_ARRAY; } public static boolean isMinimalResources() { return Properties.instance().getPropertySet().getBoolean (MINIMAL_RESOURCES_PROPERTY, MINIMAL_RESOURCES_PROPERTY_DEFAULT); } public static boolean isCombinedResources() { return Properties.instance().getPropertySet().getBoolean (COMBINE_RESOURCES_PROPERTY, COMBINE_RESOURCES_PROPERTY_DEFAULT); } public static boolean isCacheCombinedResources() { return Properties.instance().getPropertySet().getBoolean (CACHE_COMBINED_RESOURCES_PROPERTY, CACHE_COMBINED_RESOURCES_DEFAULT); } public static boolean isJavaScriptAtBottom() { return Properties.instance().getPropertySet().getBoolean (JAVASCRIPT_AT_BOTTOM_PROPERTY, JAVASCRIPT_AT_BOTTOM_PROPERTY_DEFAULT); } public static boolean isEncodeVersion() { return Properties.instance().getPropertySet().getBoolean (ENCODE_VERSION_PROPERTY, ENCODE_VERSION_PROPERTY_DEFAULT); } public static boolean getDebugLogXPathAnalysis() { return Properties.instance().getPropertySet().getBoolean(DEBUG_LOG_XPATH_ANALYSIS_PROPERTY, false); } public static boolean isRequestStats() { return Properties.instance().getPropertySet().getBoolean(DEBUG_REQUEST_STATS_PROPERTY, false); } public static long getAjaxTimeout() { return (long) Properties.instance().getPropertySet().getInteger(XFORMS_PROPERTY_PREFIX + DELAY_BEFORE_AJAX_TIMEOUT_PROPERTY, ((Integer) getPropertyDefinition(DELAY_BEFORE_AJAX_TIMEOUT_PROPERTY).defaultValue).intValue()); } public static long uploadXFormsAccessTimeout() { return (long) Properties.instance().getPropertySet().getInteger(XFORMS_PROPERTY_PREFIX + UPLOAD_DELAY_BEFORE_XFORMS_TIMEOUT_PROPERTY, ((Integer) getPropertyDefinition(UPLOAD_DELAY_BEFORE_XFORMS_TIMEOUT_PROPERTY).defaultValue).intValue()); } public static int getRetryDelayIncrement() { return Properties.instance().getPropertySet().getInteger(XFORMS_PROPERTY_PREFIX + RETRY_DELAY_INCREMENT, ((Integer) getPropertyDefinition(RETRY_DELAY_INCREMENT).defaultValue).intValue()); } public static boolean isKeepLocation() { return ! Properties.instance().getPropertySet().getString(LOCATION_MODE_PROPERTY, "none").equals("none"); } }