View Javadoc
1   /*******************************************************************************
2    * jhunters: Pool League
3    * Copyright 2015 Tony Washer
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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   * Outstanding Fixtures Table.
42   */
43  public class OutstandingTable
44          extends FieldTableView<Fixture, FixtureField>
45          implements TableSource {
46      /**
47       * Width for player.
48       */
49      private static final int WIDTH_PLAYER = 200;
50  
51      /**
52       * Width for result.
53       */
54      private static final int WIDTH_RESULT = 60;
55  
56      /**
57       * Outstanding fixture format.
58       */
59      private static final String OUTSTANDING_FORMAT = GuiResource.REPORT_OUTSTANDING_TITLE.getValue();
60  
61      /**
62       * Outstanding fixture format.
63       */
64      private static final String OUTSTANDING_SUBFORMAT = GuiResource.REPORT_OUTSTANDING_SUBTITLE.getValue();
65  
66      /**
67       * Current dataSet.
68       */
69      private DataSet theDataSet;
70  
71      /**
72       * Current fixture list.
73       */
74      private FilteredList<Fixture> theList;
75  
76      /**
77       * Constructor.
78       */
79      protected OutstandingTable() {
80          /* Allow editing */
81          setEditable(true);
82  
83          /* Access column list */
84          ObservableList<TableColumn<Fixture, ?>> myColumns = getColumns();
85  
86          /* Create the date column */
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          /* Create the home column */
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         /* Create the result column */
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         /* Create the away column */
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      * Set dataSet.
124      * @param pData the dataSet
125      */
126     protected void setData(final DataSet pData) {
127         /* Store the DataSet */
128         theDataSet = pData;
129     }
130 
131     /**
132      * Set the competition.
133      * @param pCompetition the competition
134      */
135     protected void setCompetition(final Competition pCompetition) {
136         /* Access the fixture list */
137         ObservableList<Fixture> myList = pCompetition != null
138                                                               ? pCompetition.getOutstandingFixtures(theDataSet.getLastChange())
139                                                               : FXCollections.observableArrayList();
140 
141         /* Declare the list */
142         theList = myList.filtered(p -> p.getResult() == null);
143         setItems(theList);
144     }
145 
146     @Override
147     public void buildReport(final ReportBuilder pBuilder) {
148         /* Build the main report */
149         buildMainReport(pBuilder);
150     }
151 
152     @Override
153     public void createWeb(final ReportBuilder pBuilder) {
154         /* Build the main report */
155         buildMainReport(pBuilder);
156     }
157 
158     /**
159      * build the main report.
160      * @param pBuilder the builder
161      */
162     private void buildMainReport(final ReportBuilder pBuilder) {
163         /* Handle differing headers */
164         if (pBuilder.isReset()) {
165             /* Set the heading */
166             pBuilder.setHeading(OUTSTANDING_FORMAT, DataParser.formatDate(LocalDate.now()));
167         } else {
168             /* Add some spaces */
169             pBuilder.setLineSpace();
170 
171             /* Set the heading */
172             pBuilder.setHeading(OUTSTANDING_SUBFORMAT);
173         }
174 
175         /* Create a new table */
176         pBuilder.newTable();
177 
178         /* Set the column headings */
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         /* Loop through the fixtures */
185         boolean bFirst = true;
186         Iterator<Fixture> myIterator = theList.iterator();
187         while (myIterator.hasNext()) {
188             Fixture myFixture = myIterator.next();
189 
190             /* Create a new row */
191             Element myRow = pBuilder.newRow();
192 
193             /* Add separator for first row */
194             if (bFirst) {
195                 pBuilder.addClassAttribute(myRow, ReportBuilder.CLASS_SEPARATOR);
196                 bFirst = false;
197             }
198 
199             /* Set the cells */
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 }