01: package fitnesse.responders;
02:
03: import fitnesse.responders.run.*;
04: import fitnesse.wiki.*;
05:
06: public class WikiImportTestEventListener implements TestEventListener {
07: public static void register() {
08: TestResponder.registerListener(new WikiImportTestEventListener(
09: new WikiImporterFactory()));
10: }
11:
12: private WikiImporterFactory importerFactory;
13:
14: public WikiImportTestEventListener(
15: WikiImporterFactory importerFactory) {
16: this .importerFactory = importerFactory;
17: }
18:
19: public void notifyPreTest(TestResponder testResponder, PageData data)
20: throws Exception {
21: TestEventProcessor eventProcessor;
22: if (testResponder instanceof SuiteResponder)
23: eventProcessor = new SuiteEventProcessor();
24: else
25: eventProcessor = new TestEventProcessor();
26:
27: eventProcessor.run(testResponder, data);
28: }
29:
30: private class TestEventProcessor implements WikiImporterClient {
31: private TestResponder testResponder;
32: private boolean errorOccured;
33: protected WikiImporter wikiImporter;
34: protected WikiPage wikiPage;
35: protected PageData data;
36: protected WikiImportProperty importProperty;
37:
38: public void run(TestResponder testResponder, PageData data)
39: throws Exception {
40: this .testResponder = testResponder;
41: this .data = data;
42: importProperty = WikiImportProperty.createFrom(data
43: .getProperties());
44: if (importProperty != null && importProperty.isAutoUpdate()) {
45: testResponder
46: .addToResponse("<span class=\"meta\">Updating imported content...</span>");
47: testResponder.addToResponse("<span class=\"meta\">");
48:
49: try {
50: wikiImporter = importerFactory.newImporter(this );
51: wikiImporter
52: .parseUrl(importProperty.getSourceUrl());
53: wikiPage = data.getWikiPage();
54:
55: doUpdating();
56:
57: if (!errorOccured)
58: testResponder.addToResponse("done");
59:
60: } catch (Exception e) {
61: pageImportError(data.getWikiPage(), e);
62: }
63:
64: testResponder.addToResponse("</span>");
65: }
66: }
67:
68: protected void doUpdating() throws Exception {
69: updatePagePassedIn();
70: }
71:
72: protected void updatePagePassedIn() throws Exception {
73: wikiImporter.importRemotePageContent(wikiPage);
74: data.setContent(wikiPage.getData().getContent());
75: }
76:
77: public void pageImported(WikiPage localPage) throws Exception {
78: }
79:
80: public void pageImportError(WikiPage localPage, Exception e)
81: throws Exception {
82: errorOccured = true;
83: testResponder.addToResponse(e.toString());
84: }
85: }
86:
87: private class SuiteEventProcessor extends TestEventProcessor {
88: protected void doUpdating() throws Exception {
89: if (!importProperty.isRoot())
90: updatePagePassedIn();
91:
92: wikiImporter.importWiki(wikiPage);
93: }
94: }
95: }
|