package thaw.plugins.index;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.core.MainWindow;
import thaw.fcp.FCPQueueManager;
import thaw.plugins.Hsqldb;
public class IndexRoot extends IndexFolder implements IndexTreeNode {
private FCPQueueManager queueManager;
private IndexBrowserPanel indexBrowser;
private MainWindow mainWindow;
public IndexRoot(final FCPQueueManager queueManager,
final IndexBrowserPanel indexBrowser,
final String name,
final boolean loadOnTheFly) {
super(indexBrowser.getDb(), indexBrowser.getConfig(), -1, loadOnTheFly);
mainWindow = indexBrowser.getMainWindow();
this.queueManager = queueManager;
this.indexBrowser = indexBrowser;
if (!loadOnTheFly) /* anyway loading for this folder will be done immediatly ... :p */
loadChildren();
}
public IndexFolder getNewImportFolder(Hsqldb db) {
String fname = null;
/* TODO : Don't do like this
* Use the database :
* ask '[importedFolderName]%' ORDER BY name DESC LIMIT 1
* and pray there is no importedFolder number #10 or more,
* or that the database will return the good one :p
*/
synchronized(db.dbLock) {
try {
int i;
PreparedStatement select;
select = db.getConnection().prepareStatement("SELECT id from indexfolders where parent is null and name = ? LIMIT 1");
for (i = 0 ; i < 100 ; i++) {
fname = I18n.getMessage("thaw.plugin.index.importedFolderName")+" - "+Integer.toString(i);
select.setString(1, fname);
ResultSet set = select.executeQuery();
if (!set.next()) {
break;
}
}
select.close();
} catch(SQLException e) {
Logger.error(this, "Unable to find a name for the import folder !");
return null;
}
}
if (fname == null)
return null;
return IndexManagementHelper.addIndexFolder(indexBrowser, this, fname);
}
public void delete() {
Logger.warning(this, "The user will do something dangerous");
int ret = JOptionPane.showConfirmDialog(mainWindow.getMainFrame(),
I18n.getMessage("thaw.plugin.index.ultimateWarning"),
I18n.getMessage("thaw.warning.title"),
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
if (ret != JOptionPane.YES_OPTION) {
Logger.info(this, "Cancelled");
return;
}
Logger.warning(this, "DELETING ALL THE INDEXES");
DatabaseManager.dropTables(indexBrowser.getDb());
DatabaseManager.createTables(indexBrowser.getDb());
for (int i = 0 ; i < thaw.plugins.IndexBrowser.DEFAULT_INDEXES.length ; i++) {
IndexManagementHelper.addIndex(queueManager, indexBrowser, null,
thaw.plugins.IndexBrowser.DEFAULT_INDEXES[i],
true);
}
forceReload();
Logger.notice(this, "Destruction of the world done, have a nice day.");
}
public IndexFolder getOrCreateFolder(String folder) {
IndexFolder f = getFolder(folder);
if (f == null) {
f = IndexManagementHelper.addIndexFolder(indexBrowser,
this,
folder);
}
return f;
}
/**
* create if it doesn't exist
*/
public IndexFolder getAutoSortedFolder() {
return getOrCreateFolder(I18n.getMessage("thaw.plugin.index.automaticallySorted"));
}
/**
* create if it doesn't exist
*/
public IndexFolder getRecentlyAddedFolder() {
return getOrCreateFolder(I18n.getMessage("thaw.plugin.index.recentlyAdded"));
}
}