package org.pegadi.disposal; import com.kitfox.svg.SVGCache; import com.kitfox.svg.app.beans.SVGIcon; import org.pegadi.model.Disp; import org.pegadi.model.DispPage; import org.pegadi.model.LoginContext; import org.pegadi.model.Publication; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.OrientationRequested; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.print.PrinterException; import java.net.URI; import java.net.URL; import java.util.ResourceBundle; public class DisposalControl extends JFrame { private final Logger log = LoggerFactory.getLogger(getClass()); ResourceBundle messages; Disp disp; Publication pub; PageTable pageTable; PageTableModel pageTableModel; JTableDragHandler dragHandler; JScrollPane pageScroll; JToolBar toolbar; JButton newPageButton, deletePageButton, addarticlesButton, settingsButton, printButton, closeButton, refreshButton, newArticle; public DisposalControl(Publication publication, Component parent) { super(); messages = ResourceBundle.getBundle("org.pegadi.publicationcontrol.PublicationControlStrings"); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setTitle(messages.getString("disp_title") + " " + publication.getName()); setLayout(new BorderLayout()); disp = getDispOrCreateNew(publication); this.pub = publication; /* The table-stuff */ pageTableModel = new PageTableModel(disp); pageTable = new PageTable(pageTableModel); dragHandler = new JTableDragHandler(pageTable); pageTable.setTransferHandler(dragHandler); pageScroll = new JScrollPane(pageTable); pageScroll.setPreferredSize(new Dimension(1130, 800)); add(pageScroll, BorderLayout.CENTER); /* The menu-stuff */ toolbar = new JToolBar(); toolbar.setFloatable(false); newPageButton = new JButton(); newPageButton.setIcon(initSvgIcon(getClass().getResource(messages.getString("icon_new")))); newPageButton.setToolTipText(messages.getString("new_button")); toolbar.add(newPageButton); deletePageButton = new JButton(); deletePageButton.setIcon(initSvgIcon(getClass().getResource(messages.getString("icon_delete")))); deletePageButton.setToolTipText(messages.getString("delete_button")); toolbar.add(deletePageButton); addarticlesButton = new JButton(); addarticlesButton.setIcon(initSvgIcon(getClass().getResource(messages.getString("icon_addarticles")))); addarticlesButton.setToolTipText(messages.getString("addarticles_button")); toolbar.add(addarticlesButton); toolbar.addSeparator(); /* newArticle = new JButton(); newArticle.setIcon(initSvgIcon(getClass().getResource(messages.getString("icon_newarticle")))); newArticle.setToolTipText(messages.getString("newarticle_button")); toolbar.add(newArticle); */ settingsButton = new JButton(); settingsButton.setIcon(initSvgIcon(getClass().getResource(messages.getString("icon_about")))); settingsButton.setToolTipText(messages.getString("edit_button")); toolbar.add(settingsButton); printButton = new JButton(); printButton.setIcon(initSvgIcon(getClass().getResource(messages.getString("icon_print")))); printButton.setToolTipText(messages.getString("print_button")); toolbar.add(printButton); toolbar.addSeparator(); refreshButton = new JButton(); refreshButton.setIcon(initSvgIcon(getClass().getResource(messages.getString("icon_refresh")))); refreshButton.setToolTipText(messages.getString("refresh_button")); toolbar.add(refreshButton); closeButton = new JButton(); closeButton.setIcon(initSvgIcon(getClass().getResource(messages.getString("icon_close")))); closeButton.setToolTipText(messages.getString("close_button")); toolbar.add(closeButton); add(toolbar, BorderLayout.PAGE_START); newPageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { newPage(); } }); deletePageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { deletePage(); } }); addarticlesButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { addarticles(); } }); settingsButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openSettings(); } }); printButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { PrintRequestAttributeSet printSettings = new HashPrintRequestAttributeSet(); printSettings.add(OrientationRequested.LANDSCAPE); pageTable.print(JTable.PrintMode.FIT_WIDTH, null, null, true, printSettings, true); } catch (PrinterException e1) { e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } }); refreshButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { pageTable.refresh(); } }); closeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); } }); pack(); setLocationRelativeTo(parent); setVisible(true); } private void newPage() { pageTableModel.createNewPage(); } private void deletePage() { if(pageTable.getSelectedRow() != -1) { if(JOptionPane.showConfirmDialog(this, messages.getString("delete_confirmation"), messages.getString("delete_button"), JOptionPane.YES_NO_OPTION) == 0) { pageTableModel.deletePage(pageTable.getSelectedRow()); } } } private void openSettings() { new SettingsDialog(this, pageTable); } private void addarticles() { DispPage selectedPage = null; if(pageTable.getSelectedRow() != -1) { selectedPage = pageTableModel.getPage(pageTable.getSelectedRow()); } new AddArticlesDialog(selectedPage, disp, pageTable, pub, this); } // Gets the Disp, or creates a new one if there is no Disp for the selected publication private Disp getDispOrCreateNew(Publication publication) { try { disp = LoginContext.server.getDisposalByPublicationID(publication.getId(), LoginContext.sessionKey); } catch (Exception e) { log.error("error - couldn't fetch disposal", e); } if(disp == null) { try { disp = LoginContext.server.createNewDisposal(publication.getId(), LoginContext.sessionKey); } catch (Exception e) { log.error("error - couldn't create new disposal", e); } } return disp; } private SVGIcon initSvgIcon(URL iconPath) { URI iconURI = SVGCache.getSVGUniverse().loadSVG(iconPath); SVGIcon icon = new SVGIcon(); icon.setSvgURI(iconURI); icon.setAntiAlias(true); icon.setPreferredSize(new Dimension(32,32)); icon.setScaleToFit(true); return icon; } }