public EntityMetadataV2(EdmEntitySet entitySet) throws EdmException { this.entitySet = entitySet; entityType = entitySet.getEntityType(); name = entitySet.getName(); namespace = entityType.getNamespace(); }
private Object readRelatedData(final WriteCallbackContext context) throws ODataException { final EdmEntitySet entitySet = context.getSourceEntitySet(); return dataSource.readRelatedData( entitySet, data instanceof List ? readEntryData((List<?>) data, entitySet.getEntityType(), context .extractKeyFromEntryData()) : data, entitySet.getRelatedEntitySet(context.getNavigationProperty()), Collections.<String, Object> emptyMap()); }
private static String getEntitySetKey(EdmEntitySet set) throws EdmException { return set.getEntityType().getNamespace() + "~" + set.getEntityContainer().getName() + "~" + set.getName(); }
private EdmNavigationProperty getNavigationProperty(EdmEntitySet srcEtySet) throws EdmException{ if(srcKeyMap == null || navigationProperty== null || srcKeyMap.isEmpty()) return null; EdmEntityType srcEtytype = srcEtySet.getEntityType(); EdmNavigationProperty navigationProp = (EdmNavigationProperty) srcEtytype.getProperty(navigationProperty) ; return navigationProp; }
@Override public EdmEntitySet getEntitySet(final String name) throws EdmException { EdmEntitySet edmEntitySet = null; for(EdmEntitySet entity:edmEntitySets){ if(entity.getName().equals(name)){ edmEntitySet = entity; break; } } return edmEntitySet; }
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); } } } }
private void appendAdditinalLinks(final XMLStreamWriter writer, final EntityInfoAggregator eia, final Map<String, Object> data) throws EntityProviderException, EdmException, URISyntaxException { final Map<String, Map<String, Object>> links = properties.getAdditionalLinks(); if (links != null && !links.isEmpty()) { for (Entry<String, Map<String, Object>> entry : links.entrySet()) { Map<String, Object> navigationKeyMap = entry.getValue(); final boolean isFeed = (eia.getNavigationPropertyInfo(entry.getKey()).getMultiplicity() == EdmMultiplicity.MANY); if (navigationKeyMap != null && !navigationKeyMap.isEmpty()) { final EntityInfoAggregator targetEntityInfo = EntityInfoAggregator.create( eia.getEntitySet().getRelatedEntitySet( (EdmNavigationProperty) eia.getEntityType().getProperty(entry.getKey()))); appendAtomNavigationLink(writer, createSelfLink(targetEntityInfo, navigationKeyMap, null), entry.getKey(), isFeed, eia, data); } } } }
public static EdmEntitySet getEdmEntitySet(final UriInfo uriInfo, Locale locale) throws ODataException { EdmEntitySet entitySet = null; // First must be an entity or a function import. if (uriInfo.getStartEntitySet() != null) { entitySet = uriInfo.getStartEntitySet(); } else if (uriInfo.getFunctionImport() != null) { entitySet = uriInfo.getFunctionImport().getEntitySet(); } else { throw new ODataApplicationException("INVALID_RESOURCE_TYPE", locale, HttpStatusCodes.NOT_IMPLEMENTED, "INVALID_RESOURCE_TYPE_CODE"); } int navigationCount = 0; while (entitySet != null && navigationCount < uriInfo.getNavigationSegments().size()) { final NavigationSegment uriResourceNavigation = uriInfo.getNavigationSegments().get(navigationCount); try { if(entitySet.getRelatedEntitySet(uriResourceNavigation.getNavigationProperty()) == null) { entitySet.getEntityContainer().getEntitySet(uriResourceNavigation.getNavigationProperty().getType().getName()); break; }else { entitySet = entitySet.getRelatedEntitySet(uriResourceNavigation.getNavigationProperty()); } } catch (EdmException e) { throw new ODataApplicationException("NAVIGATION_NOT_SUPPORTED", locale, HttpStatusCodes.NOT_IMPLEMENTED, "NAVIGATION_NOT_SUPPORTED_CODE", e); } navigationCount++; } return entitySet; } }
@Override public EntityMetadata getAssociationMetaData(String associationName) { EdmEntitySet edmEntitySet; EntityMetadata entityMetadata = null; try { edmEntitySet = entitySet.getEntityContainer().getEntitySet(associationName); entityMetadata = new EntityMetadataV2(edmEntitySet); } catch (EdmException e) { logger.error("Error in association metadata ", e); } return entityMetadata; }
private List<KeyPredicate> getKeys(EdmEntitySet entitySet, Map<String, Object> navigatedData, boolean isDraft) throws EdmException { List<KeyPredicate> allKeys = new ArrayList<>(); List<EdmProperty> entityKeys = entitySet.getEntityType().getKeyProperties(); for(Map.Entry<String, Object> properties : navigatedData.entrySet()) { String key = properties.getKey(); String literal = properties.getValue().toString(); EdmProperty entityKeyProperty = this.getEntityKey(entityKeys, key, isDraft); if(entityKeyProperty != null){ KeyPredicateImpl keyPredicate = new KeyPredicateImpl(literal, entityKeyProperty); allKeys.add(keyPredicate); } } return allKeys; }
public static boolean hasComposition(EdmEntitySet edmEntitySet, String serviceName) throws EdmException{ Map<String,List<String>> compositionTree = CSNUtil.getCompositionTree(serviceName, edmEntitySet.getName()); if(compositionTree !=null && !compositionTree.get(edmEntitySet.getName()).isEmpty()) return true; else return false; } }
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 void appendAdditinalLinks(final XMLStreamWriter writer, final EntityInfoAggregator eia, final Map<String, Object> data) throws EntityProviderException, EdmException, URISyntaxException { final Map<String, Map<String, Object>> links = properties.getAdditionalLinks(); if (links != null && !links.isEmpty()) { for (Entry<String, Map<String, Object>> entry : links.entrySet()) { Map<String, Object> navigationKeyMap = entry.getValue(); final boolean isFeed = (eia.getNavigationPropertyInfo(entry.getKey()).getMultiplicity() == EdmMultiplicity.MANY); if (navigationKeyMap != null && !navigationKeyMap.isEmpty()) { final EntityInfoAggregator targetEntityInfo = EntityInfoAggregator.create( eia.getEntitySet().getRelatedEntitySet( (EdmNavigationProperty) eia.getEntityType().getProperty(entry.getKey()))); appendAtomNavigationLink(writer, createSelfLink(targetEntityInfo, navigationKeyMap, null), entry.getKey(), isFeed, eia, data); } } } }
private static void fillInTranformCreate(EdmEntitySet draftEdmEntitySet, Map<String, Object> draftEnt, Map<UUID,UriInfoDraftHelperV2> uriTransformerMap, EdmEntityContainer entityContainer, DraftFlow flow) throws ODataException{ if(draftEdmEntitySet.getEntityType().getNavigationPropertyNames() != null) { for(String draftLinkName:draftEdmEntitySet.getEntityType().getNavigationPropertyNames()) { //one to one case Object draftLink = draftEnt.get(draftLinkName); String draftNavigateEntityName = EntityDataSourceProvider.getAssociatedEntityName(entityContainer.getNamespace(), draftEdmEntitySet.getName(), draftLinkName); EdmEntitySet draftNavigatedEdmEntitySet = entityContainer.getEntitySet(draftNavigateEntityName); if(draftLink instanceof Map) { uriTransformerMap.putAll(compareMainandDraft(new ArrayList<Map<String, Object>>(), null, Arrays.asList((Map<String, Object>)draftLink), draftNavigatedEdmEntitySet, entityContainer, flow)); }else if(draftLink instanceof List) /*collection flow*/ { uriTransformerMap.putAll(compareMainandDraft(new ArrayList<Map<String, Object>>(), null, (List<Map<String, Object>>)draftLink, draftNavigatedEdmEntitySet, entityContainer, flow)); } } } }
private Object readRelatedData(final WriteCallbackContext context) throws ODataException { final EdmEntitySet entitySet = context.getSourceEntitySet(); return dataSource.readRelatedData( entitySet, data instanceof List ? readEntryData((List<?>) data, entitySet.getEntityType(), context .extractKeyFromEntryData()) : data, entitySet.getRelatedEntitySet(context.getNavigationProperty()), Collections.<String, Object> emptyMap()); }
private void validateEntitySet() throws EntityProviderException, EdmException { for (Map.Entry<FullQualifiedName, EdmEntityContainer> container : containerMap.entrySet()) { for (EdmEntitySet entitySet : container.getValue().getEntitySets()) { FullQualifiedName entityType = extractFQNameFromEntityType(entitySet.getEntityType()); if (!(entityTypesMap.containsKey(entityType))) { validateEntityTypeWithAlias(entityType); } } } }
String debugmsg="CreateMapEnty :: "+currentEntityUUIDkeyPart+ " "+currentEntitySet.getName(); logger.debug(debugmsg); if(currentEntitySet.getEntityType().getNavigationPropertyNames() != null) { for(String linkName:currentEntitySet.getEntityType().getNavigationPropertyNames()) { String navigateEntityName = EntityDataSourceProvider.getAssociatedEntityName( currentEntitySet.getEntityContainer().getNamespace(), currentEntitySet.getName(), linkName); EdmEntitySet navigatedEdmEntitySet = currentEntitySet.getEntityContainer().getEntitySet(navigateEntityName); Object link = rootEntityExpanded.get(linkName); if(link instanceof Map) {
@Override public EdmURIBuilder appendEntitySetSegment(EdmEntitySet entitySet) { state = SegmentType.ENTITYSET; try { segments.add(new Segment(SegmentType.ENTITYSET, entitySet.getName())); } catch (EdmException e) { throw new RuntimeException("Unexpected EDM Exception: ", e);//NOSONAR } return this; }
private String createCustomTargetLink(final EntityInfoAggregator entityInfo, final String navigationPropertyName, final Map<String, Object> key) throws EntityProviderException, EdmException { String target; final EntityInfoAggregator targetEntityInfo = EntityInfoAggregator.create( entityInfo.getEntitySet().getRelatedEntitySet( (EdmNavigationProperty) entityInfo.getEntityType().getProperty(navigationPropertyName))); target = (properties.getServiceRoot() == null ? "" : properties.getServiceRoot().toASCIIString()) + AtomEntryEntityProducer.createSelfLink(targetEntityInfo, key, null); return target; }
private static void fillInTransformDelete(Map<String, Object> activeEnt, EdmEntitySet activeEdmEntitySet, Map<UUID,UriInfoDraftHelperV2> uriTransformerMap, EdmEntityContainer entityContainer, DraftFlow flow) throws ODataException{ if(activeEdmEntitySet.getEntityType().getNavigationPropertyNames() != null) { for(String activeLinkName:activeEdmEntitySet.getEntityType().getNavigationPropertyNames()) { //one to one case String activeNavigateEntityName = EntityDataSourceProvider.getAssociatedEntityName(entityContainer.getNamespace(), activeEdmEntitySet.getName(), activeLinkName); EdmEntitySet activeNavigatedEdmEntitySet = entityContainer.getEntitySet(activeNavigateEntityName); Object activeLink = activeEnt.get(activeLinkName); if(activeLink instanceof Map) { uriTransformerMap.putAll(compareMainandDraft(Arrays.asList((Map<String, Object>)activeLink), activeNavigatedEdmEntitySet, new ArrayList<Map<String, Object>>(), null, entityContainer, flow)); }else if(activeLink instanceof List)/*collection flow*/ { uriTransformerMap.putAll(compareMainandDraft((List<Map<String,Object>>)activeLink, activeNavigatedEdmEntitySet, new ArrayList<Map<String, Object>>(), null, entityContainer, flow)); } } } }