source: tags/arb_5.3/GENOM_IMPORT/GenomeImport.cxx

Last change on this file was 5814, checked in by westram, 15 years ago
  • fixed memory leak (GEN_positionPtr used free() instead of GEN_free_position())
  • cleanup static dynamic data (after import)
File size: 2.6 KB
Line 
1// ================================================================ //
2//                                                                  //
3//   File      : GenomeImport.cxx                                   //
4//   Purpose   :                                                    //
5//                                                                  //
6//   Coded by Ralf Westram (coder@reallysoft.de) in November 2006   //
7//   Institute of Microbiology (Technical University Munich)        //
8//   http://www.arb-home.de/                                        //
9//                                                                  //
10// ================================================================ //
11
12#include "GenomeImport.h"
13#include "FileBuffer.h"
14#include "Importer.h"
15#include "tools.h"
16#include "DBwriter.h"
17
18#include <errno.h>
19#define AW_RENAME_SKIP_GUI
20#include <AW_rename.hxx>
21#include <aw_question.hxx>
22
23using namespace std;
24
25GB_ERROR GI_importGenomeFile(ImportSession& session, const char *file_name, const char *ali_name) {
26    GB_ERROR error = 0;
27    try {
28        if (strcmp(ali_name, "ali_genom") != 0) throw "Alignment has to be 'ali_genom'";
29
30        FILE *in = fopen(file_name, "rb");
31        if (!in) throw GBS_global_string("Can't read file '%s' (Reason: %s)", file_name, strerror(errno));
32
33        FileBuffer flatfile(file_name, in);
34        flatfile.showFilenameInLineError(false);
35
36        DBwriter db_writer(session, ali_name);
37
38        SmartPtr<Importer> importer;
39        {
40            string line;
41            if (!flatfile.getLine(line)) throw flatfile.lineError("File is empty");
42
43            if      (beginsWith(line, "LOCUS")) importer = new GenebankImporter(flatfile, db_writer);
44            else if (beginsWith(line, "ID")   ) importer = new EmblImporter    (flatfile, db_writer);
45            else throw flatfile.lineError("Wrong format. Expected 'LOCUS' or 'ID'");
46
47            flatfile.backLine(line);
48        }
49
50        importer->import();
51    }
52    catch (const string &err) { error = GBS_global_string("%s", err.c_str()); }
53    catch (const char *err) { error = err; }
54    catch (...) { error = "Unknown exception during import (program error)"; }
55    return error;
56}
57
58
59
60
61ImportSession::ImportSession(GBDATA *gb_species_data_, int estimated_genomes_count)
62    : gb_species_data(gb_species_data_)
63{
64    und_species                    = new UniqueNameDetector(gb_species_data, estimated_genomes_count);
65    ok_to_ignore_wrong_start_codon = new AW_repeated_question();
66}
67
68ImportSession::~ImportSession() {
69    delete ok_to_ignore_wrong_start_codon;
70    delete und_species;
71    DBwriter::deleteStaticData();
72}
Note: See TracBrowser for help on using the repository browser.