1 package org
.argeo
.support
.odk
;
3 import java
.io
.ByteArrayInputStream
;
4 import java
.io
.IOException
;
5 import java
.io
.InputStream
;
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
;
15 /** {@link OdkForm} implementation based on an OSGi {@link Bundle} resource. */
16 public class BundleResourceOdkForm
implements OdkForm
{
17 private String formId
;
19 private String version
;
20 private String description
;
22 private String fileName
;
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
);
33 // TODO get it from the XML
34 formId
= properties
.get("formId");
35 version
= properties
.get("version");
37 name
= properties
.get("name");
38 description
= properties
.get("description");
42 public String
getFormId() {
47 public String
getName() {
52 public String
getVersion() {
57 public String
getDescription() {
62 public String
getHash(String hashType
) {
67 public String
getFileName() {
72 public InputStream
openStream() {
73 return new ByteArrayInputStream(data
);
77 public int hashCode() {
78 assert formId
!= null;
79 assert version
!= null;
80 return formId
.hashCode() + version
.hashCode();
84 public boolean equals(Object obj
) {
85 assert formId
!= null;
86 assert version
!= null;
87 if (!(obj
instanceof OdkForm
))
89 OdkForm other
= (OdkForm
) obj
;
90 assert other
.getFormId() != null;
91 assert other
.getVersion() != null;
93 return other
.getFormId().equals(formId
) && other
.getVersion().equals(version
);
97 public String
toString() {
98 return "ODK Form " + formId
+ ", v" + version
;