Fotobot
Get data from your photovoltaic plant
Signals | Public Member Functions | Static Public Member Functions | Private Member Functions | List of all members
LinesController Class Reference
Inheritance diagram for LinesController:
WebPage MRequestHandler

Signals

int saveLine (DBT_LINES)
 
void deleteLine (int)
 
int saveInvertor (DBT_INVERTORS)
 

Public Member Functions

 LinesController ()
 
void servicePrivate (HttpRequest &request)
 
- Public Member Functions inherited from WebPage
 WebPage ()
 
virtual void service (HttpRequest &request, HttpResponse &response)
 
void redirect (const QString &location)
 
- Public Member Functions inherited from MRequestHandler
 MRequestHandler ()
 

Static Public Member Functions

static QString getEditFormContents (const DBT_LINES &line=DBT_LINES())
 
static void readForm (DBT_LINES &line, HttpRequest &request)
 
- Static Public Member Functions inherited from WebPage
static QString percentEncode (const QString &s)
 

Private Member Functions

 Q_DISABLE_COPY (LinesController)
 
void actionAdd (HttpRequest &request)
 
void actionEdit (HttpRequest &request)
 
void actionDelete (HttpRequest &request)
 

Additional Inherited Members

- Protected Member Functions inherited from WebPage
void setStatus (int code, QByteArray description)
 
void setHeader (QByteArray name, QByteArray value)
 
void setHeader (QByteArray name, int value)
 
void write (QByteArray data)
 
void write (QString data)
 
void write (const char *data)
 
void about ()
 
HttpSession getSession ()
 
virtual void writeHeader (HttpRequest &request, HttpResponse &response)
 
virtual void writeFooter (HttpRequest &request, HttpResponse &response)
 
- Protected Member Functions inherited from MRequestHandler
bool needsLogin (HttpRequest &request, HttpResponse &response)
 
- Protected Attributes inherited from WebPage
QString m_javascript
 
- Protected Attributes inherited from MRequestHandler
bool m_needs_access_data
 
bool m_needs_change_settings
 
bool m_cacheable
 

Detailed Description

Definition at line 16 of file linescontroller.h.

Constructor & Destructor Documentation

LinesController::LinesController ( )

Constructor

Definition at line 13 of file linescontroller.cpp.

13  {
14  qRegisterMetaType<DBT_LINES>();
15  connect(this, SIGNAL(saveLine(DBT_LINES)), Static::db, SLOT(saveLine(DBT_LINES)), Qt::BlockingQueuedConnection);
16  connect(this, SIGNAL(deleteLine(int)), Static::db, SLOT(deleteLine(int)), Qt::QueuedConnection);
17  qRegisterMetaType<DBT_INVERTORS>();
18  connect(this, SIGNAL(saveInvertor(DBT_INVERTORS)), Static::db, SLOT(saveInvertor(DBT_INVERTORS)), Qt::QueuedConnection);
19 }
Class describing database table LINES.
Class describing database table INVERTORS.

Member Function Documentation

void LinesController::actionAdd ( HttpRequest &  request)
private

Add a line action

a form

invertor generator form

second page doing the action and redirecting

validation

invertor generation

Definition at line 129 of file linescontroller.cpp.

129  {
130  QByteArray action = request.getParameter("action");
132  write(QString("<h3>%1</h3>\n").arg(tr("Add a line")));
133  write("<form method=\"post\">\n"
134  "<input type=\"hidden\" name=\"action\" value=\"add2\" />\n");
135  DBT_LINES line;
136  readForm(line, request);
137  write("<table class=\"formTable\">");
138  write(getEditFormContents(line));
139 
141  write(QString("<tr><td><h4>%1</h4></td><td></td></tr>").arg(tr("Generate Invertors")));
142  DBT_INVERTORS invertor;
143  InvertorsController::readForm(invertor, request);
144  if(invertor.address < 1) invertor.address = 1;
145  write(InvertorsController::getEditFormContents(request, invertor, true));
146  write("</table>");
147 
148  write(QString("<input type=\"submit\" value=\"%1\">\n"
149  "</form>\n").arg(tr("Add")));
150  if(action == "add2") {
152  line.line = 0;
153  invertor.invertor = 0;
155  if(true) {
156  invertor.line = Static::db->saveLine(line);
157 
159  QByteArray generate = request.getParameter("generate");
160  int gen = (generate.isEmpty()) ? 0 : generate.toInt();
161  for(int j = 0; j < gen; j++) {
162  emit saveInvertor(invertor);
163  ++invertor.address; // do addresses have to be unique only in 1 line?
164  }
165 
166  QString location = QString("/lines?message=%1").arg(percentEncode(tr("Line added.")));
167  redirect(location);
168  } else {
169  write(QString("<p>%1</p>").arg(tr("Line definition invalid.")));
170  }
171  }
172 }
static QString getEditFormContents(const DBT_LINES &line=DBT_LINES())
static QString getEditFormContents(HttpRequest &request, DBT_INVERTORS line=DBT_INVERTORS(), bool generator=false)
static void readForm(DBT_INVERTORS &invertor, HttpRequest &request)
int saveLine(QSqlDatabase &, DBT_LINES)
Insert or update LINE.
Definition: database.cpp:857
static void readForm(DBT_LINES &line, HttpRequest &request)
Class describing database table LINES.
Class describing database table INVERTORS.
void LinesController::actionDelete ( HttpRequest &  request)
private

