01: // Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
02: // Released under the terms of the GNU General Public License version 2 or later.
03: package fitnesse.components;
04:
05: import fitnesse.wiki.WikiPage;
06: import fitnesse.wikitext.widgets.*;
07: import fitnesse.wikitext.*;
08: import java.util.*;
09:
10: public class WhereUsed implements FitNesseTraversalListener,
11: SearchObserver, WidgetVisitor {
12: private WikiPage root;
13: private WikiPage subjectPage;
14: private SearchObserver observer;
15: private WikiPage currentPage;
16:
17: private List hits = new ArrayList();
18:
19: public WhereUsed(WikiPage root) {
20: this .root = root;
21: }
22:
23: public void hit(WikiPage referencingPage) throws Exception {
24: }
25:
26: public void visit(WikiWidget widget) throws Exception {
27: }
28:
29: public void visit(WikiWordWidget widget) throws Exception {
30: if (hits.contains(currentPage))
31: return;
32: WikiPage referencedPage = widget.getReferencedPage();
33: if (referencedPage != null
34: && referencedPage.equals(subjectPage)) {
35: hits.add(currentPage);
36: observer.hit(currentPage);
37: }
38: }
39:
40: public void visit(AliasLinkWidget widget) throws Exception {
41: }
42:
43: public void searchForReferencingPages(WikiPage subjectPage,
44: SearchObserver observer) throws Exception {
45: this .observer = observer;
46: this .subjectPage = subjectPage;
47: root.getPageCrawler().traverse(root, this );
48: }
49:
50: public List findReferencingPages(WikiPage subjectPage)
51: throws Exception {
52: hits.clear();
53: searchForReferencingPages(subjectPage, this );
54: return hits;
55: }
56:
57: public void processPage(WikiPage currentPage) throws Exception {
58: this .currentPage = currentPage;
59: String content = currentPage.getData().getContent();
60: WidgetBuilder referenceWidgetBuilder = new WidgetBuilder(
61: new Class[] { PreProcessorLiteralWidget.class,
62: WikiWordWidget.class, PreformattedWidget.class });
63: WidgetRoot widgetRoot = new WidgetRoot(content, currentPage,
64: referenceWidgetBuilder);
65: widgetRoot.acceptVisitor(this );
66: }
67:
68: public String getSearchPattern() throws Exception {
69: return subjectPage.getName();
70: }
71: }
|