Example usage for com.fasterxml.jackson.databind ObjectMapper getNodeFactory

List of usage examples for com.fasterxml.jackson.databind ObjectMapper getNodeFactory

Introduction

In this page you can find the example usage for com.fasterxml.jackson.databind ObjectMapper getNodeFactory.

Prototype

public JsonNodeFactory getNodeFactory() 

Source Link

Document

Method that can be used to get hold of JsonNodeFactory that this mapper will use when directly constructing root JsonNode instances for Trees.

Usage

From source file:com.cloudbees.clickstack.vertx.VertxConfigurationBuilderTest.java

@Test
public void generateConfiguration() throws Exception {

    Metadata metadata = Metadata.Builder
            .fromStream(Thread.currentThread().getContextClassLoader().getResourceAsStream("metadata-1.json"));
    ObjectMapper mapper = new ObjectMapper();
    JsonNodeFactory nodeFactory = mapper.getNodeFactory();
    VertxConfigurationBuilder builder = new VertxConfigurationBuilder();

    ObjectNode conf = nodeFactory.objectNode();
    builder.fillVertxModuleConfiguration(metadata, nodeFactory, conf);

    mapper.writerWithDefaultPrettyPrinter().writeValue(System.out, conf);

}

From source file:org.jsfr.json.provider.JacksonProvider.java

public JacksonProvider(ObjectMapper om) {
    this.om = om;
    this.factory = om.getNodeFactory();
}

From source file:com.cloudbees.clickstack.vertx.VertxConfigurationBuilder.java

public void fillVertxModuleConfiguration(Path vertxHome, Metadata metadata) throws IOException {
    Path jsonConfPath = vertxHome.resolve("conf/configuration.json");
    Preconditions.checkState(Files.exists(jsonConfPath), "Expected conf file file %s does not exist",
            jsonConfPath);//from w  w  w.jav  a  2  s  .co  m
    ObjectMapper mapper = new ObjectMapper();
    JsonNodeFactory nodeFactory = mapper.getNodeFactory();
    ObjectNode conf = (ObjectNode) mapper.readValue(jsonConfPath.toFile(), JsonNode.class);

    new VertxConfigurationBuilder().fillVertxModuleConfiguration(metadata, nodeFactory, conf);

    mapper.writerWithDefaultPrettyPrinter().writeValue(jsonConfPath.toFile(), conf);
}

From source file:org.walkmod.conf.providers.yml.RemoveModulesYMLAction.java

@Override
public void doAction(JsonNode node) throws Exception {
    if (node.has("modules")) {
        JsonNode aux = node.get("modules");
        ObjectMapper mapper = provider.getObjectMapper();
        if (aux.isArray()) {
            ArrayNode modulesList = (ArrayNode) node.get("modules");
            Iterator<JsonNode> it = modulesList.iterator();
            ArrayNode newModulesList = new ArrayNode(mapper.getNodeFactory());
            while (it.hasNext()) {
                JsonNode next = it.next();
                if (next.isTextual()) {
                    String text = next.asText();
                    if (!modules.contains(text)) {
                        newModulesList.add(text);
                    }/*from   ww  w  . ja va2s  . c  om*/
                }
            }
            ObjectNode oNode = (ObjectNode) node;
            if (newModulesList.size() > 0) {
                oNode.set("modules", newModulesList);
            } else {
                oNode.remove("modules");
            }
            provider.write(node);
        }
    }
}

From source file:org.walkmod.conf.providers.yml.RemoveChainsYMLAction.java

@Override
public void doAction(JsonNode node) throws Exception {
    HashSet<String> chainsSet = new HashSet<String>(chains);
    ArrayNode chainsList = null;//from w  w  w .j a v  a 2  s.c  om
    ObjectMapper mapper = provider.getObjectMapper();

    if (node.has("chains")) {
        JsonNode aux = node.get("chains");
        if (aux.isArray()) {
            chainsList = (ArrayNode) node.get("chains");
            Iterator<JsonNode> it = chainsList.iterator();
            ArrayNode newChainsList = new ArrayNode(mapper.getNodeFactory());
            while (it.hasNext()) {
                JsonNode next = it.next();
                if (next.isObject()) {
                    String type = next.get("name").asText();
                    if (!chainsSet.contains(type)) {
                        newChainsList.add(next);
                    }
                }
            }
            ObjectNode oNode = (ObjectNode) node;
            if (newChainsList.size() > 0) {
                oNode.set("chains", newChainsList);
            } else {
                oNode.remove("chains");
            }
            provider.write(node);
        }
    } else if (node.has("transformations") && chainsSet.contains("default")) {
        ObjectNode oNode = (ObjectNode) node;
        oNode.remove("transformations");
        provider.write(node);
    }

}

From source file:org.walkmod.conf.providers.yml.AddChainYMLAction.java

@Override
public void doAction(JsonNode chainsNode) throws Exception {
    ArrayNode chainsList = null;/*from w w  w .  j a  v  a2s .com*/
    ObjectMapper mapper = provider.getObjectMapper();

    if (chainsNode != null) {
        if (!chainsNode.has("chains")) {
            chainsList = new ArrayNode(mapper.getNodeFactory());
            if (chainsNode.isObject()) {
                ObjectNode aux = (ObjectNode) chainsNode;
                aux.set("chains", chainsList);
            } else {
                throw new TransformerException("The root element is not a JSON node");
            }
        } else {
            JsonNode aux = chainsNode.get("chains");
            if (aux.isArray()) {
                chainsList = (ArrayNode) chainsNode.get("chains");
            } else {
                throw new TransformerException("The plugins element is not a valid array");
            }
        }
    }
    ObjectNode chainNode = new ObjectNode(mapper.getNodeFactory());
    ReaderConfig readerCfg = chainCfg.getReaderConfig();
    if (readerCfg != null) {
        if (chainsNode == null) {
            chainsNode = new ObjectNode(mapper.getNodeFactory());
            ObjectNode aux = (ObjectNode) chainsNode;
            chainsList = new ArrayNode(mapper.getNodeFactory());
            aux.set("chains", chainsList);
        }
        ObjectNode readerNode = new ObjectNode(mapper.getNodeFactory());
        chainNode.set("reader", readerNode);
        populateWriterReader(readerNode, readerCfg.getPath(), readerCfg.getType(), readerCfg.getIncludes(),
                readerCfg.getExcludes(), readerCfg.getParameters());

    } else {
        provider.addDefaultReaderConfig(chainCfg);
    }

    WalkerConfig walkerCfg = chainCfg.getWalkerConfig();
    if (walkerCfg != null) {

        ObjectNode walkerNode = null;

        String type = walkerCfg.getType();
        if (type != null) {
            if (chainsNode == null) {
                chainsNode = new ObjectNode(mapper.getNodeFactory());
                ObjectNode aux = (ObjectNode) chainsNode;
                chainsList = new ArrayNode(mapper.getNodeFactory());
                aux.set("chains", chainsList);
            }
            walkerNode = new ObjectNode(mapper.getNodeFactory());
            chainNode.set("walker", walkerNode);
            walkerNode.set("type", new TextNode(type));
        }

        Map<String, Object> wparams = walkerCfg.getParams();
        if (wparams != null && !wparams.isEmpty()) {
            if (walkerNode == null) {
                if (chainsNode == null) {
                    chainsNode = new ObjectNode(mapper.getNodeFactory());
                    ObjectNode aux = (ObjectNode) chainsNode;
                    chainsList = new ArrayNode(mapper.getNodeFactory());
                    aux.set("chains", chainsList);
                }
                walkerNode = new ObjectNode(mapper.getNodeFactory());
                chainNode.set("walker", walkerNode);
            }
            populateParams(walkerNode, wparams);
        }

        String rootNamespace = walkerCfg.getRootNamespace();
        if (rootNamespace != null) {
            if (walkerNode == null) {
                if (chainsNode == null) {
                    chainsNode = new ObjectNode(mapper.getNodeFactory());
                    ObjectNode aux = (ObjectNode) chainsNode;
                    chainsList = new ArrayNode(mapper.getNodeFactory());
                    aux.set("chains", chainsList);
                }
                walkerNode = new ObjectNode(mapper.getNodeFactory());
                chainNode.set("walker", walkerNode);
            }
            walkerNode.set("root-namespace", new TextNode(rootNamespace));
        }

        List<TransformationConfig> transformationList = walkerCfg.getTransformations();
        if (transformationList != null && !transformationList.isEmpty()) {
            ArrayNode transformationListNode = new ArrayNode(mapper.getNodeFactory());
            if (walkerNode == null) {
                if (chainsNode == null) {
                    ObjectNode aux = new ObjectNode(mapper.getNodeFactory());
                    aux.set("transformations", transformationListNode);
                    chainsNode = aux;
                } else {
                    chainNode.set("transformations", transformationListNode);
                }
            } else {
                walkerNode.set("transformations", transformationListNode);
            }
            for (TransformationConfig transCfg : transformationList) {
                ObjectNode transformationNode = new ObjectNode(mapper.getNodeFactory());
                transformationListNode.add(transformationNode);
                createTransformation(transformationNode, transCfg);
            }

        }

    }

    WriterConfig writerCfg = chainCfg.getWriterConfig();
    if (writerCfg != null) {
        if (chainsNode == null) {
            chainsNode = new ObjectNode(mapper.getNodeFactory());
            ObjectNode aux = (ObjectNode) chainsNode;
            chainsList = new ArrayNode(mapper.getNodeFactory());
            aux.set("chains", chainsList);
        }
        ObjectNode writerNode = new ObjectNode(mapper.getNodeFactory());
        chainNode.set("writer", writerNode);
        populateWriterReader(writerNode, writerCfg.getPath(), writerCfg.getType(), writerCfg.getIncludes(),
                writerCfg.getExcludes(), writerCfg.getParams());

    } else {
        provider.addDefaultWriterConfig(chainCfg);
    }
    if (chainsList != null) {
        int beforePos = -1;
        if (before != null) {
            Iterator<JsonNode> it = chainsList.iterator();
            int i = 0;
            while (it.hasNext() && beforePos == -1) {
                JsonNode next = it.next();
                if (next.get("name").equals(before)) {
                    beforePos = i;
                }
                i++;
            }
        }
        if (beforePos == -1) {
            chainsList.add(chainNode);
        } else {
            chainsList.insert(beforePos, chainNode);
        }
    }
    if (readerCfg != null || walkerCfg != null || writerCfg != null) {
        provider.write(chainsNode);
    }

}

