1 package jp.ac.aiit.xdf.core.selector;
3 import java.util.ArrayList;
4 import java.util.HashSet;
8 import jp.ac.aiit.xdf.core.model.ObjectModel;
11 * @author Shunichi Takagi
12 * セレクターのルールシーケンス(ユーザガイドへ参照)
14 public class RuleSequence {
15 private List<Rule> rules;
21 public RuleSequence(String ruleSequence) {
22 this( extractRules(ruleSequence) );
29 public RuleSequence(List<Rule> rules) {
33 private static List<Rule> extractRules(String ruleSequence) {
34 List<Rule> rules = new ArrayList<Rule>();
35 String[] ruleStrings = ruleSequence.split(" ");
37 for(String ruleString : ruleStrings) {
38 rules.add( new Rule(ruleString.trim()) );
47 * @return オブジェクトモデルセット
49 public Set<ObjectModel> find(ObjectModel findRoot) {
50 Set<ObjectModel> findRoots = new HashSet<ObjectModel>();
51 findRoots.add(findRoot);
53 return findImpl(findRoots, 0);
56 private Set<ObjectModel> findImpl(Set<ObjectModel> findRoots, int ruleIndex) {
58 Rule rule = rules.get(ruleIndex);
60 Set<ObjectModel> result = new HashSet<ObjectModel>();
61 for(ObjectModel findRoot : findRoots) {
62 result.addAll( findImpl( rule.find(findRoot), ruleIndex+1 ) );
66 } catch(IndexOutOfBoundsException e) {