Search in sources :

Example 1 with PersistenceWeavedRest

use of org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest in project eclipselink by eclipse-ee4j.

the class PersistenceContext method setRelationshipInfo.

private void setRelationshipInfo(Object entity) {
    if ((entity != null) && (entity instanceof PersistenceWeavedRest)) {
        ClassDescriptor descriptor = getServerSession().getClassDescriptor(entity.getClass());
        if (descriptor != null) {
            ((PersistenceWeavedRest) entity)._persistence_setRelationships(new ArrayList<>());
            for (DatabaseMapping mapping : descriptor.getMappings()) {
                if (mapping.isForeignReferenceMapping()) {
                    ForeignReferenceMapping frMapping = (ForeignReferenceMapping) mapping;
                    RelationshipInfo info = new RelationshipInfo();
                    info.setAttributeName(frMapping.getAttributeName());
                    info.setOwningEntity(entity);
                    info.setOwningEntityAlias(descriptor.getAlias());
                    info.setPersistencePrimaryKey(descriptor.getObjectBuilder().extractPrimaryKeyFromObject(entity, (AbstractSession) getServerSession()));
                    ((PersistenceWeavedRest) entity)._persistence_getRelationships().add(info);
                } else if (mapping.isEISMapping()) {
                    if (mapping instanceof EISCompositeCollectionMapping) {
                        EISCompositeCollectionMapping eisMapping = (EISCompositeCollectionMapping) mapping;
                        RelationshipInfo info = new RelationshipInfo();
                        info.setAttributeName(eisMapping.getAttributeName());
                        info.setOwningEntity(entity);
                        info.setOwningEntityAlias(descriptor.getAlias());
                        info.setPersistencePrimaryKey(descriptor.getObjectBuilder().extractPrimaryKeyFromObject(entity, (AbstractSession) getServerSession()));
                        ((PersistenceWeavedRest) entity)._persistence_getRelationships().add(info);
                    }
                }
            }
        }
    }
}
Also used : ForeignReferenceMapping(org.eclipse.persistence.mappings.ForeignReferenceMapping) RelationshipInfo(org.eclipse.persistence.internal.jpa.rs.weaving.RelationshipInfo) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) PersistenceWeavedRest(org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest) EISCompositeCollectionMapping(org.eclipse.persistence.eis.mappings.EISCompositeCollectionMapping) DatabaseMapping(org.eclipse.persistence.mappings.DatabaseMapping) AbstractSession(org.eclipse.persistence.internal.sessions.AbstractSession)

Example 2 with PersistenceWeavedRest

use of org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest in project eclipselink by eclipse-ee4j.

the class SelfLinksResponseBuilder method generateLinksForRelationships.

private void generateLinksForRelationships(PersistenceContext context, PersistenceWeavedRest entity) {
    final ClassDescriptor classDescriptor = context.getServerSession().getProject().getDescriptor(entity.getClass());
    final String entityClassName = classDescriptor.getAlias();
    final String entityId = IdHelper.stringifyId(entity, entityClassName, context);
    for (final Field field : entity.getClass().getDeclaredFields()) {
        if (PersistenceWeavedRest.class.isAssignableFrom(field.getType())) {
            final PersistenceWeavedRest obj = (PersistenceWeavedRest) callGetterForProperty(entity, field.getName());
            if (obj != null) {
                final String fieldClassName = context.getJAXBDescriptorForClass(field.getType()).getAlias();
                final String fieldId = IdHelper.stringifyId(obj, fieldClassName, context);
                final ItemLinks links = (new ItemLinksBuilder()).addSelf(HrefHelper.buildEntityFieldHref(context, entityClassName, entityId, field.getName())).addCanonical(HrefHelper.buildEntityHref(context, fieldClassName, fieldId)).build();
                obj._persistence_setLinks(links);
            }
        }
    }
}
Also used : ItemLinksBuilder(org.eclipse.persistence.jpa.rs.features.ItemLinksBuilder) Field(java.lang.reflect.Field) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) PersistenceWeavedRest(org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest) ItemLinks(org.eclipse.persistence.internal.jpa.rs.metadata.model.ItemLinks)

Example 3 with PersistenceWeavedRest

use of org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest in project eclipselink by eclipse-ee4j.

the class PagingResponseBuilder method populatePagedReadAllQueryItemLinks.

private Object populatePagedReadAllQueryItemLinks(PersistenceContext context, Object result) {
    // populate links for the entity
    ClassDescriptor descriptor = context.getJAXBDescriptorForClass(result.getClass());
    if ((result instanceof PersistenceWeavedRest) && (descriptor != null)) {
        final PersistenceWeavedRest entity = (PersistenceWeavedRest) result;
        final String href = HrefHelper.buildEntityHref(context, descriptor.getAlias(), IdHelper.stringifyId(result, descriptor.getAlias(), context));
        final ItemLinks itemLinks = (new ItemLinksBuilder()).addSelf(href).addCanonical(href).build();
        entity._persistence_setLinks(itemLinks);
        return entity;
    }
    return result;
}
Also used : ItemLinksBuilder(org.eclipse.persistence.jpa.rs.features.ItemLinksBuilder) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) PersistenceWeavedRest(org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest) ItemLinks(org.eclipse.persistence.internal.jpa.rs.metadata.model.ItemLinks)

