in juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java [314:450]
private RDFNode serializeAnything(Object o, boolean isURI, ClassMeta<?> eType, String attrName, BeanPropertyMeta bpm, Resource parentResource) throws SerializeException {
Model m = model;
ClassMeta<?> aType = null; // The actual type
ClassMeta<?> wType = null; // The wrapped type
ClassMeta<?> sType = object(); // The serialized type
aType = push2(attrName, o, eType);
if (eType == null)
eType = object();
// Handle recursion
if (aType == null) {
o = null;
aType = object();
}
// Handle Optional<X>
if (isOptional(aType)) {
o = getOptionalValue(o);
eType = getOptionalType(eType);
aType = getClassMetaForObject(o, object());
}
if (o != null) {
if (aType.isDelegate()) {
wType = aType;
aType = ((Delegate)o).getClassMeta();
}
sType = aType;
// Swap if necessary
ObjectSwap swap = aType.getSwap(this);
if (swap != null) {
o = swap(swap, o);
sType = swap.getSwapClassMeta(this);
// If the getSwapClass() method returns Object, we need to figure out
// the actual type now.
if (sType.isObject())
sType = getClassMetaForObject(o);
}
} else {
sType = eType.getSerializedClassMeta(this);
}
String typeName = getBeanTypeName(this, eType, aType, bpm);
RDFNode n = null;
if (o == null || sType.isChar() && ((Character)o).charValue() == 0) {
if (bpm != null) {
if (isKeepNullProperties()) {
n = m.createResource(RDF_NIL);
}
} else {
n = m.createResource(RDF_NIL);
}
} else if (sType.isUri() || isURI) {
// Note that RDF URIs must be absolute to be valid!
String uri = getUri(o, null);
if (StringUtils.isAbsoluteUri(uri))
n = m.createResource(uri);
else
n = m.createLiteral(encodeTextInvalidChars(uri));
} else if (sType.isCharSequence() || sType.isChar()) {
n = m.createLiteral(encodeTextInvalidChars(o));
} else if (sType.isNumber() || sType.isBoolean()) {
if (! isAddLiteralTypes())
n = m.createLiteral(o.toString());
else
n = m.createTypedLiteral(o);
} else if (sType.isMap() || (wType != null && wType.isMap())) {
if (o instanceof BeanMap) {
BeanMap bm = (BeanMap)o;
Object uri = null;
RdfBeanMeta rbm = getRdfBeanMeta(bm.getMeta());
if (rbm.hasBeanUri())
uri = rbm.getBeanUriProperty().get(bm, null);
String uri2 = getUri(uri, null);
n = m.createResource(uri2);
serializeBeanMap(bm, (Resource)n, typeName);
} else {
Map m2 = (Map)o;
n = m.createResource();
serializeMap(m2, (Resource)n, sType);
}
} else if (sType.isBean()) {
BeanMap bm = toBeanMap(o);
Object uri = null;
RdfBeanMeta rbm = getRdfBeanMeta(bm.getMeta());
if (rbm.hasBeanUri())
uri = rbm.getBeanUriProperty().get(bm, null);
String uri2 = getUri(uri, null);
n = m.createResource(uri2);
serializeBeanMap(bm, (Resource)n, typeName);
} else if (sType.isCollectionOrArray() || (wType != null && wType.isCollection())) {
Collection c = sort(sType.isCollection() ? (Collection)o : toList(sType.getInnerClass(), o));
RdfCollectionFormat f = getCollectionFormat();
RdfClassMeta cRdf = getRdfClassMeta(sType);
RdfBeanPropertyMeta bpRdf = getRdfBeanPropertyMeta(bpm);
if (cRdf.getCollectionFormat() != RdfCollectionFormat.DEFAULT)
f = cRdf.getCollectionFormat();
if (bpRdf.getCollectionFormat() != RdfCollectionFormat.DEFAULT)
f = bpRdf.getCollectionFormat();
switch (f) {
case BAG: n = serializeToContainer(c, eType, m.createBag()); break;
case LIST: n = serializeToList(c, eType); break;
case MULTI_VALUED: serializeToMultiProperties(c, eType, bpm, attrName, parentResource); break;
default: n = serializeToContainer(c, eType, m.createSeq());
}
} else if (sType.isReader()) {
n = m.createLiteral(encodeTextInvalidChars(read((Reader)o, SerializerSession::handleThrown)));
} else if (sType.isInputStream()) {
n = m.createLiteral(encodeTextInvalidChars(read((InputStream)o, SerializerSession::handleThrown)));
} else {
n = m.createLiteral(encodeTextInvalidChars(toString(o)));
}
pop();
return n;
}