/** * Gets the key as string. * * @param id * the id * @param metadata * the metadata * @param metaModel * the meta model * @return the key as string */ private String getKeyAsString(Object id, EntityMetadata metadata, MetamodelImpl metaModel) { if (metaModel.isEmbeddable(((AbstractAttribute) metadata.getIdAttribute()).getBindableJavaType())) { return KunderaCoreUtils.prepareCompositeKey(metadata, id); } return id.toString(); }
/** * Custom implementation to offer map of embeddables available for given * entityType. * * @param clazz * entity class * @return map of holding {@link EmbeddableType} as value and attribute name * as key. */ public Map<String, EmbeddableType> getEmbeddables(Class clazz) { Map<String, EmbeddableType> embeddableAttibutes = new HashMap<String, EmbeddableType>(); if (entityTypes != null) { EntityType entity = entityTypes.get(clazz); Iterator<Attribute> iter = entity.getAttributes().iterator(); while (iter.hasNext()) { Attribute attribute = iter.next(); if (isEmbeddable(((AbstractAttribute) attribute).getBindableJavaType())) { embeddableAttibutes.put(attribute.getName(), embeddable(((AbstractAttribute) attribute).getBindableJavaType())); } } } return embeddableAttibutes; }
/** * Prepares ID column value for embedded IDs by combining its attributes * * @param m * @param id * @param metaModel * @return */ private String serializeIdAttributeValue(final EntityMetadata m, MetamodelImpl metaModel, Object id) { if (!metaModel.isEmbeddable(m.getIdAttribute().getBindableJavaType())) { return null; } Class<?> embeddableClass = m.getIdAttribute().getBindableJavaType(); String idUniqueValue = ""; for (Field embeddedField : embeddableClass.getDeclaredFields()) { if (!ReflectUtils.isTransientOrStatic(embeddedField)) { Object value = PropertyAccessorHelper.getObject(id, embeddedField); if (value != null && !StringUtils.isEmpty(value.toString())) idUniqueValue = idUniqueValue + value + COMPOSITE_KEY_SEPARATOR; } } if (idUniqueValue.endsWith(COMPOSITE_KEY_SEPARATOR)) idUniqueValue = idUniqueValue.substring(0, idUniqueValue.length() - COMPOSITE_KEY_SEPARATOR.length()); return idUniqueValue; }
private static void getAttributeOfEmbedddable(Map<String, Field> columnNameToFieldMap, Metamodel metaModel, Attribute attribute) { EmbeddableType embeddable = metaModel.embeddable(((AbstractAttribute) attribute).getBindableJavaType()); Iterator<Attribute> embeddableIter = embeddable.getAttributes().iterator(); while (embeddableIter.hasNext()) { Attribute embedAttrib = embeddableIter.next(); // Reason is to avoid in case embeddable attribute within // embeddable. if (!((MetamodelImpl) metaModel).isEmbeddable(embedAttrib.getJavaType())) { columnNameToFieldMap.put(((AbstractAttribute) embedAttrib).getJPAColumnName(), (Field) embedAttrib.getJavaMember()); } else { getAttributeOfEmbedddable(columnNameToFieldMap, metaModel, embedAttrib); } } }
private void prepareEmbeddedIdFields(Set<Attribute> embeddedAttributes, MetamodelImpl metaModel, Map<String, Object> embeddedIdFields, Document doc, EntityMetadata metadata) { for (Attribute attribute : embeddedAttributes) { if (!ReflectUtils.isTransientOrStatic((Field) attribute.getJavaMember())) { if (metaModel.isEmbeddable(attribute.getJavaType())) { EmbeddableType embeddable = metaModel.embeddable(attribute.getJavaType()); prepareEmbeddedIdFields(embeddable.getAttributes(), metaModel, embeddedIdFields, doc, metadata); } else { String columnName = ((AbstractAttribute) attribute).getJPAColumnName(); embeddedIdFields.put(columnName, doc.get(metadata.getEntityClazz().getSimpleName() + "." + columnName)); } } } }
private void populateEntityFromDocument(Object entity, Object rowKey, MetamodelImpl metaModel, AbstractAttribute attrib) throws InstantiationException, IllegalAccessException { EmbeddableType embeddable = metaModel.embeddable(attrib.getBindableJavaType()); Iterator<Attribute> iter = embeddable.getAttributes().iterator(); Object compoundKey = attrib.getBindableJavaType().newInstance(); while (iter.hasNext()) { AbstractAttribute compositeAttrib = (AbstractAttribute) iter.next(); Object value = ((BasicDBObject) rowKey).get(compositeAttrib.getJPAColumnName()); if (metaModel.isEmbeddable(compositeAttrib.getBindableJavaType())) { populateEntityFromDocument(compoundKey, value, metaModel, compositeAttrib); } else { PropertyAccessorHelper.set(compoundKey, (Field) compositeAttrib.getJavaMember(), value); } } PropertyAccessorHelper.set(entity, (Field) attrib.getJavaMember(), compoundKey); }
private static void getEmbeddableType(EntityMetadata m, Map<String, Field> columnNameToFieldMap, Map<String, Field> superColumnNameToFieldMap, final KunderaMetadata kunderaMetadata) { Metamodel metaModel = kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); EntityType entityType = metaModel.entity(m.getEntityClazz()); Set attributes = entityType.getAttributes(); Iterator<Attribute> iter = attributes.iterator(); while (iter.hasNext()) { Attribute attribute = iter.next(); if (((MetamodelImpl) metaModel).isEmbeddable(((AbstractAttribute) attribute).getBindableJavaType())) { superColumnNameToFieldMap.put(((AbstractAttribute) attribute).getJPAColumnName(), (Field) attribute.getJavaMember()); if (columnNameToFieldMap != null) { getAttributeOfEmbedddable(columnNameToFieldMap, metaModel, attribute); } } else { if (columnNameToFieldMap != null) { columnNameToFieldMap.put(((AbstractAttribute) attribute).getJPAColumnName(), (Field) attribute.getJavaMember()); } } } }
@Override public Object find(Class entityClass, Object rowId) { EntityMetadata m = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entityClass); Object enhancedEntity = null; if (rowId == null) { return null; } MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( m.getPersistenceUnit()); if (metaModel.isEmbeddable(m.getIdAttribute().getBindableJavaType())) { rowId = KunderaCoreUtils.prepareCompositeKey(m, rowId); } try { List results = findData(m, rowId, null, null, null, null); if (results != null && !results.isEmpty()) { enhancedEntity = results.get(0); } } catch (Exception e) { log.error("Error during find by id, Caused by: .", e); throw new KunderaException("Error during find by id, Caused by: .", e); } return enhancedEntity; }
@Override public void delete(Object entity, Object rowKey) { EntityMetadata m = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entity.getClass()); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( m.getPersistenceUnit()); if (metaModel.isEmbeddable(m.getIdAttribute().getBindableJavaType())) { rowKey = KunderaCoreUtils.prepareCompositeKey(m, rowKey); } deleteByColumn(m.getSchema(), m.getTableName(), null, rowKey); }
/** * index compositekey * * @param metadata * @param id * @param document * @param metaModel */ protected void indexCompositeKey(Set<Attribute> embeddedAttributes, EntityMetadata metadata, Object id, Document document, final MetamodelImpl metaModel) { // indexing individual fields of the composite key try { for (Attribute attribute : embeddedAttributes) { if (!ReflectUtils.isTransientOrStatic((java.lang.reflect.Field) attribute.getJavaMember())) { if (metaModel.isEmbeddable(attribute.getJavaType())) { EmbeddableType embeddable = metaModel.embeddable(attribute.getJavaType()); indexCompositeKey(embeddable.getAttributes(), metadata, ((java.lang.reflect.Field) attribute.getJavaMember()).get(id), document, metaModel); } else { String columnName = ((AbstractAttribute) attribute).getJPAColumnName(); addFieldToDocument(id, document, (java.lang.reflect.Field) attribute.getJavaMember(), columnName, metadata.getEntityClazz().getSimpleName()); } } } } catch (IllegalAccessException e) { LOG.error(e.getMessage()); } }
private void updateOrCreateIndexEmbeddedIdFields(Set<Attribute> embeddedAttributes, MetamodelImpl metaModel, Document document, EntityMetadata metadata, Object rowKey) { try { for (Attribute attribute : embeddedAttributes) { if (!ReflectUtils.isTransientOrStatic((Field) attribute.getJavaMember())) { if (metaModel.isEmbeddable(attribute.getJavaType())) { EmbeddableType embeddable = metaModel.embeddable(attribute.getJavaType()); updateOrCreateIndexEmbeddedIdFields(embeddable.getAttributes(), metaModel, document, metadata, ((Field) attribute.getJavaMember()).get(rowKey)); } else { String columnName = ((AbstractAttribute) attribute).getJPAColumnName(); Object embeddedColumn = PropertyAccessorHelper.getObject(rowKey, (Field) attribute.getJavaMember()); updateDocument(embeddedColumn.toString(), document, columnName); } } } } catch (IllegalAccessException e) { log.error(e.getMessage()); } }
/** * Create Delete query from a given JPA query. * * @param kunderaQuery * the kundera query * @return the string */ public String createDeleteQuery(KunderaQuery kunderaQuery) { EntityMetadata metadata = kunderaQuery.getEntityMetadata(); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel(metadata.getPersistenceUnit()); CQLTranslator translator = new CQLTranslator(); String delete_query = translator.DELETE_QUERY; String tableName = kunderaQuery.getEntityMetadata().getTableName(); delete_query = StringUtils.replace(delete_query, CQLTranslator.COLUMN_FAMILY, translator.ensureCase(new StringBuilder(), tableName, false).toString()); StringBuilder builder = new StringBuilder(delete_query); builder.append(CQLTranslator.ADD_WHERE_CLAUSE); Class compoundKeyClass = metadata.getIdAttribute().getBindableJavaType(); EmbeddableType compoundKey = null; String idColumn; if (metaModel.isEmbeddable(compoundKeyClass)) { compoundKey = metaModel.embeddable(compoundKeyClass); idColumn = ((AbstractAttribute) metadata.getIdAttribute()).getJPAColumnName(); } else { idColumn = ((AbstractAttribute) metadata.getIdAttribute()).getJPAColumnName(); } onCondition(metadata, metaModel, compoundKey, idColumn, builder, false, translator, false); return builder.toString(); }
private static void populateEmbeddedIdFieldsUtil(Set<Attribute> embeddedAttributes, MetamodelImpl metaModel, Set<String> embeddedIdFields) { for (Attribute attribute : embeddedAttributes) { if (!ReflectUtils.isTransientOrStatic((Field) attribute.getJavaMember())) { if (metaModel.isEmbeddable(attribute.getJavaType())) { EmbeddableType embeddable = metaModel.embeddable(attribute.getJavaType()); populateEmbeddedIdFieldsUtil(embeddable.getAttributes(), metaModel, embeddedIdFields); } else { String columnName = ((AbstractAttribute) attribute).getJPAColumnName(); embeddedIdFields.add(columnName); } } } }
/** * From bytes. * * @param m * the m * @param metaModel * the meta model * @param b * the b * @return the object */ public static Object fromBytes(EntityMetadata m, MetamodelImpl metaModel, byte[] b) { Class idFieldClass = m.getIdAttribute().getJavaType(); if (metaModel.isEmbeddable(m.getIdAttribute().getBindableJavaType())) { return fromBytes(b, String.class); } return fromBytes(b, idFieldClass); }
/** * From bytes. * * @param m * the m * @param metaModel * the meta model * @param b * the b * @return the object */ public static Object fromBytes(EntityMetadata m, MetamodelImpl metaModel, byte[] b) { Class idFieldClass = m.getIdAttribute().getJavaType(); if (metaModel.isEmbeddable(m.getIdAttribute().getBindableJavaType())) { return fromBytes(b, String.class); } return fromBytes(b, idFieldClass); }
/** * recursively populate all the fields present in partition key * * @param embeddedAttributes * @param metaModel * @param embeddedIdFields */ private static void populateEmbeddedIdFields(Set<Attribute> embeddedAttributes, MetamodelImpl metaModel, Set<String> embeddedIdFields) { for (Attribute attribute : embeddedAttributes) { if (!ReflectUtils.isTransientOrStatic((Field) attribute.getJavaMember())) { if (metaModel.isEmbeddable(attribute.getJavaType())) { EmbeddableType embeddable = metaModel.embeddable(attribute.getJavaType()); populateEmbeddedIdFieldsUtil(embeddable.getAttributes(), metaModel, embeddedIdFields); } } } }
/** * Adds the index properties. * * @param metadata * the metadata * @param entity * the object * @param document * the document * @param metaModel */ protected void addEntityFieldsToDocument(EntityMetadata metadata, Object entity, Document document, MetamodelImpl metaModel) { String indexName = metadata.getIndexName(); Map<String, PropertyIndex> indexProperties = metadata.getIndexProperties(); for (String columnName : indexProperties.keySet()) { PropertyIndex index = indexProperties.get(columnName); java.lang.reflect.Field property = index.getProperty(); String propertyName = index.getName(); addFieldToDocument(entity, document, property, propertyName, indexName); } if (metaModel.isEmbeddable(metadata.getIdAttribute().getBindableJavaType())) { Object id = PropertyAccessorHelper.getId(entity, metadata); EmbeddableType embeddableId = metaModel.embeddable(metadata.getIdAttribute().getBindableJavaType()); Set<Attribute> embeddedAttributes = embeddableId.getAttributes(); indexCompositeKey(embeddedAttributes, metadata, id, document, metaModel); } }
@Override public void delete(Object entity, Object pKey) { EntityMetadata metadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entity.getClass()); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( metadata.getPersistenceUnit()); AbstractManagedType managedType = (AbstractManagedType) metaModel.entity(metadata.getEntityClazz()); List<String> secondaryTables = ((DefaultEntityAnnotationProcessor) managedType.getEntityAnnotation()) .getSecondaryTablesName(); secondaryTables.add(metadata.getTableName()); if (metaModel.isEmbeddable(metadata.getIdAttribute().getBindableJavaType())) { pKey = KunderaCoreUtils.prepareCompositeKey(metadata, pKey); } for (String colTableName : secondaryTables) { deleteByColumn(metadata.getSchema(), colTableName, ((AbstractAttribute) metadata.getIdAttribute()).getJPAColumnName(), pKey); } }
/** * Id value in byte arr. * * @return the byte[] */ private byte[] idValueInByteArr() { Object entity = results.get(results.size() - 1); Object id = PropertyAccessorHelper.getId(entity, entityMetadata); String idName = ((AbstractAttribute) entityMetadata.getIdAttribute()).getJPAColumnName(); Class idClazz = ((AbstractAttribute) entityMetadata.getIdAttribute()).getBindableJavaType(); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( entityMetadata.getPersistenceUnit()); EmbeddableType keyObj = null; ByteBuffer bytes = null; // if the key attribute is composite if (metaModel.isEmbeddable(entityMetadata.getIdAttribute().getBindableJavaType())) { keyObj = metaModel.embeddable(entityMetadata.getIdAttribute().getBindableJavaType()); Field embeddedField = getPartitionKeyField(); Attribute partitionKey = keyObj.getAttribute(embeddedField.getName()); Object partitionKeyValue = PropertyAccessorHelper.getObject(id, (Field) partitionKey.getJavaMember()); bytes = CassandraUtilities.toBytes(partitionKeyValue, (Field) partitionKey.getJavaMember()); } else { bytes = query.getBytesValue(idName, entityMetadata, id); } return bytes.array(); }
/** * Initialize ID attribute */ @Override protected void initialize(Node created, Map<String, Object> properties) { // Set Embeddable ID attribute if (metaModel.isEmbeddable(m.getIdAttribute().getBindableJavaType())) { // Populate embedded field value in serialized format created.setProperty(idColumnName, idUniqueValue); // Populated all other attributes of embedded into this node Set<Attribute> embeddableAttributes = metaModel .embeddable(m.getIdAttribute().getBindableJavaType()).getSingularAttributes(); for (Attribute attribute : embeddableAttributes) { String columnName = ((AbstractAttribute) attribute).getJPAColumnName(); if (columnName == null) columnName = attribute.getName(); Object value = PropertyAccessorHelper.getObject(id, (Field) attribute.getJavaMember()); if (value != null) created.setProperty(columnName, value); } } else { created.setProperty(idColumnName, properties.get(idColumnName)); } } };