001 /*
002 * Copyright 2005,2009 Ivan SZKIBA
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.ini4j;
017
018 public class Config implements Cloneable
019 {
020 public static final String KEY_PREFIX = "org.ini4j.config.";
021 public static final String PROP_EMPTY_OPTION = "emptyOption";
022 public static final String PROP_GLOBAL_SECTION = "globalSection";
023 public static final String PROP_GLOBAL_SECTION_NAME = "globalSectionName";
024 public static final String PROP_INCLUDE = "include";
025 public static final String PROP_LOWER_CASE_OPTION = "lowerCaseOption";
026 public static final String PROP_LOWER_CASE_SECTION = "lowerCaseSection";
027 public static final String PROP_MULTI_OPTION = "multiOption";
028 public static final String PROP_MULTI_SECTION = "multiSection";
029 public static final String PROP_STRICT_OPERATOR = "strictOperator";
030 public static final String PROP_UNNAMED_SECTION = "unnamedSection";
031 public static final String PROP_ESCAPE = "escape";
032 public static final boolean DEFAULT_EMPTY_OPTION = false;
033 public static final boolean DEFAULT_GLOBAL_SECTION = false;
034 public static final String DEFAULT_GLOBAL_SECTION_NAME = "?";
035 public static final boolean DEFAULT_INCLUDE = false;
036 public static final boolean DEFAULT_LOWER_CASE_OPTION = false;
037 public static final boolean DEFAULT_LOWER_CASE_SECTION = false;
038 public static final boolean DEFAULT_MULTI_OPTION = true;
039 public static final boolean DEFAULT_MULTI_SECTION = false;
040 public static final boolean DEFAULT_STRICT_OPERATOR = false;
041 public static final boolean DEFAULT_UNNAMED_SECTION = false;
042 public static final boolean DEFAULT_ESCAPE = true;
043 private static final Config GLOBAL = new Config();
044 private boolean _emptyOption;
045 private boolean _escape;
046 private boolean _globalSection;
047 private String _globalSectionName;
048 private boolean _include;
049 private boolean _lowerCaseOption;
050 private boolean _lowerCaseSection;
051 private boolean _multiOption;
052 private boolean _multiSection;
053 private boolean _strictOperator;
054 private boolean _unnamedSection;
055
056 public Config()
057 {
058 reset();
059 }
060
061 public static Config getGlobal()
062 {
063 return GLOBAL;
064 }
065
066 public boolean isEscape()
067 {
068 return _escape;
069 }
070
071 public boolean isInclude()
072 {
073 return _include;
074 }
075
076 public void setEmptyOption(boolean value)
077 {
078 _emptyOption = value;
079 }
080
081 public void setEscape(boolean value)
082 {
083 _escape = value;
084 }
085
086 public void setGlobalSection(boolean value)
087 {
088 _globalSection = value;
089 }
090
091 public String getGlobalSectionName()
092 {
093 return _globalSectionName;
094 }
095
096 public void setGlobalSectionName(String value)
097 {
098 _globalSectionName = value;
099 }
100
101 public void setInclude(boolean value)
102 {
103 _include = value;
104 }
105
106 public void setLowerCaseOption(boolean value)
107 {
108 _lowerCaseOption = value;
109 }
110
111 public void setLowerCaseSection(boolean value)
112 {
113 _lowerCaseSection = value;
114 }
115
116 public void setMultiOption(boolean value)
117 {
118 _multiOption = value;
119 }
120
121 public void setMultiSection(boolean value)
122 {
123 _multiSection = value;
124 }
125
126 public boolean isEmptyOption()
127 {
128 return _emptyOption;
129 }
130
131 public boolean isGlobalSection()
132 {
133 return _globalSection;
134 }
135
136 public boolean isLowerCaseOption()
137 {
138 return _lowerCaseOption;
139 }
140
141 public boolean isLowerCaseSection()
142 {
143 return _lowerCaseSection;
144 }
145
146 public boolean isMultiOption()
147 {
148 return _multiOption;
149 }
150
151 public boolean isMultiSection()
152 {
153 return _multiSection;
154 }
155
156 public boolean isUnnamedSection()
157 {
158 return _unnamedSection;
159 }
160
161 public boolean isStrictOperator()
162 {
163 return _strictOperator;
164 }
165
166 public void setStrictOperator(boolean value)
167 {
168 _strictOperator = value;
169 }
170
171 public void setUnnamedSection(boolean value)
172 {
173 _unnamedSection = value;
174 }
175
176 @Override public Config clone()
177 {
178 try
179 {
180 return (Config) super.clone();
181 }
182 catch (CloneNotSupportedException x)
183 {
184 throw new AssertionError(x);
185 }
186 }
187
188 public final void reset()
189 {
190 _emptyOption = getBoolean(PROP_EMPTY_OPTION, DEFAULT_EMPTY_OPTION);
191 _globalSection = getBoolean(PROP_GLOBAL_SECTION, DEFAULT_GLOBAL_SECTION);
192 _globalSectionName = getString(PROP_GLOBAL_SECTION_NAME, DEFAULT_GLOBAL_SECTION_NAME);
193 _include = getBoolean(PROP_INCLUDE, DEFAULT_INCLUDE);
194 _lowerCaseOption = getBoolean(PROP_LOWER_CASE_OPTION, DEFAULT_LOWER_CASE_OPTION);
195 _lowerCaseSection = getBoolean(PROP_LOWER_CASE_SECTION, DEFAULT_LOWER_CASE_SECTION);
196 _multiOption = getBoolean(PROP_MULTI_OPTION, DEFAULT_MULTI_OPTION);
197 _multiSection = getBoolean(PROP_MULTI_SECTION, DEFAULT_MULTI_SECTION);
198 _strictOperator = getBoolean(PROP_STRICT_OPERATOR, DEFAULT_STRICT_OPERATOR);
199 _unnamedSection = getBoolean(PROP_UNNAMED_SECTION, DEFAULT_UNNAMED_SECTION);
200 _escape = getBoolean(PROP_ESCAPE, DEFAULT_ESCAPE);
201 }
202
203 private boolean getBoolean(String name, boolean defaultValue)
204 {
205 String key = KEY_PREFIX + name;
206
207 return System.getProperties().containsKey(key) ? Boolean.getBoolean(key) : defaultValue;
208 }
209
210 private String getString(String name, String defaultValue)
211 {
212 String key = KEY_PREFIX + name;
213
214 return System.getProperties().containsKey(key) ? System.getProperty(key) : defaultValue;
215 }
216 }