static JsonObject getJsonOfEntity(EntityMetadata m, Object entity, Object id, List<RelationHolder> relations,
final KunderaMetadata kunderaMetadata) throws OperationNotSupportedException
{
JsonObject jsonObject = new JsonObject();
MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel(
m.getPersistenceUnit());
EntityType entityType = metaModel.entity(m.getEntityClazz());
// Add discriminator column and value.
String discrColumn = ((AbstractManagedType) entityType).getDiscriminatorColumn();
String discrValue = ((AbstractManagedType) entityType).getDiscriminatorValue();
if (discrValue != null)
{
jsonObject.add(discrColumn, getJsonPrimitive(discrValue, discrValue.getClass()));
}
// Populate id attribute.
SingularAttribute idAttribute = m.getIdAttribute();
if (metaModel.isEmbeddable(idAttribute.getBindableJavaType()))
{
Field field = (Field) idAttribute.getJavaMember();
EmbeddableType embeddableType = metaModel.embeddable(idAttribute.getBindableJavaType());
String _id = get_Id(field, PropertyAccessorHelper.getObject(entity, field), embeddableType,
m.getTableName());
jsonObject.addProperty("_id", _id);
Object embeddedObject = PropertyAccessorHelper.getObject(entity, (Field) idAttribute.getJavaMember());
Set<Attribute> embeddableAttributes = embeddableType.getAttributes();
jsonObject.add(((AbstractAttribute) idAttribute).getJPAColumnName(),
getJsonObject(field.getType().getDeclaredFields(), embeddableType, embeddedObject));
}
else
{
jsonObject.addProperty("_id", m.getTableName() + PropertyAccessorHelper.getString(id));
jsonObject.add(((AbstractAttribute) idAttribute).getJPAColumnName(),
getJsonPrimitive(id, idAttribute.getJavaType()));
}
// Populate columns
Set<Attribute> columns = entityType.getAttributes();
for (Attribute column : columns)
{
if (!column.equals(idAttribute))
{
try
{
Class javaType = ((AbstractAttribute) column).getBindableJavaType();
if (metaModel.isEmbeddable(javaType))
{
onEmbeddable(entityType, column, entity, metaModel.embeddable(javaType), jsonObject);
}
else if (!column.isAssociation())
{
Object valueObject = PropertyAccessorHelper.getObject(entity, (Field) column.getJavaMember());
jsonObject.add(((AbstractAttribute) column).getJPAColumnName(),