Sei sulla pagina 1di 4

DomainModel.

h 1
#ifndef DOMAINMODEL_H
#define DOMAINMODEL_H
#include <QString>
#include <QList>
#include <QDateTime>
#include <QSharedData>
#include <QSharedDataPointer>

namespace DBConan
{
class PrimaryKey;
class ForeignKey;
class Table;
class Column;

class ColumnData : public QSharedData


{
public:
ColumnData();
ColumnData(const ColumnData & other);
~ColumnData();

QString name;
QString type;
QString keyName;
int position;
QString description;
};

class Column
{
private:
QSharedDataPointer<ColumnData> d;

public:
Column();
Column(QString name, QString type, QString keyName, int position,
QString description);
Column(const Column & other);

QString name() const;


QString type() const;
QString keyName() const;
int position() const;
QString description() const;
};

class KeyElementData : public QSharedData


{
public:
KeyElementData();
KeyElementData(const KeyElementData & other);
~KeyElementData();

int position;
Column column;
};

class KeyElement
{
private:
QSharedDataPointer<KeyElementData> d;

public:
KeyElement();
KeyElement(Column column, int position);
KeyElement(const KeyElement & other);
DomainModel.h 2
int position() const;
Column column() const;
};

class TableData : public QSharedData


{
public:
TableData();
TableData(const TableData & other);
~TableData();

QString name;
bool allPossibleForeignKeysLocked;
QList<Column> columns;
QList<ForeignKey> foreignKeys;
QList<ForeignKey> allPossibleForeignKeys;
QList<PrimaryKey> primaryKey;
};

class Table
{
private:
QSharedDataPointer<TableData> d;

public:
Table();
Table(QString name, QList<QString> columnNames, QList<QString> columnTypes,
QList<QString> columnKeyNames, QString primaryKeyName,
QList<QString> primaryKeyColumnNames);
Table(const Table & other);

void addColumn(Column column);

QString name() const;


QList<Column> columns() const;
PrimaryKey primaryKey() const;
QList<ForeignKey> foreignKeys() const;
QList<ForeignKey> allPossibleForeignKeys() const;
};

class PrimaryKeyData : public QSharedData


{
public:
PrimaryKeyData();
PrimaryKeyData(const PrimaryKeyData & other);
~PrimaryKeyData();

QString name;
QList<KeyElement> elements;
QList<ForeignKey> foreignKeys;
Table table;
};

class PrimaryKey
{
private:
QSharedDataPointer<PrimaryKeyData> d;

public:
PrimaryKey();
PrimaryKey(Table table, QString name, QList<KeyElement> elements);
PrimaryKey(const PrimaryKey & other);

QString name() const;


QList<KeyElement> elements() const;
QList<ForeignKey> foreignKeys() const;
Table table() const;
};
DomainModel.h 3

class ForeignKeyData : public QSharedData


{
public:
ForeignKeyData();
ForeignKeyData(const ForeignKeyData & other);
~ForeignKeyData();

QString name;
QList<KeyElement> elements;
PrimaryKey primaryKey;
Table table;
};

class ForeignKey
{
private:
QSharedDataPointer<ForeignKeyData> d;

public:
ForeignKey();
ForeignKey(Table table, QString name, QList<KeyElement> elements,
PrimaryKey primaryKey);
ForeignKey(const ForeignKey & other);

QString name() const;


QList<KeyElement> elements() const;
PrimaryKey primaryKey() const;
Table table() const;
};

class SchemaData : public QSharedData


{
public:
SchemaData();
SchemaData(const SchemaData & other);
~SchemaData();

QString host;
int port;
QString dbName;
QString name;
QString userName;
QDateTime dateOfCreation;
QString description;
QList<Table> tables;
};

//QString is implicitly shared:


http://books.google.com/books?id=tSCR_4LH2KsC&pg=PA259&lpg=PA259&dq=QString+reference+cou
nting&source=bl&ots=E6_3mX24yk&sig=_P3NXR828LKhQLJugCm8nwuSNWM&hl=es&ei=fU2sS_j4BZGVtgfvu
8S2Dw&sa=X&oi=book_result&ct=result&resnum=6&ved=0CCYQ6AEwBQ#v=onepage&q=QString%20refere
nce%20counting&f=false
class Schema
{
private:
QSharedDataPointer<SchemaData> d;

public:
Schema();
Schema(QString host, int port, QString dbName, QString name, QString
userName,
QDateTime dateOfCreation, QString description);
Schema(const Schema & other);

void addTable(Table table);

QString host() const;


DomainModel.h 4
int port() const;
QString dbName() const;
QString name() const;
QString userName() const;
QDateTime dateOfCreation() const;
QString description() const;
QList<Table> tables() const;
};
}

#endif // DOMAINMODEL_H

Potrebbero piacerti anche