From source file:org.walkmod.conf.providers.yml.AddProviderConfigYMLAction.java

@Override
public void doAction(JsonNode node) throws Exception {

    ObjectMapper mapper = provider.getObjectMapper();

    if (node.has("conf-providers")) {
        JsonNode list = node.get("conf-providers");
        Iterator<JsonNode> it = list.iterator();
        boolean found = false;
        while (it.hasNext() && !found) {
            JsonNode next = it.next();/* w ww . j a v  a  2  s  .c o m*/
            found = providerCfg.getType().equals(next.get("type").asText());
        }
        if (!found) {
            if (list.isArray()) {
                ArrayNode aux = (ArrayNode) list;
                ObjectNode prov = new ObjectNode(mapper.getNodeFactory());
                prov.set("type", new TextNode(providerCfg.getType()));
                Map<String, Object> params = providerCfg.getParameters();
                if (params != null && !params.isEmpty()) {
                    populateParams(prov, params);
                }
                aux.add(prov);
                provider.write(node);
                return;
            }
        }
    } else {
        ArrayNode aux = new ArrayNode(mapper.getNodeFactory());
        ObjectNode prov = new ObjectNode(mapper.getNodeFactory());
        prov.set("type", new TextNode(providerCfg.getType()));
        Map<String, Object> params = providerCfg.getParameters();
        if (params != null && !params.isEmpty()) {
            populateParams(prov, params);
        }
        aux.add(prov);
        ObjectNode auxNode = (ObjectNode) node;
        auxNode.set("conf-providers", aux);
        provider.write(node);
        return;
    }

    return;

}

From source file:org.walkmod.conf.providers.yml.AddIncludesOrExcludesYMLAction.java

