00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __BUGDB_H__
00012 #define __BUGDB_H__
00013
00014 #include "fastdb.h"
00015 #include "wwwapi.h"
00016
00017 class Bug;
00018 class Software;
00019
00020 class Person
00021 {
00022 public:
00023 char const* sName;
00024 char const* sEmailAddress;
00025 char const* sPassword;
00026
00027 dbArray<dbReference<Software> > setUsedSoftware;
00028 dbArray<dbReference<Software> > setProjects;
00029 dbArray<dbReference<Bug> > setReportedBugs;
00030 dbArray<dbReference<Bug> > setAssignedBugs;
00031
00032 enum PersonStatus {
00033 isUser,
00034 isEngineer,
00035 isAdministrator
00036 };
00037 int1 status;
00038 int4 nReports;
00039
00040 void print(WWWconnection& con) const;
00041
00042 bool checkPassword(char const* password) const {
00043 return strcmp(sPassword, password) == 0;
00044 }
00045
00046
00047 TYPE_DESCRIPTOR((KEY(sName, INDEXED),
00048 FIELD(sEmailAddress),
00049 FIELD(sPassword),
00050 RELATION(setReportedBugs, pReportedBy),
00051 RELATION(setAssignedBugs, pAssignedTo),
00052 RELATION(setUsedSoftware, setUsers),
00053 RELATION(setProjects, setEngineers),
00054 FIELD(status),FIELD(nReports)));
00055 };
00056
00057
00058 class Version
00059 {
00060 public:
00061 char const* sLabel;
00062 int majorVersionNumber;
00063 int minorVersionNumber;
00064 dbDateTime released;
00065 char const* sComment;
00066 dbArray<dbReference<Bug> > setBugs;
00067 dbReference<Version> pNext;
00068
00069 int getVersion() const;
00070 char* getVersionString() const;
00071
00072 void print(WWWconnection& con) const;
00073
00074 TYPE_DESCRIPTOR((FIELD(sLabel),
00075 FIELD(majorVersionNumber),
00076 FIELD(minorVersionNumber),
00077 FIELD(released),
00078 FIELD(sComment),
00079 RELATION(setBugs, pVersion),
00080 FIELD(pNext)));
00081 };
00082
00083
00084 class Software
00085 {
00086 public:
00087 char const* sName;
00088 dbArray<dbReference<Person> > setEngineers;
00089 dbArray<dbReference<Person> > setUsers;
00090 dbReference<Version> pVersions;
00091 dbArray<dbReference<Bug> > setBugs;
00092
00093 int getLastVersion() const;
00094 char* getLastVersionString() const;
00095
00096 void print(WWWconnection& con) const;
00097
00098 TYPE_DESCRIPTOR((KEY(sName, INDEXED),
00099 FIELD(pVersions),
00100 RELATION(setEngineers, setProjects),
00101 RELATION(setUsers, setUsedSoftware),
00102 RELATION(setBugs, pSoftware)));
00103 };
00104
00105 enum eCATEGORY
00106 {
00107 CATEGORY_NOT_SPECIFIED,
00108 CRASH,
00109 PROGRAM_HANGS,
00110 UI_DISPLAY,
00111 UI_BEHAVIOR,
00112 CALCULATION,
00113 ERROR_HANDLING,
00114 PERFORMANCE,
00115 LICENSING,
00116 INSTALLATION,
00117 DOCUMENTATION,
00118 ENHANCEMENT,
00119 HOW_TO_QUESTION
00120 };
00121
00122 extern char const* const eCATEGORY_STRING[];
00123
00124 enum eSTATUS
00125 {
00126 STATUS_NOT_SPECIFIED,
00127 STATUS_OPENED,
00128 STATUS_FIXED,
00129 STATUS_CLOSED,
00130 STATUS_PENDING_Person,
00131 STATUS_PENDING_USER,
00132 STATUS_POSTPONED,
00133 STATUS_IRREPRODUCIBLE,
00134 STATUS_WITHDRAWN,
00135 STATUS_AS_DESIGNED
00136 };
00137
00138 extern char const* const eSTATUS_STRING[];
00139
00140 enum eFIXING_PRIORITY
00141 {
00142 PRIORITY_NOT_SPECIFIED,
00143 FIX_IMMEDIATELY,
00144 FIX_BEFORE_NEXT_BUILD_RELEASE,
00145 FIX_BEFORE_NEXT_MINOR_RELEASE,
00146 FIX_BEFORE_NEXT_MAJOR_RELEASE,
00147 FIX_IF_POSSIBLE,
00148 OPTIONAL
00149 };
00150
00151 extern char const* const eFIXING_PRIORITY_STRING[];
00152
00153 enum eSEVERITY
00154 {
00155 SEVERITY_NOT_SPECIFIED,
00156 FATAL,
00157 SERIOUS,
00158 MINOR,
00159 LAST_SEVERITY
00160 };
00161
00162 extern char const* const eSEVERITY_STRING[];
00163
00164
00165 class Report
00166 {
00167 public:
00168 char const* sDescription;
00169 dbReference<Person> pAuthor;
00170 dbReference<Report> pNext;
00171 dbDateTime creationDate;
00172 int1 status;
00173 int4 index;
00174
00175 void print(WWWconnection& con) const;
00176
00177 TYPE_DESCRIPTOR((FIELD(sDescription),FIELD(pAuthor),FIELD(pNext),FIELD(creationDate),
00178 FIELD(status),FIELD(index)));
00179 };
00180
00181
00182 class Bug
00183 {
00184 public:
00185 char const* sOneLineSummary;
00186 char const* sHardwarePlatform;
00187 char const* sOperatingSystem;
00188
00189 int4 bugId;
00190 int4 nReports;
00191 int1 eCategory;
00192 int1 eFixingPriority;
00193 int1 eSeverity;
00194
00195 dbReference<Person> pReportedBy;
00196 dbReference<Person> pAssignedTo;
00197
00198 dbReference<Software> pSoftware;
00199 dbReference<Version> pVersion;
00200
00201 dbReference<Report> pReportHistory;
00202 dbReference<Report> pWorkArounds;
00203 dbArray<dbReference<Bug> > setSimilarBugs;
00204
00205 void print(WWWconnection& con) const;
00206
00207 TYPE_DESCRIPTOR((KEY(bugId, HASHED),
00208 FIELD(sOneLineSummary),
00209 FIELD(sOperatingSystem),
00210 FIELD(sHardwarePlatform),
00211 RELATION(pSoftware, setBugs),
00212 RELATION(pVersion, setBugs),
00213 RELATION(pReportedBy, setReportedBugs),
00214 RELATION(pAssignedTo, setAssignedBugs),
00215 RELATION(setSimilarBugs, setSimilarBugs),
00216 FIELD(nReports),
00217 FIELD(eCategory),
00218 FIELD(eFixingPriority),
00219 FIELD(eSeverity),
00220 FIELD(pReportHistory),
00221 FIELD(pWorkArounds)));
00222 };
00223
00224
00225 class BugSequencer {
00226 public:
00227 int nBugs;
00228
00229 TYPE_DESCRIPTOR((FIELD(nBugs)));
00230 };
00231
00232 #endif