package org.jdal.logic; import org.jdal.dao.UserPreferenceDao; import org.jdal.model.TableState; import org.jdal.model.User; import org.jdal.model.UserPreference; import org.jdal.service.TableService; import org.springframework.util.StringUtils; /** * TableService implementation that use UserPreference Dao to load/save * the TableState * * @author Jose Luis Martin - (jlm@joseluismartin.info) * @since 1.2.1 * */ public abstract class TableManagerSupport implements TableService { private static final String VISIBLE_COLUMNS = "visible_columns"; private static final String PAGE_SIZE = "page_size"; private UserPreferenceDao userPreferenceDao; private String separator = "."; /** * {@inheritDoc} */ public TableState getState(String name) { if (getUser() == null) return null; TableState state = null; String visibleColumns = userPreferenceDao.findUserPreferenceValue(getUser(), getPreferenceName(name, VISIBLE_COLUMNS)); String pageSize = userPreferenceDao.findUserPreferenceValue(getUser(), getPreferenceName(name, PAGE_SIZE)); if (visibleColumns != null || pageSize != null) { state = new TableState(); state.setName(name); state.setVisibleColumns(visibleColumns); if (org.apache.commons.lang.StringUtils.isNumeric(pageSize)) state.setPageSize(Integer.parseInt(pageSize)); } return state; } /** * @return authenticated user of null if no authenticated. */ protected abstract User getUser(); /** * @param name * @param string * @return */ private String getPreferenceName(String name, String preferenceName) { return name + separator + preferenceName; } /** * {@inheritDoc} */ public void saveState(TableState state) { savePreference(getPreferenceName(state.getName(), VISIBLE_COLUMNS), StringUtils.collectionToCommaDelimitedString(state.getVisibleColumns())); savePreference(getPreferenceName(state.getName(), PAGE_SIZE), String.valueOf(state.getPageSize())); } private void savePreference(String name, String value) { UserPreference p = userPreferenceDao.findUserPreference(getUser(), name); if (p == null) { p = userPreferenceDao.createUserPreference(); p.setUser(getUser()); p.setName(name); } p.setValue(value); userPreferenceDao.save(p); } /** * @return the userPreferenceDao */ public UserPreferenceDao getUserPreferenceDao() { return userPreferenceDao; } /** * @param userPreferenceDao the userPreferenceDao to set */ public void setUserPreferenceDao(UserPreferenceDao userPreferenceDao) { this.userPreferenceDao = userPreferenceDao; } }