01: /*
02: * Copyright 2007 Bastian Schenke Licensed under the Apache License, Version 2.0 (the "License");
03: * you may not use this file except in compliance with the License.
04: * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
05: * Unless required by applicable law or agreed to in writing, software distributed under the
06: * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
07: * either express or implied. See the License for the specific language governing permissions
08: * and limitations under the License.
09: */
10: package nz.org.take.r2ml;
11:
12: import nz.org.take.Fact;
13: import nz.org.take.Term;
14: import nz.org.take.r2ml.util.R2MLUtil;
15: import de.tu_cottbus.r2ml.ReferencePropertyAtom;
16:
17: /**
18: * @author Bastian Schenke (bastian.schenke@googlemail.com)
19: */
20: class ReferencePropertyAtomHandler extends AbstractPropertyHandler {
21:
22: /**
23: * Map a ReferencePropertyAtom to a Fact.
24: *
25: * @param obj
26: * a ReferencePropertyAtom
27: * @return the Fact
28: *
29: * @see nz.org.take.r2ml.XmlTypeHandler#importObject(java.lang.Object,
30: * nz.org.take.r2ml.R2MLDriver)
31: */
32: public Object importObject(Object obj) throws R2MLException {
33: R2MLDriver driver = R2MLDriver.get();
34:
35: ReferencePropertyAtom atom = (ReferencePropertyAtom) obj;
36: Fact fact = R2MLUtil.newFact();
37: String referenceName = atom.getReferencePropertyID()
38: .getLocalPart();
39: // domain
40: XmlTypeHandler subjectHandler = driver.getHandlerByXmlType(atom
41: .getSubject().getClass());
42: Term domain = (Term) subjectHandler.importObject(atom
43: .getSubject());
44: // range
45: XmlTypeHandler valueHandler = driver.getHandlerByXmlType(atom
46: .getObject().getObjectTerm().getValue().getClass());
47: Term range = (Term) valueHandler.importObject(atom.getObject()
48: .getObjectTerm().getValue());
49:
50: fact.setTerms(new Term[] { domain, range });
51:
52: String[] slotNames = driver.getNameMapper().getSlotNames(
53: atom.getReferencePropertyID());
54:
55: fact
56: .setPredicate(buildPredicate(referenceName, domain,
57: range, atom.isIsNegated() == null ? false
58: : atom.isIsNegated(), slotNames));
59:
60: fact.setId(referenceName);
61:
62: return fact;
63: }
64:
65: }
|