1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sourceforge.jhunters.pool.ui;
18
19 import java.time.LocalDate;
20 import java.util.Iterator;
21
22 import org.w3c.dom.Element;
23
24 import javafx.collections.FXCollections;
25 import javafx.collections.ObservableList;
26 import javafx.collections.transformation.FilteredList;
27 import javafx.geometry.Pos;
28 import javafx.scene.control.TableColumn;
29 import net.sourceforge.jhunters.pool.data.Competition;
30 import net.sourceforge.jhunters.pool.data.DataParser;
31 import net.sourceforge.jhunters.pool.data.DataSet;
32 import net.sourceforge.jhunters.pool.data.Fixture;
33 import net.sourceforge.jhunters.pool.data.Fixture.FixtureField;
34 import net.sourceforge.jhunters.pool.data.Result;
35 import net.sourceforge.jhunters.pool.ui.FixtureSetTable.PlayerCellValueFactory;
36 import net.sourceforge.jhunters.pool.ui.ReportPanel.TableSource;
37 import net.sourceforge.jhunters.pool.ui.TableUtils.FieldTableColumn;
38 import net.sourceforge.jhunters.pool.ui.TableUtils.FieldTableView;
39
40
41
42
43 public class OutstandingTable
44 extends FieldTableView<Fixture, FixtureField>
45 implements TableSource {
46
47
48
49 private static final int WIDTH_PLAYER = 200;
50
51
52
53
54 private static final int WIDTH_RESULT = 60;
55
56
57
58
59 private static final String OUTSTANDING_FORMAT = GuiResource.REPORT_OUTSTANDING_TITLE.getValue();
60
61
62
63
64 private static final String OUTSTANDING_SUBFORMAT = GuiResource.REPORT_OUTSTANDING_SUBTITLE.getValue();
65
66
67
68
69 private DataSet theDataSet;
70
71
72
73
74 private FilteredList<Fixture> theList;
75
76
77
78
79 protected OutstandingTable() {
80
81 setEditable(true);
82
83
84 ObservableList<TableColumn<Fixture, ?>> myColumns = getColumns();
85
86
87 TableColumn<Fixture, LocalDate> myDateCol = new FieldTableColumn<Fixture, FixtureField, LocalDate>(FixtureField.DATE);
88 myDateCol.setCellValueFactory(p -> p.getValue().dateProperty());
89 myDateCol.setCellFactory(TableUtils.dateCellFactory());
90 myDateCol.setSortable(false);
91 myDateCol.setEditable(false);
92 myDateCol.setMinWidth(FixtureSetTable.WIDTH_DATE);
93 myColumns.add(myDateCol);
94
95
96 TableColumn<Fixture, String> myHomeCol = new FieldTableColumn<Fixture, FixtureField, String>(FixtureField.HOME);
97 myHomeCol.setCellValueFactory(new PlayerCellValueFactory(true));
98 myHomeCol.setCellFactory(TableUtils.itemCellFactory(Pos.CENTER_RIGHT));
99 myHomeCol.setMinWidth(WIDTH_PLAYER);
100 myHomeCol.setSortable(false);
101 myHomeCol.setEditable(false);
102 myColumns.add(myHomeCol);
103
104
105 TableColumn<Fixture, Result> myResultCol = new FieldTableColumn<Fixture, FixtureField, Result>(FixtureField.RESULT);
106 myResultCol.setCellValueFactory(p -> p.getValue().resultProperty());
107 myResultCol.setCellFactory(TableUtils.enumCellFactory(Result.class));
108 myResultCol.setSortable(false);
109 myResultCol.setMinWidth(WIDTH_RESULT);
110 myColumns.add(myResultCol);
111
112
113 TableColumn<Fixture, String> myAwayCol = new FieldTableColumn<Fixture, FixtureField, String>(FixtureField.AWAY);
114 myAwayCol.setCellValueFactory(new PlayerCellValueFactory(false));
115 myAwayCol.setCellFactory(TableUtils.itemCellFactory(Pos.CENTER_LEFT));
116 myAwayCol.setMinWidth(WIDTH_PLAYER);
117 myAwayCol.setSortable(false);
118 myAwayCol.setEditable(false);
119 myColumns.add(myAwayCol);
120 }
121
122
123
124
125
126 protected void setData(final DataSet pData) {
127
128 theDataSet = pData;
129 }
130
131
132
133
134
135 protected void setCompetition(final Competition pCompetition) {
136
137 ObservableList<Fixture> myList = pCompetition != null
138 ? pCompetition.getOutstandingFixtures(theDataSet.getLastChange())
139 : FXCollections.observableArrayList();
140
141
142 theList = myList.filtered(p -> p.getResult() == null);
143 setItems(theList);
144 }
145
146 @Override
147 public void buildReport(final ReportBuilder pBuilder) {
148
149 buildMainReport(pBuilder);
150 }
151
152 @Override
153 public void createWeb(final ReportBuilder pBuilder) {
154
155 buildMainReport(pBuilder);
156 }
157
158
159
160
161
162 private void buildMainReport(final ReportBuilder pBuilder) {
163
164 if (pBuilder.isReset()) {
165
166 pBuilder.setHeading(OUTSTANDING_FORMAT, DataParser.formatDate(LocalDate.now()));
167 } else {
168
169 pBuilder.setLineSpace();
170
171
172 pBuilder.setHeading(OUTSTANDING_SUBFORMAT);
173 }
174
175
176 pBuilder.newTable();
177
178
179 pBuilder.setColumnHeading(FixtureField.DATE.toString());
180 pBuilder.setColumnHeading(FixtureField.HOME.toString());
181 pBuilder.setColumnHeading(FixtureField.RESULT.toString());
182 pBuilder.setColumnHeading(FixtureField.AWAY.toString());
183
184
185 boolean bFirst = true;
186 Iterator<Fixture> myIterator = theList.iterator();
187 while (myIterator.hasNext()) {
188 Fixture myFixture = myIterator.next();
189
190
191 Element myRow = pBuilder.newRow();
192
193
194 if (bFirst) {
195 pBuilder.addClassAttribute(myRow, ReportBuilder.CLASS_SEPARATOR);
196 bFirst = false;
197 }
198
199
200 pBuilder.setCellDate(myFixture.dateProperty().getValue());
201 pBuilder.setCellPlayerRight(myFixture.homePlayerProperty().getValue());
202 pBuilder.setCellResult(myFixture.resultProperty().getValue());
203 pBuilder.setCellPlayerLeft(myFixture.awayPlayerProperty().getValue());
204 }
205 }
206 }