1 package fr.ifremer.dali.ui.swing.content.manage.program.strategiesByLocation.programs;
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 import fr.ifremer.dali.dto.DaliBeans;
27 import fr.ifremer.dali.dto.configuration.programStrategy.ProgramDTO;
28 import fr.ifremer.dali.dto.referential.LocationDTO;
29 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableModel;
30 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
31 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
32 import org.jdesktop.swingx.table.TableColumnExt;
33
34 import javax.swing.BorderFactory;
35
36 import static org.nuiton.i18n.I18n.t;
37
38
39
40
41 public class StrategiesProgrammeTableUIHandler extends AbstractDaliTableUIHandler<StrategiesProgrammeTableRowModel, StrategiesProgrammeTableUIModel, StrategiesProgrammeTableUI> {
42
43
44
45
46 public StrategiesProgrammeTableUIHandler() {
47 super(StrategiesProgrammeTableRowModel.PROPERTY_START_DATE,
48 StrategiesProgrammeTableRowModel.PROPERTY_END_DATE);
49 }
50
51
52 @Override
53 public AbstractDaliTableModel<StrategiesProgrammeTableRowModel> getTableModel() {
54 return (StrategiesProgrammeTableModel) getTable().getModel();
55 }
56
57
58 @Override
59 public SwingTable getTable() {
60 return getUI().getTableau();
61 }
62
63
64 @Override
65 public void beforeInit(final StrategiesProgrammeTableUI ui) {
66 super.beforeInit(ui);
67
68
69 final StrategiesProgrammeTableUIModel model = new StrategiesProgrammeTableUIModel();
70 ui.setContextValue(model);
71 }
72
73
74 @Override
75 public void afterInit(StrategiesProgrammeTableUI ui) {
76
77
78 initUI(ui);
79
80
81 initialiserTableau();
82 }
83
84
85 @Override
86 protected boolean isRowValid(final StrategiesProgrammeTableRowModel row) {
87 row.getErrors().clear();
88 return super.isRowValid(row) && isDatesValid(row);
89 }
90
91 private boolean isDatesValid(StrategiesProgrammeTableRowModel row) {
92
93
94 if (row.getStartDate() == null && row.getEndDate() != null) {
95 DaliBeans.addError(row, t("dali.program.location.startDate.null"), StrategiesProgrammeTableRowModel.PROPERTY_START_DATE);
96
97 } else if (row.getStartDate() != null && row.getEndDate() == null) {
98 DaliBeans.addError(row, t("dali.program.location.endDate.null"), StrategiesProgrammeTableRowModel.PROPERTY_END_DATE);
99
100 } else if (row.getStartDate() != null && row.getEndDate() != null) {
101
102 if (row.getStartDate().isAfter(row.getEndDate())) {
103 DaliBeans.addError(row, t("dali.program.location.endDate.before"), StrategiesProgrammeTableRowModel.PROPERTY_END_DATE);
104 } else {
105
106
107 long surveysCount = getContext().getObservationService().countSurveysWithProgramLocationAndOutsideDates(row, getModel().getLocationId());
108 if (surveysCount > 0) {
109 DaliBeans.addError(row, t("dali.program.location.period.surveyOutsidePeriod"),
110 StrategiesProgrammeTableRowModel.PROPERTY_START_DATE, StrategiesProgrammeTableRowModel.PROPERTY_END_DATE);
111 }
112 }
113 }
114
115 return row.getErrors().isEmpty();
116 }
117
118
119
120
121
122
123
124 public void load(final ProgramDTO programme, final LocationDTO lieu) {
125
126
127 getModel().setBeans(getContext().getProgramStrategyService().getStrategyUsageByProgramAndLocationId(
128 programme.getCode(), lieu.getId()));
129
130 getModel().setLocationId(lieu.getId());
131 getModel().setModify(false);
132 recomputeRowsValidState(true);
133
134
135 getUI().setBorder(BorderFactory.createTitledBorder(
136 t("dali.program.strategies.program.titre",
137 programme.getCode(), lieu.getName())));
138 }
139
140
141
142
143 private void initialiserTableau() {
144
145
146 final SwingTable table = getTable();
147
148
149 final TableColumnExt colonneLibelle = addColumn(
150 StrategiesProgrammeTableModel.NAME);
151 colonneLibelle.setSortable(true);
152 colonneLibelle.setMinWidth(200);
153
154
155 final TableColumnExt colonneStartDate = addLocalDatePickerColumnToModel(
156 StrategiesProgrammeTableModel.START_DATE, getConfig().getDateFormat());
157 colonneStartDate.setSortable(true);
158 colonneStartDate.setMinWidth(100);
159
160
161 final TableColumnExt colonneEndDate = addLocalDatePickerColumnToModel(
162 StrategiesProgrammeTableModel.END_DATE, getConfig().getDateFormat());
163 colonneEndDate.setSortable(true);
164 colonneEndDate.setMinWidth(100);
165
166
167 final StrategiesProgrammeTableModel tableModel = new StrategiesProgrammeTableModel(getTable().getColumnModel());
168 table.setModel(tableModel);
169
170
171 initTable(table, true);
172
173
174 colonneLibelle.setHideable(false);
175 colonneStartDate.setHideable(false);
176 colonneEndDate.setHideable(false);
177
178
179 colonneLibelle.setEditable(false);
180 colonneStartDate.setEditable(true);
181 colonneEndDate.setEditable(true);
182 }
183 }