Subversion Repositories public iLand

Rev

Rev 120 | Rev 179 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1
 
91 Werner 2
#include <QtCore>
3
#include <QtSql>
4
#include "global.h"
102 Werner 5
#include "xmlhelper.h"
90 Werner 6
#include "speciesset.h"
91 Werner 7
#include "species.h"
90 Werner 8
 
9
SpeciesSet::SpeciesSet()
10
{
91 Werner 11
    mSetupQuery = 0;
90 Werner 12
}
91 Werner 13
 
14
SpeciesSet::~SpeciesSet()
15
{
16
   clear();
17
}
18
 
19
void SpeciesSet::clear()
20
{
21
    qDeleteAll(mSpecies.values());
22
    mSpecies.clear();
23
}
24
 
111 Werner 25
const Species *SpeciesSet::species(const int &index)
26
{
27
    foreach(Species *s, mSpecies)
28
        if (s->index() == index)
29
            return s;
30
    return NULL;
31
}
91 Werner 32
 
33
/** loads active species from a database table and creates/setups the species.
34
    The function uses the global database-connection.
35
  */
102 Werner 36
int SpeciesSet::setup()
91 Werner 37
{
102 Werner 38
    const XmlHelper &xml = GlobalSettings::instance()->settings();
39
    QString tableName = xml.value("species.source", "species");
40
    QString readerFile = xml.value("species.reader", "reader.bin");
41
    readerFile = GlobalSettings::instance()->path(readerFile, "lip");
42
    mReaderStamp.load(readerFile);
43
 
91 Werner 44
    QSqlQuery query(GlobalSettings::instance()->dbin());
45
    mSetupQuery = &query;
46
    QString sql = QString("select * from %1").arg(tableName);
47
    query.exec(sql);
48
    clear();
49
    qDebug() << "attempting to load a species set from" << tableName;
50
    while (query.next()) {
51
        if (var("active").toInt()==0)
52
            continue;
53
 
54
        Species *s = new Species(this); // create
99 Werner 55
        // call setup routine (which calls SpeciesSet::var() to retrieve values
91 Werner 56
        s->setup();
57
 
58
        mSpecies.insert(s->id(), s); // store
59
    } // while query.next()
60
    qDebug() << "loaded" << mSpecies.count() << "active species:";
61
    qDebug() << mSpecies.keys();
62
 
63
    mSetupQuery = 0;
64
    return mSpecies.count();
65
 
66
}
67
/** retrieves variables from the datasource available during the setup of species.
68
  */
69
QVariant SpeciesSet::var(const QString& varName)
70
{
94 Werner 71
    Q_ASSERT(mSetupQuery!=0);
91 Werner 72
 
73
    int idx = mSetupQuery->record().indexOf(varName);
74
    if (idx>=0)
75
        return mSetupQuery->value(idx);
125 Werner 76
    throw IException(QString("SpeciesSet: variable not set: %1").arg(varName));
120 Werner 77
    //throw IException(QString("load species parameter: field %1 not found!").arg(varName));
91 Werner 78
    // lookup in defaults
119 Werner 79
    //qDebug() << "variable" << varName << "not found - using default.";
80
    //return GlobalSettings::instance()->settingDefaultValue(varName);
91 Werner 81
}