1 package fr.ifremer.dali.ui.swing.content.manage.rule.controlrule.precondition;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import fr.ifremer.dali.decorator.DecoratorService;
25 import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
26 import fr.ifremer.dali.dto.referential.pmfm.QualitativeValueDTO;
27 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
28 import fr.ifremer.quadrige3.ui.swing.table.AbstractTableModel;
29 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
30 import jaxx.runtime.validator.swing.SwingValidator;
31 import org.apache.commons.logging.Log;
32 import org.apache.commons.logging.LogFactory;
33 import org.jdesktop.swingx.table.TableColumnExt;
34 import org.nuiton.jaxx.application.swing.util.Cancelable;
35
36 import javax.swing.SortOrder;
37 import javax.swing.SwingUtilities;
38 import javax.swing.border.TitledBorder;
39 import java.util.ArrayList;
40 import java.util.Collection;
41
42
43
44
45 public class RulePreconditionUIHandler
46 extends AbstractDaliTableUIHandler<RulePreconditionRowModel, RulePreconditionUIModel, RulePreconditionUI>
47 implements Cancelable {
48
49 private static final Log LOG = LogFactory.getLog(RulePreconditionUIHandler.class);
50 public static final String LIST = "list";
51 public static final String DOUBLE_LIST = "doubleList";
52
53 @Override
54 public void beforeInit(RulePreconditionUI ui) {
55 super.beforeInit(ui);
56
57 ui.setContextValue(new RulePreconditionUIModel());
58 }
59
60 @Override
61 public void afterInit(RulePreconditionUI rulePreconditionUI) {
62 initUI(rulePreconditionUI);
63
64 initTable();
65
66
67 initBeanList(rulePreconditionUI.getUsedRuleQVDoubleList(), null, new ArrayList<>(), 100);
68 rulePreconditionUI.getUsedRuleQVDoubleList().getHandler().addAdditionalControls();
69
70 rulePreconditionUI.getUsedRuleQVList().setCellRenderer(newListCellRender(QualitativeValueDTO.class));
71
72 initListeners();
73
74 registerValidators(getValidator());
75 listenValidatorValid(getValidator(), getModel());
76 }
77
78 private void initTable() {
79
80 TableColumnExt nameCol = addColumn(RulePreconditionTableModel.NAME);
81 nameCol.setSortable(true);
82
83 RulePreconditionTableModel tableModel = new RulePreconditionTableModel(getTable().getColumnModel());
84 getTable().setModel(tableModel);
85
86 initTable(getTable(), true);
87
88 getTable().setSortOrder(RulePreconditionTableModel.NAME, SortOrder.ASCENDING);
89 getTable().setHorizontalScrollEnabled(false);
90 getTable().setEditable(false);
91 }
92
93 private void initListeners() {
94
95 getModel().addPropertyChangeListener(evt -> {
96
97 switch (evt.getPropertyName()) {
98
99 case RulePreconditionUIModel.PROPERTY_BASE_PMFM:
100 initBasePmfm();
101 break;
102
103 case RulePreconditionUIModel.PROPERTY_USED_PMFM:
104 initUsedPmfm();
105 break;
106
107 case RulePreconditionUIModel.PROPERTY_SINGLE_ROW_SELECTED:
108 updateLists();
109 break;
110 }
111 });
112 }
113
114 private void initBasePmfm() {
115 PmfmDTO basePmfm = getModel().getBasePmfm();
116 if (basePmfm == null) {
117 LOG.error("base PMFM should be set");
118 return;
119 }
120 ((TitledBorder) getUI().getBaseRulePanel().getBorder()).setTitle(decorate(basePmfm, DecoratorService.NAME));
121 getUI().getBaseRulePanel().setToolTipText(decorate(basePmfm));
122
123
124 getModel().setBeans(getContext().getReferentialService().getUniquePmfmFromPmfm(basePmfm).getQualitativeValues());
125
126
127 if (getModel().getRowCount() > 0)
128 SwingUtilities.invokeLater(() -> selectCell(0, null));
129 }
130
131 private void initUsedPmfm() {
132 PmfmDTO usedPmfm = getModel().getUsedPmfm();
133 if (usedPmfm == null) {
134 LOG.error("used PMFM should be set");
135 return;
136 }
137 ((TitledBorder) getUI().getUsedRulePanel().getBorder()).setTitle(decorate(usedPmfm, DecoratorService.NAME));
138 getUI().getUsedRulePanel().setToolTipText(decorate(usedPmfm));
139
140
141 getUI().getUsedRuleQVDoubleList().getHandler().setUniverse(
142 getContext().getReferentialService().getUniquePmfmFromPmfm(usedPmfm).getQualitativeValues()
143 );
144 }
145
146 private void updateLists() {
147
148 if (getModel().getSingleSelectedRow() != null) {
149 getModel().setAdjusting(true);
150 Collection<QualitativeValueDTO> qualitativeValues = getModel().getQvMap().get(getModel().getSingleSelectedRow().toBean());
151 getUI().getUsedRuleQVDoubleList().getHandler().setSelected(
152 new ArrayList<>(qualitativeValues)
153 );
154 getUI().getUsedRuleQVList().setListData(qualitativeValues.toArray(new QualitativeValueDTO[0]));
155 getModel().setAdjusting(false);
156 }
157 }
158
159 @Override
160 public SwingValidator<RulePreconditionUIModel> getValidator() {
161 return getUI().getValidator();
162 }
163
164 public void setEnabled(boolean enabled) {
165 if (enabled)
166 getUI().getSwitchPanelLayout().setSelected(DOUBLE_LIST);
167 else
168 getUI().getSwitchPanelLayout().setSelected(LIST);
169
170 getUI().getValidButton().setEnabled(enabled);
171 }
172
173 public void valid() {
174 if (getModel().isValid()) {
175 stopListenValidatorValid(getValidator());
176 closeDialog();
177 }
178 }
179
180 @Override
181 public void cancel() {
182 getModel().setModify(false);
183
184 stopListenValidatorValid(getValidator());
185 closeDialog();
186 }
187
188 @Override
189 public AbstractTableModel<RulePreconditionRowModel> getTableModel() {
190 return (RulePreconditionTableModel) getTable().getModel();
191 }
192
193 @Override
194 public SwingTable getTable() {
195 return getUI().getBaseRuleQVTable();
196 }
197 }