Subversion Repositories bacoAlunos

Rev

Rev 1306 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.common;

import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.log4j.Logger;

/**
 * @author Jorge Machado
 * @date 20/Nov/2009
 * @time 10:32:07
 * @email machadofisher@gmail.com
 */

public enum QueryLanguageChars {

    SLASH_ESCAPE("\"",false),
    PLUS("+",false),
    MINUS("-",false),
    ANDe ("&&",false),
    OR("||",false),
    EXCL("!",false),
    BRACKET_L("(",true),
    BRACKET_R(")",true),
    CHAV_L("{",false),
    CHAV_R("}",false),
    RECT_BRACKETS_L("[",false),
    RECT_BRACKETS_R("]",false),
    CIRCUNFLEX("^",false),
    QUOTE("\"",false),
    TIL("~",false),
    ASTRISK("*",false),
    QUESTION_MARK("?",false),
    TWO_DOTS(":",true);

    1.5.0/docs/api/java/lang/String.html">String chars;
    boolean usual;
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(QueryLanguageChars.class);

    private QueryLanguageChars(1.5.0/docs/api/java/lang/String.html">String chars, boolean usual)
    {
        this.usual = usual;
        this.chars = chars;
    }

    public static 1.5.0/docs/api/java/lang/String.html">String escape(1.5.0/docs/api/java/lang/String.html">String string)
    {
        for(QueryLanguageChars chars: values())
        {
            string = string.replace(chars.chars,"\\" + chars.chars);
        }
        logger.info("Final Escaped Query: " + string);
        return string;
    }


    public static boolean containsSpecialNotUsual(1.5.0/docs/api/java/lang/String.html">String string)
    {
        for(QueryLanguageChars chars: values())
        {

            if(!chars.usual && string.indexOf(chars.chars) >= 0)
                return true;
        }
        return false;
    }

    public static boolean contains(1.5.0/docs/api/java/lang/String.html">String string)
    {
        for(QueryLanguageChars chars: values())
        {
            if(string.indexOf(chars.chars) >= 0)
                return true;
        }
        return false;
    }

    static QueryParser queryParser = new QueryParser("",new SimpleAnalyzer());


    public static boolean isValid(1.5.0/docs/api/java/lang/String.html">String query)
    {
        if(query == null)
            return false;
        try {
            queryParser.parse(query);
            return true;
        } catch (1.5.0/docs/api/java/text/ParseException.html">ParseException e) {
            logger.info("bad query for SruSearchService:" + query + " -> " + e.toString());
            logger.debug(e,e);
        }
        return false;
    }

}