Create a FileUtils class to simplify file opening/saving.
This commit is contained in:
parent
8661e63728
commit
0030ab7aef
3 changed files with 123 additions and 53 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue