package com.sun.portal.search;
import java.util.*;
import java.lang.*;
/**
* QueryParser class produces the scope for
* advanced search queries
*/
public class QueryParser {
StringBuffer scope= null;
String scopeString="";
public void QueryParser() {
}
public void setQueryParams(String wordsOp, String wordsVal, String nowordsVal, String authorOp, String authorVal, String titleOp, String titleVal, String urlOp, String urlVal, String expiresOp, String expiresVal, String lmodifiedOp, String lmodifiedVal, String comments) {
String r_op = "";
scope = new StringBuffer();
if (!wordsVal.equals("")) {
r_op = getRightOperator(wordsVal);
scope.append("("+r_op+")");
scope.append(" <AND> ");
}
if (!nowordsVal.equals("")) {
r_op = getRightOperator(nowordsVal);
scope.append(" <NOT> (" + r_op +")");
scope.append(" <AND> ");
}
if (!urlVal.equals("")) {
r_op = getRightOperator(urlVal);
parse("Url", urlOp, r_op);
}
if (!authorVal.equals("")) {
r_op = getRightOperator(authorVal);
parse("Author", authorOp, r_op);
}
if (!titleVal.equals("")) {
r_op = getRightOperator(titleVal);
parse("Title", titleOp, r_op);
}
if (!expiresVal.equals("")) {
r_op = getRightOperator(expiresVal);
parse("Expires", expiresOp, r_op);
}
if (!lmodifiedVal.equals("")) {
r_op = getRightOperator(lmodifiedVal);
parse("Last-Modified", lmodifiedOp, r_op);
}
if (comments.equalsIgnoreCase("no")) {
// TODO: exclude comments gv-discussion-id =
}
// Remove trailing <AND>
scopeString = scope.toString();
if (scopeString.endsWith(" <AND> ")) {
scopeString = scopeString.substring(0,scopeString.length()-7);
}
}
public String getScope() {
return scopeString;
}
public String getRightOperator(String r_op) {
String new_op= "";
if (r_op.indexOf(",") > 0) {
new_op = r_op.replace(',', '+');
} else if (r_op.indexOf(" ") > 0) {
new_op = r_op.replace(' ', '+');
} else {
new_op = r_op;
}
return new_op;
}
public void parse(String l_op, String operand, String r_op) {
if (operand.equals("does")) {
scope.append("(" + l_op + " <CONTAINS> " + r_op + ")");
} else if (operand.equals("doesnt")) {
scope.append(" <NOT> "+ "(" + l_op+" <CONTAINS> " + r_op + ")");
} else if (operand.equals("is")) {
scope.append("(" + l_op + " = " + r_op + ")");
} else if (operand.equals("isnt")) {
scope.append(" <NOT> "+ "(" + l_op+" = " + r_op + ")");
} else if (operand.equals("before")) {
scope.append( "(" + l_op + " < " + r_op + ")");
} else if (operand.equals("after")) {
scope.append( "(" + l_op + " > " + r_op + ")");
} else if (operand.equals("all")) {
} else if (operand.equals("any")) {
} else if (operand.equals("exact")) {
}
scope.append(" <AND> ");
}
}
|