All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jaeksoft.searchlib.web.controller.crawler.file.FileController Maven / Gradle / Ivy

Go to download

OpenSearchServer is a powerful, enterprise-class, search engine program. Using the web user interface, the crawlers (web, file, database, ...) and the REST/RESTFul API you will be able to integrate quickly and easily advanced full-text search capabilities in your application. OpenSearchServer runs on Windows and Linux/Unix/BSD.

The newest version!
/**   
 * License Agreement for OpenSearchServer
 *
 * Copyright (C) 2008-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 .
 **/

package com.jaeksoft.searchlib.web.controller.crawler.file;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.transform.TransformerConfigurationException;

import org.xml.sax.SAXException;
import org.zkoss.bind.annotation.AfterCompose;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;

import com.jaeksoft.searchlib.Client;
import com.jaeksoft.searchlib.SearchLibException;
import com.jaeksoft.searchlib.crawler.common.database.FetchStatus;
import com.jaeksoft.searchlib.crawler.common.database.IndexStatus;
import com.jaeksoft.searchlib.crawler.common.database.ParserStatus;
import com.jaeksoft.searchlib.crawler.file.database.FileItem;
import com.jaeksoft.searchlib.crawler.file.database.FileItemFieldEnum;
import com.jaeksoft.searchlib.crawler.file.database.FileManager;
import com.jaeksoft.searchlib.crawler.file.database.FileManager.SearchTemplate;
import com.jaeksoft.searchlib.crawler.file.database.FileTypeEnum;
import com.jaeksoft.searchlib.crawler.web.database.RobotsTxtStatus;
import com.jaeksoft.searchlib.request.AbstractSearchRequest;
import com.jaeksoft.searchlib.scheduler.TaskItem;
import com.jaeksoft.searchlib.scheduler.TaskManager;
import com.jaeksoft.searchlib.scheduler.task.TaskFileManagerAction;
import com.jaeksoft.searchlib.web.controller.AlertController;
import com.jaeksoft.searchlib.web.controller.ScopeAttribute;
import com.jaeksoft.searchlib.web.controller.crawler.CrawlerController;

@AfterCompose(superclass = true)
public class FileController extends CrawlerController {

	public static enum BatchCommandEnum {

		NOTHING("Select an action"),

		SET_TO_UNFETCHED("Set selection to Unfetched"),

		OPTIMIZE("Optimize database"),

		SYNCHRONIZE_INDEX("Synchronize the main index"),

		DELETE_SELECTION("Delete selection"),

		DELETE_ALL("Delete all");

		private final String label;

		private BatchCommandEnum(String label) {
			this.label = label;
		}

		public String getLabel() {
			return label;
		}
	}

	private transient List fileList;

	private transient int totalSize;

	private transient int activePage;

	private transient BatchCommandEnum batchCommand;

	public FileController() throws SearchLibException {
		super();
	}

	@Override
	protected void reset() {
		fileList = null;
		totalSize = 0;
		activePage = 0;
		batchCommand = BatchCommandEnum.NOTHING;
	}

	public FileManager getFileManager() throws SearchLibException {
		synchronized (this) {
			Client client = getClient();
			if (client == null)
				return null;
			return client.getFileManager();
		}
	}

	public int getActivePage() {
		return activePage;
	}

	public void setActivePage(int page) throws SearchLibException {
		synchronized (this) {
			fileList = null;
			activePage = page;
			reload();
		}
	}

	public int getTotalSize() {
		return totalSize;
	}

