1 package uk.ac.cam.spectra;
2
3 import org.apache.log4j.Logger;
4
5 import com.hp.hpl.jena.rdf.model.Literal;
6 import com.hp.hpl.jena.rdf.model.Model;
7 import com.hp.hpl.jena.rdf.model.RDFNode;
8 import com.hp.hpl.jena.rdf.model.Resource;
9
10
11
12
13
14 public class IntegerProperty extends LiteralProperty implements
15 MetadataProperty {
16
17 private static final long serialVersionUID = 8911007514888002083L;
18
19 private static final Logger LOG = Logger.getLogger(IntegerProperty.class);
20
21 public IntegerProperty(String namespace, String element) {
22 super(namespace, element);
23 }
24
25 @Override
26 public String getXsiType() {
27 return Constants.XSI_INTEGER;
28 }
29
30 @Override
31 public boolean valid(RDFNode nd, Model m) {
32 if (super.valid(nd, m)) {
33 Literal l = (Literal) nd;
34 if (!l.getDatatypeURI().equals(getXsiType())) {
35 LOG
36 .debug("Datatypes did not match for property " + this
37 + ". Literal <<" + l.getLexicalForm()
38 + ">> had type " + l.getDatatypeURI()
39 + " but expected: " + getXsiType());
40 return false;
41 }
42 }
43 return true;
44 }
45
46 public Integer decodeInteger(RDFNode value) {
47 Literal l = (Literal) value;
48 return l.getInt();
49 }
50
51 @Override
52 public void add(Resource resource, Object value) {
53 if (!(value instanceof Integer)) {
54 throw new IllegalArgumentException(value + " is not an integer");
55 }
56 Model m = resource.getModel();
57 Literal l = m.createTypedLiteral((Integer) value);
58 resource.addProperty(asProperty(m), l);
59 }
60 }