View Javadoc

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   * A metadata literal with an integer value.
12   * @author Jim Downing
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  }