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;
}
}