| 115 | } |
| 116 | |
| 117 | WriterPtr Writer::create( ObjectPtr object, const std::string &fileName ) |
| 118 | { |
| 119 | string ext = boost::filesystem::path( fileName ).extension().string(); |
| 120 | |
| 121 | ExtensionsToFnsMap *m = extensionsToFns(); |
| 122 | assert( m ); |
| 123 | ExtensionsToFnsMap::const_iterator it = m->find( ext ); |
| 124 | |
| 125 | if ( it == m->end() ) |
| 126 | { |
| 127 | throw Exception( string( "Unrecognized output file format '") + ext + "'!" ); |
| 128 | } |
| 129 | |
| 130 | for( it=m->begin(); it!=m->end(); it++ ) |
| 131 | { |
| 132 | if( it->first==ext ) |
| 133 | { |
| 134 | if( it->second.canWrite( object, fileName ) ) |
| 135 | { |
| 136 | WriterPtr result = it->second.creator(); |
| 137 | result->parameters()->parameter<Parameter>( "object" )->setValue( object ); |
| 138 | result->parameters()->parameter<FileNameParameter>( "fileName" )->setTypedValue( fileName ); |
| 139 | return result; |
| 140 | } |
| 141 | } |
| 142 | } |
| 143 | |
| 144 | throw Exception( string( "Unable to find writer able to write given object to file of type '") + ext + "'!" ); |
| 145 | } |
| 146 | |
| 147 | WriterPtr Writer::create( const std::string &fileName ) |
| 148 | { |