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

📄 validationmanager.java

📁 EclipseIM是一个Eclipse插件, 其可以与Java开发人员即时聊天, 当在聊天中, 可以发送Eclipse中的java源码.
💻 JAVA
字号:
/**
 *
 */
package com.asterix.validation;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.antlr.runtime.ANTLRInputStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.tree.CommonTree;

import com.asterix.validation.antlr.ValidationLexer;
import com.asterix.validation.antlr.ValidationParser;
import com.asterix.validation.antlr.ValidationParser.parse_return;
import com.asterix.validation.predicate.Predicate;

/**
 * @author Andrei A Adamian
 *
 */
public class ValidationManager {

    private ValidationConfiguration config;

    public ValidationManager() {

    }

    public void initialize(String file) {
	try {
	    initialize(new FileInputStream(file));
	} catch (FileNotFoundException e) {
	}
    }

    public void initialize(InputStream stream) {
	try {
	    ValidationLexer lexer = new ValidationLexer(new ANTLRInputStream(stream));
	    ValidationParser parser = new ValidationParser(new CommonTokenStream(lexer));
	    parse_return parse = parser.parse();
	    CommonTree tree = (CommonTree) parse.getTree();
	    System.out.println(tree.toStringTree());
	    config = new ValidationConfiguration(tree);
	} catch (Throwable t) {
	    new RuntimeException(t);
	}
    }

    public List<IValidationError> validate(String name, Object target) {
	CommonTree group = config.getGroup(name);
	if (group == null) {
	    throw new IllegalArgumentException("Unknown group " + name);
	}
	return runValidation(group, target);
    }

    private List<IValidationError> runValidation(CommonTree tree, Object target) {
	List<IValidationError> errors = Predicate.singleList(null);
	for (int i = 0; i < tree.getChildCount(); i++) {
	    CommonTree child = (CommonTree) tree.getChild(i);
	    int token = child.getToken().getType();
	    if (ValidationLexer.RULE == token) {
		String name = getObjectName(child);
		RuntimeMethod rule = config.getRule(name);
		if (rule == null) {
		    throw new IllegalArgumentException("Unknown rule " + name);
		}
		rule.getTarget().setContext(RuleContext.newContext(this));
		IValidationError error = rule.invoke(target);
		if (error != null) {
		    errors.add(error);
		}
	    } else if (ValidationLexer.GROUP == token) {
		String name = getObjectName(child);
		CommonTree group = config.getGroup(name);
		if (group == null) {
		    throw new IllegalArgumentException("Unknown group " + name);
		}
		errors.addAll(runValidation(group, target));
	    } else if (ValidationLexer.ITERATOR == token) {
		String name = getObjectName((CommonTree) child.getChild(0));
		IteratorMethod iterator = config.getIterator(name);
		if (iterator == null) {
		    new IllegalArgumentException("Unknown iterator " + name);
		}
		iterator.getTarget().setContext(RuleContext.newContext(this));
		Iterator iter = iterator.invoke(target);
		ArrayList<String> messageModifiers = new ArrayList<String>(iterator.getTarget().getContext().getMessageParameters());
		while (iter.hasNext()) {
		    Object next = iter.next();
		    name = getObjectName((CommonTree) child.getChild(1));
		    List<IValidationError> iErrors = new ArrayList<IValidationError>();
		    if (child.getChild(1).getType() == ValidationLexer.GROUP) {
			CommonTree group = config.getGroup(name);
			if (group == null) {
			    throw new IllegalArgumentException("Unknown group " + name);
			}
			iErrors.addAll(runValidation(group, next));
		    } else {
			RuntimeMethod rule = config.getRule(name);
			if (rule == null) {
			    throw new IllegalArgumentException("Unknown rule " + name);
			}
			rule.getTarget().setContext(RuleContext.newContext(this));
			IValidationError error = rule.invoke(next);
			if (error != null) {
			    iErrors.add(error);
			}
		    }
		    String message = iterator.getMessage();
		    if (!"".equals(message)) {
			for (IValidationError error : iErrors) {
			    messageModifiers.add(0, error.getMessage());
			    error.setMessage(MessageFormat.format(message, messageModifiers.toArray()));
			}
		    }
		    errors.addAll(iErrors);
		}
	    } else if (ValidationLexer.BREAK == token) {
		if (errors.size()>0) {
		    break;
		}
	    }
	}
	return errors;
    }

    private String getObjectName(CommonTree tree) {
	String name = "";
	for (int i = 0; i < tree.getChildCount(); i++) {
	    name += tree.getChild(i).getText();
	}
	return name;
    }
}

⌨️ 快捷键说明

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