@Override
public void doAction(JsonNode node) throws Exception {
    if (chain == null) {
        chain = "default";
    }//ww w .j  av a2 s  . co  m
    ObjectMapper mapper = provider.getObjectMapper();
    if (node.has("chains")) {
        JsonNode chains = node.get("chains");
        if (chains.isArray()) {
            ArrayNode chainsArray = (ArrayNode) chains;
            int limit = chainsArray.size();
            ObjectNode selectedChain = null;
            for (int i = 0; i < limit && selectedChain == null; i++) {
                JsonNode chainNode = chainsArray.get(i);
                if (chainNode.has("name")) {
                    if (chainNode.get("name").asText().equals(chain)) {
                        selectedChain = (ObjectNode) chainNode;
                    }
                }
            }
            if (selectedChain == null) {
                selectedChain = new ObjectNode(mapper.getNodeFactory());
                selectedChain.set("name", new TextNode(chain));
                chainsArray.add(selectedChain);
            }

            if (setToReader) {
                JsonNode reader = null;
                if (selectedChain.has("reader")) {
                    reader = selectedChain.get("reader");
                } else {
                    reader = new ObjectNode(mapper.getNodeFactory());
                    selectedChain.set("reader", reader);
                }
                setIncludesOrExcludesList((ObjectNode) reader);

            }
            if (setToWriter) {
                JsonNode reader = null;
                if (selectedChain.has("writer")) {
                    reader = selectedChain.get("writer");
                } else {
                    reader = new ObjectNode(mapper.getNodeFactory());
                    selectedChain.set("writer", reader);
                }
                setIncludesOrExcludesList((ObjectNode) reader);
            }

        }
    } else {
        ObjectNode root = (ObjectNode) node;
        if (node.has("transformations")) {
            JsonNode transformations = node.get("transformations");

            root.remove("transformations");
            ObjectNode chainNode = new ObjectNode(mapper.getNodeFactory());
            chainNode.set("name", new TextNode("default"));
            chainNode.set("transformations", transformations);
            ArrayNode chains = new ArrayNode(mapper.getNodeFactory());
            chains.add(chainNode);
            if (!chain.equals("default")) {
                chainNode = new ObjectNode(mapper.getNodeFactory());
                chainNode.set("name", new TextNode(chain));
                chains.add(chainNode);
            }
            ObjectNode reader = new ObjectNode(mapper.getNodeFactory());
            setIncludesOrExcludesList(reader);

            chainNode.set("reader", reader);
            ObjectNode writer = new ObjectNode(mapper.getNodeFactory());
            setIncludesOrExcludesList(writer);
            chainNode.set("writer", writer);

            root.set("chains", chains);
        } else if (!node.has("modules")) {
            ObjectNode chainNode = new ObjectNode(mapper.getNodeFactory());
            chainNode.set("name", new TextNode("default"));
            ArrayNode chains = new ArrayNode(mapper.getNodeFactory());
            chains.add(chainNode);

            ObjectNode reader = new ObjectNode(mapper.getNodeFactory());
            setIncludesOrExcludesList(reader);

            chainNode.set("reader", reader);
            ObjectNode writer = new ObjectNode(mapper.getNodeFactory());
            setIncludesOrExcludesList(writer);
            chainNode.set("writer", writer);

            root.set("chains", chains);
        }

    }
    provider.write(node);
}

From source file:io.cloudslang.content.json.actions.MergeArrays.java

/**
 * This operation merge the contents of two JSON arrays. This operation does not modify either of the input arrays.
 * The result is the contents or array1 and array2, merged into a single array. The merge operation add into the result
 * the first array and then the second array.
 *
 * @param array1 The string representation of a JSON array object.
 *               Arrays in JSON are comma separated lists of objects, enclosed in square brackets [ ].
 *               Examples: [1,2,3] or ["one","two","three"] or [{"one":1, "two":2}, 3, "four"]
 * @param array2 The string representation of a JSON array object.
 *               Arrays in JSON are comma separated lists of objects, enclosed in square brackets [ ].
 *               Examples: [1,2,3] or ["one","two","three"] or [{"one":1, "two":2}, 3, "four"]
 * @return a map containing the output of the operation. Keys present in the map are:
 * <p/>/* w w w  .j a v  a  2  s .  c  o  m*/
 * <br><br><b>returnResult</b> - This will contain the string representation of the new JSON array with the contents
 * of array1 and array2.
 * <br><b>exception</b> - In case of success response, this result is empty. In case of failure response,
 * this result contains the java stack trace of the runtime exception.
 * <br><br><b>returnCode</b> - The returnCode of the operation: 0 for success, -1 for failure.
 */
@Action(name = "Merge Arrays", outputs = { @Output(OutputNames.RETURN_RESULT), @Output(OutputNames.RETURN_CODE),
        @Output(OutputNames.EXCEPTION) }, responses = {
                @Response(text = ResponseNames.SUCCESS, field = OutputNames.RETURN_CODE, value = ReturnCodes.SUCCESS, matchType = MatchType.COMPARE_EQUAL, responseType = ResponseType.RESOLVED),
                @Response(text = ResponseNames.FAILURE, field = OutputNames.RETURN_CODE, value = ReturnCodes.FAILURE, matchType = MatchType.COMPARE_EQUAL, responseType = ResponseType.ERROR, isOnFail = true) })