Example 4 with PersistenceWeavedRest

use of org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest in project eclipselink by eclipse-ee4j.

the class SelfLinksResponseBuilder method collectionResponse.

private Object collectionResponse(PersistenceContext context, List<Object> results, UriInfo uriInfo) {
    if ((results != null) && (!results.isEmpty())) {
        final ReadAllQueryResultCollection response = new ReadAllQueryResultCollection();
        for (Object item : results) {
            if (item instanceof PersistenceWeavedRest) {
                final PersistenceWeavedRest entity = (PersistenceWeavedRest) item;
                final ClassDescriptor classDescriptor = context.getServerSession().getProject().getDescriptor(item.getClass());
                final String entityClassName = classDescriptor.getAlias();
                final String entityId = IdHelper.stringifyId(entity, entityClassName, context);
                final String href = HrefHelper.buildEntityHref(context, entityClassName, entityId);
                final ItemLinksBuilder itemLinksBuilder = (new ItemLinksBuilder()).addCanonical(href);
                entity._persistence_setLinks(itemLinksBuilder.build());
                generateLinksForRelationships(context, entity);
                response.addItem(entity);
            } else {
                response.addItem(item);
            }
        }
        response.addLink(new LinkV2(ReservedWords.JPARS_REL_SELF, uriInfo.getRequestUri().toString()));
        return response;
    }
    return results;
}
Also used : ItemLinksBuilder(org.eclipse.persistence.jpa.rs.features.ItemLinksBuilder) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) PersistenceWeavedRest(org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest) ReadAllQueryResultCollection(org.eclipse.persistence.jpa.rs.util.list.ReadAllQueryResultCollection) LinkV2(org.eclipse.persistence.internal.jpa.rs.metadata.model.LinkV2)

Example 5 with PersistenceWeavedRest

use of org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest in project eclipselink by eclipse-ee4j.

the class SelfLinksResponseBuilder method generateLinksInElementsList.

private void generateLinksInElementsList(PersistenceContext context, List<JAXBElement<?>> fields) {
    for (JAXBElement<?> field : fields) {
        if (field.getValue() instanceof PersistenceWeavedRest) {
            final PersistenceWeavedRest entity = (PersistenceWeavedRest) field.getValue();
            final ClassDescriptor classDescriptor = context.getServerSession().getProject().getDescriptor(entity.getClass());
            final String entityClassName = classDescriptor.getAlias();
            final String entityId = IdHelper.stringifyId(entity, entityClassName, context);
            // No links for embedded objects
            if (!classDescriptor.isAggregateDescriptor()) {
                final String href = HrefHelper.buildEntityHref(context, entityClassName, entityId);
                final ItemLinksBuilder itemLinksBuilder = (new ItemLinksBuilder()).addSelf(href).addCanonical(href);
                entity._persistence_setLinks(itemLinksBuilder.build());
            }
        }
    }
}
Also used : ItemLinksBuilder(org.eclipse.persistence.jpa.rs.features.ItemLinksBuilder) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) PersistenceWeavedRest(org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest)

Aggregations

PersistenceWeavedRest (org.eclipse.persistence.internal.jpa.rs.weaving.PersistenceWeavedRest)8 ClassDescriptor (org.eclipse.persistence.descriptors.ClassDescriptor)7 ItemLinksBuilder (org.eclipse.persistence.jpa.rs.features.ItemLinksBuilder)5 ItemLinks (org.eclipse.persistence.internal.jpa.rs.metadata.model.ItemLinks)2 DatabaseMapping (org.eclipse.persistence.mappings.DatabaseMapping)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 Field (java.lang.reflect.Field)1 FetchGroupManager (org.eclipse.persistence.descriptors.FetchGroupManager)1 EISCompositeCollectionMapping (org.eclipse.persistence.eis.mappings.EISCompositeCollectionMapping)1 Link (org.eclipse.persistence.internal.jpa.rs.metadata.model.Link)1 LinkV2 (org.eclipse.persistence.internal.jpa.rs.metadata.model.LinkV2)1 RelationshipInfo (org.eclipse.persistence.internal.jpa.rs.weaving.RelationshipInfo)1 AbstractSession (org.eclipse.persistence.internal.sessions.AbstractSession)1 ReadAllQueryResultCollection (org.eclipse.persistence.jpa.rs.util.list.ReadAllQueryResultCollection)1 ForeignReferenceMapping (org.eclipse.persistence.mappings.ForeignReferenceMapping)1 XMLInverseReferenceMapping (org.eclipse.persistence.oxm.mappings.XMLInverseReferenceMapping)1 FetchGroup (org.eclipse.persistence.queries.FetchGroup)1 FetchGroupTracker (org.eclipse.persistence.queries.FetchGroupTracker)1