Example usage for javax.persistence.metamodel SingularAttribute getJavaMember

List of usage examples for javax.persistence.metamodel SingularAttribute getJavaMember

Introduction

In this page you can find the example usage for javax.persistence.metamodel SingularAttribute getJavaMember.

Prototype

java.lang.reflect.Member getJavaMember();

Source Link

Document

Return the java.lang.reflect.Member for the represented attribute.

Usage

From source file:com.impetus.client.cassandra.thrift.CQLTranslator.java

/**
 * Builds the embedded value./*from w  w  w  . j  a v  a  2 s .c  o m*/
 * 
 * @param record
 *            the record
 * @param metaModel
 *            the meta model
 * @param embeddedValueBuilder
 *            the embedded value builder
 * @param attribute
 *            the attribute
 */
private void buildEmbeddedValue(final Object record, MetamodelImpl metaModel,
        StringBuilder embeddedValueBuilder, SingularAttribute attribute) {
    // TODO Auto-generated method stub
    Field field = (Field) attribute.getJavaMember();

    EmbeddableType embeddableKey = metaModel.embeddable(field.getType());
    Object embeddableKeyObj = PropertyAccessorHelper.getObject(record, field);
    if (embeddableKeyObj != null) {
        StringBuilder tempBuilder = new StringBuilder();
        tempBuilder.append(Constants.OPEN_CURLY_BRACKET);

        for (Field embeddableColumn : field.getType().getDeclaredFields()) {
            if (!ReflectUtils.isTransientOrStatic(embeddableColumn)) {
                Attribute subAttribute = (SingularAttribute) embeddableKey
                        .getAttribute(embeddableColumn.getName());
                if (metaModel.isEmbeddable(((AbstractAttribute) subAttribute).getBindableJavaType())) {
                    // construct map; recursive
                    // send attribute
                    buildEmbeddedValue(embeddableKeyObj, metaModel, tempBuilder,
                            (SingularAttribute) subAttribute);
                } else {
                    // append key value
                    appendColumnName(tempBuilder,
                            ((AbstractAttribute) (embeddableKey.getAttribute(embeddableColumn.getName())))
                                    .getJPAColumnName());
                    tempBuilder.append(Constants.COLON);
                    appendColumnValue(tempBuilder, embeddableKeyObj, embeddableColumn);
                }
                tempBuilder.append(Constants.COMMA);
            }

        }
        // strip last char and append '}'
        tempBuilder.deleteCharAt(tempBuilder.length() - 1);
        tempBuilder.append(Constants.CLOSE_CURLY_BRACKET);
        appendColumnName(embeddedValueBuilder, ((AbstractAttribute) attribute).getJPAColumnName());
        embeddedValueBuilder.append(Constants.COLON);
        embeddedValueBuilder.append(tempBuilder);
    } else {
        embeddedValueBuilder.deleteCharAt(embeddedValueBuilder.length() - 1);
    }
}

From source file:com.impetus.client.cassandra.thrift.CQLTranslator.java

/**
 * Translate composite id./* www .  j  a  v a  2s .  com*/
 * 
 * @param record
 *            the record
 * @param m
 *            the m
 * @param type
 *            the type
 * @param metaModel
 *            the meta model
 * @param builders
 *            the builders
 * @param columnBuilders
 *            the column builders
 * @param externalProperties
 *            the external properties
 * @param kunderaMetadata
 *            the kundera metadata
 * @param tableName
 *            the table name
 * @param attribute
 *            the attribute
 */
private void translateCompositeId(final Object record, final EntityMetadata m, TranslationType type,
        MetamodelImpl metaModel, Map<String, StringBuilder> builders, Map<String, StringBuilder> columnBuilders,
        Map<String, Object> externalProperties, final KunderaMetadata kunderaMetadata, String tableName,
        SingularAttribute attribute) {
    StringBuilder builder = builders.get(tableName);
    StringBuilder columnBuilder = columnBuilders.get(tableName);
    Field field = (Field) attribute.getJavaMember();
    if (metaModel.isEmbeddable(((AbstractAttribute) attribute).getBindableJavaType())) {
        // builder.
        // Means it is a compound key! As other
        // iterate for it's fields to populate it's values in
        // order!
        EmbeddableType compoundKey = metaModel.embeddable(field.getType());
        Object compoundKeyObj = PropertyAccessorHelper.getObject(record, field);
        for (Field compositeColumn : field.getType().getDeclaredFields()) {
            if (!ReflectUtils.isTransientOrStatic(compositeColumn)) {
                attribute = (SingularAttribute) compoundKey.getAttribute(compositeColumn.getName());
                if (metaModel.isEmbeddable(((AbstractAttribute) attribute).getBindableJavaType())) {
                    translateCompositeId(compoundKeyObj, m, type, metaModel, builders, columnBuilders,
                            externalProperties, kunderaMetadata, tableName, attribute);
                } else {
                    onTranslation(type, builder, columnBuilder,
                            ((AbstractAttribute) (compoundKey.getAttribute(compositeColumn.getName())))
                                    .getJPAColumnName(),
                            compoundKeyObj, compositeColumn);
                }
            }
        }
    } else if (!ReflectUtils.isTransientOrStatic(field)) {
        onTranslation(type, builder, columnBuilder,
                CassandraUtilities.getIdColumnName(kunderaMetadata, m, externalProperties, true), record,
                field);
    }
}

From source file:net.sf.gazpachoquest.qbe.ByExampleSpecification.java

