public String toPrettyString(String indent) { StringBuilder builder = new StringBuilder(); builder.append(indent); builder.append('#'); assert !operator.contains(":") && !operator.contains("(") : "Operator can not contain ':' or '('."; builder.append(operator); builder.append(nodeParameters.toString()); if (internalNodes.size() == 0) { builder.append("()\n"); } else { builder.append("(\n"); for (Node child : internalNodes) { builder.append(child.toPrettyString(indent + " ")); } builder.append(indent).append(" ").append(")\n"); } return builder.toString(); }
public String toSimplePrettyString(String indent, Set<String> ignoreParams, String addOnString) { StringBuilder builder = new StringBuilder(); if (ignoreParams.contains(operator)) { if (internalNodes.size() != 0) { for (Node child : internalNodes) { String childString = child.toSimplePrettyString(indent, ignoreParams, addOnString); if (!childString.replaceAll("\\s", "").equals("")) { builder.append(childString); } } } } else { if (operator.equals("combine")) { builder.append(indent); builder.append(addOnString); builder.append('#'); assert !operator.contains(":") && !operator.contains("(") : "Operator can not contain ':' or '('."; builder.append(operator); ArrayList<String> combineWeightList = nodeParameters.collectCombineWeightList(); if (combineWeightList.size() == 0 && internalNodes.size() > 0) { DecimalFormat formatter = new DecimalFormat("###.#####"); String weightString = formatter.format(1.0 / internalNodes.size()); int firstNonZeroIndex = -1; for (int i = 0; i < weightString.length(); i++) { if (weightString.charAt(i) != '0' && weightString.charAt(i) != '.') { firstNonZeroIndex = i; break; } } if (firstNonZeroIndex != -1) { if (weightString.length() >= 5) { firstNonZeroIndex = firstNonZeroIndex >= 4 ? firstNonZeroIndex : 4; weightString = weightString.substring(0, firstNonZeroIndex + 1); } } for (Node internalNode : internalNodes) { combineWeightList.add(weightString); } } // builder.append(nodeParameters.toSimpleString(ignoreParams, operator)); builder.append("(\n"); for (int i = 0; i < internalNodes.size(); i++) { Node child = internalNodes.get(i); String childString = child.toSimplePrettyString(indent + " ", ignoreParams, ""); if (!childString.replaceAll("\\s", "").equals("")) { if (i < combineWeightList.size()) { builder.append( child.toSimplePrettyString( indent + " ", ignoreParams, combineWeightList.get(i) + "\t")); } else { builder.append(child.toSimplePrettyString(indent + " ", ignoreParams, "")); } builder.append("\n"); } } builder.append(indent).append(")"); } else if (operator.equals("unordered") || operator.equals("ordered") || operator.equals("syn")) { builder.append(indent); builder.append(addOnString); builder.append('#'); assert !operator.contains(":") && !operator.contains("(") : "Operator can not contain ':' or '('."; builder.append(operator); builder.append(nodeParameters.toSimpleString(ignoreParams, operator)); builder.append("("); for (Node child : internalNodes) { String childString = child.toSimplePrettyString("", ignoreParams, ""); if (!childString.replaceAll("\\s", "").equals("")) { builder.append(childString).append(" "); } } builder.append(")"); } else if (operator.equals("extents") || operator.equals("counts")) { builder.append(indent); builder.append(addOnString); builder.append(nodeParameters.toSimpleString(ignoreParams, operator)); for (Node child : internalNodes) { String childString = child.toSimplePrettyString(indent + " ", ignoreParams, ""); if (!childString.replaceAll("\\s", "").equals("")) { builder.append(childString); } } } else { builder.append(indent); builder.append(addOnString); builder.append('#'); assert !operator.contains(":") && !operator.contains("(") : "Operator can not contain ':' or '('."; builder.append(operator); builder.append(nodeParameters.toSimpleString(ignoreParams, operator)); if (internalNodes.size() > 0) { builder.append("("); for (Node child : internalNodes) { String childString = child.toSimplePrettyString(indent + " ", ignoreParams, ""); if (!childString.replaceAll("\\s", "").equals("")) { builder.append(childString); } } builder.append(indent).append(" ").append(")"); } } } return builder.toString(); }
public String getDefaultParameter() { return nodeParameters.get("default", null); }
/** * Deep-clones this Node. Be aware this clones the *entire* subtree rooted at this node, therefore * all descendants are also cloned. */ @Override public Node clone() { return new Node(operator, nodeParameters.clone(), cloneNodeList(this.internalNodes), position); }