/** * Checks if is id col. * * @param m * the m * @param colName * the col name * @return true, if is id col */ private boolean isIdCol(EntityMetadata m, String colName) { return ((AbstractAttribute) m.getIdAttribute()).getJPAColumnName().equals(colName); }
@Override public void writeColumn(HTableInterface htable, String columnFamily, Object rowKey, Attribute column, Object columnObj) throws IOException { Put p = new Put(HBaseUtils.getBytes(rowKey)); p.add(Bytes.toBytes(columnFamily), Bytes.toBytes(((AbstractAttribute) column).getJPAColumnName()), Bytes.toBytes(columnObj.toString())); htable.put(p); }
/** * Checks if is find key only. * * @param metadata * the metadata * @param colToOutput * the col to output * @return true, if is find key only */ public static boolean isFindKeyOnly(EntityMetadata metadata, List<Map<String, Object>> colToOutput) { if (colToOutput != null && colToOutput.size() == 1) { String idCol = ((AbstractAttribute) metadata.getIdAttribute()).getJPAColumnName(); return idCol.equals(colToOutput.get(0).get(Constants.DB_COL_NAME)) && !(boolean) colToOutput.get(0).get(Constants.IS_EMBEDDABLE); } else { return false; } }
/** * @param translatedColumns * @param metaModel * @param col */ private void onEmbeddable(List<String> translatedColumns, MetamodelImpl metaModel, Attribute col, boolean isEmbeddable) { if (isEmbeddable) { EmbeddableType embeddableType = metaModel.embeddable(col.getJavaType()); Set<Attribute> attributes = embeddableType.getAttributes(); for (Attribute attribute : attributes) { translatedColumns.add(((AbstractAttribute) attribute).getJPAColumnName()); } } else { translatedColumns.add(((AbstractAttribute) col).getJPAColumnName()); } }
/** * Creates the columns field map. * * @param m * the m * @param superColumn * the super column * @return the map */ public static Map<String, Field> createColumnsFieldMap(EntityMetadata m, EmbeddableType superColumn) { Map<String, Field> columnNameToFieldMap = new HashMap<String, Field>(); Set<Attribute> attributes = superColumn.getAttributes(); for (Attribute column : attributes) { columnNameToFieldMap.put(((AbstractAttribute) column).getJPAColumnName(), (Field) column.getJavaMember()); } return columnNameToFieldMap; }
/** * Gets the object from json. * * @param jsonObj * the json obj * @param clazz * the clazz * @param columns * the columns * @return the object from json */ static Object getObjectFromJson(JsonObject jsonObj, Class clazz, Set<Attribute> columns) { Object obj = KunderaCoreUtils.createNewInstance(clazz); for (Attribute column : columns) { JsonElement value = jsonObj.get(((AbstractAttribute) column).getJPAColumnName()); setFieldValue(obj, column, value); } return obj; }
/** * setter field. * * @param row * the row * @param schemaTable * the schema table * @param embeddedObject * the embedded object * @param embeddedAttrib * the embedded attrib */ private void setField(Row row, Table schemaTable, Object embeddedObject, Attribute embeddedAttrib) { Field field = (Field) embeddedAttrib.getJavaMember(); FieldDef fieldDef = schemaTable.getField(((AbstractAttribute) embeddedAttrib).getJPAColumnName()); Object valueObj = PropertyAccessorHelper.getObject(embeddedObject, field); if (valueObj != null) NoSqlDBUtils.add(fieldDef, row, valueObj, ((AbstractAttribute) embeddedAttrib).getJPAColumnName()); }
public static void onJPAColumnMapping(final EntityType entityType, EntityMetadata entityMetadata) { Set<Attribute> attributes = entityType.getAttributes(); Iterator<Attribute> iter = attributes.iterator(); while (iter.hasNext()) { Attribute attribute = iter.next(); // jpa column mapping is for non id columns only. if (!entityMetadata.getIdAttribute().equals(attribute)) { entityMetadata.addJPAColumnMapping(((AbstractAttribute) attribute).getJPAColumnName(), attribute.getName()); } } entityMetadata.setEntityType(entityType); }
@Override public <E> List<E> findAll(Class<E> entityClazz, String[] columnsToSelect, Object... arg1) { // TODO: Vivek correct it. unfortunately i need to open a new session // for each finder to avoid lazy loading. Session s = getSession(); EntityMetadata entityMetadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, getPersistenceUnit(), entityClazz); Object[] pKeys = getDataType(entityMetadata, arg1); String id = ((AbstractAttribute) entityMetadata.getIdAttribute()).getJPAColumnName(); Criteria c = s.createCriteria(entityClazz); c.add(Restrictions.in(id, pKeys)); return c.list(); }
@Override public void index(Class entityClazz, EntityMetadata m, Map<String, Object> values, Object entityId, final Class parentClazz) { String idColumnName = ((AbstractAttribute) m.getIdAttribute()).getJPAColumnName(); Object id = values.get(idColumnName); for (String column : values.keySet()) { Object valueObject = values.get(column); List<String> majorKeyComponents = new ArrayList<String>(); majorKeyComponents.add(getIndexTableName(m)); majorKeyComponents.add(column); majorKeyComponents.add(PropertyAccessorHelper.getString(valueObject)); String minorKey = PropertyAccessorHelper.getString(id); Key key = Key.createKey(majorKeyComponents, minorKey); byte[] valueByteArray = PropertyAccessorHelper.getBytes(id); kvStore.put(key, Value.createValue(valueByteArray)); } }
/** * Create "Proxy" nodes into Neo4J. Proxy nodes are defined as nodes in * Neo4J that refer to a record in some other database. They cater to * polyglot persistence cases. */ public Node createProxyNode(Object sourceNodeId, Object targetNodeId, GraphDatabaseService graphDb, EntityMetadata sourceEntityMetadata, EntityMetadata targetEntityMetadata) { String sourceNodeIdColumnName = ((AbstractAttribute) sourceEntityMetadata.getIdAttribute()).getJPAColumnName(); String targetNodeIdColumnName = ((AbstractAttribute) targetEntityMetadata.getIdAttribute()).getJPAColumnName(); Node node = graphDb.createNode(); node.setProperty(PROXY_NODE_TYPE_KEY, PROXY_NODE_VALUE); node.setProperty(sourceNodeIdColumnName, sourceNodeId); node.setProperty(targetNodeIdColumnName, targetNodeId); return node; }
/** * Find GRIDFSDBFile. * * @param entityMetadata * the entity metadata * @param key * the key * @return the grid fsdb file */ private GridFSDBFile findGridFSDBFile(EntityMetadata entityMetadata, Object key) { String id = ((AbstractAttribute) entityMetadata.getIdAttribute()).getJPAColumnName(); DBObject query = new BasicDBObject("metadata." + id, key); KunderaGridFS gfs = new KunderaGridFS(mongoDb, entityMetadata.getTableName()); return gfs.findOne(query); }
@Override public Object[] findIdsByColumn(String schemaName, String tableName, String pKeyName, String columnName, Object columnValue, Class entityClazz) { EntityMetadata metadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entityClazz); return getColumnsById(schemaName, tableName, columnName, ((AbstractAttribute) metadata.getIdAttribute()).getJPAColumnName(), columnValue, metadata.getIdAttribute().getBindableJavaType()).toArray(); }
@Override public List<Object> findByRelation(String colName, Object colValue, Class entityClazz) { EntityMetadata m = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entityClazz); Object[] ids = findIdsByColumn(m.getSchema(), m.getTableName(), ((AbstractAttribute) m.getIdAttribute()).getJPAColumnName(), colName, colValue, m.getEntityClazz()); List<Object> resultSet = new ArrayList<Object>(); if (ids != null) { for (Object id : new HashSet(Arrays.asList(ids))) { Object object = find(entityClazz, id); if (object != null) { resultSet.add(object); } } } return resultSet; }
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); } } }
/** * Adds the source. * * @param entity * the entity * @param values * the values * @param entityType * the entity type */ private void addSource(Object entity, Map<String, Object> values, EntityType entityType) { Set<Attribute> attributes = entityType.getAttributes(); for (Attribute attrib : attributes) { if (!attrib.isAssociation()) { Object value = PropertyAccessorHelper.getObject(entity, (Field) attrib.getJavaMember()); values.put(((AbstractAttribute) attrib).getJPAColumnName(), value); } } }
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 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); } } } }
@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); } }