@Override protected EdmStructuredType buildBaseType(final FullQualifiedName baseTypeName) { EdmComplexType baseType = null; if (baseTypeName != null) { baseType = edm.getComplexType(baseTypeName); if (baseType == null) { throw new EdmException("Can't find base type with name: " + baseTypeName + " for complex type: " + getName()); } } return baseType; }
@Override protected EdmStructuredType buildBaseType(final FullQualifiedName baseTypeName) { EdmComplexType baseType = null; if (baseTypeName != null) { baseType = edm.getComplexType(baseTypeName); if (baseType == null) { throw new EdmException("Can't find base type with name: " + baseTypeName + " for complex type: " + getName()); } } return baseType; }
private static ClientProperty getODataComplexProperty( final EdmEnabledODataClient client, final FullQualifiedName complex, final String property, final Object obj) { final EdmElement edmProperty = client.getCachedEdm().getComplexType(complex).getProperty(property); return getODataProperty(client, edmProperty, property, obj); }
private static ClientProperty getODataComplexProperty( final EdmEnabledODataClient client, final FullQualifiedName complex, final String property, final Object obj) { final EdmElement edmProperty = client.getCachedEdm().getComplexType(complex).getProperty(property); return getODataProperty(client, edmProperty, property, obj); }
private EdmType getDerivedType(final EdmStructuredType edmType, final JsonNode jsonNode) throws DeserializerException { JsonNode odataTypeNode = jsonNode.get(Constants.JSON_TYPE); if (odataTypeNode != null) { String odataType = odataTypeNode.asText(); if (!odataType.isEmpty()) { odataType = odataType.substring(1); if (odataType.equalsIgnoreCase(edmType.getFullQualifiedName().getFullQualifiedNameAsString())) { return edmType; } else if (this.serviceMetadata == null) { throw new DeserializerException( "Failed to resolve Odata type " + odataType + " due to metadata is not available", DeserializerException.MessageKeys.UNKNOWN_CONTENT); } final EdmStructuredType currentEdmType = edmType.getKind() == EdmTypeKind.ENTITY ? serviceMetadata.getEdm().getEntityType(new FullQualifiedName(odataType)) : serviceMetadata.getEdm().getComplexType(new FullQualifiedName(odataType)); if (!isAssignable(edmType, currentEdmType)) { throw new DeserializerException("Odata type " + odataType + " not allowed here", DeserializerException.MessageKeys.UNKNOWN_CONTENT); } return currentEdmType; } } return edmType; }
private EdmType getDerivedType(final EdmStructuredType edmType, String odataType) throws DeserializerException { if (odataType != null && !odataType.isEmpty()) { if (odataType.equalsIgnoreCase(edmType.getFullQualifiedName().getFullQualifiedNameAsString())) { return edmType; } else if (this.serviceMetadata == null) { throw new DeserializerException( "Failed to resolve Odata type " + odataType + " due to metadata is not available", DeserializerException.MessageKeys.UNKNOWN_CONTENT); } EdmStructuredType currentEdmType = null; if(edmType instanceof EdmEntityType) { currentEdmType = serviceMetadata.getEdm() .getEntityType(new FullQualifiedName(odataType)); } else { currentEdmType = serviceMetadata.getEdm() .getComplexType(new FullQualifiedName(odataType)); } if (!isAssignable(edmType, currentEdmType)) { throw new DeserializerException( "Odata type " + odataType + " not allowed here", DeserializerException.MessageKeys.UNKNOWN_CONTENT); } return currentEdmType; } return edmType; }
private EdmType getDerivedType(final EdmStructuredType edmType, String odataType) throws DeserializerException { if (odataType != null && !odataType.isEmpty()) { if (odataType.equalsIgnoreCase(edmType.getFullQualifiedName().getFullQualifiedNameAsString())) { return edmType; } else if (this.serviceMetadata == null) { throw new DeserializerException( "Failed to resolve Odata type " + odataType + " due to metadata is not available", DeserializerException.MessageKeys.UNKNOWN_CONTENT); } EdmStructuredType currentEdmType = null; if(edmType instanceof EdmEntityType) { currentEdmType = serviceMetadata.getEdm() .getEntityType(new FullQualifiedName(odataType)); } else { currentEdmType = serviceMetadata.getEdm() .getComplexType(new FullQualifiedName(odataType)); } if (!isAssignable(edmType, currentEdmType)) { throw new DeserializerException( "Odata type " + odataType + " not allowed here", DeserializerException.MessageKeys.UNKNOWN_CONTENT); } return currentEdmType; } return edmType; }
protected EdmComplexType resolveComplexType(final ServiceMetadata metadata, final EdmComplexType baseType, final String derivedTypeName) throws SerializerException { if (derivedTypeName == null || baseType.getFullQualifiedName().getFullQualifiedNameAsString().equals(derivedTypeName)) { return baseType; } EdmComplexType derivedType = metadata.getEdm().getComplexType(new FullQualifiedName(derivedTypeName)); if (derivedType == null) { throw new SerializerException("Complex Type not found", SerializerException.MessageKeys.UNKNOWN_TYPE, derivedTypeName); } EdmComplexType type = derivedType.getBaseType(); while (type != null) { if (type.getFullQualifiedName().getFullQualifiedNameAsString() .equals(baseType.getFullQualifiedName().getFullQualifiedNameAsString())) { return derivedType; } type = type.getBaseType(); } throw new SerializerException("Wrong base type", SerializerException.MessageKeys.WRONG_BASE_TYPE, derivedTypeName, baseType .getFullQualifiedName().getFullQualifiedNameAsString()); }
protected EdmComplexType resolveComplexType(final ServiceMetadata metadata, final EdmComplexType baseType, final String derivedTypeName) throws SerializerException { if (derivedTypeName == null || baseType.getFullQualifiedName().getFullQualifiedNameAsString().equals(derivedTypeName)) { return baseType; } EdmComplexType derivedType = metadata.getEdm().getComplexType(new FullQualifiedName(derivedTypeName)); if (derivedType == null) { throw new SerializerException("Complex Type not found", SerializerException.MessageKeys.UNKNOWN_TYPE, derivedTypeName); } EdmComplexType type = derivedType.getBaseType(); while (type != null) { if (type.getFullQualifiedName().getFullQualifiedNameAsString() .equals(baseType.getFullQualifiedName().getFullQualifiedNameAsString())) { return derivedType; } type = type.getBaseType(); } throw new SerializerException("Wrong base type", SerializerException.MessageKeys.WRONG_BASE_TYPE, derivedTypeName, baseType .getFullQualifiedName().getFullQualifiedNameAsString()); }
private void parseComplexPathExpr(UriInfoImpl uriInfo, final UriResourcePartTyped lastResource) throws UriParserException, UriValidationException { if (tokenizer.next(TokenKind.SLASH)) { if (tokenizer.next(TokenKind.QualifiedName)) { final FullQualifiedName fullQualifiedName = new FullQualifiedName(tokenizer.getText()); final EdmComplexType edmComplexType = edm.getComplexType(fullQualifiedName); if (edmComplexType != null) { setTypeFilter(lastResource, edmComplexType); if (tokenizer.next(TokenKind.SLASH)) { parseComplexPathRestExpr(uriInfo, lastResource); } } else { // Must be a bound function. parseBoundFunction(fullQualifiedName, uriInfo, lastResource); } } else { parseComplexPathRestExpr(uriInfo, lastResource); } } }
protected EdmComplexType resolveComplexType(final ServiceMetadata metadata, final EdmComplexType baseType, final String derivedTypeName) throws SerializerException { String fullQualifiedName = baseType.getFullQualifiedName().getFullQualifiedNameAsString(); if (derivedTypeName == null || fullQualifiedName.equals(derivedTypeName)) { return baseType; } EdmComplexType derivedType = metadata.getEdm().getComplexType(new FullQualifiedName(derivedTypeName)); if (derivedType == null) { throw new SerializerException("Complex Type not found", SerializerException.MessageKeys.UNKNOWN_TYPE, derivedTypeName); } EdmComplexType type = derivedType.getBaseType(); while (type != null) { if (type.getFullQualifiedName().equals(baseType.getFullQualifiedName())) { return derivedType; } type = type.getBaseType(); } throw new SerializerException("Wrong base type", SerializerException.MessageKeys.WRONG_BASE_TYPE, derivedTypeName, baseType.getFullQualifiedName().getFullQualifiedNameAsString()); }
protected EdmComplexType resolveComplexType(final ServiceMetadata metadata, final EdmComplexType baseType, final String derivedTypeName) throws SerializerException { String fullQualifiedName = baseType.getFullQualifiedName().getFullQualifiedNameAsString(); if (derivedTypeName == null || fullQualifiedName.equals(derivedTypeName)) { return baseType; } EdmComplexType derivedType = metadata.getEdm().getComplexType(new FullQualifiedName(derivedTypeName)); if (derivedType == null) { throw new SerializerException("Complex Type not found", SerializerException.MessageKeys.UNKNOWN_TYPE, derivedTypeName); } EdmComplexType type = derivedType.getBaseType(); while (type != null) { if (type.getFullQualifiedName().equals(baseType.getFullQualifiedName())) { return derivedType; } type = type.getBaseType(); } throw new SerializerException("Wrong base type", SerializerException.MessageKeys.WRONG_BASE_TYPE, derivedTypeName, baseType.getFullQualifiedName().getFullQualifiedNameAsString()); }
private void parseComplexPathExpr(UriInfoImpl uriInfo, final UriResourcePartTyped lastResource) throws UriParserException, UriValidationException { if (tokenizer.next(TokenKind.SLASH)) { if (tokenizer.next(TokenKind.QualifiedName)) { final FullQualifiedName fullQualifiedName = new FullQualifiedName(tokenizer.getText()); final EdmComplexType edmComplexType = edm.getComplexType(fullQualifiedName); if (edmComplexType != null) { setTypeFilter(lastResource, edmComplexType); if (tokenizer.next(TokenKind.SLASH)) { parseComplexPathRestExpr(uriInfo, lastResource); } } else { // Must be a bound function. parseBoundFunction(fullQualifiedName, uriInfo, lastResource); } } else { parseComplexPathRestExpr(uriInfo, lastResource); } } }
protected EdmComplexType resolveComplexType(final ServiceMetadata metadata, final EdmComplexType baseType, final String derivedTypeName) throws SerializerException { String fullQualifiedName = baseType.getFullQualifiedName().getFullQualifiedNameAsString(); if (derivedTypeName == null || fullQualifiedName.equals(derivedTypeName)) { return baseType; } EdmComplexType derivedType = metadata.getEdm().getComplexType(new FullQualifiedName(derivedTypeName)); if (derivedType == null) { throw new SerializerException("Complex Type not found", SerializerException.MessageKeys.UNKNOWN_TYPE, derivedTypeName); } EdmComplexType type = derivedType.getBaseType(); while (type != null) { if (type.getFullQualifiedName().equals(baseType.getFullQualifiedName())) { return derivedType; } type = type.getBaseType(); } throw new SerializerException("Wrong base type", SerializerException.MessageKeys.WRONG_BASE_TYPE, derivedTypeName, baseType.getFullQualifiedName().getFullQualifiedNameAsString()); }
protected EdmComplexType resolveComplexType(final ServiceMetadata metadata, final EdmComplexType baseType, final String derivedTypeName) throws SerializerException { String fullQualifiedName = baseType.getFullQualifiedName().getFullQualifiedNameAsString(); if (derivedTypeName == null || fullQualifiedName.equals(derivedTypeName)) { return baseType; } EdmComplexType derivedType = metadata.getEdm().getComplexType(new FullQualifiedName(derivedTypeName)); if (derivedType == null) { throw new SerializerException("Complex Type not found", SerializerException.MessageKeys.UNKNOWN_TYPE, derivedTypeName); } EdmComplexType type = derivedType.getBaseType(); while (type != null) { if (type.getFullQualifiedName().equals(baseType.getFullQualifiedName())) { return derivedType; } type = type.getBaseType(); } throw new SerializerException("Wrong base type", SerializerException.MessageKeys.WRONG_BASE_TYPE, derivedTypeName, baseType.getFullQualifiedName().getFullQualifiedNameAsString()); }
protected EdmComplexType resolveComplexType(final ServiceMetadata metadata, final EdmComplexType baseType, final String derivedTypeName) throws SerializerException { String fullQualifiedName = baseType.getFullQualifiedName().getFullQualifiedNameAsString(); if (derivedTypeName == null || fullQualifiedName.equals(derivedTypeName)) { return baseType; } EdmComplexType derivedType = metadata.getEdm().getComplexType(new FullQualifiedName(derivedTypeName)); if (derivedType == null) { throw new SerializerException("Complex Type not found", SerializerException.MessageKeys.UNKNOWN_TYPE, derivedTypeName); } EdmComplexType type = derivedType.getBaseType(); while (type != null) { if (type.getFullQualifiedName().equals(baseType.getFullQualifiedName())) { return derivedType; } type = type.getBaseType(); } throw new SerializerException("Wrong base type", SerializerException.MessageKeys.WRONG_BASE_TYPE, derivedTypeName, baseType.getFullQualifiedName().getFullQualifiedNameAsString()); }
protected EdmComplexType resolveComplexType(final ServiceMetadata metadata, final EdmComplexType baseType, final String derivedTypeName) throws SerializerException { String fullQualifiedName = baseType.getFullQualifiedName().getFullQualifiedNameAsString(); if (derivedTypeName == null || fullQualifiedName.equals(derivedTypeName)) { return baseType; } EdmComplexType derivedType = metadata.getEdm().getComplexType(new FullQualifiedName(derivedTypeName)); if (derivedType == null) { throw new SerializerException("Complex Type not found", SerializerException.MessageKeys.UNKNOWN_TYPE, derivedTypeName); } EdmComplexType type = derivedType.getBaseType(); while (type != null) { if (type.getFullQualifiedName().equals(baseType.getFullQualifiedName())) { return derivedType; } type = type.getBaseType(); } throw new SerializerException("Wrong base type", SerializerException.MessageKeys.WRONG_BASE_TYPE, derivedTypeName, baseType.getFullQualifiedName().getFullQualifiedNameAsString()); }
protected static EdmStructuredType parseTypeCast(UriTokenizer tokenizer, final Edm edm, final EdmStructuredType referencedType) throws UriParserException { if (tokenizer.next(TokenKind.QualifiedName)) { final FullQualifiedName qualifiedName = new FullQualifiedName(tokenizer.getText()); final EdmStructuredType type = referencedType.getKind() == EdmTypeKind.ENTITY ? edm.getEntityType(qualifiedName) : edm.getComplexType(qualifiedName); if (type == null) { throw new UriParserSemanticException("Type '" + qualifiedName + "' not found.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, qualifiedName.getFullQualifiedNameAsString()); } else { if (!type.compatibleTo(referencedType)) { throw new UriParserSemanticException("The type cast '" + qualifiedName + "' is not compatible.", UriParserSemanticException.MessageKeys.INCOMPATIBLE_TYPE_FILTER, type.getName()); } } return type; } return null; }
protected static EdmStructuredType parseTypeCast(UriTokenizer tokenizer, final Edm edm, final EdmStructuredType referencedType) throws UriParserException { if (tokenizer.next(TokenKind.QualifiedName)) { final FullQualifiedName qualifiedName = new FullQualifiedName(tokenizer.getText()); final EdmStructuredType type = referencedType.getKind() == EdmTypeKind.ENTITY ? edm.getEntityType(qualifiedName) : edm.getComplexType(qualifiedName); if (type == null) { throw new UriParserSemanticException("Type '" + qualifiedName + "' not found.", UriParserSemanticException.MessageKeys.UNKNOWN_PART, qualifiedName.getFullQualifiedNameAsString()); } else { if (!type.compatibleTo(referencedType)) { throw new UriParserSemanticException("The type cast '" + qualifiedName + "' is not compatible.", UriParserSemanticException.MessageKeys.INCOMPATIBLE_TYPE_FILTER, type.getName()); } } return type; } return null; }
private UriResource boundOperationOrTypeCast(UriResource previous) throws UriParserException, UriValidationException { final FullQualifiedName name = new FullQualifiedName(tokenizer.getText()); requireTyped(previous, name.getFullQualifiedNameAsString()); final UriResourcePartTyped previousTyped = (UriResourcePartTyped) previous; final EdmType previousTypeFilter = getPreviousTypeFilter(previousTyped); final EdmType previousType = previousTypeFilter == null ? previousTyped.getType() : previousTypeFilter; // We check for bound actions first because they cannot be followed by anything. final EdmAction boundAction = edm.getBoundAction(name, previousType.getFullQualifiedName(), previousTyped.isCollection()); if (boundAction != null) { ParserHelper.requireTokenEnd(tokenizer); return new UriResourceActionImpl(boundAction); } // Type casts can be syntactically indistinguishable from bound function calls in the case of additional keys. // But normally they are shorter, so they come next. final EdmStructuredType type = previousTyped.getType() instanceof EdmEntityType ? edm.getEntityType(name) : edm.getComplexType(name); if (type != null) { return typeCast(name, type, previousTyped); } if (tokenizer.next(TokenKind.EOF)) { throw new UriParserSemanticException("Type '" + name.getFullQualifiedNameAsString() + "' not found.", UriParserSemanticException.MessageKeys.UNKNOWN_TYPE, name.getFullQualifiedNameAsString()); } // Now a bound function call is the only remaining option. return functionCall(null, name, previousType.getFullQualifiedName(), previousTyped.isCollection()); }