Create a FileUtils class to simplify file opening/saving.
This commit is contained in:
		@@ -19,7 +19,6 @@ import java.io.IOException;
 | 
			
		||||
import java.io.PrintStream;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.prefs.Preferences;
 | 
			
		||||
 | 
			
		||||
import javax.swing.BorderFactory;
 | 
			
		||||
import javax.swing.Box;
 | 
			
		||||
@@ -42,7 +41,6 @@ import javax.swing.Timer;
 | 
			
		||||
import javax.swing.UIManager;
 | 
			
		||||
import javax.swing.border.CompoundBorder;
 | 
			
		||||
import javax.swing.border.EmptyBorder;
 | 
			
		||||
import javax.swing.filechooser.FileNameExtensionFilter;
 | 
			
		||||
 | 
			
		||||
import org.insa.algo.AbstractSolution;
 | 
			
		||||
import org.insa.algo.AlgorithmFactory;
 | 
			
		||||
@@ -70,6 +68,8 @@ import org.insa.graphics.drawing.Drawing;
 | 
			
		||||
import org.insa.graphics.drawing.GraphPalette;
 | 
			
		||||
import org.insa.graphics.drawing.components.BasicDrawing;
 | 
			
		||||
import org.insa.graphics.drawing.components.MapViewDrawing;
 | 
			
		||||
import org.insa.graphics.utils.FileUtils;
 | 
			
		||||
import org.insa.graphics.utils.FileUtils.FolderType;
 | 
			
		||||
 | 
			
		||||
public class MainWindow extends JFrame {
 | 
			
		||||
 | 
			
