/** * Adds the fields to builder * * @param fieldsToSelect * the fields to select * @param clazz * the clazz * @param metaModel * the meta model * @param builder * the builder */ private void addFieldsToBuilder(String[] fieldsToSelect, Class clazz, MetamodelImpl metaModel, SearchRequestBuilder builder) { if (fieldsToSelect != null && fieldsToSelect.length > 1 && !(fieldsToSelect[1] == null)) { logger.debug("Fields added in query are: "); for (int i = 1; i < fieldsToSelect.length; i++) { logger.debug(i + " : " + fieldsToSelect[i]); builder = builder.addField(((AbstractAttribute) metaModel.entity(clazz).getAttribute(fieldsToSelect[i])) .getJPAColumnName()); } } }
/** * Gets the JPA column name. * * @param field * the field * @param entityMetadata * the entity metadata * @param metaModel * the meta model * @return the JPA column name */ public static String getJPAColumnName(String field, EntityMetadata entityMetadata, MetamodelImpl metaModel) { if (field.indexOf('.') > 0) { return ((AbstractAttribute) metaModel.entity(entityMetadata.getEntityClazz()).getAttribute( field.substring(field.indexOf('.') + 1, field.indexOf(')') > 0 ? field.indexOf(')') : field.length()))).getJPAColumnName(); } else { return ((AbstractAttribute) entityMetadata.getIdAttribute()).getJPAColumnName(); } }
/** * Iterate and return. * * @param rSet * the r set * @param entityClazz * the entity clazz * @param metadata * the metadata * @return the list */ private List iterateAndReturn(ResultSet rSet, EntityMetadata metadata) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel(metadata.getPersistenceUnit()); EntityType entityType = metaModel.entity(metadata.getEntityClazz()); Iterator<Row> rowIter = rSet.iterator(); List results = new ArrayList(); Map<String, Object> relationalValues = new HashMap<String, Object>(); while (rowIter.hasNext()) { Object entity = null; Row row = rowIter.next(); populateObjectFromRow(metadata, metaModel, entityType, results, relationalValues, entity, row); } return results; }
/** * Gets the sub managed type. * * @param entityClass * the entity class * @param entityMetadata * the entity metadata * @return the sub managed type */ private List<AbstractManagedType> getSubManagedType(Class entityClass, EntityMetadata entityMetadata) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( entityMetadata.getPersistenceUnit()); EntityType entityType = metaModel.entity(entityClass); List<AbstractManagedType> subManagedType = ((AbstractManagedType) entityType).getSubManagedType(); return subManagedType; }
/** * Compute entity via columns. * * @param m * the m * @param isRelation * the is relation * @param relations * the relations * @param entities * the entities * @param qResults * the q results */ protected void computeEntityViaColumns(EntityMetadata m, boolean isRelation, List<String> relations, List<Object> entities, Map<ByteBuffer, List<Column>> qResults) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); EntityType entityType = metaModel.entity(m.getEntityClazz()); List<AbstractManagedType> subManagedType = ((AbstractManagedType) entityType).getSubManagedType(); for (ByteBuffer key : qResults.keySet()) { onColumn(m, isRelation, relations, entities, qResults.get(key), subManagedType, key); } }
/** * @param entityClassName * @param em * @return */ public static AbstractManagedType getEntityManagedType(String entityClassName, EntityManager em) { MetamodelImpl metamodel = (MetamodelImpl) em.getEntityManagerFactory().getMetamodel(); Class<?> entityClass = metamodel.getEntityClass(entityClassName); EntityMetadata entityMetadata = metamodel.getEntityMetadata(entityClass); AbstractManagedType managedType = (AbstractManagedType) metamodel.entity(entityMetadata.getEntityClazz()); return managedType; }
/** * Gets the query. * * @param clause * the clause * @param metadata * the metadata * @return the query */ private QueryBuilder getQueryBuilder(FilterClause clause, final EntityMetadata metadata) { String condition = clause.getCondition(); String value = clause.getValue().get(0).toString(); String name = ((AbstractAttribute) ((MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( metadata.getPersistenceUnit())).entity(metadata.getEntityClazz()).getAttribute(clause.getProperty())) .getJPAColumnName(); String likePattern = value.contains(ESConstants.PERCENTAGE) ? value.replaceAll(ESConstants.PERCENTAGE, ESConstants.ASTERISK) : ESConstants.ASTERISK + value + ESConstants.ASTERISK; QueryBuilder queryBuilder = null; if (condition.equals(Expression.LIKE)) { queryBuilder = QueryBuilders.wildcardQuery(name, likePattern); } return QueryBuilders.queryFilter(queryBuilder); } }
/** * Populate rmap. * * @param entityMetadata * the entity metadata * @param entity * the entity * @return the map object */ private MapObject populateRmap(EntityMetadata entityMetadata, Object entity) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata() .getMetamodel(entityMetadata.getPersistenceUnit()); Class entityClazz = entityMetadata.getEntityClazz(); EntityType entityType = metaModel.entity(entityClazz); Set<Attribute> attributes = entityType.getAttributes(); Iterator<Attribute> iterator = attributes.iterator(); return iterateAndPopulateRmap(entity, metaModel, iterator); }
/** * Gets the filter for discr column. * * @param m * the m * @return the filter for discr column */ private Filter getFilterForDiscrColumn(EntityMetadata m) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata() .getMetamodel(m.getPersistenceUnit()); AbstractManagedType entity = (AbstractManagedType) metaModel.entity(m.getEntityClazz()); if (entity.isInherited()) { return new SingleColumnValueFilter(Bytes.toBytes(m.getTableName()), Bytes.toBytes(entity.getDiscriminatorColumn()), CompareOp.EQUAL, Bytes.toBytes(entity.getDiscriminatorValue())); } return null; }
@Override protected List<E> populateEntities(EntityMetadata m, Client client) throws Exception { int count = 0; List results = new ArrayList(); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( m.getPersistenceUnit()); EntityType entityType = metaModel.entity(entityMetadata.getEntityClazz()); Map<String, Object> relationalValues = new HashMap<String, Object>(); if (rSet == null) { String parsedQuery = query.onQueryOverCQL3(m, client, metaModel, null); Statement statement = new SimpleStatement(parsedQuery); statement.setFetchSize(fetchSize); rSet = ((DSClient) client).executeStatement(statement); rowIter = rSet.iterator(); } while (rowIter.hasNext() && count++ < fetchSize) { Object entity = null; Row row = rowIter.next(); ((DSClient) client).populateObjectFromRow(entityMetadata, metaModel, entityType, results, relationalValues, entity, row); } return results; }
/** * Populate partial row. * * @param row * the row * @param entityMetadata * the entity metadata * @param entity * the entity */ private void populatePartialRow(PartialRow row, EntityMetadata entityMetadata, Object entity) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata() .getMetamodel(entityMetadata.getPersistenceUnit()); Class entityClazz = entityMetadata.getEntityClazz(); EntityType entityType = metaModel.entity(entityClazz); Set<Attribute> attributes = entityType.getAttributes(); Iterator<Attribute> iterator = attributes.iterator(); iterateAndPopulateRow(row, entity, metaModel, iterator); }
@Override public void delete(Object entity, Object pKey) { EntityMetadata m = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entity.getClass()); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); AbstractManagedType managedType = (AbstractManagedType) metaModel.entity(m.getEntityClazz()); // For secondary tables. List<String> secondaryTables = ((DefaultEntityAnnotationProcessor) managedType.getEntityAnnotation()).getSecondaryTablesName(); secondaryTables.add(m.getTableName()); for (String tableName : secondaryTables) { this.execute(onDeleteQuery(m, tableName, metaModel, pKey), null); } }
@Override public JsonDocument getDocumentFromEntity(EntityMetadata entityMetadata, Object entity, KunderaMetadata kunderaMetadata) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata() .getMetamodel(entityMetadata.getPersistenceUnit()); Class entityClazz = entityMetadata.getEntityClazz(); EntityType entityType = metaModel.entity(entityClazz); Set<Attribute> attributes = entityType.getAttributes(); Iterator<Attribute> iterator = attributes.iterator(); JsonObject obj = iterateAndPopulateJsonObject(entity, iterator, entityMetadata.getTableName()); Object id = PropertyAccessorHelper.getId(entity, entityMetadata); return JsonDocument.create(entityMetadata.getTableName() + CouchbaseConstants.ID_SEPARATOR + id.toString(), obj); }
@Override public Object find(Class entityClass, Object key) { EntityMetadata entityMetadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entityClass); JsonDocument doc; String id = generateJsonDocId(entityMetadata.getTableName(), key.toString()); doc = bucket.get(id); LOGGER.debug("Found result for ID : " + key.toString() + " in the " + bucket.name() + " Bucket"); if (doc == null) { return null; } else { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata() .getMetamodel(entityMetadata.getPersistenceUnit()); EntityType entityType = metaModel.entity(entityMetadata.getEntityClazz()); return handler.getEntityFromDocument(entityClass, doc.content(), entityType); } }
@Override protected void onPersist(EntityMetadata entityMetadata, Object entity, Object id, List<RelationHolder> rlHolders) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( entityMetadata.getPersistenceUnit()); AbstractManagedType managedType = (AbstractManagedType) metaModel.entity(entityMetadata.getEntityClazz()); if (managedType.hasLobAttribute()) { onPersistGFS(entity, id, entityMetadata, isUpdate); } else { Map<String, List<DBObject>> collections = new HashMap<String, List<DBObject>>(); collections = onPersist(collections, entity, id, entityMetadata, rlHolders, isUpdate); onFlushCollection(collections); } }
@Override public Object find(Class entityClass, Object key) { EntityMetadata entityMetadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entityClass); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( entityMetadata.getPersistenceUnit()); AbstractManagedType managedType = (AbstractManagedType) metaModel.entity(entityMetadata.getEntityClazz()); return managedType.hasLobAttribute() ? findGFSEntity(entityMetadata, entityClass, key) : find(entityClass, key, entityMetadata, metaModel, managedType); }
@Test public void testMappedMetamodel() { EntityMetadata entityMetadata = KunderaMetadataManager.getEntityMetadata( ((EntityManagerFactoryImpl) emf).getKunderaMetadataInstance(), Employee.class); MetamodelImpl metaModel = (MetamodelImpl) ((EntityManagerFactoryImpl) emf).getKunderaMetadataInstance() .getApplicationMetadata().getMetamodel(persistenceUnit); EntityType entityType = metaModel.entity(Employee.class); Set<Attribute> attributes = entityType.getAttributes(); Assert.assertEquals(5, attributes.size()); Assert.assertNotNull(entityMetadata.getIdAttribute()); Assert.assertNotNull("id", entityMetadata.getIdAttribute().getName()); }
@Override protected void onPersist(EntityMetadata entityMetadata, Object entity, Object id, List<RelationHolder> rlHolders) { try { Map<String, Object> values = new HashMap<String, Object>(); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata() .getMetamodel(entityMetadata.getPersistenceUnit()); EntityType entityType = metaModel.entity(entityMetadata.getEntityClazz()); String keyAsString = getKeyAsString(id, entityMetadata, metaModel); addSource(entity, values, entityType); addRelations(rlHolders, values); addDiscriminator(values, entityType); IndexResponse response = txClient .prepareIndex(entityMetadata.getSchema().toLowerCase(), entityMetadata.getTableName(), keyAsString) .setSource(values).setRefresh(isRefreshIndexes()).execute().actionGet(); assert response.getId() != null; } finally { // Nothing as of now. } }
@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); } }
@Override protected List<Object> populateEntities(EntityMetadata m, Client client) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( m.getPersistenceUnit()); EntityType entity = metaModel.entity(m.getEntityClazz()); Expression whereExpression = KunderaQueryUtils.getWhereClause(kunderaQuery.getJpqlExpression()); QueryBuilder filter = whereExpression == null || whereExpression instanceof NullExpression ? null : esFilterBuilder.populateFilterBuilder(((WhereClause) whereExpression).getConditionalExpression(), m); return ((ESClient) client).executeQuery(filter, buildAggregation(kunderaQuery, m, filter), m, getKunderaQuery(),this.firstResult, this.maxResult); }