Delete line action

Definition at line 223 of file linescontroller.cpp.

223  {
224  write(QString("<h3>%1</h3>\n").arg(tr("Delete a line")));
225  QString location;
226  QByteArray id = request.getParameter("id");
227  int idi = id.toInt();
228  if(!id.isEmpty() && idi > 0) {
229  emit deleteLine(idi);
230  location = QString("/lines?message=%1").arg(percentEncode(tr("Line deleted.")));
231  } else {
232  location = QString("/lines?message=%1").arg(percentEncode(tr("Error: Invalid line ID. Line not deleted.")));
233  }
234  redirect(location);
235 }
void LinesController::actionEdit ( HttpRequest &  request)
private

Edit line action

a form

second page doing the action and redirecting validation

Definition at line 177 of file linescontroller.cpp.

177  {
178  QByteArray action = request.getParameter("action");
179  DBT_LINES line;
181  write(QString("<h3>%1</h3>\n").arg(tr("Edit a line")));
182  write("<form method=\"post\">\n"
183  "<input type=\"hidden\" name=\"action\" value=\"edit2\" />\n");
184  if(action == "edit") {
185  QByteArray id = request.getParameter("id");
186  int idi = id.toInt();
187  if(id.isEmpty() || idi < 1) {
188  redirect(QString("/lines?message=%1").arg(percentEncode(tr("Error: Invalid line ID."))));
189  return;
190  }
191  QList<DBT_LINES> lines = Static::db->lines(idi);
192  if(lines.empty()) {
193  redirect(QString("/lines?message=%1").arg(percentEncode(tr("Error: no such line found."))));
194  return;
195  }
196  write("<table class=\"formTable\">");
197  write(getEditFormContents(lines.at(0)));
198  write("</table>");
199  } else {
200  readForm(line, request);
201  write("<table class=\"formTable\">");
202  write(getEditFormContents(line));
203  write("</table>");
204  }
205  write(QString("<input type=\"submit\" value=\"%1\">\n"
206  "</form>\n").arg(tr("Edit")));
207  if(action == "edit2") {
210  if(line.line > 0 && true) {
211  emit saveLine(line);
212  QString location = QString("/lines?message=%1").arg(percentEncode(tr("Line edited.")));
213  redirect(location);
214  } else {
215  write(QString("<p>%1</p>").arg(tr("Error: Line definition invalid.")));
216  }
217  }
218 }
QList< DBT_LINES > lines(int line=0)
Returns list of communications lines.
Definition: database.cpp:380
static QString getEditFormContents(const DBT_LINES &line=DBT_LINES())
static void readForm(DBT_LINES &line, HttpRequest &request)
Class describing database table LINES.
QString LinesController::getEditFormContents ( const DBT_LINES line = DBT_LINES())
static

Generates an edit form contents (html input fields)

Definition at line 64 of file linescontroller.cpp.

