package polly.rx.httpv2;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Date;
import polly.rx.MSG;
import polly.rx.core.TrainManagerV2;
import polly.rx.entities.TrainEntityV3;
import de.skuzzle.polly.http.api.HttpEvent;
import de.skuzzle.polly.sdk.Types;
import de.skuzzle.polly.sdk.User;
import de.skuzzle.polly.sdk.httpv2.html.AbstractHTMLTableModel;
import de.skuzzle.polly.sdk.time.Milliseconds;
import de.skuzzle.polly.sdk.util.DirectedComparator.SortOrder;
public class TrainingTableModel extends AbstractHTMLTableModel<TrainEntityV3> {
private final static String HEADER[] = MSG.trainingModelColumns.split(","); //$NON-NLS-1$
protected final static String FOR_USER = "forUser"; //$NON-NLS-1$
protected final TrainManagerV2 trainManager;
public TrainingTableModel(TrainManagerV2 trainManager) {
this.trainManager = trainManager;
}
@Override
public boolean isFilterable(int column) {
return true;
}
@Override
public boolean isSortable(int column) {
return true;
}
@Override
public int getDefaultSortColumn() {
return HEADER.length - 1;
}
@Override
public SortOrder getDefaultSortOrder() {
return SortOrder.DESCENDING;
}
@Override
public String getHeader(int column) {
return HEADER[column];
}
@Override
public int getColumnCount() {
return HEADER.length;
}
@Override
public Object getCellValue(int column, TrainEntityV3 element) {
switch (column) {
case 0:
final User trainer = this.trainManager.getTrainer(element.getTrainerId());
return trainer.getName();
case 1: return element.getType();
case 2: return element.getCurrentValue();
case 3: return element.getFactor();
case 4: return element.getCosts();
case 5: return element.getFactor() * element.getCosts();
case 6:
final long end = element.getTrainFinished().getTime();
final long start = element.getTrainStart().getTime();
return new Types.TimespanType(Milliseconds.toSeconds(end - start));
case 7: return element.getTrainStart();
}
return null;
}
@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 3: return Double.class;
case 4: return Integer.class;
case 5: return Double.class;
case 6: return Types.class;
case 7: return Date.class;
default:
break;
}
return super.getColumnClass(column);
}
@Override
public Map<String, String> getRequestParameters(HttpEvent e) {
final Map<String, String> m = new HashMap<>();
m.put(FOR_USER, e.get(FOR_USER));
return m;
}
@Override
public List<TrainEntityV3> getData(HttpEvent e) {
final String forUser = e.get(FOR_USER);
return this.trainManager.getClosedTrains(forUser).getTrains();
}
@Override
public String getRefreshKey() {
return FOR_USER;
}
}