View Javadoc

1   /*
2    * BUD, installer for development platform.
3    *
4    * Copyright(c) 2006 bud-project - http://opensource.org/licenses/apachepl.php
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 }