/**
* License Agreement for OpenSearchServer
*
* Copyright (C) 2010-2014 Emmanuel Keller / Jaeksoft
*
* http://www.open-search-server.com
*
* This file is part of OpenSearchServer.
*
* OpenSearchServer is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenSearchServer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenSearchServer.
* If not, see <http://www.gnu.org/licenses/>.
**/
package com.jaeksoft.searchlib.web.controller.crawler.database;
import javax.naming.NamingException;
import org.zkoss.bind.annotation.AfterCompose;
import org.zkoss.bind.annotation.Command;
import com.jaeksoft.searchlib.Client;
import com.jaeksoft.searchlib.SearchLibException;
import com.jaeksoft.searchlib.crawler.database.DatabaseCrawlAbstract;
import com.jaeksoft.searchlib.crawler.database.DatabaseCrawlEnum;
import com.jaeksoft.searchlib.crawler.database.DatabaseCrawlList;
import com.jaeksoft.searchlib.crawler.database.DatabaseCrawlMaster;
import com.jaeksoft.searchlib.crawler.database.DatabaseCrawlMongoDb;
import com.jaeksoft.searchlib.crawler.database.DatabaseCrawlSql;
import com.jaeksoft.searchlib.crawler.database.DatabaseCrawlSql.SqlUpdateMode;
import com.jaeksoft.searchlib.crawler.database.DatabaseCrawlThread;
import com.jaeksoft.searchlib.crawler.database.DatabaseDriverNames;
import com.jaeksoft.searchlib.crawler.database.DatabasePropertyManager;
import com.jaeksoft.searchlib.crawler.database.IsolationLevelEnum;
import com.jaeksoft.searchlib.web.controller.AlertController;
import com.jaeksoft.searchlib.web.controller.crawler.CommonFieldTargetCrawlerController;
@AfterCompose(superclass = true)
public class DatabaseCrawlListController
extends CommonFieldTargetCrawlerController<DatabaseCrawlAbstract, DatabaseCrawlThread, DatabaseCrawlMaster> {
private transient DatabaseCrawlList dbCrawlList;
private DatabaseCrawlEnum dbCrawlType;
public DatabaseCrawlListController() throws SearchLibException, NamingException {
super();
}
public DatabasePropertyManager getProperties() throws SearchLibException {
Client client = getClient();
if (client == null)
return null;
return client.getDatabasePropertyManager();
}
@Override
protected void reset() throws SearchLibException {
super.reset();
dbCrawlList = null;
setDbCrawlType(DatabaseCrawlEnum.DB_SQL);
}
public DatabaseCrawlList getDatabaseCrawlList() throws SearchLibException {
if (dbCrawlList != null)
return dbCrawlList;
Client client = getClient();
if (client == null)
return null;
dbCrawlList = client.getDatabaseCrawlList();
return dbCrawlList;
}
public String[] getDriverClassList() {
return DatabaseDriverNames.getAvailableList(getDesktop().getWebApp().getClass().getClassLoader());
}
@Override
@Command
public void onSave() throws InterruptedException, SearchLibException {
getDatabaseCrawlList();
if (getSelectedCrawl() != null)
getCurrentCrawl().copyTo(getSelectedCrawl());
else {
if (dbCrawlList.get(getCurrentCrawl().getName()) != null) {
new AlertController("The crawl name is already used");
return;
}
dbCrawlList.add(getCurrentCrawl());
}
getClient().saveDatabaseCrawlList();
onCancel();
}
@Override
@Command
public void onNew() throws SearchLibException {
setSelectedCrawl(null);
DatabaseCrawlAbstract newCrawl = null;
switch (dbCrawlType) {
default:
case DB_SQL:
newCrawl = new DatabaseCrawlSql(getCrawlMaster(), getProperties());
break;
case DB_MONGO_DB:
newCrawl = new DatabaseCrawlMongoDb(getCrawlMaster(), getProperties());
break;
}
setCurrentCrawl(newCrawl);
newCrawl.setName(null);
reload();
}
@Override
public void doClone(DatabaseCrawlAbstract crawl) throws SearchLibException {
setSelectedCrawl(null);
DatabaseCrawlAbstract newCrawl = crawl.duplicate();
newCrawl.setName(null);
setCurrentCrawl(newCrawl);
reload();
}
@Override
@Command
public void reload() throws SearchLibException {
dbCrawlList = null;
super.reload();
}
@Command
public void onCheckSqlSelect() throws Exception {
DatabaseCrawlAbstract crawl = getCurrentCrawl();
if (crawl == null)
throw new SearchLibException("No crawl selected");
new AlertController(crawl.test());
}
public DatabaseCrawlEnum[] getDatabaseCrawlTypes() {
return DatabaseCrawlEnum.values();
}
public IsolationLevelEnum[] getIsolationLevels() {
return IsolationLevelEnum.values();
}
public SqlUpdateMode[] getSqlUpdateModes() {
return DatabaseCrawlSql.SqlUpdateMode.values();
}
@Override
protected void doDelete(DatabaseCrawlAbstract crawlItem) throws SearchLibException {
getClient().getDatabaseCrawlList().remove(crawlItem);
}
@Override
protected DatabaseCrawlAbstract newCrawlItem(DatabaseCrawlAbstract crawl) {
return crawl.duplicate();
}
@Override
public boolean isCrawlerEditRights() throws SearchLibException {
return isDatabaseCrawlerEditPatternsRights();
}
@Override
public DatabaseCrawlMaster getCrawlMaster() throws SearchLibException {
Client client = getClient();
if (client == null)
return null;
return client.getDatabaseCrawlMaster();
}
/**
* @return the dbCrawlType
*/
public DatabaseCrawlEnum getDbCrawlType() {
return dbCrawlType;
}
/**
* @param dbCrawlType
* the dbCrawlType to set
*/
public void setDbCrawlType(DatabaseCrawlEnum dbCrawlType) {
this.dbCrawlType = dbCrawlType;
}
}