src/net/fortuna/ical4j/util/CompatibilityHints.java

Tue, 10 Feb 2015 21:32:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 10 Feb 2015 21:32:00 +0100
changeset 5
e0e108e77052
parent 0
fb9019fb1bf7
permissions
-rw-r--r--

Complete porting of ical4j to post getContextClassLoader() Android era,
correcting critical flaws reported by users on the upstream bugtracker
including https://github.com/gggard/AndroidCaldavSyncAdapater/issues/224/

michael@0 1 /**
michael@0 2 * Copyright (c) 2012, Ben Fortuna
michael@0 3 * All rights reserved.
michael@0 4 *
michael@0 5 * Redistribution and use in source and binary forms, with or without
michael@0 6 * modification, are permitted provided that the following conditions
michael@0 7 * are met:
michael@0 8 *
michael@0 9 * o Redistributions of source code must retain the above copyright
michael@0 10 * notice, this list of conditions and the following disclaimer.
michael@0 11 *
michael@0 12 * o Redistributions in binary form must reproduce the above copyright
michael@0 13 * notice, this list of conditions and the following disclaimer in the
michael@0 14 * documentation and/or other materials provided with the distribution.
michael@0 15 *
michael@0 16 * o Neither the name of Ben Fortuna nor the names of any other contributors
michael@0 17 * may be used to endorse or promote products derived from this software
michael@0 18 * without specific prior written permission.
michael@0 19 *
michael@0 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
michael@0 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
michael@0 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
michael@0 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
michael@0 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
michael@0 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
michael@0 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
michael@0 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
michael@0 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
michael@0 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
michael@0 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
michael@0 31 */
michael@0 32 package net.fortuna.ical4j.util;
michael@0 33
michael@0 34 import java.util.Map;
michael@0 35
michael@0 36 import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
michael@0 37
michael@0 38 /**
michael@0 39 * $Id$
michael@0 40 *
michael@0 41 * Created on 9/03/2006
michael@0 42 *
michael@0 43 * A set of keys used to enable compatibility features.
michael@0 44 *
michael@0 45 * @author Ben Fortuna
michael@0 46 */
michael@0 47 public final class CompatibilityHints {
michael@0 48
michael@0 49 /**
michael@0 50 * A system property key to enable relaxed unfolding. Relaxed unfolding is enabled by setting this system property
michael@0 51 * to "true".
michael@0 52 */
michael@0 53 public static final String KEY_RELAXED_UNFOLDING = "ical4j.unfolding.relaxed";
michael@0 54
michael@0 55 /**
michael@0 56 * A system property key to enable relaxed parsing. Relaxed parsing is enabled by setting this system property to
michael@0 57 * "true".
michael@0 58 */
michael@0 59 public static final String KEY_RELAXED_PARSING = "ical4j.parsing.relaxed";
michael@0 60
michael@0 61 /**
michael@0 62 * A system property key to enable relaxed validation. Relaxed validation disables validation of certain conformance
michael@0 63 * rules that many iCalendar implementations do not conform to. Relaxed validation is enabled by setting this system
michael@0 64 * property to "true".
michael@0 65 */
michael@0 66 public static final String KEY_RELAXED_VALIDATION = "ical4j.validation.relaxed";
michael@0 67
michael@0 68 /**
michael@0 69 * A system property key used to enable compatibility with Outlook/Exchange-generated iCalendar files. Outlook
michael@0 70 * compatibility is enabled by setting this system property to "true".
michael@0 71 */
michael@0 72 public static final String KEY_OUTLOOK_COMPATIBILITY = "ical4j.compatibility.outlook";
michael@0 73
michael@0 74 /**
michael@0 75 * A system property key used to enable compatibility with Lotus Notes-generated iCalendar files. Notes
michael@0 76 * compatibility is enabled by setting this system property to "true".
michael@0 77 */
michael@0 78 public static final String KEY_NOTES_COMPATIBILITY = "ical4j.compatibility.notes";
michael@3 79
michael@3 80 /**
michael@3 81 * Support for vCard features that are not necessarily compatible with the iCalendar standard.
michael@3 82 */
michael@3 83 public static final String KEY_VCARD_COMPATIBILITY = "ical4j.compatibility.vcard";
michael@0 84
michael@0 85 private static final Map HINTS = new ConcurrentHashMap();
michael@0 86 // preload known hints from the configurator
michael@0 87 static {
michael@0 88 setHintEnabled(KEY_RELAXED_UNFOLDING, "true".equals(Configurator.getProperty(KEY_RELAXED_UNFOLDING)));
michael@0 89 setHintEnabled(KEY_RELAXED_PARSING, "true".equals(Configurator.getProperty(KEY_RELAXED_PARSING)));
michael@0 90 setHintEnabled(KEY_RELAXED_VALIDATION, "true".equals(Configurator.getProperty(KEY_RELAXED_VALIDATION)));
michael@0 91 setHintEnabled(KEY_OUTLOOK_COMPATIBILITY, "true".equals(Configurator.getProperty(KEY_OUTLOOK_COMPATIBILITY)));
michael@0 92 setHintEnabled(KEY_NOTES_COMPATIBILITY, "true".equals(Configurator.getProperty(KEY_NOTES_COMPATIBILITY)));
michael@0 93 }
michael@0 94
michael@0 95 /**
michael@0 96 * Constructor made private to enforce static nature.
michael@0 97 */
michael@0 98 private CompatibilityHints() {
michael@0 99 }
michael@0 100
michael@0 101 /**
michael@0 102 * @param key
michael@0 103 * a compatibility hint key
michael@0 104 * @param enabled
michael@0 105 * indicates whether to enable or disable the compatibility hint
michael@0 106 */
michael@0 107 public static void setHintEnabled(final String key, final boolean enabled) {
michael@0 108 HINTS.put(key, Boolean.valueOf(enabled));
michael@0 109 }
michael@0 110
michael@0 111 /**
michael@0 112 * @param key
michael@0 113 * a compatibility hint key
michael@0 114 */
michael@0 115 public static void clearHintEnabled(final String key) {
michael@0 116 HINTS.remove(key);
michael@0 117 }
michael@0 118
michael@0 119 /**
michael@0 120 * @param key
michael@0 121 * a compatibility hint key
michael@0 122 * @return true if the specified compatibility hint is enabled, otherwise false
michael@0 123 */
michael@0 124 public static boolean isHintEnabled(final String key) {
michael@0 125 if (HINTS.get(key) != null) {
michael@0 126 return ((Boolean) HINTS.get(key)).booleanValue();
michael@0 127 }
michael@0 128 return "true".equals(Configurator.getProperty(key));
michael@0 129 }
michael@0 130 }

mercurial