/* * Created by JFormDesigner on Fri Feb 13 18:11:31 MSK 2015 */ package monakhv.samlib.desk.gui; import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.util.*; import java.util.List; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; import com.jgoodies.forms.factories.*; import com.jgoodies.forms.layout.*; import monakhv.samlib.data.AbstractSettings; import monakhv.samlib.db.SQLController; import monakhv.samlib.db.entity.Author; import monakhv.samlib.db.entity.Book; import monakhv.samlib.db.entity.Tag; import monakhv.samlib.desk.Main; import monakhv.samlib.desk.data.DataExportImport; import monakhv.samlib.desk.data.Settings; import monakhv.samlib.db.AuthorController; import monakhv.samlib.db.BookController; import monakhv.samlib.desk.sql.DaoController; import monakhv.samlib.db.TagController; import monakhv.samlib.desk.workers.AddAuthorWorker; import monakhv.samlib.desk.workers.CheckUpdateWorker; import monakhv.samlib.desk.workers.LoadBookWorker; import monakhv.samlib.desk.workers.ReadAuthorWorker; import monakhv.samlib.log.Log; import monakhv.samlib.service.BookDownloadService; /** * @author Dmitry Monakhov */ public class MainForm extends JFrame implements GuiUpdate { private static final String DEBUG_TAG = "MainForm"; private ResourceBundle bndl = ResourceBundle.getBundle("samlibDesk"); private final AuthorListModel authorsModel; private final BookDownloadService service; private final SQLController sql; private final Settings settings; private BookList bkList; //private String selection=null; private String sortOrder = SQLController.COL_isnew + " DESC, " + SQLController.COL_NAME; private Author selectedAuthor; private TagComboItem selectedTag = TagComboItem.ALL; private List<Author> authorList; private AuthorTagsDialog authorTags; /** * Spercial container for Combo Box wiget */ public MainForm(Settings settings) { this.settings = settings; SQLController sql1; try { sql1 = SQLController.getInstance(settings.getDataDirectoryPath()); } catch (Exception e) { Log.e(DEBUG_TAG, "Error SQL init"); sql1 = null; } sql = sql1; authorsModel = new AuthorListModel(); // booksModel = new DefaultListModel<>(); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { super.windowClosing(e); Main.exit(1); } }); setTitle(bndl.getString("MainForm.Title.text")); authorTags = new AuthorTagsDialog(this, DaoController.getInstance(sql), this); initComponents(); addSortedAuthorList(); jAuthorList.setModel(authorsModel); jAuthorList.setCellRenderer(new AuthorRenderer()); jAuthorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); createTagSelector(); //TODO: we can move the constant 20 to settings bookScrolPanel.getVerticalScrollBar().setUnitIncrement(20); bkList = new BookList(bookPanel, new BookList.CallBack() { @Override public void bookClick(MouseEvent e, Book book) { makeBookClick(e, book); } }); jAuthorList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { JList lsm = (JList) e.getSource(); if (lsm.isSelectionEmpty() || !e.getValueIsAdjusting()) { return; } if (lsm.getMinSelectionIndex() != lsm.getMaxSelectionIndex()) { Log.i(DEBUG_TAG, "selection " + lsm.getMinSelectionIndex() + " - " + lsm.getMaxSelectionIndex()); return; } selectedAuthor = authorsModel.getElementAt(lsm.getMaxSelectionIndex()); Log.i(DEBUG_TAG, "selection " + selectedAuthor.getName() + " " + e.getValueIsAdjusting() + " - " + selectedAuthor.getTag2Authors().size()); loadBookList(selectedAuthor); } }); service = new BookDownloadService(DaoController.getInstance(sql), this, settings); } private void createTagSelector() { cBTags.removeAllItems(); cBTags.addItem(TagComboItem.ALL); cBTags.addItem(TagComboItem.NEW); TagController tagCtl = new TagController(DaoController.getInstance(sql)); for (Tag tag : tagCtl.getAll()) { cBTags.addItem(new TagComboItem(tag)); } } /** * Construct Author list */ private void addSortedAuthorList() { AuthorController ctl = new AuthorController(DaoController.getInstance(sql)); authorList = ctl.getAll(selectedTag.getId(), sortOrder); authorsModel.update(authorList); } /** * Construct Book List * * @param a author */ private void loadBookList(Author a) { BookController ctl = new BookController(DaoController.getInstance(sql)); if (a != null) { bkList.load(ctl.getAll(a, SQLController.COL_BOOK_ISNEW + " DESC, " + SQLController.COL_BOOK_DATE + " DESC")); } //bookPanel.setComponentPopupMenu(bookPopup); redraw(); } private void redraw() { this.getContentPane().validate(); this.getContentPane().repaint(); } private void menuItemExitActionPerformed(ActionEvent e) { Main.exit(0); } private void buttonUpdateActionPerformed(ActionEvent e) { if (authorList.isEmpty()) { return; } buttonUpdate.setEnabled(false); progressBar1.setStringPainted(true); progressBar1.setMinimum(0); progressBar1.setMaximum(authorList.size()); progressBar1.setValue(0); CheckUpdateWorker worker = new CheckUpdateWorker(service, authorList); worker.execute(); } private void menuItemSettingsActionPerformed(ActionEvent e) { SettingsForm.show(this, settings); } private void cBTagsActionPerformed(ActionEvent e) { JComboBox cb = (JComboBox) e.getSource(); selectedTag = (TagComboItem) cb.getSelectedItem(); if (selectedTag == null) { return; } Log.d(DEBUG_TAG, "Tag: " + selectedTag.toString()); addSortedAuthorList(); redraw(); } private void jAuthorListMouseClicked(MouseEvent e) { int butNum = e.getButton(); if (butNum == 1) {//left mouse button clicks are ignored return; } int index = jAuthorList.locationToIndex(e.getPoint()); if (index < 0) { return; } jAuthorList.setSelectedIndex(index); selectedAuthor = authorsModel.getElementAt(index); authorPopup.setLabel(selectedAuthor.getName()); authorPopup.show(e.getComponent(), e.getX(), e.getY()); } private void makeBookClick(MouseEvent e, Book book) { Log.i(DEBUG_TAG, "Book: " + book.getTitle() + " - " + e.getButton()); if (e.getButton() == 1 && e.getClickCount() == 2) { book.setFileType(settings.getFileType()); DataExportImport dd = new DataExportImport(settings); if (dd.needUpdateFile(book)) { this.setCursor(new Cursor(Cursor.WAIT_CURSOR)); LoadBookWorker worker = new LoadBookWorker(service, book.getId()); worker.execute(); } else { showBook(book); } } if (e.getButton() != 1) { bookPopup.show(e.getComponent(), e.getX(), e.getY()); } } private void menuAuthorMakeReadActionPerformed(ActionEvent e) { ReadAuthorWorker worker = new ReadAuthorWorker(service, selectedAuthor); worker.execute(); } private void menuAuthorDeleteActionPerformed(ActionEvent e) { int answer = JOptionPane.showConfirmDialog( this, bndl.getString("MainForm.confirmAuthorDelete"), selectedAuthor.getName(), JOptionPane.YES_NO_OPTION ); if (answer == JOptionPane.YES_OPTION) { service.makeAuthorDel(selectedAuthor.getId()); selectedAuthor = null; } } private void menuToolsAddActionPerformed(ActionEvent e) { AddTextValue addAuthor = new AddTextValue(this, "http://samlib.ot.ru", bndl.getString("MainForm.AddAuthor.Title.text"), new AddTextValue.CallBack() { @Override public void okClick(String answer) { Log.i(DEBUG_TAG, "got value: " + answer); ArrayList<String> urls = new ArrayList<>(); urls.add(answer); service.makeAuthorAdd(urls); } }); addAuthor.setVisible(true); } private void menuToolsSearchActionPerformed() { AuthorSearch search = new AuthorSearch(this,settings); search.setVisible(true); // TODO add your code here // } private void menuAuthorTagsActionPerformed(ActionEvent e) { authorTags.setPanel(selectedAuthor); authorTags.setVisible(true); } private void buttonRefreshActionPerformed() { Log.d(DEBUG_TAG, "refresh: list size " + authorList.size()); Log.d(DEBUG_TAG, "refresh: model size " + jAuthorList.getModel().getSize()); Log.d(DEBUG_TAG, "refresh: selected " + selectedAuthor.getName()); jAuthorList.invalidate(); jAuthorList.revalidate(); jAuthorList.repaint(); redraw(); } private void menuToosImportActionPerformed() { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle(bndl.getString("MainForm.ChooserDBOpen")); FileFilter filter = new FileNameExtensionFilter("SQLite database", "db", "sqlite"); chooser.addChoosableFileFilter(filter); int returnVal = chooser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { DataExportImport dei = new DataExportImport(settings); showResult( dei.importDB(chooser.getSelectedFile()), bndl.getString("MainForm.message.ImportSuccess") + ": " + chooser.getSelectedFile().getAbsolutePath(), bndl.getString("MainForm.message.ImportError") ); addSortedAuthorList(); makeUpdateTagList(); } } private void menuToolsExportDBActionPerformed() { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle(bndl.getString("MainForm.ChooserDirectoryToExport")); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { DataExportImport dei = new DataExportImport(settings); String fn = dei.exportDB(chooser.getSelectedFile()); showResult( fn != null, bndl.getString("MainForm.message.ExportSuccess") + ": " + chooser.getSelectedFile().getAbsolutePath() + Settings.sep + fn, bndl.getString("MainForm.message.ExportError") ); } } private void menuToolsExportListActionPerformed() { JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setDialogTitle(bndl.getString("MainForm.ChooserDirectoryToExport")); if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { DataExportImport dei = new DataExportImport(settings); String fn = dei.exportAuthorList(DaoController.getInstance(sql), chooser.getSelectedFile()); showResult( fn != null, bndl.getString("MainForm.message.ExportListSuccess") + ": " + chooser.getSelectedFile().getAbsolutePath() + Settings.sep + fn, bndl.getString("MainForm.message.ExportListError") ); } } private void menuToolsImportListActionPerformed() { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle(bndl.getString("MainForm.ChooserDBOpen")); FileFilter filter = new FileNameExtensionFilter("Author List", "txt", "html", "htm"); chooser.addChoosableFileFilter(filter); int returnVal = chooser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { ArrayList<String> urls = DataExportImport.importAuthorList(chooser.getSelectedFile()); if (urls == null) { showError(bndl.getString("MainForm.message.ImportListError")); return; } AddAuthorWorker worker = new AddAuthorWorker(service, urls); worker.execute(); } } private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents ResourceBundle bundle = ResourceBundle.getBundle("samlibDesk"); menuBar1 = new JMenuBar(); menu1 = new JMenu(); menuItemSettings = new JMenuItem(); menuItemExit = new JMenuItem(); menuTools = new JMenu(); menuToolsAdd = new JMenuItem(); menuToolsSearch = new JMenuItem(); menuToolsImportDB = new JMenuItem(); menuToolsExportDB = new JMenuItem(); menuToolsImportList = new JMenuItem(); menuToolsExportList = new JMenuItem(); panelMain = new JPanel(); toolBar = new JPanel(); buttonUpdate = new JButton(); cBTags = new JComboBox<>(); progressBar1 = new JProgressBar(); buttonRefresh = new JButton(); authorScrollPane = new JScrollPane(); jAuthorList = new JList(); panel1 = new JPanel(); lbProgress = new JLabel(); bookScrolPanel = new JScrollPane(); bookPanel = new JPanel(); bookPopup = new JPopupMenu(); menuItem4 = new JMenuItem(); menuItem3 = new JMenuItem(); authorPopup = new JPopupMenu(); menuAuthorTags = new JMenuItem(); menuAuthorMakeRead = new JMenuItem(); menuAuthorDelete = new JMenuItem(); //======== this ======== setMinimumSize(new Dimension(20, 70)); Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); //======== menuBar1 ======== { //======== menu1 ======== { menu1.setText("File"); //---- menuItemSettings ---- menuItemSettings.setText(bundle.getString("MainForm.menu.settings")); menuItemSettings.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuItemSettingsActionPerformed(e); } }); menu1.add(menuItemSettings); //---- menuItemExit ---- menuItemExit.setText(bundle.getString("MainForm.menu.exit")); menuItemExit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuItemExitActionPerformed(e); } }); menu1.add(menuItemExit); } menuBar1.add(menu1); //======== menuTools ======== { menuTools.setText(bundle.getString("MainForm.menuTools.text")); //---- menuToolsAdd ---- menuToolsAdd.setText(bundle.getString("MainForm.menuToolsAdd.text")); menuToolsAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuToolsAddActionPerformed(e); } }); menuTools.add(menuToolsAdd); //---- menuToolsSearch ---- menuToolsSearch.setText(bundle.getString("MainForm.menuToolsSearch.text")); menuToolsSearch.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuToolsSearchActionPerformed(); } }); menuTools.add(menuToolsSearch); //---- menuToolsImportDB ---- menuToolsImportDB.setText(bundle.getString("MainForm.menuToolsImportDB.text")); menuToolsImportDB.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuToosImportActionPerformed(); } }); menuTools.add(menuToolsImportDB); //---- menuToolsExportDB ---- menuToolsExportDB.setText(bundle.getString("MainForm.menuToolsExportDB.text")); menuToolsExportDB.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuToolsExportDBActionPerformed(); } }); menuTools.add(menuToolsExportDB); //---- menuToolsImportList ---- menuToolsImportList.setText(bundle.getString("MainForm.menuToolsImportList.text")); menuToolsImportList.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuToolsImportListActionPerformed(); } }); menuTools.add(menuToolsImportList); //---- menuToolsExportList ---- menuToolsExportList.setText(bundle.getString("MainForm.menuToolsExportList.text")); menuToolsExportList.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuToolsExportListActionPerformed(); menuToolsExportListActionPerformed(); } }); menuTools.add(menuToolsExportList); } menuBar1.add(menuTools); } setJMenuBar(menuBar1); //======== panelMain ======== { panelMain.setMinimumSize(new Dimension(800, 100)); panelMain.setBorder(Borders.DLU4); panelMain.setLayout(new FormLayout( "[200dlu,default]:grow, 5dlu, [350dlu,default]:grow(0.8), default", "default, fill:[400dlu,default]:grow, $lgap, default")); //======== toolBar ======== { toolBar.setLayout(new GridBagLayout()); ((GridBagLayout)toolBar.getLayout()).columnWidths = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; ((GridBagLayout)toolBar.getLayout()).rowHeights = new int[] {0, 5, 0}; ((GridBagLayout)toolBar.getLayout()).columnWeights = new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4}; ((GridBagLayout)toolBar.getLayout()).rowWeights = new double[] {0.0, 0.0, 1.0E-4}; //---- buttonUpdate ---- buttonUpdate.setText(bundle.getString("MainForm.buttonRefresh.text")); buttonUpdate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { buttonUpdateActionPerformed(e); } }); toolBar.add(buttonUpdate, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0)); //---- cBTags ---- cBTags.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { cBTagsActionPerformed(e); } }); toolBar.add(cBTags, new GridBagConstraints(2, 0, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0)); toolBar.add(progressBar1, new GridBagConstraints(6, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0)); //---- buttonRefresh ---- buttonRefresh.setText(bundle.getString("MainForm.buttonRefresh.text")); buttonRefresh.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { buttonRefreshActionPerformed(); } }); toolBar.add(buttonRefresh, new GridBagConstraints(9, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0)); } panelMain.add(toolBar, CC.xywh(1, 1, 3, 1)); //======== authorScrollPane ======== { authorScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //---- jAuthorList ---- jAuthorList.setComponentPopupMenu(null); jAuthorList.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { jAuthorListMouseClicked(e); } }); authorScrollPane.setViewportView(jAuthorList); } panelMain.add(authorScrollPane, CC.xy(1, 2)); //======== panel1 ======== { panel1.setBorder(new EtchedBorder()); panel1.setLayout(new GridBagLayout()); ((GridBagLayout)panel1.getLayout()).columnWidths = new int[] {0, 0, 0}; ((GridBagLayout)panel1.getLayout()).rowHeights = new int[] {0, 0, 0, 0}; ((GridBagLayout)panel1.getLayout()).columnWeights = new double[] {0.0, 0.0, 1.0E-4}; ((GridBagLayout)panel1.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 1.0E-4}; //---- lbProgress ---- lbProgress.setText(bundle.getString("MainForm.lbProgress.text")); panel1.add(lbProgress, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 0), 0, 0)); } panelMain.add(panel1, CC.xywh(1, 4, 3, 1)); //======== bookScrolPanel ======== { bookScrolPanel.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); bookScrolPanel.setDoubleBuffered(true); bookScrolPanel.setAutoscrolls(true); bookScrolPanel.setComponentPopupMenu(null); //======== bookPanel ======== { bookPanel.setLayout(new GridBagLayout()); ((GridBagLayout)bookPanel.getLayout()).columnWidths = new int[] {0, 0, 0}; ((GridBagLayout)bookPanel.getLayout()).rowHeights = new int[] {0, 0, 0, 0}; ((GridBagLayout)bookPanel.getLayout()).columnWeights = new double[] {0.0, 0.0, 1.0E-4}; ((GridBagLayout)bookPanel.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 1.0E-4}; } bookScrolPanel.setViewportView(bookPanel); } panelMain.add(bookScrolPanel, CC.xy(3, 2)); } contentPane.add(panelMain, BorderLayout.CENTER); pack(); setLocationRelativeTo(getOwner()); //======== bookPopup ======== { //---- menuItem4 ---- menuItem4.setText("BookText2"); bookPopup.add(menuItem4); //---- menuItem3 ---- menuItem3.setText("Booktext1"); bookPopup.add(menuItem3); } //======== authorPopup ======== { //---- menuAuthorTags ---- menuAuthorTags.setText(bundle.getString("MainForm.menuAuthorTags.text")); menuAuthorTags.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuAuthorTagsActionPerformed(e); } }); authorPopup.add(menuAuthorTags); //---- menuAuthorMakeRead ---- menuAuthorMakeRead.setText(bundle.getString("MainForm.authorMenu.makeRead")); menuAuthorMakeRead.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuAuthorMakeReadActionPerformed(e); } }); authorPopup.add(menuAuthorMakeRead); //---- menuAuthorDelete ---- menuAuthorDelete.setText(bundle.getString("MainForm.menuAuthorDelete.text")); menuAuthorDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { menuAuthorDeleteActionPerformed(e); } }); authorPopup.add(menuAuthorDelete); } // JFormDesigner - End of component initialization //GEN-END:initComponents } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables private JMenuBar menuBar1; private JMenu menu1; private JMenuItem menuItemSettings; private JMenuItem menuItemExit; private JMenu menuTools; private JMenuItem menuToolsAdd; private JMenuItem menuToolsSearch; private JMenuItem menuToolsImportDB; private JMenuItem menuToolsExportDB; private JMenuItem menuToolsImportList; private JMenuItem menuToolsExportList; private JPanel panelMain; private JPanel toolBar; private JButton buttonUpdate; private JComboBox<TagComboItem> cBTags; private JProgressBar progressBar1; private JButton buttonRefresh; private JScrollPane authorScrollPane; private JList jAuthorList; private JPanel panel1; private JLabel lbProgress; private JScrollPane bookScrolPanel; private JPanel bookPanel; private JPopupMenu bookPopup; private JMenuItem menuItem4; private JMenuItem menuItem3; private JPopupMenu authorPopup; private JMenuItem menuAuthorTags; private JMenuItem menuAuthorMakeRead; private JMenuItem menuAuthorDelete; // JFormDesigner - End of variables declaration //GEN-END:variables @Override public void makeUpdate(boolean isBoth) { Log.d(DEBUG_TAG, "makeUpdate: isBoth = " + isBoth); addSortedAuthorList();//refresh authors if (isBoth) { loadBookList(selectedAuthor); } } @Override public void makeUpdate(Author a) { makeUpdate(true); } @Override public void makeUpdateTagList() { Log.d(DEBUG_TAG, "makeUpdateTagList"); createTagSelector(); redraw(); } @Override public void finishBookLoad(boolean result, AbstractSettings.FileType ft, long book_id) { this.setCursor(Cursor.DEFAULT_CURSOR); if (result) { AuthorController ctl = new AuthorController(DaoController.getInstance(sql)); showBook(ctl.getBookController().getById(book_id)); } else { showError(bndl.getString("MainForm.message.BookLoadError")); } } @Override public void sendAuthorUpdateProgress(int total, int iCurrent, String name) { progressBar1.setValue(iCurrent); showMessage(bndl.getString("MainForm.message.Update") + " " + name); } @Override public void finishUpdate(boolean result, List<Author> updatedAuthors) { buttonUpdate.setEnabled(true); progressBar1.setValue(0); progressBar1.setString(""); showResult(result, bndl.getString("MainForm.message.UpdateSuccess"), bndl.getString("MainForm.message.UpdateError")); } @Override public void sendResult(String action, int numberOfAdded, int numberOfDeleted, int doubleAdd, int totalToAdd, long author_id) { } /** * Show book * * @param book book to read */ private void showBook(Book book) { Log.i(DEBUG_TAG, "Display book: " + settings.getBookFile(book, book.getFileType()).getAbsolutePath()); try { //TODO: put reader into setting for different File type Runtime.getRuntime().exec("/usr/bin/firefox " + settings.getBookFile(book, book.getFileType()).getAbsolutePath()); } catch (IOException e) { Log.e(DEBUG_TAG, "Error Open Book"); } } /** * Show error * * @param msg message to display */ private void showError(String msg) { Log.e(DEBUG_TAG, msg); lbProgress.setForeground(Color.RED); lbProgress.setText(msg); } /** * Show Text message * * @param msg message to display */ private void showMessage(String msg) { Log.e(DEBUG_TAG, msg); lbProgress.setForeground(Color.BLACK); lbProgress.setText(msg); } private void showResult(boolean result, String successMessage, String errorMessage) { if (result) { showMessage(successMessage); } else { showError(errorMessage); } } }