X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fgui%2FFileManager.java;h=038eda8c10f1f522bb4dcd79a1cdf7b2a340fdde;hb=dc77498d76f44c218603e026b825b389865bba73;hp=8f10ebb55dfbb33bc597325466ccd89dc72051f9;hpb=6e9e21a8b9631a4f24d9ebc1e83067e51edb28b2;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/gui/FileManager.java b/src/net/pterodactylus/jsite/gui/FileManager.java index 8f10ebb..038eda8 100644 --- a/src/net/pterodactylus/jsite/gui/FileManager.java +++ b/src/net/pterodactylus/jsite/gui/FileManager.java @@ -37,13 +37,12 @@ import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; -import javax.swing.JFrame; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; @@ -54,11 +53,12 @@ import net.pterodactylus.jsite.i18n.gui.I18nLabel; import net.pterodactylus.jsite.project.Project; import net.pterodactylus.util.io.MimeTypes; import net.pterodactylus.util.logging.Logging; +import net.pterodactylus.util.swing.SortableTreeNode; import net.pterodactylus.util.swing.SwingUtils; /** * Manages physical and virtual files in a project. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> */ public class FileManager extends JDialog implements I18nable, ActionListener, TreeSelectionListener { @@ -72,9 +72,15 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /** The project whose files to manage. */ private final Project project; + /** The root of the file tree. */ + private final SortableTreeNode fileTreeRoot; + /** The tree model for the project files. */ private final TreeModel fileTreeModel; + /** The “rescan” action. */ + private I18nAction rescanAction; + /** The “close” action. */ private I18nAction closeAction; @@ -101,7 +107,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /** * Creates a new file manager. - * + * * @param swingInterface * The Swing interface * @param project @@ -112,7 +118,8 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr logger.log(Level.FINEST, "project: " + project); this.swingInterface = swingInterface; this.project = project; - fileTreeModel = new DefaultTreeModel(new DefaultMutableTreeNode(File.separator)); + fileTreeRoot = new SortableTreeNode(project.getName()); + fileTreeModel = new DefaultTreeModel(fileTreeRoot); initActions(); initComponents(); pack(); @@ -131,7 +138,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr if (visible) { initiateFileScan(); } - super.setVisible(visible); + super.setVisible(visible); } // @@ -151,6 +158,16 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr setVisible(false); } }; + rescanAction = new I18nAction("fileManager.button.rescan") { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + initiateFileScan(); + } + }; insertAction = new I18nAction("fileManager.checkbox.insertFile") { /** @@ -190,12 +207,13 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /** * Creates the main panel with the file tree and the file properties. - * + * * @return The mail panel */ private Component createFileManagerPanel() { JPanel fileManagerPanel = new JPanel(new BorderLayout(12, 12)); + /* file tree panel */ JPanel fileTreePanel = new JPanel(new BorderLayout(12, 12)); fileManagerPanel.add(fileTreePanel, BorderLayout.LINE_START); @@ -209,6 +227,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr fileTreePanel.add(projectFilesLabelPanel, BorderLayout.NORTH); projectFilesLabelPanel.add(projectFilesLabel); + /* properties panel */ JPanel propertiesPanel = new JPanel(new GridBagLayout()); fileManagerPanel.add(propertiesPanel, BorderLayout.CENTER); propertiesPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(12, 12, 12, 12))); @@ -226,12 +245,16 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr propertiesPanel.add(new JPanel(), new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + /* action button panel */ + JPanel actionButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 12, 12)); + actionButtonPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(-12, -12, -12, -12))); + return fileManagerPanel; } /** * Creates the button panel. - * + * * @return The button panel */ private Component createButtonPanel() { @@ -247,13 +270,37 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr private void initiateFileScan() { swingInterface.getThreadPool().execute(new Runnable() { + /** * @see java.lang.Runnable#run() */ + @SuppressWarnings("synthetic-access") public void run() { - String basePath = project.getBasePath(); - File basePathDirectory = new File(basePath); + String basePath = project.getBasePath(); + File basePathDirectory = new File(basePath); + if (!basePathDirectory.exists() || !basePathDirectory.isDirectory()) { + /* TODO - i18n */ + JOptionPane.showMessageDialog(FileManager.this, I18n.get(""), I18n.get(""), JOptionPane.ERROR_MESSAGE); + return; + } + synchronized (fileTreeRoot) { + scanDirectory(fileTreeRoot, basePathDirectory); + } + fileTree.repaint(); + } + + private void scanDirectory(SortableTreeNode rootNode, File directory) { + System.out.println("scanning " + directory.getAbsolutePath()); + for (File file: directory.listFiles()) { + SortableTreeNode fileNode = new SortableTreeNode(file.getName()); + rootNode.add(fileNode); + if (file.isDirectory()) { + scanDirectory(fileNode, file); + } + } + rootNode.sort(); } + }); }