1
16package org.tp23.antinstaller.runtime;
17
18import java.io.BufferedReader;
19import java.io.IOException;
20import java.io.InputStreamReader;
21import java.io.PrintStream;
22import java.util.ResourceBundle;
23
24import org.tp23.antinstaller.InstallException;
25import org.tp23.antinstaller.Installer;
26import org.tp23.antinstaller.InstallerContext;
27import org.tp23.antinstaller.page.Page;
28import org.tp23.antinstaller.page.SimpleInputPage;
29import org.tp23.antinstaller.renderer.AntOutputRenderer;
30import org.tp23.antinstaller.renderer.RendererFactory;
31import org.tp23.antinstaller.renderer.text.AbstractTextPageRenderer;
32import org.tp23.antinstaller.renderer.text.TextMessageRenderer;
33
34
35
36
46public class TextRunner extends AntRunner
47 implements Runner {
48
49 private static final ResourceBundle res = ResourceBundle.getBundle("org.tp23.antinstaller.renderer.Res");
50
51 protected final InstallerContext ctx;
52 protected final Installer installer;
53 private final Logger logger;
54 protected final IfPropertyHelper ifHelper;
55
56 public TextRunner(InstallerContext ctx) throws IOException {
57 super(ctx);
58 this.ctx = ctx;
59 this.installer = ctx.getInstaller();
60 this.logger = ctx.getLogger();
61 ctx.setMessageRenderer(new TextMessageRenderer());
62 ctx.setAntOutputRenderer(new AntOutputRenderer(){
63 public PrintStream getErr() {
64 return System.err;
65 }
66 public PrintStream getOut() {
67 return System.out;
68 }
69
70 });
71 this.ifHelper = new IfPropertyHelper(ctx);
72 }
73
74
80 public boolean runInstaller() throws InstallException {
81 try {
82 return renderPages(installer.getPages());
83 }
84 catch (Exception ex) {
85 logger.log("FATAL exception during installation:"+ex.getMessage());
86 logger.log(installer, ex);
87
88 ctx.getMessageRenderer().printMessage(res.getString("installationFailed") + ":" + ex.getMessage());
89 throw new InstallException("Installation failed", ex);
91 }
92 }
93
94
95 private boolean renderPages(Page[] pages) throws ClassNotFoundException, InstallException{
96 Page next = null;
97 for (int i = 0; i < pages.length; i++) {
98 next = pages[i];
99
00 if(next instanceof SimpleInputPage){
01 if(!ifHelper.ifTarget(next, pages))continue;
03 if(!ifHelper.ifProperty(next))continue;
05 }
06
07 AbstractTextPageRenderer renderer = RendererFactory.getTextPageRenderer(next);
08 renderer.setContext(ctx);
09 renderer.init( new BufferedReader(new InputStreamReader(System.in)), System.out);
10 ctx.setCurrentPage(next);
11 renderer.renderPage(next);
12 if (next.isAbort()){
13 return false;
14 }
15 runPost(next);
16 }
17 return true;
18 }
19 public InstallerContext getInstallerContext() {
20 return ctx;
21 }
22
23
24
25
28 public void antFinished() {
29 System.out.println(res.getString("finished"));
30 }
32
35 public void fatalError(){
36 System.out.println(res.getString("failed"));
37 }
39
40 public String toString() {
41 return "TextRunner";
42 }
43}
44