package org.pegadi.disposal; import org.pegadi.model.*; import org.pegadi.server.NoAccessException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.swing.table.AbstractTableModel; import java.util.*; public class PageTableModel extends AbstractTableModel { private String[] columnNames; private List<DispPage> pages; private Disp disp; ResourceBundle messages; private final Logger log = LoggerFactory.getLogger(getClass()); public PageTableModel(Disp disp) { messages = ResourceBundle.getBundle("org.pegadi.publicationcontrol.PublicationControlStrings"); columnNames = new String[]{ messages.getString("dispcol_page"), messages.getString("dispcol_section"), messages.getString("dispcol_articles"), messages.getString("dispcol_notes"), messages.getString("dispcol_journalists"), messages.getString("dispcol_photo"), messages.getString("dispcol_status"), messages.getString("dispcol_photostatus"), messages.getString("dispcol_ad")}; this.disp = disp; loadPages(); } public int getRowCount() { return pages.size(); } public int getColumnCount() { return columnNames.length; } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int rowIndex, int columnIndex) { DispPage page = getPage(rowIndex); switch (columnIndex) { case 0: return page.getPageNumber(); case 1: return page.getSection(); case 3: return page.getText(); case 2: case 4: case 5: return listStuff(page, columnIndex); case 6: return listStatus(page); case 7: return page.getPhotoStatus(); case 8: return page.isAdOnPage(); default: return null; } } public DispPage getPage(int rowIndex) { return pages.get(rowIndex); } public Class getColumnClass(int column) { switch (column) { case 0: return Integer.class; case 1: return DispSection.class; case 8: return Boolean.class; default: return String.class; } } public boolean isCellEditable(int row, int col) { switch(col) { case 1: case 3: case 7: case 8: return true; default: return false; } } public void setValueAt(Object value, int row, int col) { DispPage page = pages.get(row); // 2=artikler, 3=journalister, 4=fotografer, 5=statuser switch (col) { case 1: page.setSection((DispSection) value); break; case 3: page.setText((String) value); break; case 7: page.setPhotoSatus((String) value); break; case 8: page.setAdOnPage((Boolean) value); } try { LoginContext.server.saveDispPage(page, LoginContext.sessionKey); } catch (NoAccessException e) { log.error("error - cannot save disppage", e); } fireTableDataChanged(); } public void createNewPage() { try { DispPage newPage = LoginContext.server.createDispPage(new DispPage(disp.getId(), pages.size()+1), LoginContext.sessionKey); pages.add(newPage); } catch (NoAccessException e) { log.error("error - failed getting new page from server", e); } fireTableDataChanged(); } public void deletePage(int index) { DispPage page = pages.get(index); try { LoginContext.server.deleteDispPage(page, LoginContext.sessionKey); pages.remove(index); for(; index < pages.size(); index++) { DispPage currPage = pages.get(index); currPage.setPageNumber(currPage.getPageNumber()-1); } LoginContext.server.saveDispPages(pages, LoginContext.sessionKey); } catch (NoAccessException e) { log.error("error - failed deleting page", e); } fireTableDataChanged(); } public boolean movePage(int fromIndex, int toIndex) { /* Have to do different calculations based on the page being moved up or down */ /* down */ if(fromIndex - toIndex < 0) { if(fromIndex - toIndex == -1) return false; pages.get(fromIndex).setPageNumber(toIndex); for(int i = fromIndex + 1; i < toIndex; i++) { DispPage currPage = pages.get(i); currPage.setPageNumber(currPage.getPageNumber() - 1); } } /* up */ else { if(fromIndex - toIndex == 0) return false; pages.get(fromIndex).setPageNumber(toIndex + 1); for(int i = toIndex; i < fromIndex; i++) { DispPage currPage = pages.get(i); currPage.setPageNumber(currPage.getPageNumber() + 1); } } try { LoginContext.server.saveDispPages(pages, LoginContext.sessionKey); } catch (NoAccessException e) { log.error("error - failed saving page", e); } resort(); fireTableDataChanged(); return true; } private void resort() { Collections.sort(pages, new Comparator<DispPage>() { public int compare(DispPage o1, DispPage o2) { return o1.getPageNumber() - o2.getPageNumber(); } }); } private void loadPages() { try { pages = LoginContext.server.getPagesByDispId(disp.getId(), LoginContext.sessionKey); } catch (NoAccessException e) { log.error("error - failed loading pages", e); } } public void refresh() { loadPages(); fireTableDataChanged(); } private String listStuff(DispPage page, int nr) { String s = ""; for(int i = 0; i < page.getArticles().size(); i++) { Article article = page.getArticles().get(i); String b = ""; switch (nr) { case 2: b = article.getName(); break; case 4: b = article.getJournalist() != null ? article.getJournalist().getName() : ""; break; case 5: b = article.getPhotographer() != null ? article.getPhotographer().getName() : ""; break; //case 6: b = article.getArticleStatus().getName(); break; } if(i == 0) { s += b; } else { s += " \n \n" + b; } } return s; } private List<ArticleStatus> listStatus(DispPage page) { List<ArticleStatus> list = new ArrayList<ArticleStatus>(); for(Article article : page.getArticles()) { list.add(article.getArticleStatus()); } return list; } }