64  {
65  QString s;
66  s.append(QString("<input type=\"hidden\" name=\"id\" value=\"%1\" />\n").arg(line.line));
67  QString i ("<tr><td><label for=\"%2\">%1</label>: </td><td><input type=\"text\" name=\"%2\" value=\"%3\" /></td></tr>\n");
68  s.append(i.arg(tr("Description"), "description", line.description));
69  s.append(i.arg(tr("Serial Number Format"), "sn_format", line.sn_format));
70 
71  QString sel;
72  sel += QString("<option value=\"%1\" %2>%3</option>")
73  .arg(DBT_LINES::Fronius)
74  .arg((line.type == DBT_LINES::Fronius)?"selected=\"selected\"" : "")
75  .arg("Fronius (interfacebox)")
76  ;
77  sel += QString("<option value=\"%1\" %2>%3</option>")
78  .arg(DBT_LINES::ModbusTCP)
79  .arg((line.type == DBT_LINES::ModbusTCP)?"selected=\"selected\"" : "")
80  .arg("Modbus TCP")
81  ;
82  s.append(QString("<tr><td>%1</td><td><select id=\"type\" name=\"type\">%2</select></td>")
83  .arg(tr("Type"))
84  .arg(sel)
85  );
86 
87  s.append(i.arg(tr("Device"), "device", line.device));
88  s.append(i.arg(tr("Hostname"), "hostname", line.hostname));
89  s.append(i.arg(tr("Port number"), "portnumber", QString::number(line.portnumber)));
90  // speed selectbox
91  s.append(QString("<tr><td><label for=\"%2\">%1</label>: </td><td><select id=\"%2\" name=\"%2\">\n").arg(tr("Speed"), "speed"));
92  QList<int> speeds;
93  speeds << 110 << 300 << 600 << 1200 << 2400 << 4800 << 9600 << 19200 << 38400 << 57600 << 115200;
94  QList<int>::const_iterator ii;
95  for(ii = speeds.constBegin(); ii != speeds.constEnd(); ++ii) {
96  int sp = *ii;
97  s.append(QString("<option value=\"%1\" %2>%1</option>\n")
98  .arg(sp).arg((sp == line.speed) ? "selected=\"selected\"" : ""));
99  }
100  s.append("</select></td></tr>\n");
101 
102  s.append(i.arg(tr("Retries"), "retries").arg(line.retries));
103  s.append(i.arg(tr("Timeout [ms]"), "timeout").arg(line.timeout));
104  return s;
105 }
void LinesController::readForm ( DBT_LINES line,
HttpRequest &  request 
)
static

Read form HTTP post reply and load into the line

Definition at line 107 of file linescontroller.cpp.

107  {
108  line.line = request.getParameter("id").toInt();
109  line.device = request.getParameter("device");
110  line.description = request.getParameter("description");
111  line.sn_format = request.getParameter("sn_format");
112  QByteArray p = request.getParameter("speed");
113  line.speed = (p.isEmpty()) ? 9600 : p.toInt();
114  p = request.getParameter("retries");
115  line.retries = (p.isEmpty()) ? 5 : p.toInt();
116  p = request.getParameter("timeout");
117  line.timeout = (p.isEmpty()) ? 3000 : p.toInt();
118  p = request.getParameter("type");
119  line.type = (DBT_LINES::Type)(
120  (p.isEmpty()) ? DBT_LINES::Fronius : p.toInt()
121  );
122  line.hostname = request.getParameter("hostname");
123  line.portnumber = request.getParameter("portnumber").toInt();
124 }
void LinesController::servicePrivate ( HttpRequest &  request)
virtual

Generates the response

Default action/page

Implements WebPage.

Definition at line 21 of file linescontroller.cpp.

21  {
22  QByteArray action = request.getParameter("action");
23  if(action.startsWith("add")) {
24  actionAdd(request); return;
25  } else if(action.startsWith("edit")) {
26  actionEdit(request); return;
27  } else if(action.startsWith("delete")) {
28  actionDelete(request); return;
29  }
30 
32 
33  QList<DBT_LINES> lines = Static::db->lines();
34  write(QString("<h2>%1</h2>\n").arg(tr("Lines")));
35  write(QString("<a href=\"/lines?action=add\">%1</a>\n").arg(tr("Add a line")));
36  write("<table>\n");
37  write(QString("<tr><th></th><th>%1</th><th>%2</th><th>%3</th><th>%4</th><th>%5</th><th>%6</th><th>%7</th><th>%8</th></tr>\n").arg(tr("Line"), tr("Device"), tr("IP address"), tr("Description"), tr("Serial Number Format"), tr("Speed"), tr("Retries"), tr("Timeout [ms]")));
38 
39  QList<DBT_LINES>::const_iterator i;
40  for(i = lines.constBegin(); i != lines.constEnd(); ++i) {
41  const DBT_LINES& l = *i;
42  write(QString("<tr><td>"
43  "<a href=\"/lines?action=edit&id=%1\">%9</a> "
44  "<a href=\"/lines?action=delete&id=%1\">%10</a>"
45  "</td>"
46  "<td>%1</td><td>%2</td><td>%3</td><td>%4</td><td>%5</td><td>%6</td><td>%7</td><td>%8</td>"
47  "</tr>\n")
48  .arg(l.line) // 1
49  .arg(l.device) // 2
50  .arg(l.hostname + ":" + QString::number(l.portnumber) )
51  .arg(l.description ) // 4
52  .arg(l.sn_format) // 5
53  .arg(l.speed) // 6
54  .arg(l.retries) // 7
55  .arg(l.timeout) // 8
56  .arg(tr("Edit")) // 9
57  .arg(tr("Delete")) // 10
58  );
59  }
60 
61  write("</table>\n");
62 }
QList< DBT_LINES > lines(int line=0)
Returns list of communications lines.
Definition: database.cpp:380
void actionEdit(HttpRequest &request)
void actionAdd(HttpRequest &request)
void actionDelete(HttpRequest &request)
Class describing database table LINES.

The documentation for this class was generated from the following files: