View Javadoc

1   package com.jbergin;
2   
3   import java.util.ArrayList;
4   import java.util.HashMap;
5   import java.util.Iterator;
6   import java.util.List;
7   import java.util.Map;
8   import java.util.regex.Pattern;
9   import com.gargoylesoftware.htmlunit.Page;
10  import com.gargoylesoftware.htmlunit.html.DomNode;
11  import com.gargoylesoftware.htmlunit.html.HtmlElement;
12  
13  final class DomNodeMemory
14  {
15    private final static Map  memory	= new HashMap();
16    static boolean preserve;
17    
18    public void clear() {
19      memory.clear();
20    }
21    public void store(String key, Object value) {
22      memory.put(key, value);
23    }
24    public DomNode retrieve(String key) {
25      return (DomNode) memory.get(key);
26    }
27  
28    int size() {
29      return memory.size();
30    }
31    boolean containsKey(String key) {
32      return memory.containsKey(key);
33    }
34  
35    public void purgeElementsInPage(Page page) {
36    	if (preserve) return;
37    	
38      for (Iterator itr = memory.keySet().iterator(); itr.hasNext();) {
39        String key = (String) itr.next();
40        HtmlElement element = (HtmlElement) memory.get(key);
41        if (element.getPage() == page) {
42          itr.remove();
43        }
44      }
45    }
46    public Object remove(Object key) {
47  	return memory.remove(key);	
48    }
49  
50    private List getAnswers() {
51    	List answers = (List)memory.get("answers");
52    	if (answers == null) {
53    		answers = new ArrayList();
54    		store("answers", answers);
55    	}
56    	return answers;
57    }
58    public void addAnswer(String message, boolean answer) {
59  	getAnswers().add(new Answer(message, answer));
60    }
61    public boolean getNextAnswer(String message) {
62    	final List answers = getAnswers();
63  	if (answers.isEmpty()) {
64  		throw new ConfirmWithoutAnswerException("must use Answer command to answer javascript confirm('" +
65  				message + "')");
66  	}
67  
68  	final Answer answer = (Answer) answers.remove(0);
69  	final String expectedMessage = answer.message;
70      if (Pattern.matches(expectedMessage, message)) {
71          return answer.answer;
72      }	
73      throw new ConfirmMessageMismatchException("regex '" + expectedMessage + "' does not match '" + message + "'");
74    }
75    
76    public boolean isPreserve() {
77      return preserve;
78    }
79    public void setPreserve(boolean preserve) {
80      DomNodeMemory.preserve = preserve;
81    }
82    private final static class Answer {
83    	final String message;
84    	final boolean answer;
85    	Answer(String message, boolean answer) {
86    		this.message = message;
87    		this.answer = answer;
88    	}
89    }
90  }