Skip to content

Method: contains(String)

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.adapters;
16:
17: import cz.cvut.kbss.jopa.model.MultilingualString;
18: import cz.cvut.kbss.jopa.sessions.UnitOfWorkImpl;
19:
20: import java.lang.reflect.Field;
21: import java.util.Map;
22: import java.util.Objects;
23: import java.util.Set;
24:
25: /**
26: * Wraps a {@link MultilingualString} so that calls to modifying operations are intercepted and reported to the
27: * persistence context (if necessary).
28: */
29: public class IndirectMultilingualString extends MultilingualString implements IndirectWrapper {
30:
31: private final transient Object owner;
32: private final transient Field field;
33: private final transient UnitOfWorkImpl persistenceContext;
34:
35: private final MultilingualString referencedString;
36:
37: protected IndirectMultilingualString() {
38: this.owner = null;
39: this.field = null;
40: this.persistenceContext = null;
41: this.referencedString = new MultilingualString();
42: }
43:
44: /**
45: * Create new indirect multilingual string backed by the specified referenced {@link MultilingualString}.
46: *
47: * @param owner Owner of the string
48: * @param f The field holding this string
49: * @param uow Persistence context the owner belongs to
50: * @param referencedString The string to reference
51: * @throws NullPointerException If the {@code referencedString} is null
52: */
53: public IndirectMultilingualString(Object owner, Field f, UnitOfWorkImpl uow, MultilingualString referencedString) {
54: this.owner = owner;
55: this.field = f;
56: this.persistenceContext = Objects.requireNonNull(uow);
57: this.referencedString = Objects.requireNonNull(referencedString);
58: }
59:
60: private void notifyPersistenceContext() {
61: assert persistenceContext != null;
62: if (persistenceContext.isInTransaction() && !persistenceContext.isInCommit()) {
63: persistenceContext.attributeChanged(owner, field);
64: }
65: }
66:
67: @Override
68: public MultilingualString set(String language, String value) {
69: referencedString.set(language, value);
70: notifyPersistenceContext();
71: return this;
72: }
73:
74: @Override
75: public MultilingualString set(String value) {
76: referencedString.set(value);
77: notifyPersistenceContext();
78: return this;
79: }
80:
81: @Override
82: public String get(String language) {
83: return referencedString.get(language);
84: }
85:
86: @Override
87: public String get() {
88: return referencedString.get();
89: }
90:
91: @Override
92: public boolean contains(String language) {
93: return referencedString.contains(language);
94: }
95:
96: @Override
97: public boolean containsSimple() {
98: return referencedString.containsSimple();
99: }
100:
101: @Override
102: public boolean isEmpty() {
103: return referencedString.isEmpty();
104: }
105:
106: @Override
107: public void remove(String language) {
108: referencedString.remove(language);
109: notifyPersistenceContext();
110: }
111:
112: @Override
113: public Set<String> getLanguages() {
114: return referencedString.getLanguages();
115: }
116:
117: @Override
118: public Map<String, String> getValue() {
119: return referencedString.getValue();
120: }
121:
122: @Override
123: public boolean equals(Object o) {
124: if (o instanceof MultilingualString) {
125: if (o instanceof IndirectMultilingualString) {
126: return referencedString.equals(((IndirectMultilingualString) o).referencedString);
127: }
128: return referencedString.equals(o);
129: }
130: return false;
131: }
132:
133: @Override
134: public int hashCode() {
135: return referencedString.hashCode();
136: }
137:
138: @Override
139: public String toString() {
140: return referencedString.toString();
141: }
142:
143: @Override
144: public MultilingualString unwrap() {
145: return referencedString;
146: }
147: }