Revision 44829 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/searchpanel/SearchConditionPanelSimplified.java

View differences:

SearchConditionPanelSimplified.java
3 3
import java.awt.event.ActionEvent;
4 4
import java.util.ArrayList;
5 5
import java.util.List;
6
import java.util.Map;
7
import javax.json.Json;
8
import javax.json.JsonObject;
9
import javax.json.JsonObjectBuilder;
6 10
import javax.swing.JButton;
7 11
import javax.swing.JComboBox;
8 12
import javax.swing.JComponent;
......
23 27
import org.gvsig.fmap.dal.swing.DataSwingManager;
24 28
import org.gvsig.fmap.dal.swing.searchpanel.AbstractSearchConditionPanel;
25 29
import org.gvsig.fmap.dal.swing.searchpanel.SearchConditionPanel;
30
import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
26 31
import org.gvsig.tools.ToolsLocator;
32
import org.gvsig.tools.dataTypes.DataTypeUtils;
27 33
import org.gvsig.tools.i18n.I18nManager;
28 34
import org.gvsig.tools.swing.api.ChangeListenerHelper;
29 35
import org.gvsig.tools.swing.api.ToolsSwingLocator;
......
37 43
 *
38 44
 * @author jjdelcerro
39 45
 */
40
public class SearchConditionPanelSimplified 
41
    extends AbstractSearchConditionPanel 
42
    implements SearchConditionPanel 
