]> git.argeo.org Git - gpl/argeo-suite.git/blob - BundleResourceOdkForm.java
97f978b74a2519109457146eee89c396e12521e1
[gpl/argeo-suite.git] / BundleResourceOdkForm.java
1 package org.argeo.app.odk;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.net.URL;
7 import java.util.Map;
8
9 import org.apache.commons.io.FilenameUtils;
10 import org.apache.commons.io.IOUtils;
11 import org.argeo.util.DigestUtils;
12 import org.osgi.framework.Bundle;
13 import org.osgi.framework.BundleContext;
14
15 /** {@link OdkForm} implementation based on an OSGi {@link Bundle} resource. */
16 public class BundleResourceOdkForm implements OdkForm {
17 private String formId;
18 private String name;
19 private String version;
20 private String description;
21 private String hash;
22 private String fileName;
23
24 private byte[] data;
25
26 public void init(Map<String, String> properties, BundleContext bundleContext) throws IOException {
27 String location = properties.get("location");
28 fileName = FilenameUtils.getName(location);
29 URL url = bundleContext.getBundle().getResource(location);
30 data = IOUtils.toByteArray(url.openStream());
31 hash = "md5:" + DigestUtils.digest(DigestUtils.MD5, data);
32
33 // TODO get it from the XML
34 formId = properties.get("formId");
35 version = properties.get("version");
36
37 name = properties.get("name");
38 description = properties.get("description");
39 }
40
41 @Override
42 public String getFormId() {
43 return formId;
44 }
45
46 @Override
47 public String getName() {
48 return name;
49 }
50
51 @Override
52 public String getVersion() {
53 return version;
54 }
55
56 @Override
57 public String getDescription() {
58 return description;
59 }
60
61 @Override
62 public String getHash(String hashType) {
63 return hash;
64 }
65
66 @Override
67 public String getFileName() {
68 return fileName;
69 }
70
71 @Override
72 public InputStream openStream() {
73 return new ByteArrayInputStream(data);
74 }
75
76 @Override
77 public int hashCode() {
78 assert formId != null;
79 assert version != null;
80 return formId.hashCode() + version.hashCode();
81 }
82
83 @Override
84 public boolean equals(Object obj) {
85 assert formId != null;
86 assert version != null;
87 if (!(obj instanceof OdkForm))
88 return false;
89 OdkForm other = (OdkForm) obj;
90 assert other.getFormId() != null;
91 assert other.getVersion() != null;
92
93 return other.getFormId().equals(formId) && other.getVersion().equals(version);
94 }
95
96 @Override
97 public String toString() {
98 return "ODK Form " + formId + ", v" + version;
99 }
100
101 }