package jffile;
/*
* Settings.java
*
* Created on August 2, 2007, 7:56 PM
*
* @author pquiring
*/
import java.io.*;
import java.util.*;
import javax.swing.*;
import javaforce.*;
public class Settings {
public static class Site {
public String name, host, protocol, port, username, password, localDir, remoteDir;
}
public static class Folder {
public Folder() {
name = "My Sites";
site = new Site[0];
folder = new Folder[0];
}
public String name;
public Site site[];
public Folder folder[];
}
public static Settings settings = new Settings();
public int WindowXSize = 640;
public int WindowYSize = 480;
public int WindowXPos = 0;
public int WindowYPos = 0;
public boolean bWindowMax = true;
public int defaultView = JFileBrowser.VIEW_ICONS;
public Folder sites = new Folder();
public static void loadSettings() {
String fn = JF.getUserPath() + "/.jfile.xml";
XML xml = new XML();
xml.read(fn);
xml.writeClass(xml.root, settings);
}
public static void saveSettings() {
String fn = JF.getUserPath() + "/.jfile.xml";
XML xml = new XML();
xml.root.setName("jfile");
xml.readClass(xml.root, settings);
xml.write(fn);
}
private static int cnt;
public static void importSettings() {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
chooser.setCurrentDirectory(new File(JF.getCurrentPath()));
if (chooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION) return;
try {
XML fz = new XML();
fz.read(chooser.getSelectedFile().getAbsolutePath());
//process fz and insert into settings
cnt = 0;
importTag(fz.root, settings.sites);
} catch (Exception e) {
JFLog.log(e);
}
//save back to xml
saveSettings();
FileApp.inDialog = true;
JF.showMessage("Import", "Imported " + cnt + " entries.");
FileApp.inDialog = false;
}
private static void importTag(XML.XMLTag tag, Folder folder) {
for(int a=0;a<tag.getChildCount();a++) {
XML.XMLTag child = tag.getChildAt(a);
if (child.getName().equalsIgnoreCase("Servers")) {
importTag(child, folder);
continue;
}
if (child.getName().equalsIgnoreCase("Folder")) {
String name = child.getContent();
int idx = name.indexOf("&");
if (idx != -1) name = name.substring(0, idx);
folder.folder = Arrays.copyOf(folder.folder, folder.folder.length + 1);
importTag(child, folder.folder[folder.folder.length-1]);
continue;
}
if (child.getName().equalsIgnoreCase("Server")) {
cnt++;
String name = "untitled", host = "", port = "21", protocol = "ftp", user = "", pass = "", localDir = "", remoteDir = "";
XML.XMLTag field;
for(int b=0;b<child.getChildCount();b++) {
field = child.getChildAt(b);
if (field.getName().equalsIgnoreCase("name")) {name = field.getContent(); continue;}
if (field.getName().equalsIgnoreCase("host")) {host = field.getContent(); continue;}
if (field.getName().equalsIgnoreCase("port")) {port = field.getContent(); continue;}
if (field.getName().equalsIgnoreCase("protocol")) {
if (field.getContent().equals("0")) protocol = "ftp";
if (field.getContent().equals("1")) protocol = "sftp";
if (field.getContent().equals("4")) protocol = "ftps";
continue;
}
if (field.getName().equalsIgnoreCase("user")) {user = field.getContent(); continue;}
if (field.getName().equalsIgnoreCase("pass")) {pass = field.getContent(); continue;}
if (field.getName().equalsIgnoreCase("localDir")) {localDir = field.getContent(); continue;}
if (field.getName().equalsIgnoreCase("remoteDir")) {remoteDir = decodeDir(field.getContent()); continue;}
}
folder.site = Arrays.copyOf(folder.site, folder.site.length + 1);
Site site = folder.site[folder.site.length-1];
site.name = name;
site.host = host;
site.port = port;
site.protocol = protocol;
site.username = user;
site.password = SiteMgr.encodePassword(pass);
site.localDir = localDir;
site.remoteDir = remoteDir;
continue;
}
}
}
private static String decodeDir(String epath) {
//decodes FileZilla3 remoteDir
//Format : 1 0 [<len> element] ...
String path = "";
if (!epath.startsWith("1 0 ")) return "";
epath = epath.substring(3);
while (epath.length() > 0) {
if (epath.charAt(0) != ' ') break;
epath = epath.substring(1);
int idx = epath.indexOf(" ");
if (idx == -1) break;
int len = JF.atoi(epath.substring(0, idx));
if (len <= 0) break;
if (epath.length() < idx + len) break; //approx
path += "/";
path += epath.substring(idx+1, idx+1+len);
epath = epath.substring(idx+1+len);
}
return path;
}
public static void exportSettings() {
/*
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
chooser.setCurrentDirectory(new File(JF.getCurrentPath()));
if (chooser.showSaveDialog(null) != JFileChooser.APPROVE_OPTION) return;
*/
FileApp.inDialog = true;
JF.showMessage("TODO", "Not implemented yet");
FileApp.inDialog = false;
//TODO
}
}