diff --git a/src/org/dclermonte/siba/Siba.java b/src/org/dclermonte/siba/Siba.java index 298b0f0..d89daaa 100644 --- a/src/org/dclermonte/siba/Siba.java +++ b/src/org/dclermonte/siba/Siba.java @@ -1,6 +1,6 @@ /* + * Copyright (C) 2016 Didier Clermonté * Copyright (C) 2016 Christian Pierre Momon - * Didier Clermonté * * This file is part of Siba. * diff --git a/src/org/dclermonte/siba/cli/SibaCLI.java b/src/org/dclermonte/siba/cli/SibaCLI.java index 743f1cf..db1a7e6 100644 --- a/src/org/dclermonte/siba/cli/SibaCLI.java +++ b/src/org/dclermonte/siba/cli/SibaCLI.java @@ -1,6 +1,6 @@ /* + * Copyright (C) 2016 Didier Clermonté * Copyright (C) 2016 Christian Pierre Momon - * Didier Clermonté * * This file is part of Siba. * diff --git a/src/org/dclermonte/siba/gui/AboutDialog.java b/src/org/dclermonte/siba/gui/AboutDialog.java index 41dbc17..8a756bb 100644 --- a/src/org/dclermonte/siba/gui/AboutDialog.java +++ b/src/org/dclermonte/siba/gui/AboutDialog.java @@ -1,6 +1,6 @@ /* + * Copyright (C) 2016 Didier Clermonté * Copyright (C) 2016 Christian Pierre Momon - * Didier Clermonté * * This file is part of Siba. * diff --git a/src/org/dclermonte/siba/gui/BackupPanel.java b/src/org/dclermonte/siba/gui/BackupPanel.java index 1249645..b4c31d3 100644 --- a/src/org/dclermonte/siba/gui/BackupPanel.java +++ b/src/org/dclermonte/siba/gui/BackupPanel.java @@ -1,6 +1,6 @@ /* + * Copyright (C) 2016 Didier Clermonté * Copyright (C) 2016 Christian Pierre Momon - * Didier Clermonté * * This file is part of Siba. * @@ -21,6 +21,7 @@ package org.dclermonte.siba.gui; import java.awt.BorderLayout; import java.awt.Component; +import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -29,9 +30,7 @@ import java.util.ResourceBundle; import javax.swing.Box; import javax.swing.BoxLayout; -import javax.swing.ButtonGroup; import javax.swing.JButton; -import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -48,10 +47,16 @@ import com.jgoodies.forms.layout.RowSpec; public class BackupPanel extends JPanel { - private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.dclermonte.siba.gui.messages"); //$NON-NLS-1$ + /** + * + */ + private static final long serialVersionUID = 4714383090458639282L; + /** + * + */ + static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.dclermonte.siba.gui.messages"); //$NON-NLS-1$ private JTextField textField; - public JTextField textField_1; - private final ButtonGroup buttonGroup = new ButtonGroup(); + private JTextField textField_1; /** * Create the panel. @@ -59,6 +64,7 @@ public class BackupPanel extends JPanel public BackupPanel() { + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); setLayout(new BorderLayout(0, 0)); JPanel panel_4 = new JPanel(); @@ -67,9 +73,6 @@ public class BackupPanel extends JPanel JLabel lblNewLabel_2 = new JLabel(BUNDLE.getString("BackupPanel.lblNewLabel_2.text")); //$NON-NLS-1$ panel_4.add(lblNewLabel_2); - JLabel lblLeRepertoire = new JLabel(BUNDLE.getString("BackupPanel.lblLeRepertoire.text")); //$NON-NLS-1$ - panel_4.add(lblLeRepertoire); - JPanel panel = new JPanel(); add(panel); panel.setLayout(new FormLayout( @@ -90,20 +93,18 @@ public class BackupPanel extends JPanel this.textField.setColumns(10); JButton btnNewButton = new JButton(BUNDLE.getString("BackupPanel.btnNewButton.text")); //$NON-NLS-1$ + btnNewButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnNewButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - final JFileChooser fc = new JFileChooser(); - fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - int returnVal = fc.showDialog(BackupPanel.this, - BUNDLE.getString("BackupPanel.sourceFileChooserButton.text")); - if (returnVal == JFileChooser.APPROVE_OPTION) + File file = SourceDirectorySelector.showSelectorDialog(null, null); + if (file == null) { - File file = fc.getSelectedFile(); - BackupPanel.this.textField.setText(file.getPath()); + return; } + BackupPanel.this.textField.setText(file.getPath()); } }); panel.add(btnNewButton, "6, 2"); @@ -118,20 +119,20 @@ public class BackupPanel extends JPanel this.textField_1.setColumns(10); JButton btnNewButton_1 = new JButton(BUNDLE.getString("BackupPanel.btnNewButton_1.text")); //$NON-NLS-1$ + btnNewButton_1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnNewButton_1.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - final JFileChooser fc1 = new JFileChooser(); - fc1.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - int returnVal = fc1.showDialog(BackupPanel.this, - BUNDLE.getString("BackupPanel.targetFileChooserButton.text")); - if (returnVal == JFileChooser.APPROVE_OPTION) + + File file = TargetDirectorySelector.showSelectorDialog(null, null); + if (file == null) { - File file = fc1.getSelectedFile(); - BackupPanel.this.textField_1.setText(file.getPath()); + return; } + BackupPanel.this.textField_1.setText(file.getPath()); + } }); panel.add(btnNewButton_1, "6, 4"); @@ -139,6 +140,7 @@ public class BackupPanel extends JPanel btnNewButton_1.setHorizontalAlignment(SwingConstants.RIGHT); JPanel panel_2 = new JPanel(); + add(panel_2, BorderLayout.SOUTH); panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.Y_AXIS)); @@ -153,6 +155,7 @@ public class BackupPanel extends JPanel panel_1.add(horizontalGlue); JButton btnNewButton_2 = new JButton(BUNDLE.getString("BackupPanel.btnNewButton_2.text")); //$NON-NLS-1$ + btnNewButton_2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); panel_1.add(btnNewButton_2); Component horizontalGlue_1 = Box.createHorizontalGlue(); @@ -169,8 +172,13 @@ public class BackupPanel extends JPanel { File output1 = SibaManager.backup(new File(BackupPanel.this.textField.getText()), BackupPanel.this.textField_1.getText()); - String message = "Votre répertoire a été sauvegardé \n dans le fichier :\n " + output1.getName(); - JOptionPane.showMessageDialog(null, message, "Sauvegarde faite", JOptionPane.INFORMATION_MESSAGE); + if (output1 == null) + { + return; + } + String message = BUNDLE.getString("BackupPanel.confirmDialogMessage.text") + output1.getName(); + String titre = BUNDLE.getString("BackupPanel.confirmDialogTitle.text"); + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE); } catch (ArchiveException | IOException e1) { diff --git a/src/org/dclermonte/siba/gui/CheckDialog.java b/src/org/dclermonte/siba/gui/CheckDialog.java deleted file mode 100644 index c8f92ef..0000000 --- a/src/org/dclermonte/siba/gui/CheckDialog.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2016 Christian Pierre Momon - * Didier Clermonté - * - * This file is part of Siba. - * - * Siba is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package org.dclermonte.siba.gui; - -import java.awt.BorderLayout; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JButton; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.border.EmptyBorder; - -public class CheckDialog extends JDialog -{ - - /** - * - */ - private static final long serialVersionUID = 5266741894791360568L; - public static Object lblNewLabel; - public static String message; - - /** - * Launch the application. - */ - public static void main(final String string) - { - message = string; - try - { - CheckDialog dialog = new CheckDialog(); - dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); - dialog.setVisible(true); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - - private final JPanel contentPanel = new JPanel(); - - /** - * Create the dialog. - */ - public CheckDialog() - { - setBounds(100, 100, 450, 300); - getContentPane().setLayout(new BorderLayout()); - this.contentPanel.setLayout(new FlowLayout()); - this.contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); - getContentPane().add(this.contentPanel, BorderLayout.CENTER); - { - JLabel lblNewLabel = new JLabel(message); - this.contentPanel.add(lblNewLabel); - } - { - JPanel buttonPane = new JPanel(); - buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); - getContentPane().add(buttonPane, BorderLayout.SOUTH); - { - JButton okButton = new JButton("OK"); - okButton.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(final ActionEvent e) - { - setVisible(false); - dispose(); - } - }); - okButton.setActionCommand("OK"); - buttonPane.add(okButton); - getRootPane().setDefaultButton(okButton); - } - } - } - -} diff --git a/src/org/dclermonte/siba/gui/CheckDirectorySelector.java b/src/org/dclermonte/siba/gui/CheckDirectorySelector.java new file mode 100644 index 0000000..ec4b801 --- /dev/null +++ b/src/org/dclermonte/siba/gui/CheckDirectorySelector.java @@ -0,0 +1,138 @@ +package org.dclermonte.siba.gui; + +import java.awt.Color; +import java.awt.Component; +import java.io.File; +import java.util.ResourceBundle; + +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileNameExtensionFilter; + +import org.apache.commons.lang3.StringUtils; + +public class CheckDirectorySelector extends JFileChooser + +/** + * + * @author Christian Pierre MOMON (christian.momon@devinsy.fr) + */ +{ + private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.dclermonte.siba.gui.messages"); //$NON-NLS-1$ + private static final long serialVersionUID = 3782597353602048214L; + + /** + * This method is the main one of the selector. + * + * @param parent + * @return + */ + public static File showSelectorDialog(final Component parent, final File targetFile) + { + File result; + + // + CheckDirectorySelector selector = new CheckDirectorySelector(targetFile); + + // + if (selector.showDialog(parent, null) == JFileChooser.APPROVE_OPTION) + { + // + result = selector.getSelectedFile(); + + } + else + { + // + result = null; + } + + // + return result; + } + + /** + * + */ + public CheckDirectorySelector(final File targetFile) + { + super(); + setBackground(new Color(152, 251, 152)); + + // + File file; + if ((targetFile == null) || (StringUtils.isBlank(targetFile.getAbsolutePath()))) + { + file = null; + + } + else if (targetFile.isFile()) + { + file = targetFile.getParentFile(); + } + else + { + file = targetFile; + } + + // + setSelectedFile(file); + setDialogTitle(BUNDLE.getString("CheckDirectorySelector.this.dialogTitle")); //$NON-NLS-1$ + setFileSelectionMode(JFileChooser.FILES_ONLY); + FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers md5", "md5"); + setAcceptAllFileFilterUsed(false); + addChoosableFileFilter(filter); + setApproveButtonText(BackupPanel.BUNDLE.getString("BackupPanel.checkFileChooserButton.text")); + setDialogType(CUSTOM_DIALOG); + } + + /** + * + */ + @Override + public void approveSelection() + { + // + // File targetFile = getSelectedFile(); + + super.approveSelection(); + } + + /** + * + */ + @Override + public void cancelSelection() + { + // + super.cancelSelection(); + } + + /** + * + */ + @Override + public void setSelectedFile(final File file) + { + // + super.setSelectedFile(file); + + System.out.println("==== SET SELECTED FILE================="); + System.out.println("SELECED FILE " + file); + } + + /** + * + */ + @Override + public void setVisible(final boolean visible) + { + // + super.setVisible(visible); + + if (!visible) + { + // + resetChoosableFileFilters(); + } + } +} \ No newline at end of file diff --git a/src/org/dclermonte/siba/gui/CheckPanel.java b/src/org/dclermonte/siba/gui/CheckPanel.java index 60eea6f..8b9d606 100644 --- a/src/org/dclermonte/siba/gui/CheckPanel.java +++ b/src/org/dclermonte/siba/gui/CheckPanel.java @@ -1,6 +1,6 @@ /* + * Copyright (C) 2016 Didier Clermonté * Copyright (C) 2016 Christian Pierre Momon - * Didier Clermonté * * This file is part of Siba. * @@ -19,6 +19,7 @@ */ package org.dclermonte.siba.gui; +import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -27,20 +28,19 @@ import java.io.FileReader; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ResourceBundle; import javax.swing.JButton; -import javax.swing.JFileChooser; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; -import javax.swing.filechooser.FileNameExtensionFilter; import com.jgoodies.forms.layout.ColumnSpec; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.FormSpecs; import com.jgoodies.forms.layout.RowSpec; import com.jgoodies.forms.layout.Sizes; -import java.util.ResourceBundle; /** * @@ -76,6 +76,7 @@ public class CheckPanel extends JPanel add(lblNewLabel, "2, 2, left, center"); JButton btnNewButton = new JButton(BUNDLE.getString("CheckPanel.btnNewButton.text")); //$NON-NLS-1$ + btnNewButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnNewButton.addActionListener(new ActionListener() { @Override @@ -104,6 +105,7 @@ public class CheckPanel extends JPanel add(btnNewButton, "4, 2, left, top"); JButton btnNewButton_1 = new JButton(BUNDLE.getString("CheckPanel.btnNewButton_1.text")); //$NON-NLS-1$ + btnNewButton_1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnNewButton_1.addActionListener(new ActionListener() { @Override @@ -176,15 +178,20 @@ public class CheckPanel extends JPanel hashString.append(hex.substring(hex.length() - 2)); } } - + String titre = BUNDLE.getString("CheckPanel.confirmDialogTitle.text"); + String yourFile = BUNDLE.getString("CheckPanel.confirmDialogYourString.text"); if (md5String.equals(hashString.toString())) { - CheckDialog.main("Vérification OK"); + String message = yourFile + fileToCheck1.getName() + " " + + BUNDLE.getString("CheckPanel.confirmDialogGood.text"); + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE); } else { - CheckDialog.main("Il y a une erreur"); + String message = yourFile + fileToCheck1.getName() + " " + + BUNDLE.getString("CheckPanel.confirmDialogBad.text"); + JOptionPane.showMessageDialog(null, message, titre, JOptionPane.INFORMATION_MESSAGE); } } @@ -195,19 +202,14 @@ public class CheckPanel extends JPanel */ final void choosenDirectory() throws IOException, NoSuchAlgorithmException { - final JFileChooser fc = new JFileChooser(); - FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers md5", "md5"); - fc.setAcceptAllFileFilterUsed(false); - fc.addChoosableFileFilter(filter); - fc.setFileSelectionMode(JFileChooser.FILES_ONLY); - int returnVal = fc.showDialog(CheckPanel.this, "Sauvegarde à vérifier"); - - if (returnVal == JFileChooser.APPROVE_OPTION) + this.choosenFile = CheckDirectorySelector.showSelectorDialog(null, null); + if (this.choosenFile == null) { - this.choosenFile = fc.getSelectedFile(); - this.textField.setText(this.choosenFile.getName()); + return; } + this.textField.setText(this.choosenFile.getName()); + // } } } diff --git a/src/org/dclermonte/siba/gui/SibaGUI.java b/src/org/dclermonte/siba/gui/SibaGUI.java index 1eb535b..44a4ba9 100644 --- a/src/org/dclermonte/siba/gui/SibaGUI.java +++ b/src/org/dclermonte/siba/gui/SibaGUI.java @@ -22,9 +22,11 @@ package org.dclermonte.siba.gui; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Cursor; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Font; +import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Locale; @@ -37,13 +39,36 @@ import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; +import javax.swing.SwingConstants; import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; import org.apache.commons.lang3.StringUtils; import org.dclermonte.siba.gui.utils.GUIToolBox; public class SibaGUI { + private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.dclermonte.siba.gui.messages"); //$NON-NLS-1$ + + public static void main(final String[] args) + { + EventQueue.invokeLater(new Runnable() + { + @Override + public void run() + { + try + { + SibaGUI window = new SibaGUI(); + window.frmSimpleBackup.setVisible(true); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + }); + } /** * Launch the application. @@ -54,8 +79,14 @@ public class SibaGUI /** * Create the application. + * + * @throws UnsupportedLookAndFeelException + * @throws IllegalAccessException + * @throws InstantiationException + * @throws ClassNotFoundException */ - public SibaGUI() + public SibaGUI() throws ClassNotFoundException, InstantiationException, IllegalAccessException, + UnsupportedLookAndFeelException { // Set default GUI catch. Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() @@ -69,9 +100,7 @@ public class SibaGUI String message; if (exception instanceof OutOfMemoryError) { - message = "Java ran out of memory!\n\n To fix this problem, run GeneaQuilts from the command " - + "line:\njava -jar -Xms256m geneaquilt-x.x.x.jar\n\nIf you still " - + "get the same error, increase the value 256 above."; + message = "Java ran out of memory!\n\n"; } else { @@ -116,6 +145,7 @@ public class SibaGUI System.out.println("Failed to set the system LookAndFeel."); } } + /* UIManager.setLookAndFeel("com.sun.java.swing.plaf.metal.MetalLookAndFeel"); */ System.out.println("Activated lookAndFeel: " + UIManager.getLookAndFeel().getName()); // Set default locale. @@ -132,19 +162,24 @@ public class SibaGUI private void initialize() { this.frmSimpleBackup = new JFrame(); + this.frmSimpleBackup.getContentPane().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); this.frmSimpleBackup.setMinimumSize(new Dimension(600, 400)); this.frmSimpleBackup.getContentPane().setBackground(new Color(173, 255, 47)); JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); + tabbedPane.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); this.frmSimpleBackup.getContentPane().add(tabbedPane, BorderLayout.CENTER); JPanel panel = new BackupPanel(); - panel.setBackground(new Color(152, 251, 152)); - tabbedPane.addTab("BackUp", null, panel, null); + panel.setBackground(new Color(0, 255, 0)); + String backup = BackupPanel.BUNDLE.getString("BackupPanel.TitleBackupPanel.text"); + tabbedPane.addTab(backup, null, panel, null); JPanel panel_1 = new CheckPanel(); + panel_1.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); panel_1.setBackground(new Color(144, 238, 144)); - tabbedPane.addTab("Check", null, panel_1, null); + String check = BackupPanel.BUNDLE.getString("BackupPanel.TitleCheckPanel.text"); + tabbedPane.addTab(check, null, panel_1, null); this.frmSimpleBackup.setFont(new Font("DejaVu Sans", Font.BOLD, 12)); this.frmSimpleBackup.setForeground(new Color(0, 100, 0)); this.frmSimpleBackup.setBackground(new Color(102, 205, 170)); @@ -153,9 +188,14 @@ public class SibaGUI this.frmSimpleBackup.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JMenuBar menuBar = new JMenuBar(); + menuBar.setBackground(new Color(152, 251, 152)); this.frmSimpleBackup.setJMenuBar(menuBar); - JMenuItem mntmNewMenuItem_1 = new JMenuItem("Sortir"); + JMenuItem mntmNewMenuItem_1 = new JMenuItem(BUNDLE.getString("SibaGUI.mntmNewMenuItem_1.text")); //$NON-NLS-1$ + mntmNewMenuItem_1.setMaximumSize(new Dimension(100, 32767)); + mntmNewMenuItem_1.setHorizontalTextPosition(SwingConstants.LEFT); + mntmNewMenuItem_1.setHorizontalAlignment(SwingConstants.LEFT); + mntmNewMenuItem_1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); mntmNewMenuItem_1.addActionListener(new ActionListener() { @Override @@ -166,12 +206,18 @@ public class SibaGUI }); menuBar.add(mntmNewMenuItem_1); - JMenu mnNewMenu = new JMenu("Help"); + JMenu mnNewMenu = new JMenu(BUNDLE.getString("SibaGUI.mnNewMenu.text")); //$NON-NLS-1$ + mnNewMenu.setLocation(new Point(500, 0)); + mnNewMenu.setHorizontalTextPosition(SwingConstants.RIGHT); + mnNewMenu.setHorizontalAlignment(SwingConstants.RIGHT); + mnNewMenu.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + mnNewMenu.setForeground(new Color(0, 0, 0)); mnNewMenu.setBackground(new Color(127, 255, 212)); mnNewMenu.setOpaque(true); menuBar.add(mnNewMenu); - JMenuItem mntmNewMenuItem_2 = new JMenuItem("About"); + JMenuItem mntmNewMenuItem_2 = new JMenuItem(BUNDLE.getString("SibaGUI.mntmNewMenuItem_2.text")); //$NON-NLS-1$ + mntmNewMenuItem_2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); mntmNewMenuItem_2.addActionListener(new ActionListener() { @Override @@ -201,24 +247,4 @@ public class SibaGUI ResourceBundle.clearCache(); } - public static void main(final String[] args) - { - EventQueue.invokeLater(new Runnable() - { - @Override - public void run() - { - try - { - SibaGUI window = new SibaGUI(); - window.frmSimpleBackup.setVisible(true); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - }); - } - } diff --git a/src/org/dclermonte/siba/gui/SourceDirectorySelector.java b/src/org/dclermonte/siba/gui/SourceDirectorySelector.java index 605cf2b..105db26 100644 --- a/src/org/dclermonte/siba/gui/SourceDirectorySelector.java +++ b/src/org/dclermonte/siba/gui/SourceDirectorySelector.java @@ -1,11 +1,13 @@ package org.dclermonte.siba.gui; +import java.awt.Color; import java.awt.Component; import java.io.File; import javax.swing.JFileChooser; import org.apache.commons.lang3.StringUtils; +import java.util.ResourceBundle; /** * @@ -13,14 +15,46 @@ import org.apache.commons.lang3.StringUtils; */ public class SourceDirectorySelector extends JFileChooser { + private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.dclermonte.siba.gui.messages"); //$NON-NLS-1$ private static final long serialVersionUID = 3782597353602048214L; + /** + * This method is the main one of the selector. + * + * @param parent + * @return + */ + public static File showSelectorDialog(final Component parent, final File targetFile) + { + File result; + + // + SourceDirectorySelector selector = new SourceDirectorySelector(targetFile); + + // + if (selector.showDialog(parent, null) == JFileChooser.APPROVE_OPTION) + { + // + result = selector.getSelectedFile(); + + } + else + { + // + result = null; + } + + // + return result; + } + /** * */ public SourceDirectorySelector(final File targetFile) { super(); + setBackground(new Color(152, 251, 152)); // File file; @@ -40,10 +74,10 @@ public class SourceDirectorySelector extends JFileChooser // setSelectedFile(file); - setDialogTitle("Database directory"); + setDialogTitle(BUNDLE.getString("SourceDirectorySelector.this.dialogTitle")); //$NON-NLS-1$ setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); setAcceptAllFileFilterUsed(false); - setApproveButtonText("Select"); + setApproveButtonText(BackupPanel.BUNDLE.getString("BackupPanel.sourceFileChooserButton.text")); setDialogType(CUSTOM_DIALOG); } @@ -97,34 +131,4 @@ public class SourceDirectorySelector extends JFileChooser resetChoosableFileFilters(); } } - - /** - * This method is the main one of the selector. - * - * @param parent - * @return - */ - public static File showSelectorDialog(final Component parent, final File targetFile) - { - File result; - - // - SourceDirectorySelector selector = new SourceDirectorySelector(targetFile); - - // - if (selector.showDialog(parent, null) == JFileChooser.APPROVE_OPTION) - { - // - result = selector.getSelectedFile(); - - } - else - { - // - result = null; - } - - // - return result; - } } \ No newline at end of file diff --git a/src/org/dclermonte/siba/gui/TargetDirectorySelector.java b/src/org/dclermonte/siba/gui/TargetDirectorySelector.java new file mode 100644 index 0000000..b3687a5 --- /dev/null +++ b/src/org/dclermonte/siba/gui/TargetDirectorySelector.java @@ -0,0 +1,134 @@ +package org.dclermonte.siba.gui; + +import java.awt.Color; +import java.awt.Component; +import java.io.File; + +import javax.swing.JFileChooser; + +import org.apache.commons.lang3.StringUtils; +import java.util.ResourceBundle; + +/** + * + * @author Christian Pierre MOMON (christian.momon@devinsy.fr) + */ +public class TargetDirectorySelector extends JFileChooser +{ + private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.dclermonte.siba.gui.messages"); //$NON-NLS-1$ + private static final long serialVersionUID = 3782597353602048214L; + + /** + * This method is the main one of the selector. + * + * @param parent + * @return + */ + public static File showSelectorDialog(final Component parent, final File targetFile) + { + File result; + + // + TargetDirectorySelector selector = new TargetDirectorySelector(targetFile); + + // + if (selector.showDialog(parent, null) == JFileChooser.APPROVE_OPTION) + { + // + result = selector.getSelectedFile(); + + } + else + { + // + result = null; + } + + // + return result; + } + + /** + * + */ + public TargetDirectorySelector(final File targetFile) + { + super(); + setBackground(new Color(152, 251, 152)); + + // + File file; + if ((targetFile == null) || (StringUtils.isBlank(targetFile.getAbsolutePath()))) + { + file = null; + + } + else if (targetFile.isFile()) + { + file = targetFile.getParentFile(); + } + else + { + file = targetFile; + } + + // + setSelectedFile(file); + setDialogTitle(BUNDLE.getString("TargetDirectorySelector.this.dialogTitle")); //$NON-NLS-1$ + setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + setAcceptAllFileFilterUsed(false); + setApproveButtonText(BackupPanel.BUNDLE.getString("BackupPanel.targetFileChooserButton.text")); + setDialogType(CUSTOM_DIALOG); + } + + /** + * + */ + @Override + public void approveSelection() + { + // + // File targetFile = getSelectedFile(); + + super.approveSelection(); + } + + /** + * + */ + @Override + public void cancelSelection() + { + // + super.cancelSelection(); + } + + /** + * + */ + @Override + public void setSelectedFile(final File file) + { + // + super.setSelectedFile(file); + + System.out.println("==== SET SELECTED FILE================="); + System.out.println("SELECED FILE " + file); + } + + /** + * + */ + @Override + public void setVisible(final boolean visible) + { + // + super.setVisible(visible); + + if (!visible) + { + // + resetChoosableFileFilters(); + } + } +} \ No newline at end of file diff --git a/src/org/dclermonte/siba/gui/messages.properties b/src/org/dclermonte/siba/gui/messages.properties index f4bd42e..37fe9b2 100644 --- a/src/org/dclermonte/siba/gui/messages.properties +++ b/src/org/dclermonte/siba/gui/messages.properties @@ -1,17 +1,28 @@ #Field ResourceBundle: BUNDLE -#Thu Apr 21 22:53:27 CEST 2016 +#Tue Apr 26 16:39:35 CEST 2016 +BackupPanel.TitleBackupPanel.text=Backup +BackupPanel.TitleCheckPanel.text=Check BackupPanel.btnNewButton.text=\u2026 BackupPanel.btnNewButton_1.text=\u2026 BackupPanel.btnNewButton_2.text=Backup -BackupPanel.lblLeRepertoire.text=- le repertoire \u00E0 compresser -BackupPanel.lblNewLabel_1.text=Date Format -BackupPanel.lblNewLabel_2.text=

Choisissez \:

- 1 \: le r\u00E9pertoire que vous souhaitez sauvegarder

- 2 \: le r\u00E9pertoire dans lequel vous souhaitez placer la sauvegarde

- 3 \: Cliquez sur Backup

-BackupPanel.lblSourceDirectory.text=Source Directory -BackupPanel.lblTargetDirectory.text=Target Directory -BackupPanel.rdbtnNewRadioButton.text=(iso8601) YYYY-MM-dd -BackupPanel.rdbtnNewRadioButton_1.text=Human +BackupPanel.lblNewLabel_2.text=

Choose \:

- 1 \: The directory to backup

- 2 \: The directory where you want to put the backup

- 3 \: Click Backup

+BackupPanel.lblSourceDirectory.text=Source Directory : +BackupPanel.lblTargetDirectory.text=Target Directory : BackupPanel.sourceFileChooserButton.text=Source Directory BackupPanel.targetFileChooserButton.text=Target Directory -CheckPanel.btnNewButton.text=... +CheckDirectorySelector.this.dialogTitle=Directory where is the backup +CheckPanel.btnNewButton.text=\u2026 CheckPanel.btnNewButton_1.text=Check -CheckPanel.lblNewLabel.text=Sauvegarde \u00E0 v\u00E9rifier +CheckPanel.lblNewLabel.text=File to be Checked +SibaGUI.mnNewMenu.text=Help +SibaGUI.mntmNewMenuItem_1.text=End +SibaGUI.mntmNewMenuItem_2.text=About +SourceDirectorySelector.this.dialogTitle=Directory to backup +TargetDirectorySelector.this.dialogTitle=Directory for the backup +BackupPanel.checkFileChooserButton.text= File to check +BackupPanel.confirmDialogTitle.text = Backup done +BackupPanel.confirmDialogMessage.text = Your directory has been backup \n in the file :\n +CheckPanel.confirmDialogTitle.text = Check done +CheckPanel.confirmDialogYourString.text = Your File +CheckPanel.confirmDialogGood.text = has been check and is good +CheckPanel.confirmDialogBad.text = is corrupted \ No newline at end of file diff --git a/src/org/dclermonte/siba/gui/messages_fr_FR.properties b/src/org/dclermonte/siba/gui/messages_fr_FR.properties index 3fc3cec..435bab7 100644 --- a/src/org/dclermonte/siba/gui/messages_fr_FR.properties +++ b/src/org/dclermonte/siba/gui/messages_fr_FR.properties @@ -2,17 +2,27 @@ #Tue Apr 19 12:21:42 CEST 2016 BackupPanel.btnNewButton.text=\u2026 BackupPanel.btnNewButton_1.text=\u2026 -BackupPanel.btnNewButton_2.text=Backup -BackupPanel.lblLeRepertoire.text=- le repertoire \u00E0 compresser -BackupPanel.lblSourceDirectory.text=Répertoire origine -BackupPanel.lblNewLabel_1.text=Date Format -BackupPanel.lblNewLabel_2.text=

Choisissez :

- 1 : le répertoire que vous souhaitez sauvegarder

- 2 : le répertoire dans lequel vous souhaitez placer la sauvegarde

- 3 : Cliquez sur Backup

-BackupPanel.lblSourceDirectory.text=Répertoire origine -BackupPanel.lblTargetDirectory.text=Répertoire de destination -BackupPanel.rdbtnNewRadioButton.text=(iso8601) YYYY-MM-dd -BackupPanel.rdbtnNewRadioButton_1.text=Human -BackupPanel.sourceFileChooserButton.text=Source Directory -BackupPanel.targetFileChooserButton.text=Target Directory -CheckPanel.btnNewButton.text=... +BackupPanel.btnNewButton_2.text=Sauvegarde +BackupPanel.lblNewLabel_2.text=

Choisissez :

- 1 : le répertoire que vous souhaitez sauvegarder

- 2 : le répertoire dans lequel vous souhaitez placer la sauvegarde

- 3 : Cliquez sur Sauvegarde

+BackupPanel.lblSourceDirectory.text=Répertoire \u00E0 sauvegarder : +BackupPanel.lblTargetDirectory.text=Répertoire de destination : +BackupPanel.sourceFileChooserButton.text= Répertoire à sauvegarder +BackupPanel.targetFileChooserButton.text=Répertoire destination +BackupPanel.TitleCheckPanel.text = Vérification +BackupPanel.TitleBackupPanel.text = Sauvegarde +CheckDirectorySelector.this.dialogTitle=Emplacement de la sauvegarde +CheckPanel.btnNewButton.text=\u2026 CheckPanel.btnNewButton_1.text=Vérifier CheckPanel.lblNewLabel.text=Sauvegarde \u00E0 v\u00E9rifier +SibaGUI.mnNewMenu.text=Aide +SibaGUI.mntmNewMenuItem_1.text=Sortir +SibaGUI.mntmNewMenuItem_2.text=A propos +SourceDirectorySelector.this.dialogTitle=Choix du répertoire à sauvegarder +TargetDirectorySelector.this.dialogTitle=Choix du répertoire de destination +BackupPanel.checkFileChooserButton.text= Fichier à vérifier +BackupPanel.confirmDialogTitle.text = Sauvegarde faite +BackupPanel.confirmDialogMessage.text = Votre répertoire a été sauvegardé \n dans le fichier :\n +CheckPanel.confirmDialogTitle.text = Vérification faite +CheckPanel.confirmDialogYourString.text = Votre fichier +CheckPanel.confirmDialogGood.text = a été vérifié et ne comporte pas d'erreurs +CheckPanel.confirmDialogBad.text = comporte des erreurs \ No newline at end of file diff --git a/src/org/dclermonte/siba/gui/site.odt.txt b/src/org/dclermonte/siba/gui/site.odt.txt deleted file mode 100644 index 8d1c8b6..0000000 --- a/src/org/dclermonte/siba/gui/site.odt.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/org/dclermonte/siba/model/SibaManager.java b/src/org/dclermonte/siba/model/SibaManager.java index 8de9015..73bef2d 100644 --- a/src/org/dclermonte/siba/model/SibaManager.java +++ b/src/org/dclermonte/siba/model/SibaManager.java @@ -1,6 +1,6 @@ /* + * Copyright (C) 2016 Didier Clermonté * Copyright (C) 2016 Christian Pierre Momon - * Didier Clermonté * * This file is part of Siba. * @@ -19,6 +19,7 @@ */ package org.dclermonte.siba.model; +import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -35,10 +36,10 @@ import java.util.LinkedList; import java.util.List; import org.apache.commons.compress.archivers.ArchiveException; -import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; import org.apache.commons.compress.utils.IOUtils; @@ -46,40 +47,37 @@ public class SibaManager { public static int pathLength; - public static File backup(final File toto, final String target) throws ArchiveException, IOException + public static File backup(final File fileToSave, final String target) throws ArchiveException, IOException { File result; - pathLength = toto.getParentFile().getAbsolutePath().length(); + if ((fileToSave == null) || (new File(target) == null)) + { + return null; + } + pathLength = fileToSave.getParentFile().getAbsolutePath().length(); - /* String outputFileNameWithoutExtension = toto.getName()+"-"+ LocalDateTime.now(); */ LocalDateTime date = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'H'h'm'mn's's'"); String text = date.format(formatter); - String outputFileNameWithoutExtension = toto.getName() + "-" + text; - String outputFileName = outputFileNameWithoutExtension + ".tar"; - File output = new File(target + "/" + outputFileName); + String outputFileNameWithoutExtension = fileToSave.getName() + "-" + text; + result = new File(target + "/" + outputFileNameWithoutExtension + ".tgz"); - final OutputStream out = new FileOutputStream(target + "/" + outputFileName); - ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.TAR, out); - directoryToSave(toto, os); - os.close(); - final OutputStream out1 = new FileOutputStream(target + "/" + outputFileNameWithoutExtension + ".tgz"); - final GzipCompressorOutputStream gzCompress = new GzipCompressorOutputStream(out1); - byte[] fileTar = new byte[(int) output.length()]; - FileInputStream fileReader = new FileInputStream(output); - fileReader.read(fileTar); - gzCompress.write(fileTar); - gzCompress.close(); - output.delete(); + OutputStream gzipOutputStream = new GzipCompressorOutputStream( + new BufferedOutputStream(new FileOutputStream(result))); + TarArchiveOutputStream out = new TarArchiveOutputStream(gzipOutputStream); + directoryToSave(fileToSave, out); + out.close(); md5(result, target + "/" + outputFileNameWithoutExtension + ".tgz.md5"); // + return result; } - public static void directoryToSave(final File directory, final ArchiveOutputStream outputStream) throws IOException + public static void directoryToSave(final File directory, final TarArchiveOutputStream outputStream) + throws IOException { for (File file : directory.listFiles()) { @@ -90,13 +88,13 @@ public class SibaManager } else { - TarArchiveEntry tae = new TarArchiveEntry(file); + TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(file); String pathPartiel = file.getPath().substring(pathLength); - tae.setName(pathPartiel); - /* outputStream.putArchiveEntry(new TarArchiveEntry(file)); */ - outputStream.putArchiveEntry(tae); + tarArchiveEntry.setName(pathPartiel); + outputStream.putArchiveEntry(tarArchiveEntry); IOUtils.copy(new FileInputStream(file), outputStream); outputStream.closeArchiveEntry(); + } } @@ -193,4 +191,6 @@ public class SibaManager return result; } + + public GzipCompressorOutputStream gzCompress; }