1
2
3
4
5
6 package org.bud.kernel;
7 import java.io.BufferedReader;
8 import java.io.IOException;
9 import java.io.InputStreamReader;
10 import java.io.Reader;
11 import java.io.StringReader;
12 import java.net.URL;
13 import org.apache.commons.digester.Digester;
14 import org.bud.kernel.model.Feature;
15 import org.bud.kernel.model.Informations;
16 import org.bud.kernel.model.Organization;
17 import org.bud.kernel.model.Platorm;
18 import org.bud.kernel.model.Release;
19 import org.xml.sax.SAXException;
20 /***
21 * TODO replace digester wiith xstream (much more lean).
22 */
23 public class PlatormManager {
24 private String model;
25 private Platorm platform;
26 private LocalPlatform localPlatform;
27
28
29 public PlatormManager(URL resource) throws IOException, SAXException {
30 model = loadContent(resource);
31
32 Digester loader = createDigester();
33 platform = (Platorm)loader.parse(modelToReader());
34 }
35
36
37 public String modelToString() {
38 return model;
39 }
40
41
42 public Reader modelToReader() {
43 return new StringReader(model);
44 }
45
46
47 public Platorm getPlatform() {
48 return platform;
49 }
50
51
52 private Digester createDigester() {
53 Digester loader = new Digester();
54 loader.setValidating(false);
55
56 loader.addObjectCreate("platform", Platorm.class);
57 loader.addSetProperties("platform", "id", "id");
58
59 loader.addObjectCreate("platform/informations", Informations.class);
60 loader.addBeanPropertySetter("platform/informations/label", "label");
61 loader.addBeanPropertySetter("platform/informations/icon", "icon");
62 loader.addBeanPropertySetter("*/uninstaller-directory", "uninstallerDirectory");
63 loader.addSetNext("platform/informations", "setInformations");
64
65 loader.addObjectCreate("platform/informations/organization", Organization.class);
66 loader.addBeanPropertySetter("*/organization/name", "name");
67 loader.addBeanPropertySetter("*/organization/url", "url");
68 loader.addSetNext("platform/informations/organization", "setOrganization");
69
70 loader.addObjectCreate("platform/release", Release.class);
71 loader.addSetProperties("platform/release", "version", "versionString");
72 loader.addBeanPropertySetter("platform/release/description", "description");
73 loader.addSetNext("platform/release", "addRelease");
74
75 loader.addObjectCreate("platform/release/feature", Feature.class);
76 loader.addSetProperties("platform/release/feature", "label", "label");
77 loader.addSetNext("platform/release/feature", "addFeature");
78 return loader;
79 }
80
81
82 private String loadContent(final URL url) throws IOException {
83 BufferedReader reader =
84 new BufferedReader(new InputStreamReader(url.openStream()));
85
86 try {
87 StringBuffer fileContent = new StringBuffer();
88 char[] buffer = new char[10000];
89 int charRead = reader.read(buffer);
90 while (charRead != -1) {
91 fileContent.append(buffer, 0, charRead);
92 charRead = reader.read(buffer);
93 }
94 return fileContent.toString();
95 }
96 finally {
97 reader.close();
98 }
99 }
100
101
102 public LocalPlatform getLocalPlatform() {
103 if (localPlatform == null) {
104 localPlatform = new LocalPlatform(platform.getId());
105 localPlatform.setScriptBuilder(new ScriptBuilder(this));
106 }
107 return localPlatform;
108 }
109 }