/* | |
* 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. | |
*/ | |
package org.apache.sling.resource.filter.impl.node; | |
import java.util.Collections; | |
import java.util.List; | |
import java.util.stream.Collectors; | |
import org.apache.sling.resource.filter.impl.Visitor; | |
/** | |
* | |
*/ | |
public class Node { | |
public String text; | |
public Node leftNode; | |
public Node rightNode; | |
public List<Node> children = Collections.emptyList(); | |
public int kind; | |
/** | |
* creates a node which represents a literal | |
* | |
* @param value | |
*/ | |
public Node(int kind, String text) { | |
this.kind = kind; | |
this.text = text; | |
} | |
/** | |
* creates a logical node | |
* | |
* @param value | |
*/ | |
public Node(int kind, List<Node> children) { | |
this.kind = kind; | |
this.children = children; | |
} | |
/** | |
* Node with children | |
* | |
* @param value | |
*/ | |
public Node(int kind, String text, List<Node> children) { | |
this.kind = kind; | |
this.text = text; | |
this.children = children; | |
} | |
/** | |
* Node used for comparison | |
* | |
* @param kind | |
* nominally of type comparison | |
* @param operator | |
* defines the type of comparison | |
* @param leftValue | |
* basis of comparison | |
* @param rightValue | |
* to be compared to | |
*/ | |
public Node(int kind, String operator, Node leftValue, Node rightValue) { | |
this.kind = kind; | |
this.text = operator; | |
this.leftNode = leftValue; | |
this.rightNode = rightValue; | |
} | |
public String getText() { | |
return text; | |
} | |
public Node getLeftNode() { | |
return leftNode; | |
} | |
public Node getRightNode() { | |
return rightNode; | |
} | |
public List<Node> getChildren() { | |
return children; | |
} | |
public int getKind() { | |
return kind; | |
} | |
public <R> R accept(Visitor<R> visitor) { | |
return visitor.visit(this); | |
} | |
@Override | |
public String toString() { | |
return text | |
+ children.stream().map(Node::toString).collect(Collectors.joining(text, "(", ")")); | |
} | |
public <R> List<R> visitChildren(Visitor<R> visitor) { | |
return children.stream().map(child -> child.accept(visitor)).collect(Collectors.toList()); | |
} | |
} |