1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.license;
35
36 import info.magnolia.objectfactory.Components;
37 import org.apache.commons.io.IOUtils;
38 import org.apache.commons.lang.StringUtils;
39 import org.jdom.Document;
40 import org.jdom.Element;
41 import org.jdom.input.SAXBuilder;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
44
45 import java.io.InputStream;
46 import java.util.HashMap;
47 import java.util.Iterator;
48 import java.util.List;
49 import java.util.Map;
50
51
52
53
54
55
56
57 public class LicenseFileExtractor {
58 private static final Logger log = LoggerFactory.getLogger(LicenseFileExtractor.class);
59
60 public static final String VERSION_NUMBER = "VersionNumber";
61
62
63
64
65 public static final String IMPLEMENTATION_VERSION = "ImplementationVersion";
66
67 public static final String BUILD_NUMBER = "BuildNumber";
68
69 public static final String PROVIDER = "Provider";
70
71 public static final String PROVIDER_ADDRESS = "ProviderAddress";
72
73 public static final String PROVIDER_EMAIL = "ProviderEmail";
74
75 public static final String EDITION = "Edition";
76
77 public static final String PRODUCT_DOMAIN = "ProductDomain";
78
79 private static final String LICENSE_FILE_PATH = "info/magnolia/cms/license/license.xml";
80
81 private static final String ELEMENT_META = "Meta";
82
83 private static final String NOT_DEFINED = "Not Defined";
84
85 private static final String OS_NAME = "OSName";
86
87 private Map values;
88
89 public static LicenseFileExtractor getInstance() {
90 return Components.getSingleton(LicenseFileExtractor.class);
91 }
92
93 public String get(String id) {
94 if (values.containsKey(id)) {
95 return (String) values.get(id);
96 }
97 return NOT_DEFINED;
98 }
99
100 public Map getEntries() {
101 return values;
102 }
103
104 public String getOSName() {
105 String osName = System.getProperty("os.name");
106 return osName.replaceAll(" ", "-");
107 }
108
109 public void init() {
110 InputStream in = getClass().getClassLoader().getResourceAsStream(LICENSE_FILE_PATH);
111 this.init(in);
112 }
113
114 public void init(InputStream in) {
115 try {
116 SAXBuilder builder = new SAXBuilder();
117 Document document = builder.build(in);
118 this.load(document);
119 }
120 catch (Exception e) {
121 log.error("failed to load license information");
122 log.error(e.getMessage(), e);
123 }
124 finally {
125 IOUtils.closeQuietly(in);
126 }
127 }
128
129
130
131
132
133
134 public String getVersionFromManifest() {
135 Package p = this.getClass().getPackage();
136 if (p != null) {
137 return StringUtils.defaultString(p.getImplementationVersion());
138 }
139 return StringUtils.EMPTY;
140 }
141
142
143
144
145 private void load(Document document) {
146 Element metaElement = document.getRootElement().getChild(ELEMENT_META);
147
148 List elements = metaElement.getChildren();
149
150 values = new HashMap(10);
151 Iterator iterator = elements.iterator();
152 while (iterator.hasNext()) {
153 Element element = (Element) iterator.next();
154 values.put(element.getName(), element.getText());
155 }
156
157 String osName = System.getProperty("os.name");
158 values.put(OS_NAME, osName.replaceAll(" ", "-"));
159
160 values.put(IMPLEMENTATION_VERSION, getVersionFromManifest());
161
162 }
163
164
165
166
167 public void printVersionInfo() {
168 System.out.println("---------------------------------------------");
169 System.out.println("MAGNOLIA LICENSE");
170 System.out.println("---------------------------------------------");
171 System.out.println("Version number : " + get(LicenseFileExtractor.VERSION_NUMBER));
172 System.out.println("Build : " + get(LicenseFileExtractor.BUILD_NUMBER));
173 System.out.println("Edition : " + get(LicenseFileExtractor.EDITION));
174 System.out.println("Provider : " + get(LicenseFileExtractor.PROVIDER) + " (" + get(LicenseFileExtractor.PROVIDER_EMAIL) + ")");
175 }
176 }