/*
* #%L
* Wildfly Camel :: Testsuite
* %%
* Copyright (C) 2013 - 2014 RedHat
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package org.wildfly.camel.test.common.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jboss.dmr.ModelNode;
public class DMRUtils {
private static Pattern HANDLER_PATTERN = Pattern.compile(".*handler=(.*)");
public static ModelNode createOpNode(String address, String operation) {
ModelNode op = new ModelNode();
ModelNode list = op.get("address").setEmptyList();
if (address != null) {
String[] pathSegments = address.split("/");
for (String segment : pathSegments) {
String[] elements = segment.split("=");
list.add(elements[0], elements[1]);
}
}
Matcher matcher = Pattern.compile(".*\\((.*?)\\)").matcher(operation);
if (matcher.matches()) {
matcher.reset();
op.get("operation").set(operation.substring(0, operation.indexOf('(')));
while (matcher.find()) {
String args = matcher.group(1);
if (args.matches(".*\\{.*\\}.*")) {
ModelNode node = new ModelNode();
String[] argElements = args.split("(?!=>)=");
for (String argSegment : argElements[1].replaceAll("[{}]","").split(",")) {
String[] argParams = argSegment.split("=>");
node.get(argParams[0]).set(argParams[1]);
}
op.get(argElements[0].trim()).set(node);
} else {
for (String argSegment : args.replaceAll("[{}\\[\\]]", "").split(",")) {
if (argSegment.startsWith("handlers")) {
Matcher handlerMatch = HANDLER_PATTERN.matcher(argSegment);
if (handlerMatch.find()); {
op.get("handlers").add(handlerMatch.group(1));
}
} else {
String[] argElements = argSegment.split("(?!=>)=");
if (argElements[0].trim().equals("handlers")) {
op.add(argElements[1].trim());
} else {
op.get(argElements[0].trim()).set(argElements[1].trim());
}
}
}
}
}
} else {
op.get("operation").set(operation);
}
return op;
}
public static ModelNode createCompositeNode(ModelNode[] steps) {
ModelNode comp = new ModelNode();
comp.get("operation").set("composite");
for (ModelNode step : steps) {
comp.get("steps").add(step);
}
return comp;
}
public static BatchNodeBuilder batchNode() {
return new BatchNodeBuilder();
}
public static final class BatchNodeBuilder {
private ModelNode batchNode;
BatchNodeBuilder() {
batchNode = new ModelNode();
batchNode.get("operation").set("composite");
batchNode.get("address").setEmptyList();
}
public BatchNodeBuilder addStep(String address, String operation) {
batchNode.get("steps").add(createOpNode(address, operation));
return this;
}
public ModelNode build() {
return batchNode;
}
}
}