00001 #ifndef DATALOADER_H
00002 #define DATALOADER_H
00003
00004 #include <domain/invitation.h>
00005 #include <domain/reservation.h>
00006 #include <domain/schedule.h>
00007
00008 #include <controllerinterface.h>
00009 #include <domain/taskstates.h>
00010
00011 #include <QMap>
00012 #include <QMultiMap>
00013 #include <QDebug>
00014
00015 namespace domain
00016 {
00017 class User;
00018 class Task;
00019 class Resource;
00020 class Project;
00021 }
00022 class QDomElement;
00023
00024 namespace control
00025 {
00026
00037 class DataLoader : public ControllerInterface
00038 {
00039 Q_OBJECT
00040 Q_INTERFACES(control::ControllerInterface)
00041
00042 public:
00043
00044 QString description() const;
00045 QString name() const;
00046 DataType dataType() const;
00047 ActionType actionType() const;
00048 void init(domain::TaskManagerData* data, ui::UiInterface* ui,
00049 ControllerFactory* factory);
00050
00051 private:
00052
00053 void execute();
00054 bool userIsValid() const;
00055
00056 struct TaskData
00057 {
00058 domain::TaskType* type;
00059 domain::User* user;
00060 QStringList subTasks;
00061 QList<domain::InvitationData> invitations;
00062 QList<domain::ReservationData> reservations;
00063 domain::TaskState::SettableState state;
00064 domain::Project* project;
00065 domain::Schedule schedule;
00066 QMap<QString, QVariant> fieldsMap;
00067 };
00068
00069 QMap<QString, TaskData> taskData;
00070 QMap<QString, domain::Resource*> resourceRefs;
00071 QMap<QString, domain::Project*> projectRefs;
00072 QMap<QString, domain::Task*> taskRefs;
00073 QMap<QString, domain::User*> userRefs;
00074 QMultiMap<QString, QString> taskInvitees;
00075 QMultiMap<domain::User*, QMap<QString, QString> > userInvitees;
00076
00077 bool load(const QDomElement& root);
00078 bool loadProject(const QDomElement& project);
00079 bool loadProjects(const QDomElement& projects);
00080 bool loadResource(const QDomElement& resource);
00081 bool loadResources(const QDomElement& resources);
00082 bool loadUser(const QDomElement& user);
00083 bool loadTask(const QDomElement& task, domain::User* userPointer);
00084 bool loadTasks(const QDomElement& tasks, domain::User* userPointer);
00085 bool loadReservations(const QDomElement& reservations,
00086 const QString& taskRef);
00087 bool loadReservation(const QDomElement& reservation,
00088 const QString& taskRef);
00089 bool loadInvitations();
00090 bool createTasks();
00091
00092 ControllerInterface* themeLoader;
00093 };
00094
00095 }
00096
00097 #endif