in odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/deserializer/XmlMetadataDeserializer.java [538:607]
private EdmFunctionImport readFunctionImport(final XMLStreamReader reader, EdmImpl edm)
throws XMLStreamException, EntityProviderException, EdmException {
reader.require(XMLStreamConstants.START_ELEMENT, edmNamespace, XmlMetadataConstants.EDM_FUNCTION_IMPORT);
EdmFunctionImportImpl function = new EdmFunctionImportImpl();
ArrayList<EdmFunctionImportParameter> functionImportParameters = new ArrayList<EdmFunctionImportParameter>();
Map<String, ArrayList<EdmFunctionImportParameter>> functionParameters =
new HashMap<String, ArrayList<EdmFunctionImportParameter>>();
List<EdmAnnotationElement> annotationElements = new ArrayList<EdmAnnotationElement>();
EdmAnnotationsImpl annotations = new EdmAnnotationsImpl();
Map<String, EdmParameter> edmParamMap = new HashMap<String, EdmParameter>();
List<String> parametersList = new ArrayList<String>();
FullQualifiedName fqName ;
function.setName(reader.getAttributeValue(null, XmlMetadataConstants.EDM_NAME));
function.setHttpMethod(reader.getAttributeValue(Edm.NAMESPACE_M_2007_08,
XmlMetadataConstants.EDM_FUNCTION_IMPORT_HTTP_METHOD));
String entitySet = reader.getAttributeValue(null, XmlMetadataConstants.EDM_ENTITY_SET);
function.setEntitySet(entitySet);
String returnTypeString = reader.getAttributeValue(null, XmlMetadataConstants.EDM_FUNCTION_IMPORT_RETURN);
EdmTypedImpl returnType = new EdmTypedImpl();
if (returnTypeString != null) {
if (returnTypeString.startsWith("Collection") || returnTypeString.startsWith("collection")) {
returnTypeString = returnTypeString.substring(returnTypeString.indexOf("(") + 1, returnTypeString.length() - 1);
returnType.setMultiplicity(EdmMultiplicity.MANY);
} else {
returnType.setMultiplicity(EdmMultiplicity.ONE);
}
fqName = extractFQName(returnTypeString);
returnType.setTypeName(fqName);
((EdmNamedImpl) returnType).setName(fqName.getName());
((EdmNamedImpl) returnType).setEdm(edm);
function.setReturnType(returnType);
}
annotations.setAnnotationAttributes(readAnnotationAttribute(reader));
while (reader.hasNext()
&& !(reader.isEndElement() && edmNamespace.equals(reader.getNamespaceURI())
&& XmlMetadataConstants.EDM_FUNCTION_IMPORT.equals(reader.getLocalName()))) {
reader.next();
if (reader.isStartElement()) {
extractNamespaces(reader);
currentHandledStartTagName = reader.getLocalName();
if (XmlMetadataConstants.EDM_FUNCTION_PARAMETER.equals(currentHandledStartTagName)) {
EdmFunctionImportParameter edmFunctionImportParameter = readFunctionImportParameter(reader);
functionImportParameters.add(edmFunctionImportParameter);
EdmParameterImpl edmParamImpl = new EdmParameterImpl();
edmParamImpl.setEdm(edm);
edmParamImpl.setName(edmFunctionImportParameter.getName());
edmParamImpl.setFacets(edmFunctionImportParameter.getFacets());
edmParamImpl.setMapping(edmFunctionImportParameter.getMapping());
edmParamImpl.setMultiplicity(returnType.getMultiplicity());
edmParamImpl.setParameter(edmFunctionImportParameter);
edmParamImpl.setTypeName(edmFunctionImportParameter.getType().getFullQualifiedName());
edmParamImpl.setAnnotations(edmFunctionImportParameter.getAnnotations());
parametersList.add(edmParamImpl.getName());
edmParamMap.put(edmFunctionImportParameter.getName(), edmParamImpl);
} else {
annotationElements.add(readAnnotationElement(reader));
}
}
}
if (!annotationElements.isEmpty()) {
annotations.setAnnotationElements(annotationElements);
}
function.setAnnotations(annotations);
functionParameters.put(function.getName(), functionImportParameters);
function.setParameters(functionParameters);
function.setEdmParameters(edmParamMap);
function.setParametersList(parametersList);
return function;
}