summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeva <deva>2009-05-15 11:52:52 +0000
committerdeva <deva>2009-05-15 11:52:52 +0000
commitba614b9d61f9eb7407108d7836177aa0608823e6 (patch)
treed71cfa6bcd472ed6cc41a69f015d16a4cb9326eb
parent124384095470c9b2cfb046ff931152583c6df65a (diff)
Journal entries are now committed in the order in which they appear in the course description (the template). Misspelled 'macroes' have been corrected to 'macros' in template.h and all affected files.
-rw-r--r--server/src/journal_commit.cc38
-rw-r--r--server/src/journal_commit.h7
-rw-r--r--server/src/server.cc9
-rw-r--r--server/src/template.h2
-rw-r--r--server/src/templateparser.cc10
5 files changed, 44 insertions, 22 deletions
diff --git a/server/src/journal_commit.cc b/server/src/journal_commit.cc
index accf839..f74e54e 100644
--- a/server/src/journal_commit.cc
+++ b/server/src/journal_commit.cc
@@ -200,6 +200,28 @@ JournalWriter::JournalWriter(std::string host, unsigned short int port)
void JournalWriter::addEntry(Transaction &transaction, Commit &commit,
std::string resume, std::string course)
{
+ TemplateParser tp(course);
+ tp.parse();
+ Template *templ = tp.getTemplate();
+
+ size_t index = 0;
+ std::vector< Macro >::iterator i = templ->course.macros.begin();
+ while(i != templ->course.macros.end()) {
+ Macro &m = *i;
+ if(commit.macro == m.attributes["name"]) break;
+ index++;
+ i++;
+ }
+
+ if(index >= templ->course.macros.size()) {
+ PRACRO_ERR(journal, "Could not find macro %s in course %s\n",
+ commit.macro.c_str(), course.c_str());
+ // return;
+ } else {
+ PRACRO_DEBUG(journal, "Found macro %s as index %u in course %s\n",
+ commit.macro.c_str(), index, course.c_str());
+ }
+
// First run - initialize username and cpr.
if(currentuser == "" && entrylist.size() == 0) currentuser = transaction.user;
if(currentcpr == "" && entrylist.size() == 0) currentcpr = transaction.cpr;
@@ -208,9 +230,6 @@ void JournalWriter::addEntry(Transaction &transaction, Commit &commit,
// Add the course resume as the header (ie. first entry) of the journal entry.
if(entrylist.size() == 0 && course != "") {
- TemplateParser tp(course);
- tp.parse();
- Template *templ = tp.getTemplate();
std::string course_resume = templ->course.attributes["resume"];
PRACRO_DEBUG(journal, "CourseResume: %s\n", course_resume.c_str());
@@ -219,7 +238,7 @@ void JournalWriter::addEntry(Transaction &transaction, Commit &commit,
ResumeEntry re;
re.resume = course_resume;
re.macro = "course_header";
- entrylist.push_back(re);
+ entrylist[-1] = re; // Make sure it comes first.
}
}
@@ -233,6 +252,7 @@ void JournalWriter::addEntry(Transaction &transaction, Commit &commit,
std::string r = stripTrailingWhitepace(addNewlines(resume, 60));
std::string m = commit.macro;
+ /*
// If macro already exists, overwrite with this entry, otherwise, just add it
int idx = -1;
std::vector< ResumeEntry >::iterator i = entrylist.begin();
@@ -252,6 +272,12 @@ void JournalWriter::addEntry(Transaction &transaction, Commit &commit,
re.macro = m;
entrylist.push_back(re);
}
+ */
+
+ ResumeEntry re;
+ re.resume = r;
+ re.macro = m;
+ entrylist[index] = re;
}
void JournalWriter::commit()
@@ -259,11 +285,11 @@ void JournalWriter::commit()
std::string resume;
// Iterate through all resumes, and create a string containing them all.
- std::vector< ResumeEntry >::iterator i = entrylist.begin();
+ std::map< int, ResumeEntry >::iterator i = entrylist.begin();
while(i != entrylist.end()) {
if(resume != "") resume += "\n\n";
// resume += i->macro + "\n";
- resume += i->resume;
+ resume += i->second.resume;
i++;
}
diff --git a/server/src/journal_commit.h b/server/src/journal_commit.h
index 0f8ae57..0565f34 100644
--- a/server/src/journal_commit.h
+++ b/server/src/journal_commit.h
@@ -28,7 +28,7 @@
#define __PRACRO_JOURNAL_COMMIT_H__
#include <string>
-#include <vector>
+#include <map>
#include "transaction.h"
@@ -42,7 +42,8 @@ class JournalWriter {
public:
JournalWriter(std::string host, unsigned short int port);
- void addEntry(Transaction &transaction, Commit &commit, std::string resume, std::string course_resume);
+ void addEntry(Transaction &transaction, Commit &commit,
+ std::string resume, std::string course_resume);
void commit();
@@ -53,7 +54,7 @@ private:
std::string currentuser;
std::string currentcpr;
- std::vector< ResumeEntry > entrylist;
+ std::map< int, ResumeEntry > entrylist;
};
#endif/*__PRACRO_JOURNAL_COMMIT_H__*/
diff --git a/server/src/server.cc b/server/src/server.cc
index a0dbaa4..2641b8a 100644
--- a/server/src/server.cc
+++ b/server/src/server.cc
@@ -109,11 +109,6 @@ static std::string handleTransaction(Transaction *transaction,
if(resume != "" && store_in_journal) {
journalwriter.addEntry(*transaction, commit, resume, commit.course);
- /*
- journal_commit(transaction->cpr.c_str(), transaction->user.c_str(),
- Conf::journal_commit_addr.c_str(), Conf::journal_commit_port,
- resume.c_str(), resume.length());
- */
}
i++;
@@ -145,8 +140,8 @@ static std::string handleTransaction(Transaction *transaction,
bool foundmacro = false;
// Generate the macro and return it to the client
- std::vector< Macro >::iterator mi2 = templ->course.macroes.begin();
- while(mi2 != templ->course.macroes.end()) {
+ std::vector< Macro >::iterator mi2 = templ->course.macros.begin();
+ while(mi2 != templ->course.macros.end()) {
Macro &macro = (*mi2);
// FIXME: This is to be made in some other way in a later version.
diff --git a/server/src/template.h b/server/src/template.h
index c6d40a6..f39baac 100644
--- a/server/src/template.h
+++ b/server/src/template.h
@@ -69,7 +69,7 @@ public:
class Course {
public:
- std::vector< Macro > macroes;
+ std::vector< Macro > macros;
std::map< std::string, std::string > attributes;
};
diff --git a/server/src/templateparser.cc b/server/src/templateparser.cc
index 140051e..d40bc1e 100644
--- a/server/src/templateparser.cc
+++ b/server/src/templateparser.cc
@@ -123,8 +123,8 @@ void TemplateParser::startTag(std::string name, std::map< std::string, std::stri
Macro m;
m.attributes = attributes;
- t->course.macroes.push_back(m);
- current_macro = &(t->course.macroes.back());
+ t->course.macros.push_back(m);
+ current_macro = &(t->course.macros.back());
return;
}
@@ -194,10 +194,10 @@ int main()
printf("\t[Course]:\n");
print_attributes("\t\t-", t->course.attributes);
- printf("\t\t[Macroes]:\n");
- std::vector< Macro >::iterator i = t->course.macroes.begin();
+ printf("\t\t[Macros]:\n");
+ std::vector< Macro >::iterator i = t->course.macros.begin();
- while(i != t->course.macroes.end()) {
+ while(i != t->course.macros.end()) {
printf("\t\t\t[Macro]:\n");
print_attributes("\t\t\t\t-", (*i).attributes);