public Map<String, String> execute(@Param(value = Constants.InputNames.ARRAY, required = true) String array1,
        @Param(value = Constants.InputNames.ARRAY, required = true) String array2) {

    Map<String, String> returnResult = new HashMap<>();
    if (StringUtilities.isBlank(array1)) {
        final String exceptionValue = NOT_A_VALID_JSON_ARRAY_MESSAGE
                + ARRAY1_MESSAGE.replaceFirst("=", EMPTY_STRING);
        return populateResult(returnResult, exceptionValue, new Exception(exceptionValue));
    }

    if (StringUtilities.isBlank(array2)) {
        final String exceptionValue = NOT_A_VALID_JSON_ARRAY_MESSAGE
                + ARRAY2_MESSAGE.replaceFirst("=", EMPTY_STRING);
        return populateResult(returnResult, new Exception(exceptionValue));
    }

    JsonNode jsonNode1;
    JsonNode jsonNode2;
    ObjectMapper mapper = new ObjectMapper();
    try {
        jsonNode1 = mapper.readTree(array1);
    } catch (IOException exception) {
        final String value = INVALID_JSON_OBJECT_PROVIDED_EXCEPTION_MESSAGE + ARRAY1_MESSAGE + array1;
        return populateResult(returnResult, value, exception);
    }
    try {
        jsonNode2 = mapper.readTree(array2);
    } catch (IOException exception) {
        final String value = INVALID_JSON_OBJECT_PROVIDED_EXCEPTION_MESSAGE + ARRAY2_MESSAGE + array2;
        return populateResult(returnResult, value, exception);
    }

    final String result;
    if (jsonNode1 instanceof ArrayNode && jsonNode2 instanceof ArrayNode) {
        final ArrayNode asJsonArray1 = (ArrayNode) jsonNode1;
        final ArrayNode asJsonArray2 = (ArrayNode) jsonNode2;
        final ArrayNode asJsonArrayResult = new ArrayNode(mapper.getNodeFactory());

        asJsonArrayResult.addAll(asJsonArray1);
        asJsonArrayResult.addAll(asJsonArray2);
        result = asJsonArrayResult.toString();
    } else {
        result = NOT_A_VALID_JSON_ARRAY_MESSAGE + ARRAY1_MESSAGE + array1 + ARRAY2_MESSAGE + array2;
        return populateResult(returnResult, new Exception(result));
    }
    return populateResult(returnResult, result, null);
}

From source file:org.walkmod.conf.providers.yml.AddTransformationYMLAction.java

