Author: jflesch
Date: 2007-01-05 00:14:59 +0000 (Fri, 05 Jan 2007)
New Revision: 11568
Added:
trunk/apps/Thaw/images/min-export.png
trunk/apps/Thaw/images/min-import.png
trunk/apps/Thaw/images/min-terminal.png
trunk/apps/Thaw/src/thaw/plugins/IndexExporter.java
trunk/apps/Thaw/src/thaw/plugins/index/IndexRoot.java
Modified:
trunk/apps/Thaw/src/thaw/core/IconBox.java
trunk/apps/Thaw/src/thaw/core/MainWindow.java
trunk/apps/Thaw/src/thaw/core/PluginManager.java
trunk/apps/Thaw/src/thaw/i18n/thaw.properties
trunk/apps/Thaw/src/thaw/plugins/Console.java
trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java
trunk/apps/Thaw/src/thaw/plugins/SqlConsole.java
trunk/apps/Thaw/src/thaw/plugins/index/DatabaseManager.java
trunk/apps/Thaw/src/thaw/plugins/index/Index.java
trunk/apps/Thaw/src/thaw/plugins/index/IndexCategory.java
trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java
trunk/apps/Thaw/src/thaw/plugins/index/IndexTreeNode.java
Log:
Allow index database import-export
Added: trunk/apps/Thaw/images/min-export.png
===================================================================
(Binary files differ)
Property changes on: trunk/apps/Thaw/images/min-export.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/apps/Thaw/images/min-import.png
===================================================================
(Binary files differ)
Property changes on: trunk/apps/Thaw/images/min-import.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/apps/Thaw/images/min-terminal.png
===================================================================
(Binary files differ)
Property changes on: trunk/apps/Thaw/images/min-terminal.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/apps/Thaw/src/thaw/core/IconBox.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/IconBox.java 2007-01-04 23:06:34 UTC (rev
11567)
+++ trunk/apps/Thaw/src/thaw/core/IconBox.java 2007-01-05 00:14:59 UTC (rev
11568)
@@ -69,8 +69,14 @@
public static ImageIcon remove;
public static ImageIcon terminal;
+ public static ImageIcon minTerminal;
public static ImageIcon queueWatcher;
+ public static ImageIcon importExport;
+ public static ImageIcon minImportAction;
+ public static ImageIcon minExportAction;
+
+
/**
* Not really used
*/
@@ -142,8 +148,12 @@
IconBox.minHelp = IconBox.loadIcon("min-help.png");
IconBox.mainWindow = IconBox.loadIcon("mainWindow.png");
IconBox.terminal = IconBox.loadIcon("terminal.png");
+ IconBox.minTerminal = IconBox.loadIcon("min-terminal.png");
IconBox.remove = IconBox.loadIcon("remove.png");
IconBox.queueWatcher = IconBox.loadIcon("queueWatcher.png");
+ IconBox.importExport = IconBox.loadIcon("refresh.png");
+ IconBox.minImportAction = IconBox.loadIcon("min-import.png");
+ IconBox.minExportAction = IconBox.loadIcon("min-export.png");
}
}
Modified: trunk/apps/Thaw/src/thaw/core/MainWindow.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/MainWindow.java 2007-01-04 23:06:34 UTC
(rev 11567)
+++ trunk/apps/Thaw/src/thaw/core/MainWindow.java 2007-01-05 00:14:59 UTC
(rev 11568)
@@ -56,11 +56,14 @@
private JMenuBar menuBar = null;
private JMenu fileMenu = null;
+ private Vector fileMenuList = null;
+
private JMenuItem reconnectionFileMenuItem = null;
private JMenuItem optionsFileMenuItem = null;
private JMenuItem quitFileMenuItem = null;
private JMenu helpMenu = null;
+ private Vector menuList = null;
private JMenuItem aboutHelpMenuItem = null;
private JToolBar toolBar = null;
@@ -98,7 +101,11 @@
// MENUS
menuBar = new JMenuBar();
+ menuList = new Vector();
+
+
fileMenu = new JMenu(I18n.getMessage("thaw.menu.file"));
+ fileMenuList = new Vector();
reconnectionFileMenuItem = new
JMenuItem(I18n.getMessage("thaw.menu.item.reconnect"),
IconBox.minReconnectAction);
@@ -107,6 +114,10 @@
quitFileMenuItem = new
JMenuItem(I18n.getMessage("thaw.menu.item.quit"),
IconBox.minQuitAction);
+ fileMenuList.add(reconnectionFileMenuItem);
+ fileMenuList.add(optionsFileMenuItem);
+ fileMenuList.add(quitFileMenuItem);
+
reconnectionFileMenuItem.addActionListener(this);
optionsFileMenuItem.addActionListener(this);
quitFileMenuItem.addActionListener(this);
@@ -116,6 +127,7 @@
fileMenu.add(quitFileMenuItem);
menuBar.add(fileMenu);
+ menuList.add(fileMenu);
helpMenu = new JMenu(I18n.getMessage("thaw.menu.help"));
@@ -127,6 +139,7 @@
//menuBar.add(Box.createHorizontalGlue());
menuBar.add(helpMenu);
+ menuList.add(helpMenu);
// TOOLBAR
connectButton = new JButton(IconBox.connectAction);
@@ -291,16 +304,73 @@
}
/**
- * Used by plugins to add their own menu. Not recommanded for the
moment.
- * Need to find a more elegant way.
- * @return Check it does not return null.
+ * Used by plugins to add their own menu.
*/
- public JMenuBar getMenuBar() {
- return menuBar;
+ public void insertMenuAt(JMenu menu, int position) {
+ menuList.add(position, menu);
+ refreshMenuBar();
}
+ public void removeMenu(JMenu menu) {
+ menuList.remove(menu);
+ refreshMenuBar();
+ }
+ protected void refreshMenuBar() {
+ Logger.info(this, "Display "+
+ Integer.toString(menuList.size())+
+ " menus in the main window");
+
+ /* rebuilding menubar */
+ JMenuBar bar = new JMenuBar();
+
+ for (Iterator it = menuList.iterator();
+ it.hasNext();) {
+ JMenu m = (JMenu)it.next();
+ bar.add(m);
+ }
+
+ mainWindow.setJMenuBar(bar);
+ menuBar = bar;
+ mainWindow.validate(); /* no getContentPane() ! else it won't
work ! */
+ }
+
+
/**
+ * Used by plugins to add their own menu / menuItem to the menu 'file'.
+ */
+ public void insertInFileMenuAt(Object newItem, int position) {
+ fileMenuList.add(position, newItem);
+ refreshFileMenu();
+ }
+
+ public void removeFromFileMenu(Object item) {
+ fileMenuList.remove(item);
+ refreshFileMenu();
+ }
+
+ protected void refreshFileMenu() {
+ /* rebuilding menubar */
+ JMenu m = new JMenu(I18n.getMessage("thaw.menu.file"));
+
+ for (Iterator it = fileMenuList.iterator();
+ it.hasNext();) {
+ Object e = it.next();
+ if (e instanceof JMenuItem)
+ m.add((JMenuItem)e);
+ else
+ m.add((JMenu)e);
+ }
+
+ menuList.remove(fileMenu);
+ fileMenu = m;
+ menuList.add(0, fileMenu);
+
+ refreshMenuBar();
+ }
+
+
+ /**
* Called when an element from the menu is called.
*/
public void actionPerformed(final ActionEvent e) {
Modified: trunk/apps/Thaw/src/thaw/core/PluginManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/PluginManager.java 2007-01-04 23:06:34 UTC
(rev 11567)
+++ trunk/apps/Thaw/src/thaw/core/PluginManager.java 2007-01-05 00:14:59 UTC
(rev 11568)
@@ -8,11 +8,14 @@
* Manages plugins :)
*/
public class PluginManager {
- private final static String[] defaultPlugins =
{"thaw.plugins.QueueWatcher",
-
"thaw.plugins.FetchPlugin",
-
"thaw.plugins.InsertPlugin",
-
"thaw.plugins.StatusBar",
-
"thaw.plugins.IndexBrowser"};
+ private final static String[] defaultPlugins = {
+ "thaw.plugins.QueueWatcher",
+ "thaw.plugins.FetchPlugin",
+ "thaw.plugins.InsertPlugin",
+ "thaw.plugins.StatusBar",
+ "thaw.plugins.IndexBrowser",
+ "thaw.plugins.IndexExporter"
+ };
private Core core = null;
Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2007-01-04 23:06:34 UTC
(rev 11567)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2007-01-05 00:14:59 UTC
(rev 11568)
@@ -265,3 +265,12 @@
thaw.plugin.index.useAutoRefresh=Use auto-refresh
thaw.plugin.index.autoRefreshInterval=Auto-refresh interval (in sec):
thaw.plugin.index.nmbIndexPerRefresh=Number of indexes refreshed for each
interval:
+
+thaw.plugin.index.importExportPlugin=Index Import / Export
+thaw.plugin.index.export=Export
+thaw.plugin.index.import=Import
+thaw.plugin.index.export.indexKeys=Index keys (+ folders)
+thaw.plugin.index.export.all=Indexes keys + file lists + link lists
+thaw.plugin.index.importedFolderName=Imported indexes
+
+
Modified: trunk/apps/Thaw/src/thaw/plugins/Console.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/Console.java 2007-01-04 23:06:34 UTC
(rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/Console.java 2007-01-05 00:14:59 UTC
(rev 11568)
@@ -70,7 +70,7 @@
consolePanel.add(logAreaScrollPane, BorderLayout.CENTER);
consolePanel.add(saveToFile, BorderLayout.SOUTH);
-
core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.console.console"),
consolePanel);
+
core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.console.console"),
thaw.core.IconBox.minTerminal, consolePanel);
Logger.addLogListener(this);
Modified: trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java 2007-01-04 23:06:34 UTC
(rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java 2007-01-05 00:14:59 UTC
(rev 11568)
@@ -63,11 +63,12 @@
newDb = false;
if (core.getConfig().getValue("indexDatabaseVersion") == null) {
- DatabaseManager.createTables(hsqldb);
newDb = true;
core.getConfig().setValue("indexDatabaseVersion", "1");
}
+ DatabaseManager.createTables(hsqldb);
+
browserPanel = new IndexBrowserPanel(hsqldb,
core.getQueueManager(), core.getConfig(), core.getMainWindow());
setMainWindow(core.getMainWindow());
core.getMainWindow().getTabbedPane().addChangeListener(this);
@@ -106,6 +107,10 @@
return true;
}
+ public IndexBrowserPanel getIndexBrowserPanel() {
+ return browserPanel;
+ }
+
public boolean stop() {
if (autoRefresh != null)
autoRefresh.stop();
Added: trunk/apps/Thaw/src/thaw/plugins/IndexExporter.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/IndexExporter.java
(rev 0)
+++ trunk/apps/Thaw/src/thaw/plugins/IndexExporter.java 2007-01-05 00:14:59 UTC
(rev 11568)
@@ -0,0 +1,150 @@
+package thaw.plugins;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+import javax.swing.JFileChooser;
+
+import thaw.core.*;
+import thaw.plugins.IndexBrowser;
+import thaw.plugins.index.*;
+
+public class IndexExporter implements Plugin, ActionListener {
+
+ private Core core;
+
+ private JMenu menu;
+ private JMenu exportMenu;
+ private JMenuItem importItem;
+ private JMenuItem exportKeys;
+ private JMenuItem exportAll;
+
+ private IndexBrowser indexBrowser;
+
+ public boolean run(Core core) {
+ this.core = core;
+
+
if(core.getPluginManager().getPlugin("thaw.plugins.IndexBrowser") == null) {
+ Logger.info(this, "Loading IndexBrowser plugin");
+
+
if(core.getPluginManager().loadPlugin("thaw.plugins.IndexBrowser") == null
+ ||
!core.getPluginManager().runPlugin("thaw.plugins.IndexBrowser")) {
+ Logger.error(this, "Unable to load IndexBrowser
!");
+ return false;
+ }
+ }
+
+ indexBrowser =
(IndexBrowser)core.getPluginManager().getPlugin("thaw.plugins.IndexBrowser");
+
+ if (indexBrowser == null) {
+ Logger.error(this, "WTF?!");
+ return false;
+ }
+
+ menu = new JMenu(I18n.getMessage("thaw.plugin.index.indexes"));
+ menu.setIcon(IconBox.minIndex);
+ exportMenu = new
JMenu(I18n.getMessage("thaw.plugin.index.export"));
+ exportMenu.setIcon(IconBox.minExportAction);
+ exportKeys = new
JMenuItem(I18n.getMessage("thaw.plugin.index.export.indexKeys"));
+ exportAll = new
JMenuItem(I18n.getMessage("thaw.plugin.index.export.all"));
+ importItem = new
JMenuItem(I18n.getMessage("thaw.plugin.index.import"), IconBox.minImportAction);
+
+ exportMenu.add(exportKeys);
+ exportMenu.add(exportAll);
+
+ exportKeys.addActionListener(this);
+ exportAll.addActionListener(this);
+ importItem.addActionListener(this);
+
+ menu.add(exportMenu);
+ menu.add(importItem);
+
+ core.getMainWindow().insertInFileMenuAt(menu, 2);
+
+ return true;
+ }
+
+
+ public boolean stop() {
+ core.getMainWindow().removeFromFileMenu(menu);
+
+ return true;
+ }
+
+ public String getNameForUser() {
+ return I18n.getMessage("thaw.plugin.index.importExportPlugin");
+ }
+
+ public javax.swing.ImageIcon getIcon() {
+ return IconBox.importExport;
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ FileChooser fileChooser;
+ boolean in = false;
+ boolean content = false;
+
+ if (e.getSource() == importItem) {
+ in = true;
+ content = true;
+ }
+
+
+ if (e.getSource() == exportAll) {
+ in = false;
+ content = true;
+ }
+
+ if (e.getSource() == exportKeys) {
+ in = false;
+ content = false;
+ }
+
+ fileChooser = new FileChooser();
+ fileChooser.setTitle(in ?
I18n.getMessage("thaw.plugin.index.import") :
I18n.getMessage("thaw.plugin.index.export"));
+ fileChooser.setDirectoryOnly(false);
+ fileChooser.setDialogType(in ? JFileChooser.OPEN_DIALOG :
JFileChooser.SAVE_DIALOG);
+
+ java.io.File file = fileChooser.askOneFile();
+
+ if (file == null || (in && (!file.exists() || !file.isFile())))
{
+ Logger.notice(this, "Cancelled");
+ return;
+ }
+
+
+ Worker k = new Worker(in, content, file);
+ Thread th = new Thread(k);
+ th.start();
+
+ }
+
+ private class Worker implements Runnable {
+ private boolean impor;
+ private boolean content;
+ private java.io.File file;
+
+ public Worker(boolean impor, boolean content, java.io.File
file) {
+ this.impor = impor;
+ this.content = content;
+ this.file = file;
+ }
+
+ public void run() {
+ if (impor) {
+ DatabaseManager.importDatabase(file,
+
indexBrowser.getIndexBrowserPanel(),
+
core.getQueueManager());
+ } else {
+ DatabaseManager.exportDatabase(file,
+
indexBrowser.getIndexBrowserPanel().getDb(),
+
indexBrowser.getIndexBrowserPanel().getIndexTree(),
+ content);
+ }
+ }
+
+ }
+}
Modified: trunk/apps/Thaw/src/thaw/plugins/SqlConsole.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/SqlConsole.java 2007-01-04 23:06:34 UTC
(rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/SqlConsole.java 2007-01-05 00:14:59 UTC
(rev 11568)
@@ -64,6 +64,7 @@
panel = getPanel();
core.getMainWindow().addTab(I18n.getMessage("thaw.plugin.hsqldb.console"),
+ thaw.core.IconBox.minTerminal,
panel);
return true;
Modified: trunk/apps/Thaw/src/thaw/plugins/index/DatabaseManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/DatabaseManager.java 2007-01-04
23:06:34 UTC (rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/index/DatabaseManager.java 2007-01-05
00:14:59 UTC (rev 11568)
@@ -1,9 +1,28 @@
package thaw.plugins.index;
-import java.sql.SQLException;
+import java.sql.*;
+import java.io.FileOutputStream;
+import java.io.FileInputStream;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+
import thaw.core.Logger;
import thaw.plugins.Hsqldb;
+import thaw.fcp.FCPQueueManager;
/**
* Creates all the tables used to save the indexes,
@@ -133,11 +152,143 @@
}
- public static void exportDatabase(IndexTree indexTree) {
+ public static int getNmbIndexes(Hsqldb db) {
+ int nmb;
+ try {
+ final Connection c = db.getConnection();
+ PreparedStatement st;
+
+ st = c.prepareStatement("SELECT count(id) FROM
indexes");
+ st.execute();
+
+ try {
+ final ResultSet answer = st.getResultSet();
+ answer.next();
+ nmb = answer.getInt(1);
+ } catch(final SQLException e) {
+ nmb = 0;
+ }
+
+ } catch(final SQLException e) {
+ Logger.error(new DatabaseManager(), "Unable to insert
the new index category in the db, because: "+e.toString());
+
+ return 0;
+ }
+
+ return nmb;
}
- public static void importDatabase(IndexTree indexTree) {
+ public static void exportDatabase(java.io.File dest, Hsqldb db,
IndexTree indexTree, boolean withContent) {
+ int nmbIndexes = getNmbIndexes(db);
+
+
+ Logger.info(new DatabaseManager(), "Generating export ...");
+
+ FileOutputStream outputStream;
+
+ try {
+ outputStream = new FileOutputStream(dest);
+ } catch(final java.io.FileNotFoundException e) {
+ Logger.warning(new DatabaseManager(), "Unable to create
file '"+dest.toString()+"' ! not generated !");
+ return;
+ }
+
+ final StreamResult streamResult = new
StreamResult(outputStream);
+ Document xmlDoc;
+
+ final DocumentBuilderFactory xmlFactory =
DocumentBuilderFactory.newInstance();
+ DocumentBuilder xmlBuilder;
+
+ try {
+ xmlBuilder = xmlFactory.newDocumentBuilder();
+ } catch(final javax.xml.parsers.ParserConfigurationException e)
{
+ Logger.error(new DatabaseManager(), "Unable to generate
the index because : "+e.toString());
+ return;
+ }
+
+ final DOMImplementation impl =
xmlBuilder.getDOMImplementation();
+
+ xmlDoc = impl.createDocument(null, "indexDatabase", null);
+
+ final Element rootEl = xmlDoc.getDocumentElement();
+
+
+ rootEl.appendChild(indexTree.getRoot().do_export(xmlDoc,
withContent));
+
+
+ /* Serialization */
+ final DOMSource domSource = new DOMSource(xmlDoc);
+ final TransformerFactory transformFactory =
TransformerFactory.newInstance();
+
+ Transformer serializer;
+
+ try {
+ serializer = transformFactory.newTransformer();
+ } catch(final
javax.xml.transform.TransformerConfigurationException e) {
+ Logger.error(new DatabaseManager(), "Unable to save
index because: "+e.toString());
+ return;
+ }
+
+ serializer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
+ serializer.setOutputProperty(OutputKeys.INDENT,"yes");
+
+ /* final step */
+ try {
+ serializer.transform(domSource, streamResult);
+ } catch(final javax.xml.transform.TransformerException e) {
+ Logger.error(new DatabaseManager(), "Unable to save
index because: "+e.toString());
+ return;
+ }
+
+ Logger.info(new DatabaseManager(), "Export done");
}
+
+
+ public static void importDatabase(java.io.File source,
IndexBrowserPanel indexBrowser, FCPQueueManager queueManager) {
+ java.io.InputStream input;
+
+ Logger.info(new DatabaseManager(), "Importing ...");
+
+ try {
+ input = new FileInputStream(source);
+ } catch(final java.io.FileNotFoundException e) {
+ Logger.error(new DatabaseManager(), "Unable to load
XML: FileNotFoundException ('"+source.getPath()+"') ! : "+e.toString());
+ return;
+ }
+
+ final DocumentBuilderFactory xmlFactory =
DocumentBuilderFactory.newInstance();
+ DocumentBuilder xmlBuilder;
+
+ try {
+ xmlBuilder = xmlFactory.newDocumentBuilder();
+ } catch(final javax.xml.parsers.ParserConfigurationException e)
{
+ Logger.error(new DatabaseManager(), "Unable to load
index because: "+e.toString());
+ return;
+ }
+
+ Document xmlDoc;
+
+ try {
+ xmlDoc = xmlBuilder.parse(input);
+ } catch(final org.xml.sax.SAXException e) {
+ Logger.error(new DatabaseManager(), "Unable to load XML
file because: "+e.toString());
+ return;
+ } catch(final java.io.IOException e) {
+ Logger.error(new DatabaseManager(), "Unable to load
index because: "+e.toString());
+ return;
+ }
+
+ final Element rootEl = xmlDoc.getDocumentElement();
+
+ Element e =
(Element)rootEl.getElementsByTagName("indexCategory").item(0);
+
+ IndexCategory importCategory =
indexBrowser.getIndexTree().getRoot().getNewImportFolder();
+
+ importCategory.do_import(e);
+
+ Logger.info(new DatabaseManager(), "Import done");
+
+ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/index/Index.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/Index.java 2007-01-04 23:06:34 UTC
(rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/index/Index.java 2007-01-05 00:14:59 UTC
(rev 11568)
@@ -1289,4 +1289,30 @@
return false;
}
+
+ public Element do_export(Document xmlDoc, boolean withContent) {
+ Element e = xmlDoc.createElement("fullIndex");
+
+ e.setAttribute("displayName", displayName);
+ e.setAttribute("publicKey", getPublicKey());
+ if (getPrivateKey() != null)
+ e.setAttribute("privateKey", getPrivateKey());
+
+ if (withContent) {
+ e.appendChild(getXMLHeader(xmlDoc));
+ e.appendChild(getXMLLinks(xmlDoc));
+ e.appendChild(getXMLFileList(xmlDoc));
+ }
+
+ return e;
+ }
+
+ /**
+ * will call create() !!
+ */
+ public void do_import(Element e) {
+ String dn;
+ loadXML(e);
+ }
+
}
Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexCategory.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexCategory.java 2007-01-04
23:06:34 UTC (rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexCategory.java 2007-01-05
00:14:59 UTC (rev 11568)
@@ -13,6 +13,11 @@
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
import thaw.core.Logger;
import thaw.fcp.FCPQueueManager;
import thaw.plugins.Hsqldb;
@@ -111,7 +116,7 @@
child.delete();
}
- children = null;
+ unloadChildren();
try {
final Connection c = db.getConnection();
@@ -124,7 +129,6 @@
}
public void rename(final String name) {
-
try {
final Connection c = db.getConnection();
final PreparedStatement st = c.prepareStatement("UPDATE
indexCategories SET name = ? WHERE id = ?");
@@ -269,7 +273,11 @@
return children;
}
+ public void unloadChildren() {
+ children = null;
+ }
+
public void loadChildIndexes(final Vector children) {
ResultSet result;
@@ -370,6 +378,9 @@
if((node == this) || (node == null))
return;
+ if (children == null)
+ loadChildren();
+
if(children.size() <= position) {
children.setSize(position+1);
} else {
@@ -517,8 +528,82 @@
}
+ public Element do_export(Document xmlDoc, boolean withContent) {
+ Element e = xmlDoc.createElement("indexCategory");
+
+ if (id != -1)
+ e.setAttribute("name", name);
+
+ if(children == null)
+ children = loadChildren();
+
+ for(final Iterator it = children.iterator();
+ it.hasNext();) {
+ final IndexTreeNode node =
(IndexTreeNode)((DefaultMutableTreeNode)it.next()).getUserObject();
+ e.appendChild(node.do_export(xmlDoc, withContent));
+ }
+
+ unloadChildren();
+
+ return e;
+ }
+
+ /**
+ * will call create() !
+ * @param e must be a indexCategory tag
+ * @see #do_export(Document, boolean)
+ */
+ public void do_import(Element e) {
+ NodeList list = e.getChildNodes();
+
+ for (int i = 0 ; i < list.getLength(); i++) {
+ Node n = list.item(i);
+
+ if (n.getNodeType() == Node.ELEMENT_NODE) {
+ Element el = (Element)n;
+
+ if (el.getTagName().equals("fullIndex")) {
+ Index index =
IndexManagementHelper.reuseIndex(queueManager, indexBrowser,
+
this, el.getAttribute("publicKey"),
+
el.getAttribute("privateKey"), false);
+ if (index != null) {
+
index.rename(el.getAttribute("displayName"));
+ index.do_import(el);
+ }
+ }
+
+ if (el.getTagName().equals("indexCategory")) {
+ IndexCategory newCat =
IndexManagementHelper.addIndexCategory(queueManager, indexBrowser, this,
+
el.getAttribute("name"));
+ newCat.do_import(el);
+ }
+ }
+ }
+ }
+
+
public boolean isLeaf() {
return false;
}
+ /**
+ * used to create import directory
+ */
+ protected IndexTreeNode getDirectChild(String name) {
+ if(children == null)
+ children = loadChildren();
+
+ for(final Iterator it = children.iterator();
+ it.hasNext();) {
+ final IndexTreeNode node =
(IndexTreeNode)((DefaultMutableTreeNode)it.next()).getUserObject();
+ if (name.equals(node.toString()))
+ return node;
+ }
+
+ return null;
+ }
+
+ public boolean areChildrenLoaded() {
+ return (children != null);
+ }
}
Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
2007-01-04 23:06:34 UTC (rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
2007-01-05 00:14:59 UTC (rev 11568)
@@ -135,13 +135,13 @@
}
}
- public static void createIndex(final FCPQueueManager queueManager,
final IndexBrowserPanel indexBrowser, IndexCategory target, final String name) {
+ public static Index createIndex(final FCPQueueManager queueManager,
final IndexBrowserPanel indexBrowser, IndexCategory target, final String name) {
if (target == null)
target = indexBrowser.getIndexTree().getRoot();
if ((name == null) || (name.indexOf("/") >= 0) ||
name.indexOf("\\") >= 0) {
Logger.error(new IndexManagementHelper(), "invalid
name");
- return;
+ return null;
}
final Index index = new Index(queueManager, indexBrowser, -1,
target, name, name, null, null, 0, null);
@@ -150,6 +150,8 @@
index.create();
indexBrowser.getIndexTree().addToIndexCategory(target, index);
+
+ return index;
}
@@ -362,33 +364,40 @@
}
- public static void addIndex(final FCPQueueManager queueManager, final
IndexBrowserPanel indexBrowser, final IndexCategory target, final String
publicKey) {
- IndexManagementHelper.reuseIndex(queueManager, indexBrowser,
target, publicKey, null);
+ public static Index addIndex(final FCPQueueManager queueManager, final
IndexBrowserPanel indexBrowser, final IndexCategory target, final String
publicKey) {
+ return IndexManagementHelper.reuseIndex(queueManager,
indexBrowser, target, publicKey, null);
}
+ public static Index reuseIndex(final FCPQueueManager queueManager,
final IndexBrowserPanel indexBrowser, final IndexCategory target, String
publicKey, String privateKey) {
+ return reuseIndex(queueManager, indexBrowser, target,
publicKey, privateKey, true);
+ }
/**
* Can be use directly
* @param privateKey Can be null
*/
- public static void reuseIndex(final FCPQueueManager queueManager, final
IndexBrowserPanel indexBrowser, final IndexCategory target, String publicKey,
String privateKey) {
+ public static Index reuseIndex(final FCPQueueManager queueManager,
final IndexBrowserPanel indexBrowser, final IndexCategory target, String
publicKey, String privateKey,
+ boolean load) {
publicKey = FreenetURIHelper.cleanURI(publicKey);
privateKey = FreenetURIHelper.cleanURI(privateKey);
if (publicKey == null)
- return;
+ return null;
+ if (privateKey != null && privateKey.equals(""))
+ privateKey = null;
+
if (Index.isAlreadyKnown(indexBrowser.getDb(), publicKey)) {
Logger.notice(new IndexManagementHelper(), "Index
already added !");
- return;
+ return null;
}
final String name = Index.getNameFromKey(publicKey);
if (name == null || name.indexOf("/") >= 0 ||
name.indexOf("\\") >= 0) {
Logger.error(new IndexManagementHelper(), "Invalid
index name !\n");
- return;
+ return null;
}
IndexCategory parent;
@@ -404,11 +413,14 @@
index.create();
- index.updateFromFreenet(-1);
+ if (load)
+ index.updateFromFreenet(-1);
parent.insert(index.getTreeNode(), 0);
indexBrowser.getIndexTree().reloadModel(parent);
+
+ return index;
}
@@ -434,7 +446,7 @@
}
- public static void addIndexCategory(final FCPQueueManager queueManager,
final IndexBrowserPanel indexBrowser, IndexCategory target, final String name) {
+ public static IndexCategory addIndexCategory(final FCPQueueManager
queueManager, final IndexBrowserPanel indexBrowser, IndexCategory target, final
String name) {
if (target == null)
target = indexBrowser.getIndexTree().getRoot();
@@ -443,6 +455,8 @@
newCat.create();
indexBrowser.getIndexTree().addToIndexCategory(target, newCat);
+
+ return newCat;
}
Added: trunk/apps/Thaw/src/thaw/plugins/index/IndexRoot.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexRoot.java
(rev 0)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexRoot.java 2007-01-05
00:14:59 UTC (rev 11568)
@@ -0,0 +1,46 @@
+package thaw.plugins.index;
+
+import thaw.core.Logger;
+import thaw.core.I18n;
+import thaw.fcp.FCPQueueManager;
+import thaw.plugins.Hsqldb;
+
+
+public class IndexRoot extends IndexCategory {
+
+ private FCPQueueManager queueManager;
+ private IndexBrowserPanel indexBrowser;
+
+ public IndexRoot(final FCPQueueManager queueManager, final
IndexBrowserPanel indexBrowser, final String name) {
+ super(queueManager, indexBrowser, -1, null, name);
+ this.queueManager = queueManager;
+ this.indexBrowser = indexBrowser;
+ }
+
+
+ public IndexCategory getNewImportFolder() {
+ int idx;
+ String name;
+ IndexTreeNode node;
+ IndexCategory importFolder;
+
+ if (!areChildrenLoaded())
+ loadChildren();
+
+ idx = 0;
+ name = I18n.getMessage("thaw.plugin.index.importedFolderName");
+ node = getDirectChild(name);
+
+ while (node != null) {
+ idx++;
+ name =
I18n.getMessage("thaw.plugin.index.importedFolderName") + " -
"+Integer.toString(idx);
+ node = getDirectChild(name);
+ }
+
+ importFolder =
IndexManagementHelper.addIndexCategory(queueManager, indexBrowser, this, name);
+
+ return importFolder;
+ }
+
+}
+
Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java 2007-01-04
23:06:34 UTC (rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexTree.java 2007-01-05
00:14:59 UTC (rev 11568)
@@ -50,7 +50,7 @@
private JPanel panel;
private JTree tree;
- private IndexCategory root;
+ private IndexRoot root;
private JPopupMenu indexCategoryMenu;
private Vector indexCategoryActions; /*
IndexManagementHelper.MenuAction */
@@ -113,7 +113,7 @@
registeredIndexes = new Hashtable();
- root = new IndexCategory(queueManager, indexBrowser, -1, null,
rootName);
+ root = new IndexRoot(queueManager, indexBrowser, rootName);
root.loadChildren();
root.addObserver(this);
@@ -387,7 +387,7 @@
return tree;
}
- public IndexCategory getRoot() {
+ public IndexRoot getRoot() {
return root;
}
Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexTreeNode.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexTreeNode.java 2007-01-04
23:06:34 UTC (rev 11567)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexTreeNode.java 2007-01-05
00:14:59 UTC (rev 11568)
@@ -3,6 +3,8 @@
import java.util.Vector;
import javax.swing.tree.DefaultMutableTreeNode;
+import org.w3c.dom.Element;
+import org.w3c.dom.Document;
public interface IndexTreeNode {
@@ -71,4 +73,10 @@
public void register();
public void unregister();
+
+ /**
+ * Will export private keys too !
+ */
+ public Element do_export(Document xmlDoc, boolean withContent);
+ public void do_import(Element e);
}