public <T extends Persistable> Specification<T> byExampleOnEntity(final T example, final SearchParameters sp) {
    Validate.notNull(example, "example must not be null");

    return new Specification<T>() {

        @Override//from  www .  ja  v  a  2s .c o m
        public Predicate toPredicate(final Root<T> rootPath, final CriteriaQuery<?> query,
                final CriteriaBuilder builder) {
            Class<T> type = rootPath.getModel().getBindableJavaType();

            ManagedType<T> mt = em.getMetamodel().entity(type);

            List<Predicate> predicates = new ArrayList<Predicate>();
            predicates.addAll(byExample(mt, rootPath, example, sp, builder));
            predicates.addAll(byExampleOnXToOne(mt, rootPath, example, sp, builder));
            // 1 level deep only
            predicates.addAll(byExampleOnManyToMany(mt, rootPath, example, sp, builder));
            // order by
            query.orderBy(JpaUtil.buildJpaOrders(sp.getOrders(), rootPath, builder));
            return JpaUtil.andPredicate(builder, predicates);
        }

        //https://github.com/jaxio/generated-projects/tree/master/jsf2-spring-conversation/src/main/generated-java/com/jaxio/appli/repository/support

        public <T extends Persistable> List<Predicate> byExample(final ManagedType<T> mt, final Path<T> mtPath,
                final T mtValue, final SearchParameters sp, final CriteriaBuilder builder) {
            List<Predicate> predicates = new ArrayList<Predicate>();
            for (SingularAttribute<? super T, ?> attr : mt.getSingularAttributes()) {
                if (attr.getPersistentAttributeType() == MANY_TO_ONE
                        || attr.getPersistentAttributeType() == ONE_TO_ONE
                        || attr.getPersistentAttributeType() == EMBEDDED
                        || attr.getJavaType().isAssignableFrom(Map.class)) {
                    continue;
                }
                Object attrValue = getValue(mtValue, attr);

                if (attrValue != null) {
                    if (attr.getJavaType() == String.class) {
                        if (isNotEmpty((String) attrValue)) {
                            SingularAttribute<? super T, String> stringAttribute = mt
                                    .getSingularAttribute(attr.getName(), String.class);
                            predicates.add(JpaUtil.stringPredicate(mtPath.get(stringAttribute), attrValue, sp,
                                    builder));
                        }
                    } else {
                        SingularAttribute<? super T, ?> attribute = mt.getSingularAttribute(attr.getName(),
                                attr.getJavaType());
                        // apply equal
                        predicates.add(builder.equal(mtPath.get(attribute), attrValue));
                    }
                }
            }
            return predicates;
        }

        /**
         * Construct a join predicate on collection (eg many to many, List)
         */
        public <T extends Persistable> List<Predicate> byExampleOnManyToMany(final ManagedType<T> mt,
                final Root<T> mtPath, final T mtValue, final SearchParameters sp,
                final CriteriaBuilder builder) {
            List<Predicate> predicates = new ArrayList<Predicate>();
            for (PluralAttribute<T, ?, ?> pa : mt.getDeclaredPluralAttributes()) {
                if (pa.getCollectionType() == PluralAttribute.CollectionType.LIST) {
                    List<?> value = (List<?>) getValue(mtValue, mt.getAttribute(pa.getName()));

                    if (value != null && !value.isEmpty()) {
                        ListJoin<T, ?> join = mtPath.join(mt.getDeclaredList(pa.getName()));
                        predicates.add(join.in(value));
                    }
                }
                if (pa.getCollectionType() == PluralAttribute.CollectionType.SET) {
                    Set<?> value = (Set<?>) getValue(mtValue, mt.getAttribute(pa.getName()));

                    if (value != null && !value.isEmpty()) {
                        SetJoin<T, ?> join = mtPath.join(mt.getDeclaredSet(pa.getName()));
                        predicates.add(join.in(value));
                    }
                }
            }
            return predicates;
        }

        /**
         * Invoke byExample method for each not null x-to-one association
         * when their pk is not set. This allows you
         * to search entities based on an associated entity's properties
         * value.
         */
        @SuppressWarnings("unchecked")
        public <T extends Persistable, M2O extends Persistable> List<Predicate> byExampleOnXToOne(
                final ManagedType<T> mt, final Root<T> mtPath, final T mtValue, final SearchParameters sp,
                final CriteriaBuilder builder) {
            List<Predicate> predicates = new ArrayList<Predicate>();
            for (SingularAttribute<? super T, ?> attr : mt.getSingularAttributes()) {
                if (attr.getPersistentAttributeType() == MANY_TO_ONE
                        || attr.getPersistentAttributeType() == ONE_TO_ONE) { //
                    M2O m2oValue = (M2O) getValue(mtValue, mt.getAttribute(attr.getName()));

                    if (m2oValue != null) {
                        Class<M2O> m2oType = (Class<M2O>) attr.getBindableJavaType();
                        ManagedType<M2O> m2oMt = em.getMetamodel().entity(m2oType);
                        Path<M2O> m2oPath = (Path<M2O>) mtPath.get(attr);
                        predicates.addAll(byExample(m2oMt, m2oPath, m2oValue, sp, builder));
                    }
                }
            }
            return predicates;
        }

        private <T> Object getValue(final T example, final Attribute<? super T, ?> attr) {
            Object value = null;
            try {
                if (attr.getJavaMember() instanceof Method) {
                    value = ((Method) attr.getJavaMember()).invoke(example, new Object[0]);
                } else if (attr.getJavaMember() instanceof Field) {
                    value = ReflectionUtils.getField((Field) attr.getJavaMember(), example);
                }

                if (value instanceof ValueHolderInterface) {
                    value = ((ValueHolderInterface) value).getValue();
                }

            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e);
            }
            return value;
        }

    };

}