/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/UnwrappedMongoPersistentProperty.java

https://github.com/spring-projects/spring-data-mongodb · Java · 368 lines · 276 code · 69 blank · 23 comment · 9 complexity · e9270e49dfaec840a6e461fcb22afd88 MD5 · raw file

  1. /*
  2. * Copyright 2021-2022 the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * https://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.springframework.data.mongodb.core.mapping;
  17. import java.lang.annotation.Annotation;
  18. import java.lang.reflect.Field;
  19. import java.lang.reflect.Method;
  20. import java.util.Collection;
  21. import org.springframework.data.mapping.Association;
  22. import org.springframework.data.mapping.PersistentEntity;
  23. import org.springframework.data.mapping.PersistentPropertyAccessor;
  24. import org.springframework.data.util.TypeInformation;
  25. import org.springframework.lang.Nullable;
  26. import org.springframework.util.ObjectUtils;
  27. /**
  28. * Unwrapped variant of {@link MongoPersistentProperty}.
  29. *
  30. * @author Christoph Strobl
  31. * @author Rogério Meneguelli Gatto
  32. * @since 3.2
  33. * @see Unwrapped
  34. */
  35. class UnwrappedMongoPersistentProperty implements MongoPersistentProperty {
  36. private final MongoPersistentProperty delegate;
  37. private final UnwrapEntityContext context;
  38. public UnwrappedMongoPersistentProperty(MongoPersistentProperty delegate, UnwrapEntityContext context) {
  39. this.delegate = delegate;
  40. this.context = context;
  41. }
  42. @Override
  43. public String getFieldName() {
  44. if (!context.getProperty().isUnwrapped()) {
  45. return delegate.getFieldName();
  46. }
  47. return context.getProperty().findAnnotation(Unwrapped.class).prefix() + delegate.getFieldName();
  48. }
  49. @Override
  50. public boolean hasExplicitFieldName() {
  51. return delegate.hasExplicitFieldName()
  52. || !ObjectUtils.isEmpty(context.getProperty().findAnnotation(Unwrapped.class).prefix());
  53. }
  54. @Override
  55. public Class<?> getFieldType() {
  56. return delegate.getFieldType();
  57. }
  58. @Override
  59. public int getFieldOrder() {
  60. return delegate.getFieldOrder();
  61. }
  62. @Override
  63. public boolean writeNullValues() {
  64. return delegate.writeNullValues();
  65. }
  66. @Override
  67. public boolean isDbReference() {
  68. return delegate.isDbReference();
  69. }
  70. @Override
  71. public boolean isDocumentReference() {
  72. return delegate.isDocumentReference();
  73. }
  74. @Override
  75. public boolean isExplicitIdProperty() {
  76. return delegate.isExplicitIdProperty();
  77. }
  78. @Override
  79. public boolean isLanguageProperty() {
  80. return delegate.isLanguageProperty();
  81. }
  82. @Override
  83. public boolean isExplicitLanguageProperty() {
  84. return delegate.isExplicitLanguageProperty();
  85. }
  86. @Override
  87. public boolean isTextScoreProperty() {
  88. return delegate.isTextScoreProperty();
  89. }
  90. @Override
  91. @Nullable
  92. public DBRef getDBRef() {
  93. return delegate.getDBRef();
  94. }
  95. @Override
  96. @Nullable
  97. public DocumentReference getDocumentReference() {
  98. return delegate.getDocumentReference();
  99. }
  100. @Override
  101. public boolean usePropertyAccess() {
  102. return delegate.usePropertyAccess();
  103. }
  104. @Override
  105. public boolean hasExplicitWriteTarget() {
  106. return delegate.hasExplicitWriteTarget();
  107. }
  108. @Override
  109. public PersistentEntity<?, MongoPersistentProperty> getOwner() {
  110. return delegate.getOwner();
  111. }
  112. @Override
  113. public String getName() {
  114. return delegate.getName();
  115. }
  116. @Override
  117. public Class<?> getType() {
  118. return delegate.getType();
  119. }
  120. @Override
  121. public TypeInformation<?> getTypeInformation() {
  122. return delegate.getTypeInformation();
  123. }
  124. @Override
  125. public Iterable<? extends TypeInformation<?>> getPersistentEntityTypeInformation() {
  126. return delegate.getPersistentEntityTypeInformation();
  127. }
  128. @Override
  129. @Nullable
  130. public Method getGetter() {
  131. return delegate.getGetter();
  132. }
  133. @Override
  134. public Method getRequiredGetter() {
  135. return delegate.getRequiredGetter();
  136. }
  137. @Override
  138. @Nullable
  139. public Method getSetter() {
  140. return delegate.getSetter();
  141. }
  142. @Override
  143. public Method getRequiredSetter() {
  144. return delegate.getRequiredSetter();
  145. }
  146. @Override
  147. @Nullable
  148. public Method getWither() {
  149. return delegate.getWither();
  150. }
  151. @Override
  152. public Method getRequiredWither() {
  153. return delegate.getRequiredWither();
  154. }
  155. @Override
  156. @Nullable
  157. public Field getField() {
  158. return delegate.getField();
  159. }
  160. @Override
  161. public Field getRequiredField() {
  162. return delegate.getRequiredField();
  163. }
  164. @Override
  165. @Nullable
  166. public String getSpelExpression() {
  167. return delegate.getSpelExpression();
  168. }
  169. @Override
  170. @Nullable
  171. public Association<MongoPersistentProperty> getAssociation() {
  172. return delegate.getAssociation();
  173. }
  174. @Override
  175. public Association<MongoPersistentProperty> getRequiredAssociation() {
  176. return delegate.getRequiredAssociation();
  177. }
  178. @Override
  179. public boolean isEntity() {
  180. return delegate.isEntity();
  181. }
  182. @Override
  183. public boolean isIdProperty() {
  184. return delegate.isIdProperty();
  185. }
  186. @Override
  187. public boolean isVersionProperty() {
  188. return delegate.isVersionProperty();
  189. }
  190. @Override
  191. public boolean isCollectionLike() {
  192. return delegate.isCollectionLike();
  193. }
  194. @Override
  195. public boolean isMap() {
  196. return delegate.isMap();
  197. }
  198. @Override
  199. public boolean isArray() {
  200. return delegate.isArray();
  201. }
  202. @Override
  203. public boolean isTransient() {
  204. return delegate.isTransient();
  205. }
  206. @Override
  207. public boolean isWritable() {
  208. return delegate.isWritable();
  209. }
  210. @Override
  211. public boolean isImmutable() {
  212. return delegate.isImmutable();
  213. }
  214. @Override
  215. public boolean isAssociation() {
  216. return delegate.isAssociation();
  217. }
  218. @Override
  219. public boolean isUnwrapped() {
  220. return delegate.isUnwrapped();
  221. }
  222. @Override
  223. public Collection<Object> getEncryptionKeyIds() {
  224. return delegate.getEncryptionKeyIds();
  225. }
  226. @Override
  227. @Nullable
  228. public Class<?> getComponentType() {
  229. return delegate.getComponentType();
  230. }
  231. @Override
  232. public Class<?> getRawType() {
  233. return delegate.getRawType();
  234. }
  235. @Override
  236. @Nullable
  237. public Class<?> getMapValueType() {
  238. return delegate.getMapValueType();
  239. }
  240. @Override
  241. public Class<?> getActualType() {
  242. return delegate.getActualType();
  243. }
  244. @Override
  245. @Nullable
  246. public <A extends Annotation> A findAnnotation(Class<A> annotationType) {
  247. return delegate.findAnnotation(annotationType);
  248. }
  249. @Override
  250. public <A extends Annotation> A getRequiredAnnotation(Class<A> annotationType) throws IllegalStateException {
  251. return delegate.getRequiredAnnotation(annotationType);
  252. }
  253. @Override
  254. @Nullable
  255. public <A extends Annotation> A findPropertyOrOwnerAnnotation(Class<A> annotationType) {
  256. return delegate.findPropertyOrOwnerAnnotation(annotationType);
  257. }
  258. @Override
  259. public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) {
  260. return delegate.isAnnotationPresent(annotationType);
  261. }
  262. @Override
  263. public boolean hasActualTypeAnnotation(Class<? extends Annotation> annotationType) {
  264. return delegate.hasActualTypeAnnotation(annotationType);
  265. }
  266. @Override
  267. @Nullable
  268. public Class<?> getAssociationTargetType() {
  269. return delegate.getAssociationTargetType();
  270. }
  271. @Override
  272. public TypeInformation<?> getAssociationTargetTypeInformation() {
  273. return delegate.getAssociationTargetTypeInformation();
  274. }
  275. @Override
  276. public <T> PersistentPropertyAccessor<T> getAccessorForOwner(T owner) {
  277. return delegate.getAccessorForOwner(owner);
  278. }
  279. @Override
  280. public boolean equals(Object obj) {
  281. if (this == obj) {
  282. return true;
  283. }
  284. if (obj == null || getClass() != obj.getClass()) {
  285. return false;
  286. }
  287. UnwrappedMongoPersistentProperty that = (UnwrappedMongoPersistentProperty) obj;
  288. if (!ObjectUtils.nullSafeEquals(delegate, that.delegate)) {
  289. return false;
  290. }
  291. return ObjectUtils.nullSafeEquals(context, that.context);
  292. }
  293. @Override
  294. public int hashCode() {
  295. int result = ObjectUtils.nullSafeHashCode(delegate);
  296. result = 31 * result + ObjectUtils.nullSafeHashCode(context);
  297. return result;
  298. }
  299. }