Project Documentation Manager BRIGADOON-0002
Project Documentation Manager
Loading...
Searching...
No Matches
doxygenmanager.cpp
Go to the documentation of this file.
1#include "doxygenmanager.h"
3#include "readprojectinfo.h"
4#include <QProcess>
5
8
10{
11 worker.moveToThread(&doxy_thread);
12 QObject::connect(&doxy_thread, &QThread::finished, &worker, &QObject::deleteLater);
13 QObject::connect(this, SIGNAL(DoWork(PROJECT_INFORMATION*)), &worker, SLOT(DoWork(PROJECT_INFORMATION*)));
14 QObject::connect(&worker, &Worker::WorkDone, this, &DoxygenManager::ReceiveResult);
15 QObject::connect(&worker, &Worker::SendLogEntry, this, &DoxygenManager::RemoteLogger);
16 doxy_thread.start();
17}
18
24
26{
27 ProjectInfo->ProjectLock = true;
28 ProjectInfo->ProjectQueued = true;
29 read_project_info->SetProjectStatus(ProjectInfo->ProjectDesc.ProjectIndex, ProjectInfo->ProjectLock, ProjectInfo->ProjectQueued);
30 project_list_manager->PrStateChange(ProjectInfo);
31 LogAdd( LOG_INFO, MODE_FILE, QString("Project %1 Queued for documentation generation.").arg(ProjectInfo->ProjectDesc.ProjectIdent));
32 project_list.append(ProjectInfo);
33 DoProject();
34}
35
36void DoxygenManager::LogAdd(LOGGING_SEVERITY Severity, LOGGING_MODE Mode, QString Message)
37{
38 REMOTE_LOG_ENTRY log_entry;
39 log_entry.Severity = Severity;
40 log_entry.Mode = Mode;
41 log_entry.Message = Message;
42 emit SendLogEntry(log_entry);
43}
44
46{
47 // Copy the Appropriate .htaccess form into the website if Document Control iS active and Only Group Access if active
48 if (!(ProjectInfo->InAssocInfo.HtaccessFileName =="") && (ProjectInfo->ProjectDesc.ProjectOptions & CONTROL_DOC_ACCESS) && (ProjectInfo->ProjectDesc.ProjectOptions & GROUP_ACCESS_ONLY))
49 {
50 QString htaccess_file = ProjectInfo->ProgramInformation.SharedTemplateDirectory + "/access_template/" + ProjectInfo->InAssocInfo.HtaccessFileName;
51 QString destin_file = ProjectInfo->ProgramInformation.PrimaryWebsiteDirectory + "/projects/" + ProjectInfo->ProjectDesc.ProjectIdent + "/html/.htaccess";
52 QFile ht_file(htaccess_file);
53 if (ht_file.copy(destin_file))
54 {
55 LogAdd( LOG_DEBUG, MODE_FILE, QString(".htaccess File %1 copied to %2.").arg(htaccess_file, ProjectInfo->ProjectDesc.ProjectIdent));
56 }
57 else
58 {
59 LogAdd( LOG_ERROR, MODE_FILE, QString(".htaccess File %1 FAILED TO COPY to %2.").arg(htaccess_file, ProjectInfo->ProjectDesc.ProjectIdent));
60 }
61 }
62
63 // Release Lock and release Structure
64 ProjectInfo->ProjectLock = false;
65 ProjectInfo->ProjectQueued = false;
66 read_project_info->SetProjectStatus(ProjectInfo->ProjectDesc.ProjectIndex, ProjectInfo->ProjectLock, ProjectInfo->ProjectQueued);
67 //emit PrStateChange(ProjectInfo);
68
69
70 project_working = false;
71 delete ProjectInfo;
72 DoProject();
73}
74
76{
77 emit SendLogEntry(LogEntry);
78}
79
81{
82 if (!project_working)
83 {
84 if (!project_list.empty())
85 {
86 PROJECT_INFORMATION* project_info = project_list.takeFirst();
87 if (LockProject(project_info->ProjectDesc.ProjectIndex))
88 {
89 project_working = true;
90 project_info->ProjectLock = true;
91 project_info->ProjectQueued = false;
92 read_project_info->SetProjectStatus(project_info->ProjectDesc.ProjectIndex, project_info->ProjectLock, project_info->ProjectQueued);
93
94 emit PrStateChange(project_info);
95 emit DoWork(project_info);
96 LogAdd(LOG_DEBUG, MODE_GENERAL, QString("Project %1 sent to Doxygen program.").arg(project_info->ProjectDesc.ProjectIdent));
97 }
98 else
99 {
100 project_info->ProjectLock = false;
101 LogAdd(LOG_INFO, MODE_GENERAL, QString("Project %1 update cancelled as Project already locked.").arg(project_info->ProjectDesc.ProjectIdent));
102 }
103
104 }
105 else
106 {
107 LogAdd(LOG_DEBUG, MODE_GENERAL, "No new projects to be processed.");
108 }
109 }
110 else
111 {
112 LogAdd(LOG_DEBUG, MODE_GENERAL, "Project processing under way - New Project Start deferred.");
113 }
114}
115
116bool DoxygenManager::LockProject(int ProjectIndex)
117{
118 return( read_project_info->SetProjectStatus(ProjectIndex, true, false) );
119}
120
121
bool project_working
Flag showing is a project is being processed.
void ReceiveResult(PROJECT_INFORMATION *ProjectInfo)
Receive the Result of the Worker Function.
void PrStateChange(PROJECT_INFORMATION *ProjectInfo)
Signal that State of the Project has changed.
~DoxygenManager()
Class Deconstructor.
void RemoteLogger(REMOTE_LOG_ENTRY LogEntry)
void SendLogEntry(REMOTE_LOG_ENTRY LogEntry)
Send Log Entry to the Log \LogEntry Structure holding Log information.
bool LockProject(int ProjectIndex)
Lock the Project to prevent alterations.
void ProcessProject(PROJECT_INFORMATION *ProjectInfo)
Process documentation for a Project.
QList< PROJECT_INFORMATION * > project_list
Queue of Projects to be processed.
void DoProject(void)
Take the next Project in the Queue and process.
void DoWork(PROJECT_INFORMATION *ProjectInfo)
Signal the Work task to process this Project.
DoxygenManager()
Class Constructor.
void LogAdd(LOGGING_SEVERITY Severity, LOGGING_MODE Mode, QString Message)
Add a Log Entry.
void SendLogEntry(REMOTE_LOG_ENTRY LogEntry)
void WorkDone(PROJECT_INFORMATION *ProjectInfo)
#define CONTROL_DOC_ACCESS
Control Document Access to Public Mask.
#define GROUP_ACCESS_ONLY
restrict Public Access Mask
ProjectListManager * project_list_manager
ReadProjectInfo * read_project_info
Doxygen Defintitions.
LOGGING_SEVERITY
Log Severity allow the selection of logging events based on Severity.
Definition logger.h:48
@ LOG_ERROR
Definition logger.h:52
@ LOG_INFO
Definition logger.h:55
@ LOG_DEBUG
Definition logger.h:56
LOGGING_MODE
Log Severity allow the selection of logging events based on the mode.
Definition logger.h:21
@ MODE_FILE
Definition logger.h:32
@ MODE_GENERAL
Definition logger.h:24
Project List Manager Class.
Class for Reading Projects.
Project Information Passed Between Functions.
PROGRAM_INFORMATION ProgramInformation
PROJECT_DESCRIPTION ProjectDesc
ASSOCIATED_GROUP_INFO InAssocInfo
Definition logger.h:60
LOGGING_MODE Mode
Definition logger.h:61
QString Message
Definition logger.h:63
LOGGING_SEVERITY Severity
Definition logger.h:62