//------------------------------------------------------- const EntityIdAndHandlerId Filename2EntityIdAndHandlerId(const boost::filesystem::path & filename) { if (!filename.has_filename()) { throw Safir::Dob::Typesystem::IllegalValueException (L"Filename2EntityAndHandler: Could not decompose filename : " + Safir::Dob::Typesystem::Utilities::ToWstring(filename.string()),__WFILE__,__LINE__); } #if defined (BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION == 3 const std::string leaf = filename.filename().string(); #else const std::string leaf = filename.filename(); #endif size_t separatorIndex = leaf.find('@'); if (separatorIndex == std::string::npos) { throw Safir::Dob::Typesystem::IllegalValueException (L"Filename2EntityAndHandler: Could not decompose filename : " + Safir::Dob::Typesystem::Utilities::ToWstring(filename.string()),__WFILE__,__LINE__); } const std::string typeName = leaf.substr(0,separatorIndex); size_t secondSeparatorIndex = leaf.find('@',separatorIndex+1); if (secondSeparatorIndex == std::string::npos) { throw Safir::Dob::Typesystem::IllegalValueException (L"Filename2EntityAndHandler: Could not decompose filename : " + Safir::Dob::Typesystem::Utilities::ToWstring(filename.string()),__WFILE__,__LINE__); } const std::string instance = leaf.substr(separatorIndex + 1,secondSeparatorIndex - separatorIndex - 1); size_t extIndex = leaf.find('.',secondSeparatorIndex); if (extIndex == std::string::npos) { throw Safir::Dob::Typesystem::IllegalValueException (L"Filename2EntityAndHandler: Could not decompose filename : " + Safir::Dob::Typesystem::Utilities::ToWstring(filename.string()),__WFILE__,__LINE__); } const std::string handler = leaf.substr(secondSeparatorIndex + 1,extIndex - secondSeparatorIndex - 1); return std::make_pair(Safir::Dob::Typesystem::EntityId (Safir::Dob::Typesystem::Operations::GetTypeId(Safir::Dob::Typesystem::Utilities::ToWstring(typeName)), Safir::Dob::Typesystem::InstanceId( boost::lexical_cast<Safir::Dob::Typesystem::Int64>(instance))), Safir::Dob::Typesystem::HandlerId(boost::lexical_cast<Safir::Dob::Typesystem::Int64>(handler))); }