public ResourcePathParser(final Edm edm, final Map<String, AliasQueryOption> aliases) { this.edm = edm; this.aliases = aliases; edmEntityContainer = edm.getEntityContainer(); }
public ResourcePathParser(final Edm edm, final Map<String, AliasQueryOption> aliases) { this.edm = edm; this.aliases = aliases; edmEntityContainer = edm.getEntityContainer(); }
public void writeServiceDocument(final XMLStreamWriter writer) throws XMLStreamException { final String metadataUri = (serviceRoot == null ? "" : serviceRoot.endsWith("/") ? serviceRoot : (serviceRoot + "/")) + Constants.METADATA; writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0"); writer.writeStartElement(APP, "service", NS_APP); writer.writeNamespace(ATOM, NS_ATOM); writer.writeNamespace(APP, NS_APP); writer.writeNamespace(METADATA, NS_METADATA); writer.writeAttribute(METADATA, NS_METADATA, Constants.CONTEXT, metadataUri); if (metadata != null && metadata.getServiceMetadataETagSupport() != null && metadata.getServiceMetadataETagSupport().getMetadataETag() != null) { writer.writeAttribute(METADATA, NS_METADATA, Constants.ATOM_ATTR_METADATAETAG, metadata.getServiceMetadataETagSupport().getMetadataETag()); } writer.writeStartElement(APP, "workspace", NS_APP); final EdmEntityContainer container = metadata.getEdm().getEntityContainer(); if (container != null) { writer.writeStartElement(ATOM, Constants.ATOM_ELEM_TITLE, NS_ATOM); writer.writeCharacters(container.getFullQualifiedName().getFullQualifiedNameAsString()); writer.writeEndElement(); writeEntitySets(writer, container); writeFunctionImports(writer, container); writeSingletons(writer, container); writeServiceDocuments(writer); } writer.writeEndElement(); // end workspace writer.writeEndElement(); // end service }
public void writeServiceDocument(final XMLStreamWriter writer) throws XMLStreamException { final String metadataUri = (serviceRoot == null ? "" : serviceRoot.endsWith("/") ? serviceRoot : (serviceRoot + "/")) + Constants.METADATA; writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0"); writer.writeStartElement(APP, "service", NS_APP); writer.writeNamespace(ATOM, NS_ATOM); writer.writeNamespace(APP, NS_APP); writer.writeNamespace(METADATA, NS_METADATA); writer.writeAttribute(METADATA, NS_METADATA, Constants.CONTEXT, metadataUri); if (metadata != null && metadata.getServiceMetadataETagSupport() != null && metadata.getServiceMetadataETagSupport().getMetadataETag() != null) { writer.writeAttribute(METADATA, NS_METADATA, Constants.ATOM_ATTR_METADATAETAG, metadata.getServiceMetadataETagSupport().getMetadataETag()); } writer.writeStartElement(APP, "workspace", NS_APP); final EdmEntityContainer container = metadata.getEdm().getEntityContainer(); if (container != null) { writer.writeStartElement(ATOM, Constants.ATOM_ELEM_TITLE, NS_ATOM); writer.writeCharacters(container.getFullQualifiedName().getFullQualifiedNameAsString()); writer.writeEndElement(); writeEntitySets(writer, container); writeFunctionImports(writer, container); writeSingletons(writer, container); writeServiceDocuments(writer); } writer.writeEndElement(); // end workspace writer.writeEndElement(); // end service }
public void writeServiceDocument(final JsonGenerator gen) throws IOException { gen.writeStartObject(); if (!isODataMetadataNone) { final String metadataUri = (serviceRoot == null ? "" : serviceRoot.endsWith("/") ? serviceRoot : (serviceRoot + "/")) + Constants.METADATA; gen.writeObjectField(Constants.JSON_CONTEXT, metadataUri); if (metadata != null && metadata.getServiceMetadataETagSupport() != null && metadata.getServiceMetadataETagSupport().getMetadataETag() != null) { gen.writeStringField(Constants.JSON_METADATA_ETAG, metadata.getServiceMetadataETagSupport().getMetadataETag()); } } gen.writeArrayFieldStart(Constants.VALUE); final EdmEntityContainer container = metadata.getEdm().getEntityContainer(); if (container != null) { writeEntitySets(gen, container); writeFunctionImports(gen, container); writeSingletons(gen, container); } }
public void writeServiceDocument(final JsonGenerator gen) throws IOException { gen.writeStartObject(); if (!isODataMetadataNone) { final String metadataUri = (serviceRoot == null ? "" : serviceRoot.endsWith("/") ? serviceRoot : (serviceRoot + "/")) + Constants.METADATA; gen.writeObjectField(Constants.JSON_CONTEXT, metadataUri); if (metadata != null && metadata.getServiceMetadataETagSupport() != null && metadata.getServiceMetadataETagSupport().getMetadataETag() != null) { gen.writeStringField(Constants.JSON_METADATA_ETAG, metadata.getServiceMetadataETagSupport().getMetadataETag()); } } gen.writeArrayFieldStart(Constants.VALUE); if(metadata != null){ final EdmEntityContainer container = metadata.getEdm().getEntityContainer(); if (container != null) { writeEntitySets(gen, container); writeFunctionImports(gen, container); writeSingletons(gen, container); } } }
private FullQualifiedName parseAllOperationsInSchema(UriTokenizer tokenizer) throws UriParserException { final String namespace = tokenizer.getText(); if (tokenizer.next(TokenKind.DOT)) { if (tokenizer.next(TokenKind.STAR)) { // Validate the namespace. Currently a namespace from a non-default schema is not supported. // There is no direct access to the namespace without loading the whole schema; // however, the default entity container should always be there, so its access methods can be used. if (edm.getEntityContainer(new FullQualifiedName(namespace, edm.getEntityContainer().getName())) == null) { throw new UriParserSemanticException("Wrong namespace '" + namespace + "'.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, namespace); } return new FullQualifiedName(namespace, tokenizer.getText()); } else { throw new UriParserSemanticException("Expected star after dot.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, ""); } } return null; }
private FullQualifiedName parseAllOperationsInSchema(UriTokenizer tokenizer) throws UriParserException { final String namespace = tokenizer.getText(); if (tokenizer.next(TokenKind.DOT)) { if (tokenizer.next(TokenKind.STAR)) { // Validate the namespace. Currently a namespace from a non-default schema is not supported. // There is no direct access to the namespace without loading the whole schema; // however, the default entity container should always be there, so its access methods can be used. if (edm.getEntityContainer(new FullQualifiedName(namespace, edm.getEntityContainer().getName())) == null) { throw new UriParserSemanticException("Wrong namespace '" + namespace + "'.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, namespace); } return new FullQualifiedName(namespace, tokenizer.getText()); } else { throw new UriParserSemanticException("Expected star after dot.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, ""); } } return null; }
@Override public EdmEntitySet getReturnedEntitySet() { if (entitySet != null && returnedEntitySet == null) { EdmEntityContainer entityContainer = edm.getEntityContainer(entitySet.getEntityContainer()); if (entityContainer == null) { throw new EdmException("Can´t find entity container with name: " + entitySet.getEntityContainer()); } returnedEntitySet = entityContainer.getEntitySet(entitySet.getTargetName()); if (returnedEntitySet == null) { throw new EdmException("Can´t find entity set with name: " + entitySet.getTargetName()); } } return returnedEntitySet; }
@Override public EdmEntitySet getReturnedEntitySet() { if (entitySet != null && returnedEntitySet == null) { EdmEntityContainer entityContainer = edm.getEntityContainer(entitySet.getEntityContainer()); if (entityContainer == null) { throw new EdmException("Can´t find entity container with name: " + entitySet.getEntityContainer()); } returnedEntitySet = entityContainer.getEntitySet(entitySet.getTargetName()); if (returnedEntitySet == null) { throw new EdmException("Can´t find entity set with name: " + entitySet.getTargetName()); } } return returnedEntitySet; }
private Map.Entry<URI, EdmOperation> getUnboundOperation( final Operation operation, final List<String> parameterNames) { final EdmEntityContainer container = getClient().getCachedEdm().getEntityContainer(targetFQN); final EdmOperation edmOperation; if (operation.type() == OperationType.FUNCTION) { edmOperation = container.getFunctionImport(operation.name()).getUnboundFunction(parameterNames); } else { edmOperation = container.getActionImport(operation.name()).getUnboundAction(); } final URIBuilder uriBuilder = getClient().newURIBuilder(). appendOperationCallSegment(edmOperation.getName()); return new AbstractMap.SimpleEntry<URI, EdmOperation>(uriBuilder.build(), edmOperation); }
final Target edmTarget = new Target(binding.getTarget(), container); final EdmEntityContainer entityContainer = edm.getEntityContainer(edmTarget.getEntityContainer()); if (entityContainer == null) { throw new EdmException("Cannot find entity container with name: " + edmTarget.getEntityContainer());
private Map.Entry<URI, EdmOperation> getUnboundOperation( final Operation operation, final List<String> parameterNames) { final EdmEntityContainer container = getClient().getCachedEdm().getEntityContainer(targetFQN); final EdmOperation edmOperation; if (operation.type() == OperationType.FUNCTION) { edmOperation = container.getFunctionImport(operation.name()).getUnboundFunction(parameterNames); } else { edmOperation = container.getActionImport(operation.name()).getUnboundAction(); } final URIBuilder uriBuilder = getClient().newURIBuilder(). appendOperationCallSegment(edmOperation.getName()); return new AbstractMap.SimpleEntry<URI, EdmOperation>(uriBuilder.build(), edmOperation); }
final Target edmTarget = new Target(binding.getTarget(), container); final EdmEntityContainer entityContainer = edm.getEntityContainer(edmTarget.getEntityContainer()); if (entityContainer == null) { throw new EdmException("Cannot find entity container with name: " + edmTarget.getEntityContainer());
private void parseDollarRoot(UriInfoImpl uriInfo) throws UriParserException, UriValidationException { UriResourceRootImpl rootResource = new UriResourceRootImpl(referringType, true); uriInfo.addResourcePart(rootResource); ParserHelper.requireNext(tokenizer, TokenKind.SLASH); ParserHelper.requireNext(tokenizer, TokenKind.ODataIdentifier); final String name = tokenizer.getText(); UriResourcePartTyped resource = null; final EdmEntitySet entitySet = edm.getEntityContainer().getEntitySet(name); if (entitySet == null) { final EdmSingleton singleton = edm.getEntityContainer().getSingleton(name); if (singleton == null) { throw new UriParserSemanticException("EntitySet or singleton expected.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, name); } else { resource = new UriResourceSingletonImpl(singleton); } } else { ParserHelper.requireNext(tokenizer, TokenKind.OPEN); final List<UriParameter> keyPredicates = ParserHelper.parseKeyPredicate(tokenizer, entitySet.getEntityType(), null, edm, referringType, aliases); resource = new UriResourceEntitySetImpl(entitySet).setKeyPredicates(keyPredicates); } uriInfo.addResourcePart(resource); parseSingleNavigationExpr(uriInfo, resource); }
private ExpandItem parseCrossJoinItem(UriTokenizer tokenizer) throws UriParserSemanticException { ExpandItemImpl item = new ExpandItemImpl(); if (tokenizer.next(TokenKind.STAR)) { item.setIsStar(true); } else if (tokenizer.next(TokenKind.ODataIdentifier)) { String entitySetName = tokenizer.getText(); if (crossjoinEntitySetNames.contains(entitySetName)) { UriInfoImpl resource = new UriInfoImpl().setKind(UriInfoKind.resource); final UriResourceEntitySetImpl entitySetResourceSegment = new UriResourceEntitySetImpl(edm.getEntityContainer().getEntitySet(entitySetName)); resource.addResourcePart(entitySetResourceSegment); item.setResourcePath(resource); } else { throw new UriParserSemanticException("Unknown crossjoin entity set.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, entitySetName); } } else { throw new UriParserSemanticException("If the target resource is a crossjoin an entity set is " + "needed as the starting point.", UriParserSemanticException.MessageKeys.UNKNOWN_PART); } return item; }
private void parseDollarRoot(UriInfoImpl uriInfo) throws UriParserException, UriValidationException { UriResourceRootImpl rootResource = new UriResourceRootImpl(referringType, true); uriInfo.addResourcePart(rootResource); ParserHelper.requireNext(tokenizer, TokenKind.SLASH); ParserHelper.requireNext(tokenizer, TokenKind.ODataIdentifier); final String name = tokenizer.getText(); UriResourcePartTyped resource = null; final EdmEntitySet entitySet = edm.getEntityContainer().getEntitySet(name); if (entitySet == null) { final EdmSingleton singleton = edm.getEntityContainer().getSingleton(name); if (singleton == null) { throw new UriParserSemanticException("EntitySet or singleton expected.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, name); } else { resource = new UriResourceSingletonImpl(singleton); } } else { ParserHelper.requireNext(tokenizer, TokenKind.OPEN); final List<UriParameter> keyPredicates = ParserHelper.parseKeyPredicate(tokenizer, entitySet.getEntityType(), null, edm, referringType, aliases); resource = new UriResourceEntitySetImpl(entitySet).setKeyPredicates(keyPredicates); } uriInfo.addResourcePart(resource); parseSingleNavigationExpr(uriInfo, resource); }
if (crossjoinEntitySetNames.contains(name)) { final UriResourceEntitySetImpl resource = new UriResourceEntitySetImpl(edm.getEntityContainer().getEntitySet(name)); uriInfo.addResourcePart(resource); if (tokenizer.next(TokenKind.SLASH)) {
private ExpandItem parseCrossJoinItem(UriTokenizer tokenizer) throws UriParserSemanticException { ExpandItemImpl item = new ExpandItemImpl(); if (tokenizer.next(TokenKind.STAR)) { item.setIsStar(true); } else if (tokenizer.next(TokenKind.ODataIdentifier)) { String entitySetName = tokenizer.getText(); if (crossjoinEntitySetNames.contains(entitySetName)) { UriInfoImpl resource = new UriInfoImpl().setKind(UriInfoKind.resource); final UriResourceEntitySetImpl entitySetResourceSegment = new UriResourceEntitySetImpl(edm.getEntityContainer().getEntitySet(entitySetName)); resource.addResourcePart(entitySetResourceSegment); item.setResourcePath(resource); } else { throw new UriParserSemanticException("Unknown crossjoin entity set.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, entitySetName); } } else { throw new UriParserSemanticException("If the target resource is a crossjoin an entity set is " + "needed as the starting point.", UriParserSemanticException.MessageKeys.UNKNOWN_PART); } return item; }
@Override public void visit(UriInfoCrossjoin info) { for (String name:info.getEntitySetNames()) { EdmEntitySet entitySet = this.serviceMetadata.getEdm().getEntityContainer().getEntitySet(name); EdmEntityType entityType = entitySet.getEntityType(); CrossJoinNode resource = null;