package http; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import polly.reminds.MSG; import core.RemindManager; import de.skuzzle.polly.http.api.HttpEvent; import de.skuzzle.polly.sdk.MyPolly; import de.skuzzle.polly.sdk.Types; import de.skuzzle.polly.sdk.User; import de.skuzzle.polly.sdk.Types.DateType; import de.skuzzle.polly.sdk.exceptions.CommandException; import de.skuzzle.polly.sdk.exceptions.DatabaseException; import de.skuzzle.polly.sdk.httpv2.SuccessResult; import de.skuzzle.polly.sdk.httpv2.WebinterfaceManager; import de.skuzzle.polly.sdk.httpv2.html.AbstractHTMLTableModel; import de.skuzzle.polly.sdk.httpv2.html.HTMLElement; import entities.RemindEntity; public class MyRemindTableModel extends AbstractHTMLTableModel<RemindEntity> { private final static String[] COLUMNS = { MSG.remindTableModelColId, MSG.remindTableModelColMessage, MSG.remindTableModelColDue, MSG.remindTableModelColLeft, MSG.remindTableModelColType, MSG.remindTableModelColFor, MSG.remindTableModelColFrom, MSG.remindTableModelColAction }; private static final String NICKNAME_FIELD = "nickname"; //$NON-NLS-1$ protected final RemindManager rm; public MyRemindTableModel(RemindManager rm) { this.rm = rm; } @Override public String getHeader(int column) { return COLUMNS[column]; } @Override public int getColumnCount() { return COLUMNS.length; } @Override public boolean isFilterable(int column) { return column < 7; } @Override public boolean isSortable(int column) { return column < 7; } @Override public boolean isEditable(int column) { return column == 1 || column == 2; } @Override public SuccessResult setCellValue(int column, RemindEntity element, String value, User executor, MyPolly myPolly) { if (column == 1) { try { this.rm.modifyRemind(executor, element.getId(), element.getDueDate(), value); return new SuccessResult(true, value); } catch (CommandException | DatabaseException e) { return new SuccessResult(false, e.getMessage()); } } else if (column == 2) { final Types d = myPolly.parse(value); if (!(d instanceof Types.DateType)) { return new SuccessResult(false, MSG.remindTableModelInvalidDate); } final Date date = ((DateType) d).getValue(); try { this.rm.modifyRemind(executor, element.getId(), date, element.getMessage()); return new SuccessResult(true, myPolly.formatting().formatDate(date)); } catch (CommandException | DatabaseException e) { return new SuccessResult(false, e.getMessage()); } } return super.setCellValue(column, element, value, executor, myPolly); } @Override public Object getCellValue(int column, RemindEntity element) { switch (column) { case 0: return element.getId(); case 1: return element.getMessage(); case 2: return element.getDueDate(); case 3: return element.getLeaveDate(); case 4: return "?"; //$NON-NLS-1$ // TODO: remind type case 5: return element.getForUser(); case 6: return element.getFromUser(); case 7: return new HTMLElement("input") //$NON-NLS-1$ .attr("value", MSG.remindTableModelCancel) //$NON-NLS-1$ .attr("type", "button") //$NON-NLS-1$ //$NON-NLS-2$ .attr("class", "button") //$NON-NLS-1$ //$NON-NLS-2$ .attr("onclick", "cancelRemind("+element.getId()+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ default: return ""; //$NON-NLS-1$ } } @Override public Class<?> getColumnClass(int column) { switch (column) { case 0: case 1: return String.class; case 2: case 3: return Date.class; case 4: case 5: case 6: return String.class; case 7: default: return Object.class; } } @Override public Map<String, String> getRequestParameters(HttpEvent e) { final Map<String, String> m = new HashMap<>(); final User user = (User) e.getSession().get(WebinterfaceManager.USER); m.put(NICKNAME_FIELD, user.getName()); return m; } @Override public List<RemindEntity> getData(HttpEvent e) { return this.rm.getDatabaseWrapper().getMyRemindsForUser(e.get(NICKNAME_FIELD)); } @Override public String getRefreshKey() { return NICKNAME_FIELD; } }