int LocalSofaDataStream::open()

in src/cas/sofastream.cpp [308:406]


  int LocalSofaDataStream::open(size_t minbufsize) {

    Type type = iv_psofafs->getType();
    Feature stringfeat = type.getFeatureByBaseName(CAS::FEATURE_BASE_NAME_SOFASTRING);
    Feature arrayfeat = type.getFeatureByBaseName(CAS::FEATURE_BASE_NAME_SOFAARRAY);

    iv_curpos=0;
    if  ( !iv_psofafs->isUntouchedFSValue(stringfeat) ) {     //local sofa - data in string
      //convert string to UTF-8
      UErrorCode errorcode = U_ZERO_ERROR ;
      iv_size=0;
      int32_t len;
      iv_psofadata = u_strToUTF8(NULL, 0,
                                 &len,
                                 iv_psofafs->getStringValue(stringfeat).getBuffer(),
                                 iv_psofafs->getStringValue(stringfeat).length(),
                                 &errorcode);
      if (!U_SUCCESS(errorcode)  && errorcode != U_BUFFER_OVERFLOW_ERROR ) {
        ErrorMessage errMsg = ErrorMessage(UIMA_MSG_ID_EXC_LOCAL_SOFADATA_UNSUPPORTED_TYPE);
        errMsg.addParam(stringfeat.getName());
        UIMA_EXC_THROW_NEW(SofaDataStreamException,
                           UIMA_ERR_SOFADATASTREAM,
                           errMsg,
                           UIMA_MSG_ID_EXCON_SOFADATASTREAM,
                           ErrorInfo::unrecoverable);
      }
      iv_pstringsofadata = new char[len];
      iv_size = len;
      errorcode = U_ZERO_ERROR ;
      iv_psofadata = u_strToUTF8(iv_pstringsofadata, iv_size,
                                 &len,
                                 iv_psofafs->getStringValue(stringfeat).getBuffer(),
                                 iv_psofafs->getStringValue(stringfeat).length(),
                                 &errorcode);
      if (!U_SUCCESS(errorcode)  ) {
        ErrorMessage errMsg = ErrorMessage(UIMA_MSG_ID_EXC_LOCAL_SOFADATA_UNSUPPORTED_TYPE);
        errMsg.addParam(stringfeat.getName());
        UIMA_EXC_THROW_NEW(SofaDataStreamException,
                           UIMA_ERR_SOFADATASTREAM,
                           errMsg,
                           UIMA_MSG_ID_EXCON_SOFADATASTREAM,
                           ErrorInfo::unrecoverable);
      }
      iv_isstring=true;
    } else if ( !iv_psofafs->isUntouchedFSValue(arrayfeat) ) {  //local sofa - data in fs array

      FeatureStructure arrayFS = iv_psofafs->getFSValue(arrayfeat);
      Type rangeType = arrayFS.getType();
      UnicodeStringRef rangeTypeName = rangeType.getName();

      if (rangeTypeName.compare(CAS::TYPE_NAME_INTEGER_ARRAY) ==0) {
        iv_psofadata =  (char*) iv_psofafs->getCAS().getHeap()->getCArrayFromFS(arrayFS.iv_tyFS);
        iv_size = iv_psofafs->getIntArrayFSValue(arrayfeat).size()*sizeof(int);
        iv_isintarray = true;
      } else if (rangeTypeName.compare( CAS::TYPE_NAME_FLOAT_ARRAY) ==0) {
        iv_psofadata =  (char*) iv_psofafs->getCAS().getHeap()->getCArrayFromFS(arrayFS.iv_tyFS);
        iv_size= iv_psofafs->getFloatArrayFSValue(arrayfeat).size()*sizeof(float);
        iv_isfloatarray = true;
      } else if (rangeTypeName.compare( CAS::TYPE_NAME_BOOLEAN_ARRAY) ==0) {
        iv_psofadata =  (char*) iv_psofafs->getCAS().getHeap()->get8BitArray(arrayFS.iv_tyFS);
        iv_size= iv_psofafs->getBooleanArrayFSValue(arrayfeat).size()*sizeof(char);
        iv_isbooleanarray = true;
      } else if (rangeTypeName.compare( CAS::TYPE_NAME_BYTE_ARRAY) ==0) {
        iv_psofadata =  (char*) iv_psofafs->getCAS().getHeap()->get8BitArray(arrayFS.iv_tyFS);
        iv_size= iv_psofafs->getByteArrayFSValue(arrayfeat).size()*sizeof(char);
        iv_isbytearray = true;
      } else if (rangeTypeName.compare( CAS::TYPE_NAME_SHORT_ARRAY) ==0) {
        iv_psofadata =  (char*) iv_psofafs->getCAS().getHeap()->get16BitArray(arrayFS.iv_tyFS);
        iv_size= iv_psofafs->getShortArrayFSValue(arrayfeat).size()*sizeof(short);
        iv_isshortarray = true;
      } else if (rangeTypeName.compare( CAS::TYPE_NAME_LONG_ARRAY) ==0) {
        iv_psofadata =  (char*) iv_psofafs->getCAS().getHeap()->get64BitArray(arrayFS.iv_tyFS);
        iv_size= iv_psofafs->getLongArrayFSValue(arrayfeat).size()*sizeof(INT64);
        iv_islongarray = true;
      } else if (rangeTypeName.compare( CAS::TYPE_NAME_DOUBLE_ARRAY) ==0) {
        iv_psofadata =  (char*) iv_psofafs->getCAS().getHeap()->get64BitArray(arrayFS.iv_tyFS);
        iv_size= iv_psofafs->getDoubleArrayFSValue(arrayfeat).size()*sizeof(INT64);
        iv_isdoublearray = true;
      } else {
        ErrorMessage errMsg = ErrorMessage(UIMA_MSG_ID_EXC_LOCAL_SOFADATA_UNSUPPORTED_TYPE);
        errMsg.addParam(rangeTypeName);
        UIMA_EXC_THROW_NEW(SofaDataStreamException,
                           UIMA_ERR_SOFADATASTREAM,
                           errMsg,
                           UIMA_MSG_ID_EXCON_SOFADATASTREAM,
                           ErrorInfo::unrecoverable);
      }
    } else {
      ErrorMessage errMsg = ErrorMessage(UIMA_MSG_ID_EXC_LOCAL_SOFADATA_NOTSET);
      errMsg.addParam(type.getName());
      UIMA_EXC_THROW_NEW(SofaDataStreamException,
                         UIMA_ERR_SOFADATASTREAM,
                         errMsg,
                         UIMA_MSG_ID_EXCON_SOFADATASTREAM,
                         ErrorInfo::unrecoverable);
    }

    return 0;
  }