package polly.rx.httpv2; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import polly.rx.MSG; import polly.rx.MyPlugin; import polly.rx.core.ScoreBoardManager; import polly.rx.entities.ScoreBoardEntry; import de.skuzzle.polly.http.api.HttpEvent; import de.skuzzle.polly.sdk.time.Milliseconds; import de.skuzzle.polly.sdk.util.DirectedComparator.SortOrder; public class ScoreboardDetailModel extends ScoreboardTableModel { private final static String[] COLUMNS = MSG.scoreboardDetailModelColumns.split(","); //$NON-NLS-1$ private final static String VENAD_NAME = "venadName"; //$NON-NLS-1$ public ScoreboardDetailModel(ScoreBoardManager sbManager) { super(sbManager); this.requirePermission(MyPlugin.SBE_PERMISSION); } @Override public Object getCellValue(int column, ScoreBoardEntry element) { switch (column) { case 0:return element.getRank(); case 1: return element.getVenadName(); case 2: return element.getClan(); case 3: return element.getPoints(); case 4: return element.getDiffToPrevious(); case 5: return element.getDaysToPrevious(); case 6: return element.getDiscDerivative(); case 7: return element.getDate(); default: return ""; //$NON-NLS-1$ } } @Override public Class<?> getColumnClass(int column) { switch (column) { case 0: case 3: case 4: case 5: return Integer.class; case 6: return Double.class; case 7: return Date.class; default: return Object.class; } } @Override public int getColumnCount() { return COLUMNS.length; } @Override public String getHeader(int column) { return COLUMNS[column]; } @Override public Map<String, String> getRequestParameters(HttpEvent e) { final Map<String, String> result = new HashMap<String, String>(); result.put(VENAD_NAME, e.get(VENAD_NAME)); return result; } @Override public int getDefaultSortColumn() { return COLUMNS.length - 1; // last col } @Override public SortOrder getDefaultSortOrder() { return SortOrder.DESCENDING; } @Override public List<ScoreBoardEntry> getData(HttpEvent e) { final String venad = e.get(VENAD_NAME); final List<ScoreBoardEntry> entries = this.sbManager.getEntries(venad); Collections.sort(entries, ScoreBoardEntry.BY_DATE); if (entries.size() > 1) { for (int i = 1; i < entries.size(); ++i) { ScoreBoardEntry before = entries.get(i - 1); ScoreBoardEntry current = entries.get(i); long diff = Math.abs(before.getDate().getTime() - current.getDate().getTime()); long days = Milliseconds.toDays(diff); int pointDiff = current.getPoints() - before.getPoints(); double pointsPerDay = (double) pointDiff / (double) days; current.setDaysToPrevious((int) days); current.setDiffToPrevious(pointDiff); current.setDiscDerivative(pointsPerDay); } } return entries; } }