/
QFocusMapping.java
110 lines (97 loc) · 5.32 KB
/
QFocusMapping.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
/*
* Copyright (C) 2010-2021 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.repo.sqale.qmodel.focus;
import static com.evolveum.midpoint.repo.sqlbase.mapping.item.SimpleItemFilterProcessor.integerMapper;
import static com.evolveum.midpoint.repo.sqlbase.mapping.item.SimpleItemFilterProcessor.stringMapper;
import static com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType.*;
import java.util.Collection;
import com.querydsl.core.types.Path;
import org.jetbrains.annotations.NotNull;
import com.evolveum.midpoint.repo.sqale.qmodel.object.QObjectMapping;
import com.evolveum.midpoint.repo.sqlbase.SqlTransformerContext;
import com.evolveum.midpoint.repo.sqlbase.mapping.item.PolyStringItemFilterProcessor;
import com.evolveum.midpoint.repo.sqlbase.mapping.item.TimestampItemFilterProcessor;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
/**
* Mapping between {@link QFocus} and {@link FocusType}.
*/
public class QFocusMapping<S extends FocusType, Q extends QFocus<R>, R extends MFocus>
extends QObjectMapping<S, Q, R> {
public static final String DEFAULT_ALIAS_NAME = "f";
public static final QFocusMapping<FocusType, QFocus<MFocus>, MFocus> INSTANCE =
new QFocusMapping<>(QFocus.TABLE_NAME, DEFAULT_ALIAS_NAME,
FocusType.class, QFocus.CLASS);
protected QFocusMapping(
@NotNull String tableName,
@NotNull String defaultAliasName,
@NotNull Class<S> schemaType,
@NotNull Class<Q> queryType) {
super(tableName, defaultAliasName, schemaType, queryType);
addItemMapping(F_COST_CENTER, stringMapper(path(q -> q.costCenter)));
addItemMapping(F_EMAIL_ADDRESS, stringMapper(path(q -> q.emailAddress)));
// TODO byte[] mapping for F_JPEG_PHOTO -> q.photo
addItemMapping(F_LOCALE, stringMapper(path(q -> q.locale)));
addItemMapping(F_LOCALITY,
PolyStringItemFilterProcessor.mapper(
path(q -> q.localityOrig), path(q -> q.localityNorm)));
addItemMapping(F_PREFERRED_LANGUAGE, stringMapper(path(q -> q.preferredLanguage)));
addItemMapping(F_TIMEZONE, stringMapper(path(q -> q.timezone)));
addItemMapping(F_TELEPHONE_NUMBER, stringMapper(path(q -> q.telephoneNumber)));
// passwordModify/CreateTimestamps are just a bit deeper
nestedMapping(F_CREDENTIALS, CredentialsType.class)
.nestedMapping(CredentialsType.F_PASSWORD, PasswordType.class)
.nestedMapping(PasswordType.F_METADATA, MetadataType.class)
.addItemMapping(MetadataType.F_CREATE_TIMESTAMP,
TimestampItemFilterProcessor.mapper(path(q -> q.passwordCreateTimestamp)))
.addItemMapping(MetadataType.F_MODIFY_TIMESTAMP,
TimestampItemFilterProcessor.mapper(path(q -> q.passwordModifyTimestamp)));
nestedMapping(F_ACTIVATION, ActivationType.class)
.addItemMapping(ActivationType.F_ADMINISTRATIVE_STATUS,
integerMapper(path(q -> q.administrativeStatus)))
.addItemMapping(ActivationType.F_EFFECTIVE_STATUS,
integerMapper(path(q -> q.effectiveStatus)))
.addItemMapping(ActivationType.F_ENABLE_TIMESTAMP,
TimestampItemFilterProcessor.mapper(path(q -> q.enableTimestamp)))
.addItemMapping(ActivationType.F_DISABLE_REASON,
TimestampItemFilterProcessor.mapper(path(q -> q.disableTimestamp)))
.addItemMapping(ActivationType.F_DISABLE_REASON,
stringMapper(path(q -> q.disableReason)))
.addItemMapping(ActivationType.F_VALIDITY_STATUS,
integerMapper(path(q -> q.validityStatus)))
.addItemMapping(ActivationType.F_VALID_FROM,
TimestampItemFilterProcessor.mapper(path(q -> q.validFrom)))
.addItemMapping(ActivationType.F_VALID_TO,
TimestampItemFilterProcessor.mapper(path(q -> q.validTo)))
.addItemMapping(ActivationType.F_VALIDITY_CHANGE_TIMESTAMP,
TimestampItemFilterProcessor.mapper(path(q -> q.validityChangeTimestamp)))
.addItemMapping(ActivationType.F_ARCHIVE_TIMESTAMP,
TimestampItemFilterProcessor.mapper(path(q -> q.archiveTimestamp)));
}
@Override
public @NotNull Path<?>[] selectExpressions(
Q entity, Collection<SelectorOptions<GetOperationOptions>> options) {
// TODO process photo option
return new Path[] { entity.oid, entity.fullObject };
}
@Override
protected Q newAliasInstance(String alias) {
//noinspection unchecked
return (Q) new QFocus<>(MFocus.class, alias);
}
@Override
public FocusSqlTransformer<S, Q, R> createTransformer(
SqlTransformerContext transformerContext) {
return new FocusSqlTransformer<>(transformerContext, this);
}
@Override
public R newRowObject() {
//noinspection unchecked
return (R) new MFocus();
}
}