	public void setLang(String v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_LANG, v);
		}
	}

	public String getLang() {
		synchronized (this) {
			return (String) getAttribute(ScopeAttribute.SEARCH_FILE_LANG);
		}
	}

	public void setExtension(String v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_FILE_EXTENSION, v);
		}
	}

	public String getExtension() {
		synchronized (this) {
			return (String) getAttribute(ScopeAttribute.SEARCH_FILE_FILE_EXTENSION);
		}
	}

	public void setMinContentLength(Integer v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_MIN_CONTENT_LENGTH, v);
		}
	}

	public Integer getMinContentLength() {
		synchronized (this) {
			return (Integer) getAttribute(ScopeAttribute.SEARCH_FILE_MIN_CONTENT_LENGTH);
		}
	}

	public void setMaxContentLength(Integer v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_MAX_CONTENT_LENGTH, v);
		}
	}

	public Integer getMaxContentLength() {
		synchronized (this) {
			return (Integer) getAttribute(ScopeAttribute.SEARCH_FILE_MAX_CONTENT_LENGTH);
		}
	}

	public void setMaxTime(Integer v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_MAX_TIME, v);
		}
	}

	public Integer getMaxTime() {
		synchronized (this) {
			return (Integer) getAttribute(ScopeAttribute.SEARCH_FILE_MAX_TIME);
		}
	}

	public void setMinTime(Integer v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_MIN_TIME, v);
		}
	}

	public Integer getMinTime() {
		synchronized (this) {
			return (Integer) getAttribute(ScopeAttribute.SEARCH_FILE_MIN_TIME);
		}
	}

	public void setParser(String v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_PARSER, v);
		}
	}

	public String getParser() {
		synchronized (this) {
			return (String) getAttribute(ScopeAttribute.SEARCH_FILE_PARSER);
		}
	}

	public void setFetchStatus(FetchStatus v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_FETCH_STATUS, v);
		}
	}

	public FetchStatus getFetchStatus() {
		synchronized (this) {
			FetchStatus st = (FetchStatus) getAttribute(ScopeAttribute.SEARCH_FILE_FETCH_STATUS);
			if (st == null)
				return FetchStatus.ALL;
			return st;
		}
	}

	public void setParserStatus(ParserStatus v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_PARSER_STATUS, v);
		}
	}

	public ParserStatus getParserStatus() {
		synchronized (this) {
			ParserStatus status = (ParserStatus) getAttribute(ScopeAttribute.SEARCH_FILE_PARSER_STATUS);
			if (status == null)
				return ParserStatus.ALL;
			return status;
		}
	}

	public void setIndexStatus(IndexStatus v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_INDEX_STATUS, v);
		}
	}

	public IndexStatus getIndexStatus() {
		synchronized (this) {
			IndexStatus status = (IndexStatus) getAttribute(ScopeAttribute.SEARCH_FILE_INDEX_STATUS);
			if (status == null)
				return IndexStatus.ALL;
			return status;
		}
	}

	public void setBufferSize(int v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_BUFFER_SIZE, new Integer(v));
		}
	}

	public int getBufferSize() {
		synchronized (this) {
			Integer v = (Integer) getAttribute(ScopeAttribute.SEARCH_FILE_BUFFER_SIZE);
			return v == null ? 10000 : v;
		}
	}

	public void setFileType(FileTypeEnum v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_FILE_TYPE, v);
		}
	}

	public FileTypeEnum getFileType() {
		synchronized (this) {
			FileTypeEnum type = (FileTypeEnum) getAttribute(ScopeAttribute.SEARCH_FILE_FILE_TYPE);
			if (type == null)
				return FileTypeEnum.ALL;
			return type;
		}
	}

	public void setFileName(String v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_FILE_NAME, v);
		}
	}

	public String getFileName() {
		synchronized (this) {
			return (String) getAttribute(ScopeAttribute.SEARCH_FILE_FILE_NAME);
		}
	}

	public void setPageSize(Integer v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_SHEET_ROWS, v);
		}
	}

	public Integer getPageSize() {
		synchronized (this) {
			Integer v = (Integer) getAttribute(ScopeAttribute.SEARCH_FILE_SHEET_ROWS);
			if (v == null)
				v = 10;
			return v;
		}
	}

	public void setCrawlDateStart(Date v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_DATE_START, v);
		}
	}

	public Date getCrawlDateStart() {
		synchronized (this) {
			return (Date) getAttribute(ScopeAttribute.SEARCH_FILE_DATE_START);
		}
	}

	public void setCrawlDateEnd(Date v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_DATE_END, v);
		}
	}

	public Date getCrawlDateEnd() {
		synchronized (this) {
			return (Date) getAttribute(ScopeAttribute.SEARCH_FILE_DATE_END);
		}
	}

	public void setDateModifiedStart(Date v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_DATE_MODIFIED_START, v);
		}
	}

	public Date getDateModifiedStart() {
		synchronized (this) {
			return (Date) getAttribute(ScopeAttribute.SEARCH_FILE_DATE_MODIFIED_START);
		}
	}

	public void setDateModifiedEnd(Date v) {
		synchronized (this) {
			setAttribute(ScopeAttribute.SEARCH_FILE_DATE_MODIFIED_END, v);
		}
	}

	public Date getDateModifiedEnd() {
		synchronized (this) {
			return (Date) getAttribute(ScopeAttribute.SEARCH_FILE_DATE_MODIFIED_END);
		}
	}

	public void setRepository(String v) {
		synchronized (this) {
			if (v != null)
				if (v.length() == 0)
					v = null;
			setAttribute(ScopeAttribute.SEARCH_FILE_REPOSITORY, v);
		}
	}

	public String getRepository() {
		synchronized (this) {
			return (String) getAttribute(ScopeAttribute.SEARCH_FILE_REPOSITORY);
		}
	}

	@Command
	public void onSearch() throws SearchLibException {
		synchronized (this) {
			fileList = null;
			activePage = 0;
			totalSize = 0;
			reload();
		}
	}

	private AbstractSearchRequest getSearchRequest(FileManager fileManager,
			SearchTemplate fileSearchTemplate) throws SearchLibException {
		return fileManager.fileQuery(fileSearchTemplate, getRepository(),
				getFileName(), getLang(), null, getMinContentLength(),
				getMaxContentLength(), getExtension(), getFetchStatus(),
				getParserStatus(), getIndexStatus(), getCrawlDateStart(),
				getCrawlDateEnd(), getDateModifiedStart(),
				getDateModifiedEnd(), getFileType(), null, getMinTime(),
				getMaxTime(), getParser());
	}

	public List getFileList() throws SearchLibException {
		synchronized (this) {
			if (fileList != null)
				return fileList;

			FileManager fileManager = getFileManager();
			if (fileManager == null)
				return null;

			fileList = new ArrayList();
			AbstractSearchRequest searchRequest = getSearchRequest(fileManager,
					SearchTemplate.fileSearch);

			totalSize = (int) fileManager.getFiles(searchRequest,
					FileItemFieldEnum.INSTANCE.uri, true, getPageSize()
							* getActivePage(), getPageSize(), fileList);
			return fileList;
		}
	}

	public FetchStatus[] getFetchStatusList() {
		synchronized (this) {
			return FetchStatus.values();
		}
	}

	public RobotsTxtStatus[] getRobotsTxtStatusList() {
		synchronized (this) {
			return RobotsTxtStatus.values();
		}
	}

	public ParserStatus[] getParserStatusList() {
		synchronized (this) {
			return ParserStatus.values();
		}
	}

	public IndexStatus[] getIndexStatusList() {
		synchronized (this) {
			return IndexStatus.values();
		}
	}

	public FileTypeEnum[] getFileTypeList() {
		synchronized (this) {
			return FileTypeEnum.values();
		}
	}

	public List getRepositoryList() throws SearchLibException {
		synchronized (this) {
			Client client = getClient();
			if (client == null)
				return null;
			List list = new ArrayList();
			list.add("");
			client.getFilePathManager().getAllFilePathsString(list);
			return list;
		}
	}

	private void onTask(TaskFileManagerAction taskFileManagerAction)
			throws SearchLibException, InterruptedException {
		Client client = getClient();
		if (client == null)
			return;
		TaskItem taskItem = new TaskItem(client, taskFileManagerAction);
		TaskManager.executeTask(client, taskItem, null);
		client.getFileManager().waitForTask(taskFileManagerAction, 30);
	}

	@Command
	public void onSetToUnfetched() throws SearchLibException,
			InterruptedException {
		synchronized (this) {
			FileManager fileManager = getFileManager();
			if (fileManager == null)
				return;
			AbstractSearchRequest searchRequest = getSearchRequest(fileManager,
					SearchTemplate.fileSearch);
			TaskFileManagerAction taskFileManagerAction = new TaskFileManagerAction();
			taskFileManagerAction.setManual(searchRequest,
					FetchStatus.UN_FETCHED, null, getBufferSize());
			onTask(taskFileManagerAction);
		}
	}

	@Command
	public void onDeleteSelection() throws SearchLibException,
			InterruptedException {
		synchronized (this) {
			FileManager fileManager = getFileManager();
			if (fileManager == null)
				return;
			AbstractSearchRequest searchRequest = getSearchRequest(fileManager,
					SearchTemplate.fileExport);
			TaskFileManagerAction taskFileManagerAction = new TaskFileManagerAction();
			taskFileManagerAction.setManual(searchRequest, null,
					TaskFileManagerAction.CommandDeleteSelection,
					getBufferSize());
			onTask(taskFileManagerAction);
		}
	}

	@Command
	public void onOptimize() throws SearchLibException, InterruptedException {
		synchronized (this) {
			TaskFileManagerAction taskFileManagerAction = new TaskFileManagerAction();
			taskFileManagerAction.setManual(null, null,
					TaskFileManagerAction.CommandOptimize, getBufferSize());
			onTask(taskFileManagerAction);
		}
	}

	@Command
	public void onDeleteAll() throws SearchLibException, InterruptedException {
		synchronized (this) {
			TaskFileManagerAction taskFileManagerAction = new TaskFileManagerAction();
			taskFileManagerAction.setManual(null, null,
					TaskFileManagerAction.CommandDeleteAll, getBufferSize());
			onTask(taskFileManagerAction);
		}
	}

	@Command
	public void onSynchronizeIndex() throws SearchLibException,
			InterruptedException {
		synchronized (this) {
			TaskFileManagerAction taskFileManagerAction = new TaskFileManagerAction();
			taskFileManagerAction.setManual(null, null,
					TaskFileManagerAction.CommandSynchronize, getBufferSize());
			onTask(taskFileManagerAction);
		}
	}

	public BatchCommandEnum getBatchCommand() {
		return batchCommand;
	}

	public void setBatchCommand(BatchCommandEnum batchCommand) {
		this.batchCommand = batchCommand;
	}

	public BatchCommandEnum[] getBatchCommandEnum() {
		return BatchCommandEnum.values();
	}

	@Command
	public void onGo() throws SearchLibException, IOException,
			TransformerConfigurationException, SAXException,
			InterruptedException {
		synchronized (this) {
			Client client = getClient();
			if (client == null)
				return;
			if (client.getFileCrawlMaster().isRunning()) {
				new AlertController("Please stop the File crawler first.");
				return;
			}

			if (batchCommand == null)
				return;
			switch (batchCommand) {
			case NOTHING:
				break;
			case SET_TO_UNFETCHED:
				onSetToUnfetched();
				break;
			case DELETE_ALL:
				onDeleteAll();
				break;
			case OPTIMIZE:
				onOptimize();
				break;
			case DELETE_SELECTION:
				onDeleteSelection();
				break;
			case SYNCHRONIZE_INDEX:
				onSynchronizeIndex();
				break;
			}
			batchCommand = BatchCommandEnum.NOTHING;
			reload();
		}
	}

	@Command
	@NotifyChange("fileManager")
	public void onRefreshCurrentTaskLog() {
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy