private static void generateObject(JsonGenerator generator, ConfigurationNode node) throws IOException { if (!node.hasMapChildren()) { throw new IOException("Node passed to generateObject does not have map children!"); } generator.writeStartObject(); for (Map.Entry<Object, ? extends ConfigurationNode> ent : node.getChildrenMap().entrySet()) { //generateComment(generator, ent.getValue(), false); generator.writeFieldName(ent.getKey().toString()); generateValue(generator, ent.getValue()); } generator.writeEndObject(); }
private void generateObject(JsonGenerator generator, ConfigurationNode node) throws IOException { if (!node.hasMapChildren()) { throw new IOException("Node passed to generateObject does not have map children!"); } generator.writeStartObject(); for (Map.Entry<Object, ? extends ConfigurationNode> ent : node.getChildrenMap().entrySet()) { //generateComment(generator, ent.getValue(), false); generator.writeFieldName(ent.getKey().toString()); generateValue(generator, ent.getValue()); } generator.writeEndObject(); }
private void generateObject(JsonWriter generator, ConfigurationNode node) throws IOException { if (!node.hasMapChildren()) { throw new IOException("Node passed to generateObject does not have map children!"); } generator.beginObject(); for (Map.Entry<Object, ? extends ConfigurationNode> ent : node.getChildrenMap().entrySet()) { generator.name(ent.getKey().toString()); generateValue(generator, ent.getValue()); } generator.endObject(); }
private static void generateObject(JsonWriter generator, ConfigurationNode node) throws IOException { if (!node.hasMapChildren()) { throw new IOException("Node passed to generateObject does not have map children!"); } generator.beginObject(); for (Map.Entry<Object, ? extends ConfigurationNode> ent : node.getChildrenMap().entrySet()) { generator.name(ent.getKey().toString()); generateValue(generator, ent.getValue()); } generator.endObject(); }
private static void generateObject(JsonWriter generator, ConfigurationNode node) throws IOException { if (!node.hasMapChildren()) { throw new IOException("Node passed to generateObject does not have map children!"); } generator.beginObject(); for (Map.Entry<Object, ? extends ConfigurationNode> ent : node.getChildrenMap().entrySet()) { generator.name(ent.getKey().toString()); generateValue(generator, ent.getValue()); } generator.endObject(); }
private static Set<Entry<String, String>> contextsFrom(ConfigurationNode node) { Set<Entry<String, String>> contexts = Collections.emptySet(); ConfigurationNode contextsNode = node.getNode(KEY_CONTEXTS); if (contextsNode.hasMapChildren()) { contexts = ImmutableSet.copyOf(Collections2.transform(contextsNode.getChildrenMap().entrySet(), ent -> { return Maps.immutableEntry(ent.getKey().toString(), String.valueOf(ent.getValue().getValue())); })); } return contexts; }
@Override public Set<String> getRegisteredTypes() { return getSubjectsNode().getChildrenMap().entrySet().stream() .filter(ent -> ent.getValue().hasMapChildren()) .map(Map.Entry::getKey) .map(Object::toString) .distinct() .collect(GuavaCollectors.toImmutableSet()); }
@Override protected void saveInternal(ConfigurationNode node, Writer writer) throws IOException { if (!node.hasMapChildren()) { if (node.getValue() == null) { writer.write(SYSTEM_LINE_SEPARATOR); return; } else { throw new IOException("HOCON cannot write nodes not in map format!"); } } final ConfigValue value = fromValue(node); final String renderedValue = value.render(render); writer.write(renderedValue); }
@Override protected void saveInternal(ConfigurationNode node, Writer writer) throws IOException { if (!node.hasMapChildren()) { if (node.getValue() == null) { writer.write(SYSTEM_LINE_SEPARATOR); return; } else { throw new IOException("HOCON cannot write nodes not in map format!"); } } final ConfigValue value = fromValue(node); final String renderedValue = value.render(render); writer.write(renderedValue); }
@Override public void saveInternal(ConfigurationNode node, Writer writer) throws IOException { if (!lenient && !node.hasMapChildren()) { throw new IOException("Non-lenient json generators must have children of map type"); } try (JsonWriter generator = new JsonWriter(writer)) { generator.setIndent(indent); generator.setLenient(lenient); generateValue(generator, node); generator.flush(); writer.write(SYSTEM_LINE_SEPARATOR); // Jackson doesn't add a newline at the end of files by default } }
@Override public void saveInternal(ConfigurationNode node, Writer writer) throws IOException { if (!lenient && !node.hasMapChildren()) { throw new IOException("Non-lenient json generators must have children of map type"); } try (JsonWriter generator = new JsonWriter(writer)) { generator.setIndent(indent); generator.setLenient(lenient); generateValue(generator, node); generator.flush(); writer.write(SYSTEM_LINE_SEPARATOR); // Jackson doesn't add a newline at the end of files by default } }
@Override public void saveInternal(ConfigurationNode node, Writer writer) throws IOException { if (!lenient && !node.hasMapChildren()) { throw new IOException("Non-lenient json generators must have children of map type"); } try (JsonWriter generator = new JsonWriter(writer)) { generator.setIndent(indent); generator.setLenient(lenient); generateValue(generator, node); generator.flush(); writer.write(SYSTEM_LINE_SEPARATOR); // Jackson doesn't add a newline at the end of files by default } }
private void generateValue(JsonGenerator generator, ConfigurationNode node) throws IOException { if (node.hasMapChildren()) { generateObject(generator, node); } else if (node.hasListChildren()) { generateArray(generator, node); } else { Object value = node.getValue(); if (value instanceof Double) { generator.writeNumber((Double) value); } else if (value instanceof Float) { generator.writeNumber((Float) value); } else if (value instanceof Long) { generator.writeNumber((Long) value); } else if (value instanceof Integer) { generator.writeNumber((Integer) value); } else if (value instanceof Boolean) { generator.writeBoolean((Boolean) value); } else if (value instanceof byte[]) { generator.writeBinary((byte[]) value); } else { generator.writeString(value.toString()); } } }
private static void generateValue(JsonGenerator generator, ConfigurationNode node) throws IOException { if (node.hasMapChildren()) { generateObject(generator, node); } else if (node.hasListChildren()) { generateArray(generator, node); } else { Object value = node.getValue(); if (value instanceof Double) { generator.writeNumber((Double) value); } else if (value instanceof Float) { generator.writeNumber((Float) value); } else if (value instanceof Long) { generator.writeNumber((Long) value); } else if (value instanceof Integer) { generator.writeNumber((Integer) value); } else if (value instanceof Boolean) { generator.writeBoolean((Boolean) value); } else if (value instanceof byte[]) { generator.writeBinary((byte[]) value); } else { generator.writeString(value.toString()); } } }
static FileSubjectData fromNode(ConfigurationNode node) throws ObjectMappingException, PermissionsLoadingException { ImmutableMap.Builder<Set<Entry<String, String>>, DataEntry> map = ImmutableMap.builder(); if (node.hasListChildren()) { for (ConfigurationNode child : node.getChildrenList()) { if (!child.hasMapChildren()) { throw new PermissionsLoadingException(t("Each context section must be of map type! Check that no duplicate nesting has occurred.")); } Set<Entry<String, String>> contexts = contextsFrom(child); DataEntry value = MAPPER.bindToNew().populate(child); map.put(contexts, value); } } return new FileSubjectData(map.build()); }
private static ConfigValue fromValue(ConfigurationNode node) { ConfigValue ret; if (node.hasMapChildren()) { Map<String, ConfigValue> children = node.getOptions().getMapFactory().create(); for (Map.Entry<Object, ? extends ConfigurationNode> ent : node.getChildrenMap().entrySet()) { children.put(String.valueOf(ent.getKey()), fromValue(ent.getValue())); } ret = newConfigObject(children); } else if (node.hasListChildren()) { List<ConfigValue> children = new ArrayList<>(); for (ConfigurationNode ent : node.getChildrenList()) { children.add(fromValue(ent)); } ret = newConfigList(children); } else { ret = ConfigValueFactory.fromAnyRef(node.getValue(), "configurate-hocon"); } if (node instanceof CommentedConfigurationNode) { CommentedConfigurationNode commentedNode = ((CommentedConfigurationNode) node); final ConfigValue finalRet = ret; ret = commentedNode.getComment().map(comment -> finalRet.withOrigin(finalRet.origin().withComments(LINE_SPLITTER.splitToList(comment)))).orElse(ret); } return ret; }
private ConfigValue fromValue(ConfigurationNode node) { ConfigValue ret; if (node.hasMapChildren()) { Map<String, ConfigValue> children = node.getOptions().getMapFactory().create(); for (Map.Entry<Object, ? extends ConfigurationNode> ent : node.getChildrenMap().entrySet()) { children.put(String.valueOf(ent.getKey()), fromValue(ent.getValue())); } ret = newConfigObject(children); } else if (node.hasListChildren()) { List<ConfigValue> children = new ArrayList<>(); for (ConfigurationNode ent : node.getChildrenList()) { children.add(fromValue(ent)); } ret = newConfigList(children); } else { ret = ConfigValueFactory.fromAnyRef(node.getValue(), "configurate-hocon"); } if (node instanceof CommentedConfigurationNode) { CommentedConfigurationNode commentedNode = ((CommentedConfigurationNode) node); final ConfigValue finalRet = ret; ret = commentedNode.getComment().map(comment -> finalRet.withOrigin(finalRet.origin().withComments(LINE_SPLITTER.splitToList(comment)))).orElse(ret); } return ret; }
@Test public void testMapSerializerPreservesEmptyMap() throws ObjectMappingException { final TypeToken<Map<String, Integer>> mapStringIntType = new TypeToken<Map<String, Integer>>() {}; final TypeSerializer<Map<String, Integer>> mapStringIntSerializer = SERIALIZERS.get(mapStringIntType); final ConfigurationNode value = SimpleConfigurationNode.root(); mapStringIntSerializer.serialize(mapStringIntType, ImmutableMap.of(), value); assertTrue(value.hasMapChildren()); }
@Test public void testLoadingFileWithEmptyObject(@TempDirectory.TempDir Path tempDir) throws IOException { URL url = getClass().getResource("/emptyObject.json"); final Path tempFile = tempDir.resolve("text4.txt"); ConfigurationLoader<ConfigurationNode> loader = GsonConfigurationLoader.builder() .setSource(() -> new BufferedReader(new InputStreamReader(url.openStream()))) .setSink(AtomicFiles.createAtomicWriterFactory(tempFile, UTF_8)).setLenient(true).build(); ConfigurationNode node = loader.load(loader.getDefaultOptions().setMapFactory(MapFactories.sortedNatural())); assertNull(node.getValue()); assertFalse(node.hasMapChildren()); }
@Test public void testUnattachedNodesTemporary() { ConfigurationNode config = SimpleConfigurationNode.root(); ConfigurationNode node = config.getNode("some", "node"); assertTrue(node.isVirtual()); assertNull(node.getValue()); assertFalse(node.hasListChildren()); assertFalse(node.hasMapChildren()); ConfigurationNode node2 = config.getNode("some", "node"); assertNotSame(node, node2); ConfigurationNode node3 = config.getNode("some").getNode("node"); assertNotSame(node, node3); }