TyErrorId typeSystemInit(TypeSystem const & crTypeSystem) { cout << "SofaExampleAnnotator::typeSystemInit()" << endl; // get Type and Feature objects for use in process() annot = crTypeSystem.getType("uima.tcas.Annotation"); cross = crTypeSystem.getType("sofa.test.CrossAnnotation"); other = cross.getFeatureByBaseName("otherAnnotation"); if (!(annot.isValid() && cross.isValid() && other.isValid())) { cout << "SofaExampleAnnotator::typeSystemInit() - Error getting Type or Feature objects" << endl; return (TyErrorId)UIMA_ERR_RESMGR_INVALID_RESOURCE; } return(TyErrorId)UIMA_ERR_NONE; }
/** * Gathers all output capabilities from the TAE specifier. * This result spec is implicitly assumed when calling process(CAS) without a result spec. */ TyErrorId EngineBase::initializeCompleteResultSpec() { iv_completeResultSpec.clear(); assert(EXISTS(iv_casDefinition)); uima::TypeSystem const& rTypeSystem = iv_casDefinition->getTypeSystem(); AnnotatorContext const& crANC = getAnnotatorContext(); AnalysisEngineMetaData::TyVecpCapabilities const& crVecCaps = crANC.getTaeSpecifier().getAnalysisEngineMetaData()->getCapabilites(); AnalysisEngineMetaData::TyVecpCapabilities::const_iterator citCaps; for (citCaps = crVecCaps.begin(); citCaps != crVecCaps.end(); ++citCaps) { Capability const* cpCap = *citCaps; Capability::TyVecCapabilityTofs const& crTypes = cpCap->getCapabilityTypes(Capability::OUTPUT); Capability::TyVecCapabilityTofs::const_iterator citTOFs; for (citTOFs = crTypes.begin(); citTOFs != crTypes.end(); ++citTOFs) { Type t = rTypeSystem.getType(*citTOFs); if (!t.isValid()) { ErrorInfo errInf( ErrorMessage(UIMA_MSG_ID_UNKNOWN_FEATURE_IN_CAPBILITY_SPEC, (*citTOFs)), UIMA_ERR_ANNOTATOR_MGR_CONFIG_INVALID_RESULTSPECIFICATION, ErrorInfo::unrecoverable); getAnnotatorContext().getLogger().logError(errInf); return UIMA_ERR_ANNOTATOR_MGR_CONFIG_INVALID_RESULTSPECIFICATION; } iv_completeResultSpec.add(t); } Capability::TyVecCapabilityTofs const& crFeatures = cpCap->getCapabilityFeatures(Capability::OUTPUT); for (citTOFs = crFeatures.begin(); citTOFs != crFeatures.end(); ++citTOFs) { Feature f = rTypeSystem.getFeatureByFullName(*citTOFs); if (!f.isValid()) { ErrorInfo errInf( ErrorMessage(UIMA_MSG_ID_UNKNOWN_FEATURE_IN_CAPBILITY_SPEC, (*citTOFs)), UIMA_ERR_ANNOTATOR_MGR_CONFIG_INVALID_RESULTSPECIFICATION, ErrorInfo::unrecoverable); getAnnotatorContext().getLogger().logError(errInf); return UIMA_ERR_ANNOTATOR_MGR_CONFIG_INVALID_RESULTSPECIFICATION; } iv_completeResultSpec.add(f); } } return UIMA_ERR_NONE; }
int main(int argc, char** argv) { Feature feature; // добавлена обработка ошибок FILE * file; if ((file = fopen("features.dat", "r")) == NULL) { perror("open file"); exit(EXIT_FAILURE); } if (!feature.read(file)) { perror("fread"); exit(EXIT_FAILURE); } if (!feature.isValid()) return 1; return 0; }
/*static*/ void CapabilityContainer::initTypeOrFeatures( TyMapLang2TypeOrFeatures & rMap, // output argument Capability::TyVecCapabilityTofs const & vecTofs, Capability::TyVecCapabilityLanguages const & vecLangs, TypeSystem const & typeSystem) { const int BUF_SIZE = 0x100; char cBuf[BUF_SIZE]; Capability::TyVecCapabilityLanguages::const_iterator itLang; for (itLang = vecLangs.begin(); itLang != vecLangs.end(); ++itLang) { // convert unicode lang string to single-byte lang string assert((*itLang).length() < BUF_SIZE); // Note: this conversion can be used only for invariant characters u_UCharsToChars((*itLang).getBuffer(), cBuf, (*itLang).length()); // zero terminate single-byte buffer cBuf[(*itLang).length()] = '\0'; // Special workaround code for the new way to specify the unspecified language if (strcasecmp(cBuf, "x-unspecified") == 0) { strcpy(cBuf, Language::UNSPECIFIED); } // create a language object based on single-byte lang string Language lang(cBuf); if (!lang.isValid()) { /* taph 06.02.2003: once we have more detailed information about the origin of the error we need to replace "unknown configuration file" with the filename of the XML file (and maybe line number?) */ UIMA_EXC_THROW_NEW(uima::CapabilityException, // exc-type UIMA_ERR_ENGINE_LANGUAGE_INVALID, // error code ErrorMessage(UIMA_MSG_ID_EXC_INVALID_LANGUAGE, cBuf), // error message ErrorMessage(UIMA_MSG_ID_EXCON_CHECKING_CAPABILITY_SPEC,"unknown configuration file"), // error context message ErrorInfo::recoverable); } // create a new empty vector in the map for this lang TySetTypeOrFeatures & setTofs = rMap[lang]; // now fill the vector with tof objects created from tof strings Capability::TyVecCapabilityTofs::const_iterator itTof; for (itTof = vecTofs.begin(); itTof != vecTofs.end(); ++itTof) { TypeOrFeature tof; // the tof string may be a type... Type t = typeSystem.getType(*itTof); if (t.isValid()) { tof = TypeOrFeature(t); } else { // or the tof string may be a feature Feature f = typeSystem.getFeatureByFullName(*itTof); if (f.isValid()) { tof = TypeOrFeature(f); } else { /* taph 06.02.2003: once we have more detailed information about the origin of the error we need to replace "unknown configuration file" with the filename of the XML file (and maybe line number?) */ if (tof.isType()) { UIMA_EXC_THROW_NEW(uima::CapabilityException, // exc-type UIMA_ERR_INVALID_FSTYPE_OBJECT, // error code ErrorMessage(UIMA_MSG_ID_EXC_UNKNOWN_TYPE_NAME, *itTof), // error message ErrorMessage(UIMA_MSG_ID_EXCON_CHECKING_CAPABILITY_SPEC, "unknown configuration file"), // error context message ErrorInfo::recoverable); } else { UIMA_EXC_THROW_NEW(uima::CapabilityException, // exc-type UIMA_ERR_INVALID_FSFEATURE_OBJECT,// error code ErrorMessage(UIMA_MSG_ID_EXC_UNKNOWN_FEATURE_NAME, *itTof), // error message ErrorMessage(UIMA_MSG_ID_EXCON_CHECKING_CAPABILITY_SPEC, "unknown configuration file"), // error context message ErrorInfo::recoverable); } } } assert(tof.isValid()); setTofs.insert(tof); } // for all tof strings } // for all lang strings }