@Override
public void doAction(JsonNode chainsNode) throws Exception {

    ArrayNode transformationsNode = null;

    boolean isMultiModule = chainsNode.has("modules");
    ObjectMapper mapper = provider.getObjectMapper();
    if (!isMultiModule) {
        boolean validChainName = chain != null && !"".equals(chain) && !"default".equals(chain);
        if (!chainsNode.has("chains")) {
            if (chainsNode.has("transformations")) {
                JsonNode aux = chainsNode.get("transformations");
                if (aux.isArray()) {
                    transformationsNode = (ArrayNode) aux;
                }/*from w w  w. ja  v  a2s  .  co m*/

                if (!validChainName) {
                    ObjectNode auxRoot = (ObjectNode) chainsNode;
                    if (transformationsNode == null) {
                        transformationsNode = new ArrayNode(mapper.getNodeFactory());
                    }
                    auxRoot.set("transformations", transformationsNode);
                } else {
                    // reset the root
                    chainsNode = new ObjectNode(mapper.getNodeFactory());
                    ObjectNode auxRoot = (ObjectNode) chainsNode;

                    // the default chain list added
                    ObjectNode chainObject = new ObjectNode(mapper.getNodeFactory());
                    chainObject.set("name", new TextNode("default"));
                    chainObject.set("transformations", transformationsNode);
                    ArrayNode chainsListNode = new ArrayNode(mapper.getNodeFactory());

                    // the requested chain added
                    ObjectNode newChain = new ObjectNode(mapper.getNodeFactory());
                    newChain.set("name", new TextNode(chain));
                    if (path != null && !"".equals(path.trim())) {

                        ObjectNode readerNode = new ObjectNode(mapper.getNodeFactory());
                        newChain.set("reader", readerNode);

                        populateWriterReader(readerNode, path, null, null, null, null);

                        ObjectNode writerNode = new ObjectNode(mapper.getNodeFactory());
                        newChain.set("writer", writerNode);
                        populateWriterReader(writerNode, path, null, null, null, null);
                    }

                    transformationsNode = new ArrayNode(mapper.getNodeFactory());
                    newChain.set("transformations", transformationsNode);

                    if (before == null || !"default".equals(before)) {
                        chainsListNode.add(chainObject);
                    }
                    chainsListNode.add(newChain);
                    if (before != null && "default".equals(before)) {
                        chainsListNode.add(chainObject);
                    }
                    auxRoot.set("chains", chainsListNode);

                }
            } else {
                ObjectNode auxRoot = (ObjectNode) chainsNode;
                transformationsNode = new ArrayNode(mapper.getNodeFactory());
                boolean writeChainInfo = validChainName;
                if (!writeChainInfo) {
                    writeChainInfo = path != null && !"".equals(path.trim());
                    chain = "default";
                }
                if (writeChainInfo) {
                    ArrayNode auxChainsList = new ArrayNode(mapper.getNodeFactory());
                    ObjectNode aux = new ObjectNode(mapper.getNodeFactory());
                    auxChainsList.add(aux);
                    aux.set("name", new TextNode(chain));
                    if (path != null && !"".equals(path.trim())) {

                        ObjectNode readerNode = new ObjectNode(mapper.getNodeFactory());
                        aux.set("reader", readerNode);
                        populateWriterReader(readerNode, path, null, null, null, null);

                    }
                    auxRoot.set("chains", auxChainsList);
                    if (path != null && !"".equals(path.trim())) {

                        ObjectNode writerNode = new ObjectNode(mapper.getNodeFactory());
                        aux.set("writer", writerNode);
                        populateWriterReader(writerNode, path, null, null, null, null);
                    }

                    auxRoot = aux;
                }
                auxRoot.set("transformations", transformationsNode);
            }

        } else {
            if (validChainName) {
                JsonNode aux = chainsNode.get("chains");
                boolean found = false;
                if (aux.isArray()) {
                    Iterator<JsonNode> it = aux.elements();
                    while (it.hasNext()) {
                        JsonNode next = it.next();
                        if (next.has("name")) {
                            String id = next.get("name").asText();
                            if (chain.equals(id)) {
                                found = true;
                                if (next.has("transformations")) {
                                    JsonNode auxTrans = next.get("transformations");
                                    if (auxTrans.isArray()) {
                                        transformationsNode = (ArrayNode) auxTrans;
                                    } else {
                                        throw new Exception("The chain [" + chain
                                                + "] does not have a valid transformations node");
                                    }
                                } else if (next.isObject()) {
                                    ObjectNode auxNext = (ObjectNode) next;
                                    transformationsNode = new ArrayNode(mapper.getNodeFactory());
                                    auxNext.set("transformations", transformationsNode);
                                } else {
                                    throw new Exception(
                                            "The chain [" + chain + "] does not have a valid structure");
                                }
                            }
                        }

                    }
                    if (!found) {
                        ChainConfig chainCfg = new ChainConfigImpl();
                        chainCfg.setName(chain);
                        WalkerConfig walkerCfg = new WalkerConfigImpl();
                        List<TransformationConfig> transfs = new LinkedList<TransformationConfig>();
                        transfs.add(transformationCfg);
                        walkerCfg.setTransformations(transfs);
                        chainCfg.setWalkerConfig(walkerCfg);
                        provider.addChainConfig(chainCfg, false, before);
                        return;
                    }
                }
            } else {

                ObjectNode node = new ObjectNode(mapper.getNodeFactory());
                node.set("name", new TextNode(chain));
                ArrayNode transNodes = new ArrayNode(mapper.getNodeFactory());

                node.set("transformations", transNodes);
                ArrayNode array = (ArrayNode) chainsNode.get("chains");
                array.add(node);

                ObjectNode transformationNode = new ObjectNode(mapper.getNodeFactory());
                transNodes.add(transformationNode);

                createTransformation(transformationNode, transformationCfg);

                return;
            }
        }
        if (transformationsNode != null) {
            ObjectNode transformationNode = new ObjectNode(mapper.getNodeFactory());

            if (order != null && order < transformationsNode.size()) {
                transformationsNode.insert(order, transformationNode);
            } else {
                transformationsNode.add(transformationNode);
            }

            createTransformation(transformationNode, transformationCfg);
            provider.write(chainsNode);
            return;
        } else if (chain != null) {
            throw new Exception("The chain [" + chain + "] does not exists");
        }
    }

}