1 /* 2 * Copyright 2013-2023 Medical Information Systems Research Group (https://medical.zcu.cz), 3 * Department of Computer Science and Engineering, University of West Bohemia. 4 * Address: Univerzitni 8, 306 14 Plzen, Czech Republic. 5 * 6 * This file is part of Sparkle project. 7 * 8 * Sparkle is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License. 11 * 12 * Sparkle is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with Sparkle. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 package cz.zcu.mre.sparkle.tools.sparqlParser; 21 22 import org.antlr.v4.runtime.tree.ParseTree; 23 import java.util.LinkedList; 24 import java.util.Queue; 25 26 /** 27 * Wrapping class saves information about visiting of node children (it's used 28 * during query loading from text file). 29 * 30 * @author Josef Kazak 31 * @author Petr Vcelak (vcelak@kiv.zcu.cz) 32 */ 33 public class SparqlParserNode { 34 35 private final ParseTree data; 36 private final Queue<ParseTree> childQueue; 37 private boolean visited = false; 38 39 public SparqlParserNode(ParseTree data) { 40 this.data = data; 41 this.childQueue = new LinkedList<>(); 42 for (int i = 0; i < data.getChildCount(); i++) { 43 childQueue.add(data.getChild(i)); 44 } 45 } 46 47 /** 48 * Returns unvisited child of current node. 49 * 50 * @return ParseTree node 51 */ 52 public ParseTree getUnvisitedNode() { 53 this.visited = true; 54 if (this.childQueue.isEmpty()) { 55 return null; 56 } else { 57 return this.childQueue.remove(); 58 } 59 } 60 61 /** 62 * Returns "true" if all node children were visited (during walking through 63 * SparqlParserContextHelp tree). 64 * 65 * @return state of visited children 66 */ 67 public boolean notExistsUnvisitedNode() { 68 return this.childQueue.isEmpty(); 69 } 70 71 /** 72 * Returns ParseTree data of node. 73 * 74 * @return ParseTree node 75 */ 76 public ParseTree getNodeData() { 77 return this.data; 78 } 79 80 /** 81 * Node is visited when it was getting its child. 82 * 83 * @return state of node (node was visited or not) 84 */ 85 public boolean getVisitedNodeState() { 86 return this.visited; 87 } 88 }