/**
* License Agreement for OpenSearchServer
*
* Copyright (C) 2012-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.request;
import javax.xml.xpath.XPathExpressionException;
import org.w3c.dom.DOMException;
import org.w3c.dom.Node;
import com.jaeksoft.searchlib.config.Config;
import com.jaeksoft.searchlib.query.ParseException;
import com.jaeksoft.searchlib.util.XPathParser;
public enum RequestTypeEnum {
SearchFieldRequest(SearchFieldRequest.class, "Search (field)"),
SearchRequest(SearchPatternRequest.class, "Search (pattern)"),
// SearchMergedRequest(SearchMergedRequest.class, "Search (merged)"),
SpellCheckRequest(SpellCheckRequest.class, "Spell check"),
MoreLikeThisRequest(MoreLikeThisRequest.class, "More like this"),
NamedEntityExtractionRequest(NamedEntityExtractionRequest.class,
"Named entity extraction"),
DocumentsRequest(DocumentsRequest.class, "Document(s)");
private Class<? extends AbstractRequest> requestClass;
private String label;
private RequestTypeEnum(Class<? extends AbstractRequest> requestClass,
String label) {
this.requestClass = requestClass;
this.label = label;
}
public AbstractRequest newInstance(Config config)
throws InstantiationException, IllegalAccessException {
AbstractRequest request = requestClass.newInstance();
request.init(config);
return request;
}
private static RequestTypeEnum findByName(String name) {
if (name == null)
return SearchRequest;
for (RequestTypeEnum type : values())
if (name.equalsIgnoreCase(type.name()))
return type;
return SearchRequest;
}
public static AbstractRequest fromXmlConfig(Config config, XPathParser xpp,
Node node) throws InstantiationException, IllegalAccessException,
XPathExpressionException, DOMException, ParseException,
ClassNotFoundException {
if (node == null)
return null;
RequestTypeEnum type = findByName(XPathParser.getAttributeString(node,
AbstractRequest.XML_ATTR_TYPE));
AbstractRequest request = type.requestClass.newInstance();
request.fromXmlConfig(config, xpp, node);
return request;
}
public static AbstractRequest getNewCopy(AbstractRequest request)
throws InstantiationException, IllegalAccessException {
AbstractRequest newRequest = request.getType().requestClass
.newInstance();
newRequest.copyFrom(request);
return newRequest;
}
/**
* @return the label
*/
public String getLabel() {
return label;
}
final public boolean isSearchFieldRequest() {
return this == SearchFieldRequest;
}
final public boolean isSearchRequest() {
return this == SearchRequest;
}
final public boolean isDocumentsRequest() {
return this == DocumentsRequest;
}
final public boolean isMoreLikeThisRequest() {
return this == MoreLikeThisRequest;
}
final public boolean isNamedEntityExtractionRequest() {
return this == NamedEntityExtractionRequest;
}
final public boolean isSpellCheckRequest() {
return this == SpellCheckRequest;
}
}