		||||
@@ -88,15 +88,6 @@ public class MainWindow extends JFrame {
 | 
			
		||||
     */
 | 
			
		||||
    private static final int THREAD_TIMER_DELAY = 1000; // in milliseconds
 | 
			
		||||
 | 
			
		||||
    private static final String DEFAULT_MAP_FOLDER_KEY = "DefaultMapFolder";
 | 
			
		||||
    private static final String DEFAULT_MAP_FOLDER_INSA = "/home/commetud/...";
 | 
			
		||||
 | 
			
		||||
    private static final String DEFAULT_PATH_FOLDER_KEY = "DefaultPathFolder";
 | 
			
		||||
    private static final String DEFAULT_PATH_FOLDER_INSA = "/home/commetud/...";
 | 
			
		||||
 | 
			
		||||
    // Preferences
 | 
			
		||||
    private Preferences preferences = Preferences.userRoot().node(getClass().getName());
 | 
			
		||||
 | 
			
		||||
    // Current graph.
 | 
			
		||||
    protected Graph graph;
 | 
			
		||||
 | 
			
		||||
@@ -303,25 +294,9 @@ public class MainWindow extends JFrame {
 | 
			
		||||
        ActionListener openMapActionListener = new ActionListener() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void actionPerformed(ActionEvent e) {
 | 
			
		||||
                JFileChooser chooser = new JFileChooser();
 | 
			
		||||
                FileNameExtensionFilter filter = new FileNameExtensionFilter("Graph files",
 | 
			
		||||
                        "mapgr");
 | 
			
		||||
                File mapFolder = new File(
 | 
			
		||||
                        preferences.get(DEFAULT_MAP_FOLDER_KEY, DEFAULT_MAP_FOLDER_INSA));
 | 
			
		||||
                if (!mapFolder.exists()) {
 | 
			
		||||
                    mapFolder = new File(System.getProperty("user.dir"));
 | 
			
		||||
                }
 | 
			
		||||
                chooser.setCurrentDirectory(mapFolder);
 | 
			
		||||
                chooser.setFileFilter(filter);
 | 
			
		||||
                JFileChooser chooser = FileUtils.createFileChooser(FolderType.Map);
 | 
			
		||||
                if (chooser.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION) {
 | 
			
		||||
                    graphFilePath = chooser.getSelectedFile().getAbsolutePath();
 | 
			
		||||
 | 
			
		||||
                    // Check...
 | 
			
		||||
                    if (chooser.getSelectedFile().exists()) {
 | 
			
		||||
                        preferences.put(DEFAULT_MAP_FOLDER_KEY,
 | 
			
		||||
                                chooser.getSelectedFile().getParent());
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    DataInputStream stream;
 | 
			
		||||
                    try {
 | 
			
		||||
                        stream = new DataInputStream(new BufferedInputStream(
 | 
			
		||||
@@ -659,24 +634,8 @@ public class MainWindow extends JFrame {
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void actionPerformed(ActionEvent e) {
 | 
			
		||||
                JFileChooser chooser = new JFileChooser();
 | 
			
		||||
                FileNameExtensionFilter filter = new FileNameExtensionFilter(
 | 
			
		||||
                        "Path & compressed path files", "path");
 | 
			
		||||
                File pathFolder = new File(
 | 
			
		||||
                        preferences.get(DEFAULT_PATH_FOLDER_KEY, DEFAULT_PATH_FOLDER_INSA));
 | 
			
		||||
                if (!pathFolder.exists()) {
 | 
			
		||||
                    pathFolder = new File(System.getProperty("user.dir"));
 | 
			
		||||
                }
 | 
			
		||||
                chooser.setCurrentDirectory(pathFolder);
 | 
			
		||||
                chooser.setFileFilter(filter);
 | 
			
		||||
                JFileChooser chooser = FileUtils.createFileChooser(FolderType.PathInput);
 | 
			
		||||
                if (chooser.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION) {
 | 
			
		||||
 | 
			
		||||
                    // Check & Update
 | 
			
		||||
                    if (chooser.getSelectedFile().exists()) {
 | 
			
		||||
                        preferences.put(DEFAULT_PATH_FOLDER_KEY,
 | 
			
		||||
                                chooser.getSelectedFile().getParent());
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    BinaryPathReader reader;
 | 
			
		||||
                    try {
 | 
			
		||||
                        reader = new BinaryPathReader(new DataInputStream(new BufferedInputStream(
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,8 @@ import org.insa.graph.Path;
 | 
			
		||||
import org.insa.graph.io.BinaryPathWriter;
 | 
			
		||||
import org.insa.graphics.drawing.Drawing;
 | 
			
		||||
import org.insa.graphics.drawing.overlays.PathOverlay;
 | 
			
		||||
import org.insa.graphics.utils.FileUtils;
 | 
			
		||||
import org.insa.graphics.utils.FileUtils.FolderType;
 | 
			
		||||
 | 
			
		||||
public class PathsPanel extends JPanel implements DrawingChangeListener, GraphChangeListener {
 | 
			
		||||
 | 
			
		||||
@@ -216,18 +218,15 @@ public class PathsPanel extends JPanel implements DrawingChangeListener, GraphCh
 | 
			
		||||
            saveButton.addActionListener(new ActionListener() {
 | 
			
		||||
                @Override
 | 
			
		||||
                public void actionPerformed(ActionEvent e) {
 | 
			
		||||
                    String filepath = System.getProperty("user.dir");
 | 
			
		||||
                    filepath += File.separator + String.format("path_%s_%d_%d.path",
 | 
			
		||||
                    String filepath = String.format("path_%s_%d_%d.path",
 | 
			
		||||
                            path.getGraph().getMapId().toLowerCase().replaceAll("[^a-z0-9_]", "_"),
 | 
			
		||||
                            path.getOrigin().getId(), path.getDestination().getId());
 | 
			
		||||
                    JFileChooser fileChooser = new JFileChooser();
 | 
			
		||||
                    fileChooser.setSelectedFile(new File(filepath));
 | 
			
		||||
                    fileChooser.setApproveButtonText("Save");
 | 
			
		||||
                    fileChooser.setToolTipText("Save");
 | 
			
		||||
                    JFileChooser chooser = FileUtils.createFileChooser(FolderType.PathOutput,
 | 
			
		||||
                            filepath);
 | 
			
		||||
 | 
			
		||||
                    if (fileChooser
 | 
			
		||||
                    if (chooser
 | 
			
		||||
                            .showSaveDialog(getTopLevelAncestor()) == JFileChooser.APPROVE_OPTION) {
 | 
			
		||||
                        File file = fileChooser.getSelectedFile();
 | 
			
		||||
                        File file = chooser.getSelectedFile();
 | 
			
		||||
                        try {
 | 
			
		||||
                            BinaryPathWriter writer = new BinaryPathWriter(new DataOutputStream(
 | 
			
		||||
                                    new BufferedOutputStream(new FileOutputStream(file))));
 | 
			
		||||
@@ -284,6 +283,7 @@ public class PathsPanel extends JPanel implements DrawingChangeListener, GraphCh
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * (non-Javadoc)
 | 
			
		||||
         * 
 | 
			
		||||
         * @see java.lang.Object#toString()
 | 
			
		||||
         */
 | 
			
		||||
        public String toString() {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										111
									
								
								src/main/org/insa/graphics/utils/FileUtils.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								src/main/org/insa/graphics/utils/FileUtils.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
package org.insa.graphics.utils;
 | 
			
		||||
 | 
			
		||||
import java.awt.event.ActionEvent;
 | 
			
		||||
import java.awt.event.ActionListener;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.util.EnumMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.prefs.Preferences;
 | 
			
		||||
 | 
			
		||||
import javax.swing.JFileChooser;
 | 
			
		||||
import javax.swing.filechooser.FileFilter;
 | 
			
		||||
import javax.swing.filechooser.FileNameExtensionFilter;
 | 
			
		||||
 | 
			
		||||
public class FileUtils {
 | 
			
		||||
 | 
			
		||||
    // Preferences
 | 
			
		||||
    private static Preferences preferences = Preferences.userRoot().node(FileUtils.class.getName());
 | 
			
		||||
 | 
			
		||||
    public enum FolderType {
 | 
			
		||||
        Map, PathInput, PathOutput
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static class PreferencesEntry {
 | 
			
		||||
        public String key;
 | 
			
		||||
        public String value;
 | 
			
		||||
 | 
			
		||||
        public PreferencesEntry(String key, String value) {
 | 
			
		||||
            this.key = key;
 | 
			
		||||
            this.value = value;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Map folder type -> PreferencesEntry
 | 
			
		||||
    private static final Map<FolderType, PreferencesEntry> folderToEntry = new EnumMap<>(
 | 
			
		||||
            FolderType.class);
 | 
			
		||||
 | 
			
		||||
    // Map folder type -> File Filter
 | 
			
		||||
    private static final Map<FolderType, FileFilter> folderToFilter = new EnumMap<>(
 | 
			
		||||
            FolderType.class);
 | 
			
		||||
 | 
			
		||||
    static {
 | 
			
		||||
        // Populate folderToEntry
 | 
			
		||||
        folderToEntry.put(FolderType.Map,
 | 
			
		||||
                new PreferencesEntry("DefaultMapFolder", "/home/commetud/..."));
 | 
			
		||||
        folderToEntry.put(FolderType.PathInput,
 | 
			
		||||
                new PreferencesEntry("DefaultPathInputFolder", "/home/commetud/..."));
 | 
			
		||||
        folderToEntry.put(FolderType.PathOutput,
 | 
			
		||||
                new PreferencesEntry("DefaultPathOutputsFolder", "paths"));
 | 
			
		||||
 | 
			
		||||
        // Populate folderToFilter
 | 
			
		||||
        folderToFilter.put(FolderType.Map, new FileNameExtensionFilter("Graph files", "mapgr"));
 | 
			
		||||
        folderToFilter.put(FolderType.PathInput, new FileNameExtensionFilter("Path files", "path"));
 | 
			
		||||
        folderToFilter.put(FolderType.PathOutput,
 | 
			
		||||
                new FileNameExtensionFilter("Path files", "path"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return A File instance pointing to the preferred folder for the given type.
 | 
			
		||||
     */
 | 
			
		||||
    public static File getPreferredFolder(FolderType folderType) {
 | 
			
		||||
        PreferencesEntry entry = folderToEntry.get(folderType);
 | 
			
		||||
        File folder = new File(preferences.get(entry.key, entry.value));
 | 
			
		||||
        if (!folder.exists()) {
 | 
			
		||||
            folder = new File(System.getProperty("user.dir"));
 | 
			
		||||
        }
 | 
			
		||||
        return folder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void updatePreferredFolder(FolderType folderType, File newPreferredFolder) {
 | 
			
		||||
        PreferencesEntry entry = folderToEntry.get(folderType);
 | 
			
		||||
        preferences.put(entry.key, newPreferredFolder.getAbsolutePath());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return A FileFilter corresponding to input graph files.
 | 
			
		||||
     */
 | 
			
		||||
    public static FileFilter getFileFilter(FolderType folderType) {
 | 
			
		||||
        return folderToFilter.get(folderType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param folderType
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public static JFileChooser createFileChooser(FolderType folderType, String defaultFileName) {
 | 
			
		||||
        JFileChooser chooser = new JFileChooser();
 | 
			
		||||
        chooser.setCurrentDirectory(getPreferredFolder(folderType));
 | 
			
		||||
        if (defaultFileName != null) {
 | 
			
		||||
            chooser.setSelectedFile(new File(chooser.getCurrentDirectory().getAbsolutePath()
 | 
			
		||||
                    + File.separator + defaultFileName));
 | 
			
		||||
        }
 | 
			
		||||
        chooser.setFileFilter(getFileFilter(folderType));
 | 
			
		||||
        chooser.addActionListener(new ActionListener() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void actionPerformed(ActionEvent e) {
 | 
			
		||||
                if (e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) {
 | 
			
		||||
                    if (chooser.getSelectedFile().exists()) {
 | 
			
		||||
                        updatePreferredFolder(folderType,
 | 
			
		||||
                                chooser.getSelectedFile().getParentFile());
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        return chooser;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static JFileChooser createFileChooser(FolderType folderType) {
 | 
			
		||||
        return createFileChooser(folderType, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user