private EdmFunctionImport readFunctionImport()

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;
  }