private FullQualifiedName extractFQNameFromEntityType(final EdmEntityType entity) throws EntityProviderException, EdmException { return new FullQualifiedName(entity.getNamespace(), entity.getName()); }
private void appendAtomEditLink(final XMLStreamWriter writer, final EntityInfoAggregator eia, final Map<String, Object> data, final String selfLink) throws EntityProviderException { try { writer.writeStartElement(FormatXml.ATOM_LINK); writer.writeAttribute(FormatXml.ATOM_HREF, selfLink); writer.writeAttribute(FormatXml.ATOM_REL, Edm.LINK_REL_EDIT); writer.writeAttribute(FormatXml.ATOM_TITLE, eia.getEntityType().getName()); writer.writeEndElement(); } catch (XMLStreamException e) { throw new EntityProviderException(EntityProviderException.COMMON, e); } catch (EdmException e) { throw new EntityProviderException(EntityProviderException.COMMON, e); } }
private boolean testNavPropertySegment( final EdmNavigationProperty navProperty, final EdmEntityType sourceEntityType, final EdmNavigationProperty navigationProperty) throws EdmException { if(navigationProperty.getFromRole().toLowerCase(Locale.ENGLISH).startsWith( sourceEntityType.getName().toLowerCase(Locale.ENGLISH))) { final String roleNum = navigationProperty.getFromRole().substring(sourceEntityType.getName().length()); if(roleNum.length() > 0) { try { Integer.parseInt(roleNum); } catch (NumberFormatException e) { return false; } } } return navProperty.getName().equals(navigationProperty.getName()); }
private boolean containsCrossServiceNavigationProperty(EdmEntityType type, ODataEntry content) throws EdmException { HashSet<String> crossServiceNavigationPropertyNames = MashServiceRegistry.getCrossServiceNavigationPropertyNames(_service, MashServiceRegistry.getEntityTypeKey(type.getNamespace(), type.getName())); if (crossServiceNavigationPropertyNames == null) { return false; } Map<String, Object> properties = content.getProperties(); for (String key : properties.keySet()) { if (crossServiceNavigationPropertyNames.contains(key)) { return true; } Object value = properties.get(key); if (value instanceof ODataEntry) { EdmType targetType = type.getProperty(key).getType(); if (targetType instanceof EdmEntityType) { if (containsCrossServiceNavigationProperty((EdmEntityType) targetType, (ODataEntry) value)) { return true; } } } } return false; }
private boolean testNavPropertySegment( final EdmNavigationProperty navProperty, final EdmEntityType sourceEntityType, final EdmNavigationProperty navigationProperty) throws EdmException { if(navigationProperty.getFromRole().toLowerCase(Locale.ENGLISH).startsWith( sourceEntityType.getName().toLowerCase(Locale.ENGLISH))) { final String roleNum = navigationProperty.getFromRole().substring(sourceEntityType.getName().length()); if(roleNum.length() > 0) { try { Integer.parseInt(roleNum); } catch (NumberFormatException e) { return false; } } } return navProperty.getName().equals(navigationProperty.getName()); }
private void appendAtomEditLink(final XMLStreamWriter writer, final EntityInfoAggregator eia, final String selfLink) throws EntityProviderException { try { writer.writeStartElement(FormatXml.ATOM_LINK); writer.writeAttribute(FormatXml.ATOM_HREF, selfLink); writer.writeAttribute(FormatXml.ATOM_REL, Edm.LINK_REL_EDIT); writer.writeAttribute(FormatXml.ATOM_TITLE, eia.getEntityType().getName()); writer.writeEndElement(); } catch (XMLStreamException e) { throw new EntityProviderProducerException(EntityProviderException.COMMON, e); } catch (EdmException e) { throw new EntityProviderProducerException(e.getMessageReference(), e); } }
private void appendAtomEditLink(final XMLStreamWriter writer, final EntityInfoAggregator eia, final String selfLink) throws EntityProviderException { try { writer.writeStartElement(FormatXml.ATOM_LINK); writer.writeAttribute(FormatXml.ATOM_HREF, selfLink); writer.writeAttribute(FormatXml.ATOM_REL, Edm.LINK_REL_EDIT); writer.writeAttribute(FormatXml.ATOM_TITLE, eia.getEntityType().getName()); writer.writeEndElement(); } catch (XMLStreamException e) { throw new EntityProviderProducerException(EntityProviderException.COMMON, e); } catch (EdmException e) { throw new EntityProviderProducerException(e.getMessageReference(), e); } }
private void appendAtomEditLink(final XMLStreamWriter writer, final EntityInfoAggregator eia, final String selfLink) throws EntityProviderException { try { writer.writeStartElement(FormatXml.ATOM_LINK); writer.writeAttribute(FormatXml.ATOM_HREF, selfLink); writer.writeAttribute(FormatXml.ATOM_REL, Edm.LINK_REL_EDIT); writer.writeAttribute(FormatXml.ATOM_TITLE, eia.getEntityType().getName()); writer.writeEndElement(); } catch (XMLStreamException e) { throw new EntityProviderProducerException(EntityProviderException.COMMON, e); } catch (EdmException e) { throw new EntityProviderProducerException(e.getMessageReference(), e); } }
private void validateEntityTypes() throws EntityProviderException, EdmException { for (Map.Entry<FullQualifiedName, EdmEntityType> entityTypes : entityTypesMap.entrySet()) { if (entityTypes.getValue() != null && entityTypes.getKey() != null) { EdmEntityTypeImpl entityType = (EdmEntityTypeImpl) entityTypes.getValue(); if (entityType.getBaseTypeName() != null) { FullQualifiedName baseTypeFQName = entityType.getBaseTypeName(); EdmEntityType baseEntityType; if (!entityTypesMap.containsKey(baseTypeFQName)) { FullQualifiedName fqName = validateEntityTypeWithAlias(baseTypeFQName); baseEntityType = entityTypesMap.get(fqName); } else { baseEntityType = fetchLastBaseType(baseTypeFQName, entityTypesMap); } if (baseEntityType != null && (baseEntityType.getKeyProperties() == null || baseEntityType.getKeyProperties().isEmpty())) { throw new EntityProviderException(EntityProviderException.ILLEGAL_ARGUMENT .addContent("Missing key for EntityType " + baseEntityType.getName())); } } else if (entityType.getKeyProperties() == null || entityType.getKeyProperties().isEmpty()) { throw new EntityProviderException(EntityProviderException.ILLEGAL_ARGUMENT .addContent("Missing key for EntityType " + entityType.getName())); } } } }
private String getFromEntityName(final EdmNavigationProperty navigationProperty) throws EdmException { String fromRole = navigationProperty.getFromRole(); EdmEntityType toEntityType = navigationProperty.getRelationship().getEnd(fromRole).getEntityType(); EdmMapping mapping = toEntityType.getMapping(); String entityName = null; if (mapping != null) { entityName = mapping.getInternalName(); } else { entityName = toEntityType.getName(); } return entityName; }
private static void constructDraftTreeExpand(EdmEntitySet rootEntitySet, String serviceName, Map<String,List<String>> draftTree, ArrayList<NavigationPropertySegment> navigationPropertySegments, List<ArrayList<NavigationPropertySegment>> expandOption) throws EdmException { if(rootEntitySet != null && rootEntitySet.getEntityType() != null && rootEntitySet.getEntityType().getNavigationPropertyNames()!=null && !rootEntitySet.getEntityType().getNavigationPropertyNames().isEmpty()) { for(String navName:rootEntitySet.getEntityType().getNavigationPropertyNames()) { EdmNavigationProperty expandNp = (EdmNavigationProperty)rootEntitySet.getEntityType().getProperty(navName); if(draftTree.get(rootEntitySet.getEntityType().getName()).contains(expandNp.getType().getName())) { String associatedEntityName = EntityDataSourceProvider.getAssociatedEntityName(serviceName, rootEntitySet.getEntityType().getName(), navName); EdmEntitySet edmEntitySet = rootEntitySet.getEntityContainer().getEntitySet(associatedEntityName); NavigationPropertySegmentImpl navSegmentImpl = new NavigationPropertySegmentImpl(); navSegmentImpl.setNavigationProperty(expandNp); navSegmentImpl.setTargetEntitySet(edmEntitySet); navigationPropertySegments.add(navSegmentImpl); //At first level Books/?expand=pages one navigation property entry //At second level Books?$expand=pages, pages/words two navigation property entries //At third level Books?$expand=pages, pages/words, pages/words/letters three navigation property entries and so on... ArrayList<NavigationPropertySegment> innerNavigationSegments = new ArrayList<>(); innerNavigationSegments.addAll(navigationPropertySegments); expandOption.add(innerNavigationSegments); //Recursively set compositions constructDraftTreeExpand(edmEntitySet, serviceName, draftTree, navigationPropertySegments, expandOption); } } } }
private String getFromEntityName(final EdmNavigationProperty navigationProperty) throws EdmException { String fromRole = navigationProperty.getFromRole(); EdmEntityType toEntityType = navigationProperty.getRelationship().getEnd(fromRole).getEntityType(); EdmMapping mapping = toEntityType.getMapping(); String entityName = null; if (mapping != null) { entityName = mapping.getInternalName(); } else { entityName = toEntityType.getName(); } return entityName; }
private String getFromEntityName(final EdmNavigationProperty navigationProperty) throws EdmException { String fromRole = navigationProperty.getFromRole(); EdmEntityType fromEntityType = navigationProperty.getRelationship().getEnd(fromRole).getEntityType(); EdmMapping mapping = fromEntityType.getMapping(); String entityName = null; if (mapping != null) { entityName = mapping.getInternalName(); } else { entityName = fromEntityType.getName(); } return entityName; }
private String getFromEntityName(final EdmNavigationProperty navigationProperty) throws EdmException { String fromRole = navigationProperty.getFromRole(); EdmEntityType fromEntityType = navigationProperty.getRelationship().getEnd(fromRole).getEntityType(); EdmMapping mapping = fromEntityType.getMapping(); String entityName = null; if (mapping != null) { entityName = mapping.getInternalName(); } else { entityName = fromEntityType.getName(); } return entityName; }
private static void constructTreeExpand(EdmEntitySet rootEntitySet, String serviceName, Map<String,List<String>> compositionTree, ArrayList<NavigationPropertySegment> navigationPropertySegments, List<ArrayList<NavigationPropertySegment>> expandOption) throws EdmException { if(rootEntitySet != null && rootEntitySet.getEntityType() != null && rootEntitySet.getEntityType().getNavigationPropertyNames()!=null && !rootEntitySet.getEntityType().getNavigationPropertyNames().isEmpty()) { for(String navName:rootEntitySet.getEntityType().getNavigationPropertyNames()) { EdmNavigationProperty expandNp = (EdmNavigationProperty)rootEntitySet.getEntityType().getProperty(navName); if(compositionTree.get(rootEntitySet.getEntityType().getName()).contains(expandNp.getType().getName())) { String associatedEntityName = EntityDataSourceProvider.getAssociatedEntityName(serviceName, rootEntitySet.getEntityType().getName(), navName); EdmEntitySet edmEntitySet = rootEntitySet.getEntityContainer().getEntitySet(associatedEntityName); NavigationPropertySegmentImpl navSegmentImpl = new NavigationPropertySegmentImpl(); navSegmentImpl.setNavigationProperty(expandNp); navSegmentImpl.setTargetEntitySet(edmEntitySet); navigationPropertySegments.add(navSegmentImpl); //At first level Books/?expand=pages one navigation property entry //At second level Books?$expand=pages, pages/words two navigation property entries //At third level Books?$expand=pages, pages/words, pages/words/letters three navigation property entries and so on... ArrayList<NavigationPropertySegment> innerNavigationSegments = new ArrayList<>(); innerNavigationSegments.addAll(navigationPropertySegments); expandOption.add(innerNavigationSegments); //Recursively set compositions constructTreeExpand(edmEntitySet, serviceName, compositionTree, navigationPropertySegments, expandOption); } } } }
protected List<JPAJoinClause> generateJoinClauses() throws ODataJPARuntimeException, EdmException { List<JPAJoinClause> jpaOuterJoinClauses = new ArrayList<JPAJoinClause>(); JPAJoinClause jpaOuterJoinClause = null; String joinCondition = null; String entityAlias = generateJPAEntityAlias(); joinCondition = ODataExpressionParser.parseKeyPredicates(entitySetView.getKeyPredicates(), entityAlias); EdmEntityType entityType = entitySetView.getStartEntitySet().getEntityType(); Mapping mapping = (Mapping) entityType.getMapping(); String entityTypeName = null; if (mapping != null) { entityTypeName = mapping.getInternalName(); } else { entityTypeName = entityType.getName(); } jpaOuterJoinClause = new JPAJoinClause(entityTypeName, entityAlias, null, null, joinCondition, JPAJoinClause.JOIN.INNER); jpaOuterJoinClauses.add(jpaOuterJoinClause); for (NavigationSegment navigationSegment : entitySetView.getNavigationSegments()) { EdmNavigationProperty navigationProperty = navigationSegment.getNavigationProperty(); String relationShipAlias = generateRelationShipAlias(); joinCondition = ODataExpressionParser.parseKeyPredicates(navigationSegment.getKeyPredicates(), relationShipAlias); jpaOuterJoinClause = new JPAJoinClause(getFromEntityName(navigationProperty), entityAlias, getRelationShipName(navigationProperty), relationShipAlias, joinCondition, JPAJoinClause.JOIN.INNER); jpaOuterJoinClauses.add(jpaOuterJoinClause); } return jpaOuterJoinClauses; }
@Override public JPQLContext build() throws ODataJPAModelException, ODataJPARuntimeException { if (entityView != null) { try { setType(JPQLContextType.SELECT_SINGLE); EdmEntityType entityType = entityView.getTargetEntitySet().getEntityType(); EdmMapping mapping = entityType.getMapping(); if (mapping != null) { setJPAEntityName(mapping.getInternalName()); } else { setJPAEntityName(entityType.getName()); } setJPAEntityAlias(generateJPAEntityAlias()); setKeyPredicates(entityView.getKeyPredicates()); setSelectExpression(generateSelectExpression()); } catch (EdmException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e); } } return JPQLSelectSingleContext.this; }
@Override public JPQLContext build() throws ODataJPAModelException, ODataJPARuntimeException { if (entityView != null) { try { setType(JPQLContextType.SELECT_SINGLE); EdmEntityType entityType = entityView.getTargetEntitySet().getEntityType(); EdmMapping mapping = entityType.getMapping(); if (mapping != null) { setJPAEntityName(mapping.getInternalName()); } else { setJPAEntityName(entityType.getName()); } setJPAEntityAlias(generateJPAEntityAlias()); setKeyPredicates(entityView.getKeyPredicates()); setSelectExpression(generateSelectExpression()); } catch (EdmException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e); } } return JPQLSelectSingleContext.this; }
@Override public JPQLContext build() throws ODataJPAModelException, ODataJPARuntimeException { if (entitySetView != null) { try { if (isCountOnly) { setType(JPQLContextType.SELECT_COUNT); } else { setType(JPQLContextType.SELECT); } if (withPaging) { isPagingRequested(withPaging); } EdmEntityType entityType = entitySetView.getTargetEntitySet().getEntityType(); EdmMapping mapping = entityType.getMapping(); if (mapping != null) { setJPAEntityName(mapping.getInternalName()); } else { setJPAEntityName(entityType.getName()); } setJPAEntityAlias(generateJPAEntityAlias()); setOrderByCollection(generateOrderByFileds()); setSelectExpression(generateSelectExpression()); setWhereExpression(generateWhereExpression()); } catch (ODataException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e); } } return JPQLSelectContext.this; }
@Override public JPQLContext build() throws ODataJPAModelException, ODataJPARuntimeException { if (entitySetView != null) { try { if (isCountOnly) { setType(JPQLContextType.SELECT_COUNT); } else { setType(JPQLContextType.SELECT); } if (withPaging) { isPagingRequested(withPaging); } EdmEntityType entityType = entitySetView.getTargetEntitySet().getEntityType(); EdmMapping mapping = entityType.getMapping(); if (mapping != null) { setJPAEntityName(mapping.getInternalName()); } else { setJPAEntityName(entityType.getName()); } setJPAEntityAlias(generateJPAEntityAlias()); setOrderByCollection(generateOrderByFileds()); setSelectExpression(generateSelectExpression()); setWhereExpression(generateWhereExpression()); } catch (ODataException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e); } } return JPQLSelectContext.this; }