Skip to content

Package: StatementHolder

StatementHolder

nameinstructionbranchcomplexitylinemethod
StatementHolder(String)
M: 0 C: 10
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
analyzeStatement()
M: 4 C: 115
97%
M: 3 C: 16
84%
M: 3 C: 9
75%
M: 0 C: 28
100%
M: 0 C: 1
100%
assembleStatement()
M: 0 C: 69
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
clearParameters()
M: 0 C: 22
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
ensureState()
M: 0 C: 9
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
getStatement()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
isNotParametrized()
M: 0 C: 11
100%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 1
100%
M: 0 C: 1
100%
setParameter(String, String)
M: 0 C: 26
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
static {...}
M: 0 C: 1
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (C) 2016 Czech Technical University in Prague
3: *
4: * This program is free software: you can redistribute it and/or modify it under
5: * the terms of the GNU General Public License as published by the Free Software
6: * Foundation, either version 3 of the License, or (at your option) any
7: * later version.
8: *
9: * This program is distributed in the hope that it will be useful, but WITHOUT
10: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12: * details. You should have received a copy of the GNU General Public License
13: * along with this program. If not, see <http://www.gnu.org/licenses/>.
14: */
15: package cz.cvut.kbss.ontodriver.util;
16:
17: import java.util.*;
18:
19: /**
20: * Used for parsing and managing SPARQL statements.
21: */
22: public class StatementHolder {
23:
24: private Map<String, String> paramValues;
25: private List<String> paramNames;
26: private List<String> statementParts;
27: private final String statement;
28:
29:
30: public StatementHolder(String statement) {
31: Objects.requireNonNull(statement);
32:
33: this.statement = statement.trim();
34: }
35:
36: public void analyzeStatement() {
37: this.paramNames = new ArrayList<>();
38: this.statementParts = new ArrayList<>();
39: // In single-quoted string
40: boolean inSQString = false;
41: // In double-quoted string
42: boolean inDQString = false;
43: boolean inParam = false;
44: int lastParamEndIndex = 0;
45: int paramStartIndex = 0;
46:• for (int i = 0; i < statement.length(); i++) {
47: final char c = statement.charAt(i);
48:• switch (c) {
49: case '\'':
50:• inSQString = !inSQString;
51: break;
52: case '"':
53:• inDQString = !inDQString;
54: break;
55: case '?':
56:• if (!inSQString && !inDQString) {
57: statementParts.add(statement.substring(lastParamEndIndex, i));
58: paramStartIndex = i + 1;
59: inParam = true;
60: }
61: break;
62: case '\n':
63: case ' ':
64:• if (inParam) {
65: lastParamEndIndex = i;
66: inParam = false;
67: final String param = statement.substring(paramStartIndex, i);
68: paramNames.add(param);
69: }
70: break;
71: default:
72: break;
73: }
74: }
75: statementParts.add(statement.substring(lastParamEndIndex));
76: this.paramValues = new HashMap<>(paramNames.size());
77:
78:• assert statementParts.size() == paramNames.size() + 1;
79: }
80:
81: public void setParameter(String parameterName, String value) {
82: ensureState();
83:• if (!paramNames.contains(parameterName)) {
84: throw new IllegalArgumentException("Unknown binding name " + parameterName);
85: }
86: paramValues.put(parameterName, value);
87: }
88:
89: private void ensureState() {
90:• if (paramNames == null) {
91: throw new IllegalStateException("Statement has to be analyzed before working with parameters.");
92: }
93: }
94:
95: public String assembleStatement() {
96:• if (isNotParametrized()) {
97: return statement;
98: }
99: final StringBuilder sb = new StringBuilder(statement.length());
100:• for (int i = 0; i < paramNames.size(); i++) {
101: sb.append(statementParts.get(i));
102: final String paramValue = paramValues.get(paramNames.get(i));
103:• if (paramValue == null) {
104: sb.append("?").append(paramNames.get(i));
105: } else {
106: sb.append(paramValue);
107: }
108: }
109: sb.append(statementParts.get(paramNames.size()));
110: return sb.toString();
111: }
112:
113: public String getStatement() {
114: return statement;
115: }
116:
117: private boolean isNotParametrized() {
118:• return paramNames == null || paramNames.isEmpty();
119: }
120:
121: public void clearParameters() {
122: ensureState();
123:• for (String param : paramValues.keySet()) {
124: paramValues.put(param, null);
125: }
126: }
127: }