Skip to content

Method: StringParameterValue(LangString)

1: /**
2: * Copyright (C) 2022 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.jopa.query.parameter;
16:
17: import cz.cvut.kbss.ontodriver.model.LangString;
18:
19: import java.util.Objects;
20:
21: class StringParameterValue extends AbstractParameterValue {
22:
23: private final String value;
24: private final String language;
25:
26: StringParameterValue(String value) {
27: this.value = Objects.requireNonNull(value);
28: this.language = null;
29: }
30:
31: StringParameterValue(String value, String language) {
32: this.value = Objects.requireNonNull(value);
33: this.language = language;
34: }
35:
36: StringParameterValue(LangString langString) {
37: Objects.requireNonNull(langString);
38: this.value = langString.getValue();
39: this.language = langString.getLanguage().orElse(null);
40: }
41:
42: @Override
43: public String getValue() {
44: return value;
45: }
46:
47: public String getLanguage() {
48: return language;
49: }
50:
51: @Override
52: public String getQueryString() {
53: return "\"" + getEscapedValue() + "\"" + (language != null ? ("@" + language) : "");
54: }
55:
56: /**
57: * Escapes string characters according to SPARQL spec.
58: *
59: * @return Escaped value
60: * @see <a href="https://www.w3.org/TR/sparql11-query/#grammarEscapes" target="_top">
61: * https://www.w3.org/TR/sparql11-query/#grammarEscapes</a>
62: */
63: private String getEscapedValue() {
64: final StringBuilder sb = new StringBuilder(value.length());
65: char c;
66: for (int i = 0; i < value.length(); i++) {
67: c = value.charAt(i);
68: switch (c) {
69: case '\t':
70: sb.append("\\t");
71: break;
72: case '\n':
73: sb.append("\\n");
74: break;
75: case '\r':
76: sb.append("\\r");
77: break;
78: case '\b':
79: sb.append("\\b");
80: break;
81: case '\f':
82: sb.append("\\f");
83: break;
84: case '\'':
85: sb.append("\\\'");
86: break;
87: case '\"':
88: sb.append("\\\"");
89: break;
90: case '\\':
91: sb.append("\\\\");
92: break;
93: default:
94: sb.append(c);
95: }
96: }
97: return sb.toString();
98: }
99: }