43
  {
46
public class SearchConditionPanelSimplified
47
        extends AbstractSearchConditionPanel
48
        implements SearchConditionPanel {
44 49

  
45
  private static final Logger LOGGER = LoggerFactory.getLogger(SearchConditionPanelSimplified.class);
50
    private static final Logger LOGGER = LoggerFactory.getLogger(SearchConditionPanelSimplified.class);
51
    public static final String PANEL_NAME = "SearchConditionPanelSimplified";
46 52

  
47 53
    @Override
48 54
    public JComponent asJComponent() {
49 55
        return null;
50 56
    }
51 57

  
52
  private static class SearchConditionPanelAdvancedFactory 
53
     implements SearchConditionPanelFactory
54
  {
55

  
56 58
    @Override
57
    public boolean isApplicable(FeatureStore store) {
58
      return true;
59
    public void put(SearchParameters params) {
60
        Map<String, JsonObject> allPersistenceJson = params.getValues();
61
        JsonObject jsonState = allPersistenceJson.get(PANEL_NAME);
62
        this.fromJson(jsonState);
59 63
    }
60 64

  
61 65
    @Override
62
    public SearchConditionPanel create(Object... os) {
63
      return null;
66
    public SearchParameters fetch(SearchParameters params) {
67
        if (params == null) {
68
            return null;
69
        }
70
        Map<String, JsonObject> persistenceJson = params.getValues();
71
        JsonObject jsonState = this.toJson();
72
        persistenceJson.put(PANEL_NAME, jsonState);
73
        return params;
64 74
    }
65 75

  
66
    @Override
67
    public String getName() {
68
      return "Simplified";
76
    private static class SearchConditionPanelAdvancedFactory
77
            implements SearchConditionPanelFactory {
78

  
79
        @Override
80
        public boolean isApplicable(FeatureStore store) {
81
            return true;
82
        }
83

  
84
        @Override
85
        public SearchConditionPanel create(Object... os) {
86
            return null;
87
        }
88

  
89
        @Override
90
        public String getName() {
91
            return "Simplified";
92
        }
93

  
69 94
    }
70
    
71
  }
72
  
73
  private static final SearchConditionPanelFactory FACTORY = new SearchConditionPanelAdvancedFactory();
74
  
75
  private final FeatureStore store;
76
  private final List<SearchConditionFieldController> searchFields;
77
  private int maxSearhFields = 4;
78
  private String accumulatedFilter;
79
  private final JButton btnAddAccumulatedFilter;
80
  private final JButton btnRemoveAccumulatedFilter;
81
  private final JButton btnViewAccumulatedFilter;
82
  private final String baseToolTip;
83
  private SearchConditionPanelFactory factory;
84
  private final ChangeListenerHelper changeListenerHelper;
85 95

  
86
  public SearchConditionPanelSimplified(
87
          FeatureStore store,
88
          JButton btnAddToAccumulatedFilter,
89
          JButton btnRemoveAccumulatedFilter,
90
          JButton btnViewAccumulatedFilter,
91
          JLabel lblField1,
92
          JLabel lblExtraFields1,
93
          JLabel lblRelationalOperator1,
94
          JComboBox cboValue1,
95
          JLabel lblLogicalOperators1,
96
          JLabel lblField2,
97
          JLabel lblExtraFields2,
98
          JLabel lblRelationalOperator2,
99
          JComboBox cboValue2,
100
          JLabel lblLogicalOperators2,
101
          JLabel lblField3,
102
          JLabel lblExtraFields3,
103
          JLabel lblRelationalOperator3,
104
          JComboBox cboValue3,
105
          JLabel lblLogicalOperators3,
106
          JLabel lblField4,
107
          JLabel lblExtraFields4,
108
          JLabel lblRelationalOperator4,
109
          JComboBox cboValue4,
110
          JLabel lblLogicalOperators4
111
  ) {
112
    this.changeListenerHelper = ToolsSwingLocator.getToolsSwingManager().createChangeListenerHelper();
113
    this.store = store;
114
    this.searchFields = new ArrayList<>();
115
    SearchConditionFieldController controller = new SearchConditionFieldController(
116
            store,
117
            lblField1,
118
            lblExtraFields1,
119
            lblRelationalOperator1,
120
            cboValue1,
121
            lblLogicalOperators1
122
    );
123
    this.searchFields.add(controller);
124
    controller = new SearchConditionFieldController(
125
            store,
126
            lblField2,
127
            lblExtraFields2,
128
            lblRelationalOperator2,
129
            cboValue2,
130
            lblLogicalOperators2
131
    );
132
    this.searchFields.add(controller);
133
    controller = new SearchConditionFieldController(
134
            store,
135
            lblField3,
136
            lblExtraFields3,
137
            lblRelationalOperator3,
138
            cboValue3,
139
            lblLogicalOperators3
140
    );
141
    this.searchFields.add(controller);
142
    controller = new SearchConditionFieldController(
143
            store,
144
            lblField4,
145
            lblExtraFields4,
146
            lblRelationalOperator4,
147
            cboValue4,
148
            null
149
    );
150
    this.searchFields.add(controller);
151
    this.accumulatedFilter = null;
152
    this.btnAddAccumulatedFilter = btnAddToAccumulatedFilter;
153
    this.btnRemoveAccumulatedFilter = btnRemoveAccumulatedFilter;
154
    this.btnViewAccumulatedFilter = btnViewAccumulatedFilter;
155
    this.baseToolTip = this.btnAddAccumulatedFilter.getToolTipText();
156
    initComponents();
157
  }
96
    private static final SearchConditionPanelFactory FACTORY = new SearchConditionPanelAdvancedFactory();
158 97

  
159
  @Override
160
  public SearchConditionPanelFactory getFactory() {
161
    return FACTORY;
162
  }
98
    private final FeatureStore store;
99
    private final List<SearchConditionFieldController> searchFieldsControllers;
100
    private int maxSearhFields = 4;
101
    private String accumulatedFilter;
102
    private final JButton btnAddAccumulatedFilter;
103
    private final JButton btnRemoveAccumulatedFilter;
104
    private final JButton btnViewAccumulatedFilter;
105
    private final String baseToolTip;
106
    private SearchConditionPanelFactory factory;
107
    private final ChangeListenerHelper changeListenerHelper;
163 108

  
164
  @Override
165
  public boolean isValid(StringBuilder message) {
166
    boolean valid = true;
167
    for (SearchConditionFieldController searchField : searchFields) {
168
      if( !searchField.isValid(message) ) {
169
        valid = false;
170
      }
109
    public SearchConditionPanelSimplified(
110
            FeatureStore store,
111
            JButton btnAddToAccumulatedFilter,
112
            JButton btnRemoveAccumulatedFilter,
113
            JButton btnViewAccumulatedFilter,
114
            JLabel lblField1,
115
            JLabel lblExtraFields1,
116
            JLabel lblRelationalOperator1,
117
            JComboBox cboValue1,
118
            JLabel lblLogicalOperators1,
119
            JLabel lblField2,
120
            JLabel lblExtraFields2,
121
            JLabel lblRelationalOperator2,
122
            JComboBox cboValue2,
123
            JLabel lblLogicalOperators2,
124
            JLabel lblField3,
125
            JLabel lblExtraFields3,
126
            JLabel lblRelationalOperator3,
127
            JComboBox cboValue3,
128
            JLabel lblLogicalOperators3,
129
            JLabel lblField4,
130
            JLabel lblExtraFields4,
131
            JLabel lblRelationalOperator4,
132
            JComboBox cboValue4,
133
            JLabel lblLogicalOperators4
134
    ) {
135
        this.changeListenerHelper = ToolsSwingLocator.getToolsSwingManager().createChangeListenerHelper();
136
        this.store = store;
137
        this.searchFieldsControllers = new ArrayList<>();
138
        SearchConditionFieldController controller = new SearchConditionFieldController(
139
                store,
140
                lblField1,
141
                lblExtraFields1,
142
                lblRelationalOperator1,
143
                cboValue1,
144
                lblLogicalOperators1
145
        );
146
        this.searchFieldsControllers.add(controller);
147
        controller = new SearchConditionFieldController(
148
                store,
149
                lblField2,
150
                lblExtraFields2,
151
                lblRelationalOperator2,
152
                cboValue2,
153
                lblLogicalOperators2
154
        );
155
        this.searchFieldsControllers.add(controller);
156
        controller = new SearchConditionFieldController(
157
                store,
158
                lblField3,
159
                lblExtraFields3,
160
                lblRelationalOperator3,
161
                cboValue3,
162
                lblLogicalOperators3
163
        );
164
        this.searchFieldsControllers.add(controller);
165
        controller = new SearchConditionFieldController(
166
                store,
167
                lblField4,
168
                lblExtraFields4,
169
                lblRelationalOperator4,
170
                cboValue4,
171
                null
172
        );
173
        this.searchFieldsControllers.add(controller);
174
        this.accumulatedFilter = null;
175
        this.btnAddAccumulatedFilter = btnAddToAccumulatedFilter;
176
        this.btnRemoveAccumulatedFilter = btnRemoveAccumulatedFilter;
177
        this.btnViewAccumulatedFilter = btnViewAccumulatedFilter;
178
        this.baseToolTip = this.btnAddAccumulatedFilter.getToolTipText();
179
        initComponents();
171 180
    }
172
    return valid;
173
  }
174
  
175
  private void initComponents() {
176
    try {
177
      Search search = (Search) ToolsLocator.getComplementsManager().get(
178
              Search.COMPLEMENT_MANE, this.store.getDefaultFeatureType()
179
      );
180
      List<Search.OrderedAttribute> orderedAttributes = search.getOrderedAttributes(
181
              Search.BASIC_TYPES_FILTER,
182
              Search.STR_INT_LONG_LABEL_ORDER,
183
              5
184
      );
185
      this.maxSearhFields = Integer.min(orderedAttributes.size(), 4);
186
      int n = 0;
187
      for (SearchConditionFieldController searchField : searchFields) {
188
        if (n < this.maxSearhFields) {
189
          searchField.setAttribute(orderedAttributes.get(n++).getDescriptor().getName());
190
        } else {
191
          searchField.setEnabled(false);
181

  
182
    @Override
183
    public SearchConditionPanelFactory getFactory() {
184
        return FACTORY;
185
    }
186

  
187
    @Override
188
    public boolean isValid(StringBuilder message) {
189
        boolean valid = true;
190
        for (SearchConditionFieldController searchField : searchFieldsControllers) {
191
            if (!searchField.isValid(message)) {
192
                valid = false;
193
            }
192 194
        }
193
      }
194
    } catch (DataException ex) {
195
      LOGGER.warn("Can't determine order of attributes", ex);
195
        return valid;
196 196
    }
197
    this.btnAddAccumulatedFilter.addActionListener((ActionEvent e) -> {
198
      addToAccumulatedFilter(this.getCurrentFilter());
199
    });
200
    this.btnRemoveAccumulatedFilter.addActionListener((ActionEvent e) -> {
201
      clearAccumulatedFilter();
202
    });
203
    this.btnViewAccumulatedFilter.addActionListener((ActionEvent e) -> {
204
      showAccumulatedFilter();
205
    });
206
    this.btnRemoveAccumulatedFilter.setEnabled(false);
207
    this.btnViewAccumulatedFilter.setEnabled(false);
208
    this.btnAddAccumulatedFilter.setEnabled(true);
209
  }
210 197

  
211
  public void addToAccumulatedFilter(String filter) {
212
    if( StringUtils.isBlank(filter) ) {
213
      return;
198
    private void initComponents() {
199
        try {
200
            Search search = (Search) ToolsLocator.getComplementsManager().get(
201
                    Search.COMPLEMENT_MANE, this.store.getDefaultFeatureType()
202
            );
203
            List<Search.OrderedAttribute> orderedAttributes = search.getOrderedAttributes(
204
                    Search.BASIC_TYPES_FILTER,
205
                    Search.STR_INT_LONG_LABEL_ORDER,
206
                    5
207
            );
208
            this.maxSearhFields = Integer.min(orderedAttributes.size(), 4);
209
            int n = 0;
210
            for (SearchConditionFieldController searchField : searchFieldsControllers) {
211
                if (n < this.maxSearhFields) {
212
                    searchField.setAttribute(orderedAttributes.get(n++).getDescriptor().getName());
213
                } else {
214
                    searchField.setEnabled(false);
215
                }
216
            }
217
        } catch (DataException ex) {
218
            LOGGER.warn("Can't determine order of attributes", ex);
219
        }
220
        this.btnAddAccumulatedFilter.addActionListener((ActionEvent e) -> {
221
            addToAccumulatedFilter(this.getCurrentFilter());
222
        });
223
        this.btnRemoveAccumulatedFilter.addActionListener((ActionEvent e) -> {
224
            clearAccumulatedFilter();
225
        });
226
        this.btnViewAccumulatedFilter.addActionListener((ActionEvent e) -> {
227
            showAccumulatedFilter();
228
        });
229
        this.btnRemoveAccumulatedFilter.setEnabled(false);
230
        this.btnViewAccumulatedFilter.setEnabled(false);
231
        this.btnAddAccumulatedFilter.setEnabled(true);
214 232
    }
215
    String theAccumulatedFilter = this.accumulatedFilter;
216
    this.clear();
217
    if( !StringUtils.isBlank(theAccumulatedFilter) ) {
218
      filter = "( " + theAccumulatedFilter + ") AND \n( " + filter + ")";
233

  
234
    public void addToAccumulatedFilter(String filter) {
235
        if (StringUtils.isBlank(filter)) {
236
            return;
237
        }
238
        String theAccumulatedFilter = this.accumulatedFilter;
239
        this.clear();
240
        if (!StringUtils.isBlank(theAccumulatedFilter)) {
241
            filter = "( " + theAccumulatedFilter + ") AND \n( " + filter + ")";
242
        }
243
        this.btnAddAccumulatedFilter.setToolTipText("<html><b>" + this.baseToolTip + "</b><br><br>" + filter.replaceAll("\\n", "<br>") + "</html>");
244
        this.accumulatedFilter = filter;
245
        this.btnRemoveAccumulatedFilter.setEnabled(true);
246
        this.btnViewAccumulatedFilter.setEnabled(true);
247
        this.changeListenerHelper.fireEvent();
219 248
    }
220
    this.btnAddAccumulatedFilter.setToolTipText("<html><b>"+this.baseToolTip + "</b><br><br>" + filter.replaceAll("\\n", "<br>")+"</html>");
221
    this.accumulatedFilter = filter;
222
    this.btnRemoveAccumulatedFilter.setEnabled(true);
223
    this.btnViewAccumulatedFilter.setEnabled(true);
224
    this.changeListenerHelper.fireEvent();
225
  }
226
  
227
  public void clearAccumulatedFilter() {
228
    this.accumulatedFilter = null;
229
    this.btnRemoveAccumulatedFilter.setEnabled(false);
230
    this.btnViewAccumulatedFilter.setEnabled(false);
231
    this.btnAddAccumulatedFilter.setToolTipText(this.baseToolTip);
232
    this.changeListenerHelper.fireEvent();
233
  }
234
  
235
  public void showAccumulatedFilter() {
236
    WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
237
    DataSwingManager manager = DALSwingLocator.getDataSwingManager();
238
    I18nManager i18n = ToolsLocator.getI18nManager();
239 249

  
240
    JExpressionBuilder panel = manager.createQueryFilterExpresion(store);
241
    panel.setExpression(ExpressionUtils.createExpression(this.getAccumulatedFilter()));
242
    Dialog dialog = winmanager.createDialog(
243
            panel.asJComponent(),
244
            i18n.getTranslation("_Expression_builder"),
245
            null, 
246
            WindowManager_v2.BUTTONS_OK_CANCEL
247
    );
248
    dialog.addActionListener((ActionEvent e) -> {
249
      if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
250
        this.clearAccumulatedFilter();
251
        this.addToAccumulatedFilter(panel.getExpression().getPhrase());
252
      }
253
    });
254
    dialog.show(WindowManager.MODE.DIALOG);
255
  }
256
  
257
  @Override
258
  public void setEnabled(boolean enabled) {
259
    if (this.searchFields == null) {
260
      initComponents();
250
    public void clearAccumulatedFilter() {
251
        this.accumulatedFilter = null;
252
        this.btnRemoveAccumulatedFilter.setEnabled(false);
253
        this.btnViewAccumulatedFilter.setEnabled(false);
254
        this.btnAddAccumulatedFilter.setToolTipText(this.baseToolTip);
255
        this.changeListenerHelper.fireEvent();
261 256
    }
262
    int n = 0;
263
    for (SearchConditionFieldController searchField : searchFields) {
264
      if (n < this.maxSearhFields) {
265
        searchField.setEnabled(enabled);
266
      } else {
267
        searchField.setEnabled(false);
268
      }
269
      n++;
257

  
258
    public void showAccumulatedFilter() {
259
        WindowManager_v2 winmanager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
260
        DataSwingManager manager = DALSwingLocator.getDataSwingManager();
261
        I18nManager i18n = ToolsLocator.getI18nManager();
262

  
263
        JExpressionBuilder panel = manager.createQueryFilterExpresion(store);
264
        panel.setExpression(ExpressionUtils.createExpression(this.getAccumulatedFilter()));
265
        Dialog dialog = winmanager.createDialog(
266
                panel.asJComponent(),
267
                i18n.getTranslation("_Expression_builder"),
268
                null,
269
                WindowManager_v2.BUTTONS_OK_CANCEL
270
        );
271
        dialog.addActionListener((ActionEvent e) -> {
272
            if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
273
                this.clearAccumulatedFilter();
274
                this.addToAccumulatedFilter(panel.getExpression().getPhrase());
275
            }
276
        });
277
        dialog.show(WindowManager.MODE.DIALOG);
270 278
    }
271
  }
272 279

  
273
  @Override
274
  public void clear() {
275
    if (this.searchFields == null) {
276
      return;
280
    @Override
281
    public void setEnabled(boolean enabled) {
282
        if (this.searchFieldsControllers == null) {
283
            initComponents();
284
        }
285
        int n = 0;
286
        for (SearchConditionFieldController searchField : searchFieldsControllers) {
287
            if (n < this.maxSearhFields) {
288
                searchField.setEnabled(enabled);
289
            } else {
290
                searchField.setEnabled(false);
291
            }
292
            n++;
293
        }
277 294
    }
278
    for (SearchConditionFieldController searchField : searchFields) {
279
      searchField.clear();
295

  
296
    @Override
297
    public void clear() {
298
        if (this.searchFieldsControllers == null) {
299
            return;
300
        }
301
        for (SearchConditionFieldController searchField : searchFieldsControllers) {
302
            searchField.clear();
303
        }
304
        this.clearAccumulatedFilter();
280 305
    }
281
    this.clearAccumulatedFilter();
282
  }
283 306

  
284
  @Override
285
  public Expression get() {
286
    String currentFilter = this.getCurrentFilter();
287
    if( StringUtils.isBlank(accumulatedFilter) ) {
288
      if( StringUtils.isBlank(currentFilter) ) {
289
        return null;
290
      }
291
      return ExpressionUtils.createExpression(currentFilter);
307
    @Override
308
    public Expression get() {
309
        String currentFilter = this.getCurrentFilter();
310
        if (StringUtils.isBlank(accumulatedFilter)) {
311
            if (StringUtils.isBlank(currentFilter)) {
312
                return null;
313
            }
314
            return ExpressionUtils.createExpression(currentFilter);
315
        }
316
        if (StringUtils.isBlank(currentFilter)) {
317
            return ExpressionUtils.createExpression(accumulatedFilter);
318
        }
319
        return ExpressionUtils.createExpression("( " + accumulatedFilter + " ) AND ( " + currentFilter + " )");
292 320
    }
293
    if( StringUtils.isBlank(currentFilter) ) {
294
      return ExpressionUtils.createExpression(accumulatedFilter);
321

  
322
    public String getAccumulatedFilter() {
323
        return this.accumulatedFilter;
295 324
    }
296
    return ExpressionUtils.createExpression("( " + accumulatedFilter + " ) AND ( "+ currentFilter +" )");
297
  }
298
  
299
  public String getAccumulatedFilter() {
300
    return this.accumulatedFilter;
301
  }
302
  
303
  public String getCurrentFilter() {
304
    ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
305
    String relational = OPERATOR_OR;
306
    for (SearchConditionFieldController searchField : searchFields) {
307
      ExpressionBuilder.Value cond = searchField.getFilter();
308
      if( cond != null ) {
309
        if (relational.equals(OPERATOR_AND)) {
310
          builder.and(cond);
311
        } else {
312
          builder.or(cond);
325

  
326
    public String getCurrentFilter() {
327
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
328
        String relational = OPERATOR_OR;
329
        for (SearchConditionFieldController searchField : searchFieldsControllers) {
330
            ExpressionBuilder.Value cond = searchField.getFilter();
331
            if (cond != null) {
332
                if (relational.equals(OPERATOR_AND)) {
333
                    builder.and(cond);
334
                } else {
335
                    builder.or(cond);
336
                }
337
                relational = searchField.getLogicalOperator();
338
            }
313 339
        }
314
        relational = searchField.getLogicalOperator();
315
      }
340
        if (builder.isEmpty()) {
341
            return null;
342
        }
343
        return builder.toString();
316 344
    }
317
    if (builder.isEmpty()) {
318
      return null;
345

  
346
    public JsonObject toJson() {
347
        JsonObjectBuilder builder = Json.createObjectBuilder();
348

  
349
        int i = 0;
350
        for (SearchConditionFieldController searchField : searchFieldsControllers) {
351
            JsonObject jsonState = searchField.toJson();
352
            String name = DataTypeUtils.toString(i);
353
            builder.add(name, jsonState);
354
            i++;
355
        }
356

  
357
        JsonObject jsonBuild = builder.build();
358
        return jsonBuild;
319 359
    }
320
    return builder.toString();
321
  }
322 360

  
323
  @Override
324
  public boolean set(Expression filter) {
325
    try {
326
      Code code = filter.getCode();
327
      if (code.code() == Code.CALLABLE) {
328
        SearchConditionFieldController searchField = this.searchFields.get(0);
329
        Code.Callable caller = (Code.Callable) code;
330
        if (searchField.isAValidRelationOperator(caller.name())) {
331
          Code op1 = caller.parameters().get(0);
332
          Code op2 = caller.parameters().get(1);
333
          if (op1.code() == Code.IDENTIFIER && op2.code() == Code.CONSTANT) {
334
            if (searchField.setAttribute(((Code.Identifier) op1).name()) >= 0) {
335
              searchField.setRelationalOperator(caller.name());
336
              searchField.setValue(((Code.Constant) op2).value());
337
              return true;
361
    public void fromJson(JsonObject json) {
362
        if (json==null) {
363
            return;
364
        }
365
        int i = 0;
366
        for (SearchConditionFieldController searchFieldController : searchFieldsControllers) {
367
            String index = DataTypeUtils.toString(i);
368
            JsonObject jsonField = json.getJsonObject(index);
369
            searchFieldController.fromJson(jsonField);
370
            i++;
371
        }
372
    }
373

  
374
    @Override
375
    public boolean set(Expression filter) {
376
        try {
377
            Code code = filter.getCode();
378
            if (code.code() == Code.CALLABLE) {
379
                SearchConditionFieldController searchField = this.searchFieldsControllers.get(0);
380
                Code.Callable caller = (Code.Callable) code;
381
                if (searchField.isAValidRelationOperator(caller.name())) {
382
                    Code op1 = caller.parameters().get(0);
383
                    Code op2 = caller.parameters().get(1);
384
                    if (op1.code() == Code.IDENTIFIER && op2.code() == Code.CONSTANT) {
385
                        if (searchField.setAttribute(((Code.Identifier) op1).name()) >= 0) {
386
                            searchField.setRelationalOperator(caller.name());
387
                            searchField.setValue(((Code.Constant) op2).value());
388
                            return true;
389
                        }
390
                    }
391
                }
338 392
            }
339
          }
393
            return false;
394
        } finally {
395
            this.changeListenerHelper.fireEvent();
340 396
        }
341
      }
342
      return false;
343
    } finally {
344
      this.changeListenerHelper.fireEvent();
345 397
    }
346
  }
347 398

  
348
  @Override
349
  public void addChangeListener(ChangeListener listener) {
350
    this.changeListenerHelper.addChangeListener(listener);
351
  }
399
    @Override
400
    public void addChangeListener(ChangeListener listener) {
401
        this.changeListenerHelper.addChangeListener(listener);
402
    }
352 403

  
353
  @Override
354
  public ChangeListener[] getChangeListeners() {
355
    return this.changeListenerHelper.getChangeListeners();
356
  }
404
    @Override
405
    public ChangeListener[] getChangeListeners() {
406
        return this.changeListenerHelper.getChangeListeners();
407
    }
357 408

  
358
  @Override
359
  public void removeChangeListener(ChangeListener listener) {
360
    this.changeListenerHelper.removeChangeListener(listener);
361
  }
409
    @Override
410
    public void removeChangeListener(ChangeListener listener) {
411
        this.changeListenerHelper.removeChangeListener(listener);
412
    }
362 413

  
363
  @Override
364
  public void removeAllChangeListener() {
365
    this.changeListenerHelper.removeAllChangeListener();
366
  }
414
    @Override
415
    public void removeAllChangeListener() {
416
        this.changeListenerHelper.removeAllChangeListener();
417
    }
367 418

  
368
  @Override
369
  public boolean hasChangeListeners() {
370
    return this.changeListenerHelper.hasChangeListeners();
371
  }
419
    @Override
420
    public boolean hasChangeListeners() {
421
        return this.changeListenerHelper.hasChangeListeners();
422
    }
372 423
}

Also available in: Unified diff