-
Notifications
You must be signed in to change notification settings - Fork 14
/
AbstractPluralAttribute.java
129 lines (106 loc) · 4.01 KB
/
AbstractPluralAttribute.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/**
* Copyright (C) 2019 Czech Technical University in Prague
* <p>
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
* version.
* <p>
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details. You should have received a copy of the GNU General Public License along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
package cz.cvut.kbss.jopa.model.metamodel;
import cz.cvut.kbss.jopa.oom.converter.ConverterWrapper;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Map;
public abstract class AbstractPluralAttribute<X, C, E> extends AbstractAttribute<X, C>
implements PluralAttribute<X, C, E> {
private final Type<E> elementType;
private final Class<C> collectionType;
AbstractPluralAttribute(PluralAttributeBuilder<X, C, E> builder) {
super(builder);
this.elementType = builder.elementType;
this.collectionType = builder.collectionType;
}
@Override
public boolean isAssociation() {
return getPersistentAttributeType().equals(
PersistentAttributeType.OBJECT);
}
@Override
public boolean isCollection() {
return true;
}
@Override
public Class<E> getBindableJavaType() {
return elementType.getJavaType();
}
@Override
public cz.cvut.kbss.jopa.model.metamodel.Bindable.BindableType getBindableType() {
return BindableType.PLURAL_ATTRIBUTE;
}
@Override
public cz.cvut.kbss.jopa.model.metamodel.PluralAttribute.CollectionType getCollectionType() {
if (getJavaType().isAssignableFrom(Collection.class)) {
return CollectionType.COLLECTION;
} else if (getJavaType().isAssignableFrom(Map.class)) {
return CollectionType.MAP;
} else {
throw new IllegalArgumentException();
}
}
@Override
public Type<E> getElementType() {
return elementType;
}
@Override
public Class<C> getJavaType() {
return collectionType;
}
public abstract static class PluralAttributeBuilder<X, C, E> extends AbstractAttributeBuilder<X, C> {
private Type<E> elementType;
private Class<C> collectionType;
@Override
public PluralAttributeBuilder<X, C, E> config(PropertyAttributes config) {
super.config(config);
elementType((Type<E>) config.getType());
return this;
}
public PluralAttributeBuilder<X, C, E> elementType(Type<E> elementType) {
this.elementType = elementType;
return this;
}
public PluralAttributeBuilder<X, C, E> collectionType(Class<C> collectionType) {
this.collectionType = collectionType;
return this;
}
@Override
public PluralAttributeBuilder<X, C, E> field(Field field) {
super.field(field);
return this;
}
@Override
public PluralAttributeBuilder<X, C, E> declaringType(ManagedType<X> declaringType) {
super.declaringType(declaringType);
return this;
}
@Override
public PluralAttributeBuilder<X, C, E> inferred(boolean inferred) {
super.inferred(inferred);
return this;
}
@Override
public PluralAttributeBuilder<X, C, E> includeExplicit(boolean includeExplicit) {
super.includeExplicit(includeExplicit);
return this;
}
@Override
public PluralAttributeBuilder<X, C, E> converter(ConverterWrapper converter) {
super.converter(converter);
return this;
}
public abstract PluralAttribute<X, C, E> build();
}
}