/*
* 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 int WindowXSize = 800;
public static int WindowYSize = 600;
public static int WindowXPos = 0;
public static int WindowYPos = 0;
public static boolean bWindowMax = false;
public static void loadSettings() {
String fn = JF.getUserPath() + "/.jfftp.xml";
XML xml = new XML();
xml.read(fn);
XML.XMLTag tag = xml.getTag(new Object[] {"jfftp", "settings"});
if (tag == null) return; //no settings found
xml.writeClass(tag, new Settings());
}
public static void saveSettings() {
String fn = JF.getUserPath() + "/.jfftp.xml";
XML xml = new XML();
xml.read(fn);
xml.root.setName("jfftp");
XML.XMLTag tag = xml.addSetTag(xml.root, "settings", "", "");
xml.readClass(tag, new 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;
XML xml = new XML();
String fn = JF.getUserPath() + "/.jfftp.xml";
try {
xml.read(fn);
xml.root.setName("jfftp"); //in case .jfftp.xml doesn't exist
xml.addSetTag(xml.root, "sites", "", ""); //in case .jfftp.xml doesn't exist
XML fz = new XML();
fz.read(chooser.getSelectedFile().getAbsolutePath());
//process fz and insert into xml
folder = new ArrayList<String>();
folder.add("jfftp");
folder.add("sites");
cnt = 0;
importTag(fz.root, xml);
} catch (Exception e) {
JFLog.log(e);
}
folder = null;
//save back to xml
xml.write(fn);
JF.showMessage("Import", "Imported " + cnt + " entries.");
}
private static ArrayList<String> folder;
private static void importTag(XML.XMLTag tag, XML xml) {
for(int a=0;a<tag.getChildCount();a++) {
XML.XMLTag child = tag.getChildAt(a);
if (child.getName().equalsIgnoreCase("Servers")) {
importTag(child, xml);
continue;
}
if (child.getName().equalsIgnoreCase("Folder")) {
XML.XMLTag parent = xml.getTag(folder.toArray());
String name = child.getContent();
int idx = name.indexOf("&");
if (idx != -1) name = name.substring(0, idx);
folder.add(name);
xml.addSetTag(parent, "folder", "name=\"" + name + "\"", "");
importTag(child, xml);
folder.remove(folder.size() - 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;}
}
XML.XMLTag parent = xml.getTag(folder.toArray());
parent = xml.addTag(parent, "site", "name=\"" + name + "\"", "");
xml.addSetTag(parent, "host", "", host);
xml.addSetTag(parent, "port", "", port);
xml.addSetTag(parent, "protocol", "", protocol);
xml.addSetTag(parent, "username", "", user);
xml.addSetTag(parent, "password", "", SiteMgr.encodePassword(pass));
xml.addSetTag(parent, "localDir", "", localDir);
xml.addSetTag(parent, "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;
*/
JF.showMessage("TODO", "Not implemented yet");
//TODO
}
}