1
16package org.tp23.antinstaller.renderer;
17
18import org.tp23.antinstaller.input.OutputField;
19import org.tp23.antinstaller.page.Page;
20import org.tp23.antinstaller.renderer.swing.SwingOutputFieldRenderer;
21import org.tp23.antinstaller.renderer.swing.SwingPageRenderer;
22import org.tp23.antinstaller.renderer.text.AbstractTextPageRenderer;
23import org.tp23.antinstaller.renderer.text.TextOutputFieldRenderer;
24
25
26
27
37public class RendererFactory {
38 public RendererFactory() {
39 }
40
41 public static TextOutputFieldRenderer getTextRenderer(OutputField field) throws ClassNotFoundException {
42 String fullyQualified = field.getClass().getName();
43 int lastDot = fullyQualified.lastIndexOf('.');
44 if (lastDot == -1) {
45 throw new UnsupportedOperationException("InputField can not be a member of the default package");
46 }
47 int prevDot = fullyQualified.substring(0,lastDot-1).lastIndexOf('.', lastDot - 1);
48 if (prevDot == -1) {
49 throw new UnsupportedOperationException("InputField can not be a member of a single level package");
50 }
51 StringBuffer rendererClassName = new StringBuffer();
52 rendererClassName.append(fullyQualified.substring(0, prevDot));
53 rendererClassName.append(".renderer.text.");
54 rendererClassName.append(fullyQualified.substring(lastDot + 1));
55 rendererClassName.append("Renderer");
56 try {
57 Class clazz = Class.forName(rendererClassName.toString());
58 return (TextOutputFieldRenderer) clazz.newInstance();
59 }
60 catch (Exception ex) {
61 throw new ClassNotFoundException("Class does not meet the contract for TextInputFieldRenderer:" + rendererClassName);
62 }
63 }
64
65 public static AbstractTextPageRenderer getTextPageRenderer(Page page) throws ClassNotFoundException {
66 String fullyQualified = page.getClass().getName();
67 int lastDot = fullyQualified.lastIndexOf('.');
68 if (lastDot == -1) {
69 throw new UnsupportedOperationException("Pages can not be a member of the default package");
70 }
71 int prevDot = fullyQualified.substring(0,lastDot-1).lastIndexOf('.', lastDot - 1);
72 if (prevDot == -1) {
73 throw new UnsupportedOperationException("Pages can not be a member of a single level package");
74 }
75 StringBuffer rendererClassName = new StringBuffer();
76 rendererClassName.append(fullyQualified.substring(0, prevDot));
77 rendererClassName.append(".renderer.text.");
78 rendererClassName.append(fullyQualified.substring(lastDot + 1));
79 rendererClassName.append("Renderer");
80 try {
81 Class clazz = Class.forName(rendererClassName.toString());
82 return (AbstractTextPageRenderer) clazz.newInstance();
83 }
84 catch (Exception ex) {
85 throw new ClassNotFoundException("Class does not meet the contract for TextPageRenderer:" + rendererClassName);
86 }
87 }
88 public static SwingPageRenderer getSwingPageRenderer(Page page) throws ClassNotFoundException {
89 String fullyQualified = page.getClass().getName();
90 int lastDot = fullyQualified.lastIndexOf('.');
91 if (lastDot == -1) {
92 throw new UnsupportedOperationException("Pages can not be a member of the default package");
93 }
94 int prevDot = fullyQualified.substring(0,lastDot-1).lastIndexOf('.', lastDot - 1);
95 if (prevDot == -1) {
96 throw new UnsupportedOperationException("Pages can not be a member of a single level package");
97 }
98 StringBuffer rendererClassName = new StringBuffer();
99 rendererClassName.append(fullyQualified.substring(0, prevDot));
00 rendererClassName.append(".renderer.swing.");
01 rendererClassName.append(fullyQualified.substring(lastDot + 1));
02 rendererClassName.append("Renderer");
03 try {
04 Class clazz = Class.forName(rendererClassName.toString());
05 return (SwingPageRenderer) clazz.newInstance();
06 }
07 catch (Exception ex) {
08 throw new ClassNotFoundException("Class does not meet the contract for SwingPageRenderer:" + rendererClassName);
09 }
10 }
11
12 public static SwingOutputFieldRenderer getSwingRenderer(OutputField field) throws ClassNotFoundException {
13 String fullyQualified = field.getClass().getName();
14 int lastDot = fullyQualified.lastIndexOf('.');
15 if (lastDot == -1) {
16 throw new UnsupportedOperationException("OutputField can not be a member of the default package");
17 }
18 int prevDot = fullyQualified.substring(0,lastDot-1).lastIndexOf('.', lastDot - 1);
19 if (prevDot == -1) {
20 throw new UnsupportedOperationException("OutputField can not be a member of a single level package");
21 }
22 StringBuffer rendererClassName = new StringBuffer();
23 rendererClassName.append(fullyQualified.substring(0, prevDot));
24 rendererClassName.append(".renderer.swing.");
25 rendererClassName.append(fullyQualified.substring(lastDot + 1));
26 rendererClassName.append("Renderer");
27 try {
28 Class clazz = Class.forName(rendererClassName.toString());
29 return (SwingOutputFieldRenderer) clazz.newInstance();
30 }
31 catch (Exception ex) {
32 ex.printStackTrace();
33 throw new ClassNotFoundException("Class does not meet the contract for SwingInputFieldRenderer:" + rendererClassName);
34 }
35 }
36}
37