1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.student.common.util;
17
18 import java.io.IOException;
19 import java.io.InputStream;
20 import java.util.jar.Attributes;
21 import java.util.jar.Manifest;
22
23 import javax.servlet.ServletContext;
24
25 import static org.apache.commons.io.IOUtils.*;
26 import static org.apache.commons.lang.StringUtils.*;
27
28
29
30
31 public class ManifestInspector {
32
33
34
35
36 public static final String MANIFEST_LOCATION = "/META-INF/MANIFEST.MF";
37 public static final String BUNDLE_NAME = "Bundle-Name";
38 public static final String BUNDLE_VERSION = "Bundle-Version";
39 public static final String BUNDLE_TIMESTAMP = "Bundle-Timestamp";
40 public static final String BUNDLE_BUILD_NUMBER = "Bundle-BuildNumber";
41 public static final String NO_BUILD_INFORMATION_AVAILABLE = "No build information available";
42
43
44
45
46 protected Manifest getManifest(ServletContext servletContext) throws IOException {
47 InputStream in = null;
48 try {
49 in = servletContext.getResourceAsStream(MANIFEST_LOCATION);
50 if (in == null) {
51 return null;
52 } else {
53 return new Manifest(in);
54 }
55 } catch (IOException e) {
56 throw e;
57 } finally {
58 closeQuietly(in);
59 }
60 }
61
62
63
64
65 protected BuildInformation getBuildInformation(Manifest manifest) {
66
67 if (manifest == null) {
68 return null;
69 }
70
71
72 Attributes attributes = manifest.getMainAttributes();
73
74
75 String name = attributes.getValue(BUNDLE_NAME);
76 String version = attributes.getValue(BUNDLE_VERSION);
77 String buildNumber = attributes.getValue(BUNDLE_BUILD_NUMBER);
78 String timestamp = attributes.getValue(BUNDLE_TIMESTAMP);
79
80
81 BuildInformation bi = new BuildInformation();
82 bi.setName(name);
83 bi.setVersion(version);
84 bi.setBuildNumber(buildNumber);
85 bi.setTimestamp(timestamp);
86 return bi;
87 }
88
89
90
91
92 public String getBuildInformationString(ServletContext context) throws IOException {
93
94 Manifest manifest = getManifest(context);
95
96
97 BuildInformation buildInformation = getBuildInformation(manifest);
98
99
100 return toString(buildInformation);
101 }
102
103
104
105
106 protected boolean isNullOrEmpty(BuildInformation bi) {
107 if (bi == null) {
108 return true;
109 }
110 if (!isEmpty(bi.getName())) {
111 return false;
112 }
113 if (!isEmpty(bi.getVersion())) {
114 return false;
115 }
116 if (!isEmpty(bi.getBuildNumber())) {
117 return false;
118 }
119 if (!isEmpty(bi.getTimestamp())) {
120 return false;
121 }
122 return true;
123 }
124
125
126
127
128 public String toString(BuildInformation bi) {
129
130
131
132
133
134
135 if (isNullOrEmpty(bi)) {
136 return NO_BUILD_INFORMATION_AVAILABLE;
137 }
138
139
140
141
142 if (!isEmpty(bi.getBuildNumber())) {
143 bi.setBuildNumber("#" + bi.getBuildNumber());
144 }
145
146
147
148
149 StringBuffer sb = new StringBuffer();
150 if (!isEmpty(bi.getName())) {
151 sb.append(bi.getName());
152 sb.append(" :: ");
153 }
154 if (!isEmpty(bi.getVersion())) {
155 sb.append(bi.getVersion());
156 sb.append(" :: ");
157 }
158 if (!isEmpty(bi.getBuildNumber())) {
159 sb.append(bi.getBuildNumber());
160 sb.append(" :: ");
161 }
162 if (!isEmpty(bi.getTimestamp())) {
163 sb.append(bi.getTimestamp());
164 }
165 return sb.toString();
166 }
167 }