svcore  1.9
DataFileReaderFactory.cpp
Go to the documentation of this file.
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
00002 
00003 /*
00004     Sonic Visualiser
00005     An audio file viewer and annotation editor.
00006     Centre for Digital Music, Queen Mary, University of London.
00007     This file copyright 2006 Chris Cannam.
00008     
00009     This program is free software; you can redistribute it and/or
00010     modify it under the terms of the GNU General Public License as
00011     published by the Free Software Foundation; either version 2 of the
00012     License, or (at your option) any later version.  See the file
00013     COPYING included with this distribution for more information.
00014 */
00015 
00016 #include "DataFileReaderFactory.h"
00017 #include "MIDIFileReader.h"
00018 #include "CSVFileReader.h"
00019 
00020 #include "model/Model.h"
00021 
00022 #include <QString>
00023 
00024 QString
00025 DataFileReaderFactory::getKnownExtensions()
00026 {
00027     return "*.svl *.csv *.lab *.mid *.txt";
00028 }
00029 
00030 DataFileReader *
00031 DataFileReaderFactory::createReader(QString path,
00032                                     bool csv,
00033                                     MIDIFileImportPreferenceAcquirer *acquirer,
00034                                     CSVFormat format,
00035                                     int mainModelSampleRate)
00036 {
00037     QString err;
00038 
00039     DataFileReader *reader = 0;
00040 
00041     if (!csv) {
00042         reader = new MIDIFileReader(path, acquirer, mainModelSampleRate);
00043         if (reader->isOK()) return reader;
00044         if (reader->getError() != "") err = reader->getError();
00045         delete reader;
00046     }
00047 
00048     if (csv) {
00049         reader = new CSVFileReader(path, format, mainModelSampleRate);
00050         if (reader->isOK()) return reader;
00051         if (reader->getError() != "") err = reader->getError();
00052         delete reader;
00053     }
00054 
00055     return 0;
00056 }
00057 
00058 DataFileReader *
00059 DataFileReaderFactory::createReader(QString path,
00060                                     MIDIFileImportPreferenceAcquirer *acquirer,
00061                                     int mainModelSampleRate)
00062 {
00063     DataFileReader *reader = createReader
00064         (path, false, acquirer, CSVFormat(), mainModelSampleRate);
00065     if (reader) return reader;
00066 
00067     reader = createReader
00068         (path, true, acquirer, CSVFormat(path), mainModelSampleRate);
00069     if (reader) return reader;
00070 
00071     return 0;
00072 }
00073 
00074 Model *
00075 DataFileReaderFactory::load(QString path,
00076                             MIDIFileImportPreferenceAcquirer *acquirer,
00077                             int mainModelSampleRate)
00078 {
00079     DataFileReader *reader = createReader(path,
00080                                           acquirer,
00081                                           mainModelSampleRate);
00082     if (!reader) return NULL;
00083 
00084     try {
00085         Model *model = reader->load();
00086         delete reader;
00087         return model;
00088     } catch (Exception) {
00089         delete reader;
00090         throw;
00091     }
00092 }
00093 
00094 Model *
00095 DataFileReaderFactory::loadNonCSV(QString path,
00096                                   MIDIFileImportPreferenceAcquirer *acquirer,
00097                                   int mainModelSampleRate)
00098 {
00099     DataFileReader *reader = createReader(path, false,
00100                                           acquirer,
00101                                           CSVFormat(),
00102                                           mainModelSampleRate);
00103     if (!reader) return NULL;
00104 
00105     try {
00106         Model *model = reader->load();
00107         delete reader;
00108         return model;
00109     } catch (Exception) {
00110         delete reader;
00111         throw;
00112     }
00113 }
00114 
00115 Model *
00116 DataFileReaderFactory::loadCSV(QString path, CSVFormat format,
00117                                int mainModelSampleRate)
00118 {
00119     DataFileReader *reader = createReader(path, true, 0, format,
00120                                           mainModelSampleRate);
00121     if (!reader) return NULL;
00122 
00123     try {
00124         Model *model = reader->load();
00125         delete reader;
00126         return model;
00127     } catch (Exception) {
00128         delete reader;
00129         throw;
00130     }
00131 }
00132