| 218 | } |
| 219 | |
| 220 | private void writeConfig(String prefix, ConfigObject map, BufferedWriter out, int tab, boolean apply) throws IOException { |
| 221 | String space = apply ? StringGroovyMethods.multiply(TAB_CHARACTER, tab) : ""; |
| 222 | |
| 223 | for (Object o1 : map.keySet()) { |
| 224 | String key = (String) o1; |
| 225 | Object v = map.get(key); |
| 226 | |
| 227 | if (v instanceof ConfigObject value) { |
| 228 | |
| 229 | if (!value.isEmpty()) { |
| 230 | |
| 231 | Object dotsInKeys = null; |
| 232 | for (Object o : value.entrySet()) { |
| 233 | Entry e = (Entry) o; |
| 234 | String k = (String) e.getKey(); |
| 235 | if (k.indexOf('.') > -1) { |
| 236 | dotsInKeys = e; |
| 237 | break; |
| 238 | } |
| 239 | } |
| 240 | |
| 241 | int configSize = value.size(); |
| 242 | Object firstKey = value.keySet().iterator().next(); |
| 243 | Object firstValue = value.values().iterator().next(); |
| 244 | |
| 245 | int firstSize; |
| 246 | if (firstValue instanceof ConfigObject) { |
| 247 | firstSize = ((ConfigObject) firstValue).size(); |
| 248 | } else { |
| 249 | firstSize = 1; |
| 250 | } |
| 251 | |
| 252 | if (configSize == 1 || DefaultGroovyMethods.asBoolean(dotsInKeys)) { |
| 253 | if (firstSize == 1 && firstValue instanceof ConfigObject) { |
| 254 | key = KEYWORDS.contains(key) ? FormatHelper.inspect(key) : key; |
| 255 | String writePrefix = prefix + key + "." + firstKey + "."; |
| 256 | writeConfig(writePrefix, (ConfigObject) firstValue, out, tab, true); |
| 257 | } else if (!DefaultGroovyMethods.asBoolean(dotsInKeys) && firstValue instanceof ConfigObject) { |
| 258 | writeNode(key, space, tab, value, out); |
| 259 | } else { |
| 260 | for (Object j : value.keySet()) { |
| 261 | Object v2 = value.get(j); |
| 262 | Object k2 = ((String) j).indexOf('.') > -1 ? FormatHelper.inspect(j) : j; |
| 263 | if (v2 instanceof ConfigObject) { |
| 264 | key = KEYWORDS.contains(key) ? FormatHelper.inspect(key) : key; |
| 265 | writeConfig(prefix + key, (ConfigObject) v2, out, tab, false); |
| 266 | } else { |
| 267 | writeValue(key + "." + k2, space, prefix, v2, out); |
| 268 | } |
| 269 | } |
| 270 | } |
| 271 | } else { |
| 272 | writeNode(key, space, tab, value, out); |
| 273 | } |
| 274 | } |
| 275 | } else { |
| 276 | writeValue(key, space, prefix, v, out); |
| 277 | } |