Skip to content

Package: ParameterValueFactory

ParameterValueFactory

nameinstructionbranchcomplexitylinemethod
ParameterValueFactory(MetamodelProvider)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
create(Object)
M: 7 C: 146
95%
M: 0 C: 28
100%
M: 0 C: 15
100%
M: 2 C: 31
94%
M: 0 C: 1
100%
create(String, String)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
createUntyped(Object)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
createVariableValue(Integer)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
createVariableValue(String)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
isDateTime(Object)
M: 0 C: 16
100%
M: 0 C: 8
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
isTime(Object)
M: 0 C: 10
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (C) 2020 Czech Technical University in Prague
3: * <p>
4: * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
5: * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
6: * version.
7: * <p>
8: * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
9: * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
10: * details. You should have received a copy of the GNU General Public License along with this program. If not, see
11: * <http://www.gnu.org/licenses/>.
12: */
13: package cz.cvut.kbss.jopa.query.parameter;
14:
15: import cz.cvut.kbss.jopa.sessions.MetamodelProvider;
16:
17: import java.net.URI;
18: import java.net.URISyntaxException;
19: import java.net.URL;
20: import java.time.*;
21: import java.util.Collection;
22: import java.util.Date;
23: import java.util.Objects;
24: import java.util.stream.Collectors;
25:
26: public class ParameterValueFactory {
27:
28: private final MetamodelProvider metamodelProvider;
29:
30: public ParameterValueFactory(MetamodelProvider metamodelProvider) {
31: this.metamodelProvider = metamodelProvider;
32: }
33:
34: /**
35: * Returns a new variable parameter specification.
36: * <p>
37: * This is the default implementation, if a parameter is not set, a variable is used in the query to represent an
38: * unbound parameter.
39: *
40: * @param name Parameter (variable) name
41: * @return Parameter value object
42: */
43: public ParameterValue createVariableValue(String name) {
44: return new NamedVariableParameterValue(name);
45: }
46:
47: /**
48: * Returns a new variable parameter specification.
49: * <p>
50: * This is the default implementation, if a parameter is not set, a variable is used in the query to represent an
51: * unbound parameter.
52: *
53: * @param position Parameter (variable) position
54: * @return Parameter value object
55: */
56: public ParameterValue createVariableValue(Integer position) {
57: return new PositionalVariableParameterValue(position);
58: }
59:
60: /**
61: * Returns new String parameter value specification.
62: * <p>
63: * The language tag is optional.
64: *
65: * @param value The value
66: * @param language Language tag of the value, e.g. en, cz. Optional
67: * @return Parameter value object
68: */
69: public ParameterValue create(String value, String language) {
70: return new StringParameterValue(value, language);
71: }
72:
73: /**
74: * Returns new parameter value specification.
75: *
76: * @param value The value
77: * @return Parameter value object
78: */
79: public ParameterValue create(Object value) {
80: Objects.requireNonNull(value);
81:• if (value instanceof URI) {
82: return new UriParameterValue((URI) value);
83:• } else if (value instanceof URL) {
84: try {
85: return new UriParameterValue(((URL) value).toURI());
86: } catch (URISyntaxException e) {
87: throw new IllegalArgumentException("Unable to transform the specified URL to URI.", e);
88: }
89:• } else if (value instanceof Boolean) {
90: return new BooleanParameterValue((Boolean) value);
91:• } else if (value instanceof Short) {
92: return new ShortParameterValue((Short) value);
93:• } else if (value instanceof Integer) {
94: return new IntegerParameterValue((Integer) value);
95:• } else if (value instanceof Long) {
96: return new LongParameterValue((Long) value);
97:• } else if (value instanceof Double) {
98: return new DoubleParameterValue((Double) value);
99:• } else if (value instanceof Float) {
100: return new FloatParameterValue((Float) value);
101:• } else if (isDateTime(value)) {
102: return new DateTimeParameterValue(value);
103:• } else if (value instanceof ZonedDateTime) {
104: return new DateTimeParameterValue(((ZonedDateTime) value).toOffsetDateTime());
105:• } else if (value instanceof LocalDate) {
106: return new DateParameterValue((LocalDate) value);
107:• } else if (isTime(value)) {
108: return new TimeParameterValue(value);
109:• } else if (metamodelProvider.isEntityType(value.getClass())) {
110: return new EntityParameterValue(value, metamodelProvider);
111:• } else if (value instanceof Collection) {
112: return new CollectionParameterValue(
113: ((Collection<?>) value).stream().map(this::create).collect(Collectors.toList()));
114: } else {
115: return new StringParameterValue(value.toString());
116: }
117: }
118:
119: private static boolean isDateTime(Object value) {
120:• return value instanceof Date || value instanceof LocalDateTime || value instanceof OffsetDateTime ||
121: value instanceof Instant;
122: }
123:
124: private static boolean isTime(Object value) {
125:• return value instanceof LocalTime || value instanceof OffsetTime;
126: }
127:
128: /**
129: * Returns new untyped parameter value specification.
130: *
131: * @param value The value
132: * @return Parameter value object
133: */
134: public ParameterValue createUntyped(Object value) {
135: return new UntypedParameterValue(Objects.requireNonNull(value));
136: }
137: }