-
Notifications
You must be signed in to change notification settings - Fork 188
/
SearchPropertyPanel.java
155 lines (140 loc) · 6.87 KB
/
SearchPropertyPanel.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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
* Copyright (C) 2010-2020 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.web.component.search;
import java.io.Serializable;
import java.util.List;
import com.evolveum.midpoint.web.component.util.EnableBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxScopeType;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.util.ListModel;
import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.web.component.input.TextPanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;
/**
* @author Viliam Repan (lazyman)
* @author lskublik
*/
public class SearchPropertyPanel<T extends Serializable> extends AbstractSearchItemPanel<PropertySearchItem<T>> {
private static final long serialVersionUID = 1L;
private static final String ID_SEARCH_ITEM_FIELD = "searchItemField";
public SearchPropertyPanel(String id, IModel<PropertySearchItem<T>> model) {
super(id, model);
}
@Override
protected void onConfigure() {
super.onConfigure();
PropertySearchItem<T> item = getModelObject();
if (!item.isEditWhenVisible()) {
return;
}
item.setEditWhenVisible(false);
}
protected void initSearchItemField(WebMarkupContainer searchItemContainer) {
Component searchItemField;
PropertySearchItem<T> item = getModelObject();
IModel<List<DisplayableValue<?>>> choices = null;
switch (item.getSearchItemType()) {
case REFERENCE:
searchItemField = new ReferenceValueSearchPanel(ID_SEARCH_ITEM_FIELD,
new PropertyModel<>(getModel(), "value.value"),
(PrismReferenceDefinition) item.getDefinition().getDef()){
@Override
protected void referenceValueUpdated(ObjectReferenceType ort, AjaxRequestTarget target) {
searchPerformed(target);
}
@Override
public Boolean isItemPanelEnabled() {
return item.isEnabled();
}
@Override
protected boolean isAllowedNotFoundObjectRef() {
return item.getSearch().getTypeClass().equals(AuditEventRecordType.class);
}
};
break;
case BOOLEAN:
choices = (IModel) createBooleanChoices();
case ENUM:
if (choices == null) {
choices = new ListModel(item.getAllowedValues(getPageBase()));
}
searchItemField = WebComponentUtil.createDropDownChoices(
ID_SEARCH_ITEM_FIELD, new PropertyModel(getModel(), "value"), (IModel)choices, true, getPageBase());
((InputPanel) searchItemField).getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
searchPerformed(target);
}
});
break;
case DATE:
searchItemField = new DateIntervalSearchPanel(ID_SEARCH_ITEM_FIELD,
new PropertyModel(getModel(), "fromDate"),
new PropertyModel(getModel(), "toDate")){
@Override
public void searchPerformed(AjaxRequestTarget target) {
SearchPropertyPanel.this.searchPerformed(target);
}
};
break;
case ITEM_PATH:
searchItemField = new ItemPathSearchPanel(ID_SEARCH_ITEM_FIELD,
new PropertyModel(getModel(), "value.value")){
@Override
public void searchPerformed(AjaxRequestTarget target) {
SearchPropertyPanel.this.searchPerformed(target);
}
};
break;
case TEXT:
PrismObject<LookupTableType> lookupTable = WebComponentUtil.findLookupTable(item.getDefinition().getDef(), getPageBase());
if (lookupTable != null) {
searchItemField = createAutoCompetePanel(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value.value"),
lookupTable.asObjectable());
} else {
searchItemField = new TextPanel<String>(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value.value"));
}
break;
default:
searchItemField = new TextPanel<String>(ID_SEARCH_ITEM_FIELD, new PropertyModel<>(getModel(), "value"));
}
if (searchItemField instanceof InputPanel && !(searchItemField instanceof AutoCompleteTextPanel)) {
FormComponent<?> baseFormComponent = ((InputPanel) searchItemField).getBaseFormComponent();
baseFormComponent.add(WebComponentUtil.getSubmitOnEnterKeyDownBehavior("searchSimple"));
baseFormComponent.add(AttributeAppender.append("style", "width: 140px; max-width: 400px !important;"));
baseFormComponent.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
baseFormComponent.add(new VisibleEnableBehaviour() {
@Override
public boolean isEnabled() {
return item.isEnabled();
}
@Override
public boolean isVisible() {
return item.isVisible();
}
});
}
searchItemField.setOutputMarkupId(true);
searchItemContainer.add(searchItemField);
}
}