⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dqlastutil.java

📁 OBPM是一个开源
💻 JAVA
字号:
package cn.myapps.core.dynaform.document.dql;

import java.io.StringReader;

import antlr.collections.AST;
import cn.myapps.base.action.ParamsTable;
import cn.myapps.core.dynaform.document.ejb.Item;

public class DQLASTUtil {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	}

	public static String inListToString(AST ast) {
		StringBuffer text = new StringBuffer();
		if (ast != null && ast.getNumberOfChildren() > 0) {
			String t = ast.getText();
			if (t != null && t.equals("inList")) {
				AST tmp = ast.getFirstChild();
				text.append("(");
				while (tmp != null) {
					text.append(tmp.getText());
					tmp = tmp.getNextSibling();
					if (tmp != null) {
						text.append(",");
					}
				}
				text.append(")");
			}
		}
		return text.toString();
	}

	public static String transTo(String text, ParamsTable params, int side,
			int ident, int opt) {
		// System.out.println("ident->"+ident);
		StringBuffer str = new StringBuffer();
		if (text != null) {
			if (ident == DqlTokenTypes.IDENT) {
				if (text.toUpperCase().startsWith("$PARENT.")) {
					String fieldName = text.substring(8);
				
					 if (fieldName.startsWith("$")) {
							str.append(side == 1 ? "(" : "");
							str.append("doc.parent.");
							str.append(fieldName.substring(1, fieldName.length()));
							str.append(side == 2 ? ")" : "");
					}
					 else {
							str.append(
									"doc.parent in (select items.document from "
											+ Item.class.getName()
											+ " items where items.name='").append(fieldName)
									.append("' AND ");
							if (opt==DqlTokenTypes.ILIKE) {
								str.append("lower(items.varcharvalue)");
							}
							else {
								str.append("items.varcharvalue");					
							}
					 }
				}
				else if (text.toUpperCase().startsWith("$CHILDS")) {
					String fieldName = text.substring(8);
					
					 if (fieldName.startsWith("$")) {
							str.append(side == 1 ? "(" : "");
							str.append("doc.childs.");
							str.append(text.substring(1, text.length()));
							str.append(side == 2 ? ")" : "");
					}
					 else {
							str.append(
									"doc.id in (select items.document.parent from "
											+ Item.class.getName()
											+ " items where items.name='").append(fieldName)
									.append("' AND ");
							if (opt==DqlTokenTypes.ILIKE) {
								str.append("lower(items.varcharvalue)");
							}
							else {
								str.append("items.varcharvalue");					
							}
					 }
				}
				else if (text.startsWith("$")) {
					str.append(side == 1 ? "(" : "");
					str.append("doc.");
					str.append(text.substring(1, text.length()));
					str.append(side == 2 ? ")" : "");
				}
				else if (text.startsWith("#")) {
					str.append(side == 1 ? "(" : "");
					String paramName = text.substring(1, text.length());
					Object obj = params.getParameter(paramName);

					if (opt==DqlTokenTypes.ILIKE) {
						str.append("lower(");
					}
					
					str.append("'");
					if (obj != null && obj instanceof String) {
						String paramValue = (String) obj;
						if (paramValue.equals("")) {
							paramValue = "%";
						} else {
							paramValue = paramValue.replaceAll("\n\r", "%");
							paramValue = paramValue.replaceAll("\n", "%");
						}
						
						
						if (!paramValue.startsWith("%")) {
							str.append("%");
						}
						
						str.append(paramValue);
						
						if (!paramValue.endsWith("%")) {
							str.append("%");
						}
					} else {
						str.append('%');
					}
					str.append("'");
					if (opt==DqlTokenTypes.ILIKE) {
						str.append(")");
					}

					str.append(side == 2 ? ")" : "");
				} else {
					str.append(
							"doc.id in (select items.document from "
									+ Item.class.getName()
									+ " items where items.name='").append(text)
							.append("' AND ");
					if (opt==DqlTokenTypes.ILIKE) {
						str.append("lower(items.varcharvalue)");
					}
					else {
						str.append("items.varcharvalue");						
					}
				}

			} else {
				str.append(side == 1 ? "(" : "");
				if (opt==DqlTokenTypes.ILIKE) {
					str.append("lower(");
					str.append(text);
					str.append(")");
				}
				else {
					str.append(text);	
				}
				
				str.append(side == 2 ? ")" : "");
			}
		}
		return str.toString();
	}

	public static String parseToHQL(String dql, ParamsTable params)
			throws Exception {
		DqlBaseLexer lexer = new DqlBaseLexer(new StringReader(dql));
		DqlBaseParser parser = new DqlBaseParser(lexer);
		parser.exprList();
		// parser.whenClause();
		AST t = parser.getAST();

		ExprTreeParser treeParser = new ExprTreeParser();
		String x = treeParser.expr(t, params, 0, 0);
		return x;
	}

	public static String parseToHQL(String dql) throws Exception {
		return parseToHQL(dql, new ParamsTable());
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -