DCL 3.7.4
Loading...
Searching...
No Matches
HtmlPage Class Reference

#include <HtmlPage.h>

Inheritance diagram for HtmlPage:
Object

Public Member Functions

const SiteContextsite () const
 HtmlPage (int nPageID, const SiteContext *pSite)
virtual ~HtmlPage ()
bool init (SQLQuery &q) __DCL_THROWS1(SQLException *)
void print (Session &session) __DCL_THROWS1(Exception *)
void invoke (Session &session) __DCL_THROWS1(Exception *)
void refresh (Session &session, const String &strURI, unsigned int nAfterSecond=0) const __DCL_THROWS1(Exception *)
void printError (Session &session, const String &strTitle, const String &strMessage)
Public Member Functions inherited from Object
virtual String toString () const
virtual void destroy ()
String className () const
bool isInstanceOf (const std::type_info &typeinfo) const
virtual const std::type_info & typeInfo () const

Public Attributes

String __strPageID
int __nPageID
int __nPermID
String __strType
String __strCharset
String __strLanguage
String __strTitle
DateTime __dtUpdate

Protected Attributes

String __strDTD
String __strHeadImport
const SiteContext__pSite
HtmlViewPArray __views

Additional Inherited Members

Protected Member Functions inherited from Object
virtual ~Object ()
 Object ()

Detailed Description

Definition at line 28 of file HtmlPage.h.

Constructor & Destructor Documentation

◆ HtmlPage()

HtmlPage::HtmlPage ( int nPageID,
const SiteContext * pSite )

Definition at line 26 of file HtmlPage.cpp.

27{
28 __strPageID = String::valueOf(nPageID);
29 __nPageID = nPageID;
30 __nPermID = 0;
31 __pSite = pSite;
32}
int __nPermID
Definition HtmlPage.h:33
String __strPageID
Definition HtmlPage.h:31
int __nPageID
Definition HtmlPage.h:32
const SiteContext * __pSite
Definition HtmlPage.h:46

◆ ~HtmlPage()

HtmlPage::~HtmlPage ( )
virtual

Definition at line 34 of file HtmlPage.cpp.

35{
36 for(size_t i = 0; i < __views.size(); i++)
37 delete __views[i];
38}
HtmlViewPArray __views
Definition HtmlPage.h:47

Member Function Documentation

◆ init()

bool HtmlPage::init ( SQLQuery & q)

Definition at line 40 of file HtmlPage.cpp.

42{
43#ifdef __DCL_DEBUG
44 DateTime dtStart = DateTime::getCurrentLocalTime();
45#endif
46 q.prepare(L""
47 "SELECT P.PERM_ID, P.TYPE, P.CHARSET, P.LANGUAGE,"
48 "P.TITLE, P.UPDATE_TIME"
49 "\n FROM DCL_PAGE AS P"
50 "\n WHERE P.PAGE_ID = :PAGE_ID"
51 );
52 q.params()[0].setValue(__nPageID);
53 q.execute();
54 q.fetch();
55 if (q.eof())
56 return false;
57 else {
58 SQLFields& fields = q.fields();
59 __nPermID = fields[0].asInteger();
60 if (!fields[1].isNull())
61 __strType = fields[1].asString();
62 if (!fields[2].isNull())
63 __strCharset = fields[2].asString();
64 if (!fields[3].isNull())
65 __strLanguage = fields[3].asString();
66 if (!fields[4].isNull())
67 __strTitle = fields[4].asString();
68 __dtUpdate = fields[5].asDateTime();
69 }
70
71 q.prepare(L""
72 "SELECT V.NO, V.CLASS_ID, V.USER_ID, V.DS_ID, V.SKIN_FILE, V.PARAMETERS"
73 "\n , D.DS_NAME, DS_TYPE, D.TABLE_ID, D.REPLY_DEPTH, D.SEQUENCE"
74 "\nFROM DCL_VIEW V"
75 "\n INNER JOIN DCL_DATA_SOURCE D"
76 "\n ON (V.USER_ID = D.USER_ID AND V.DS_ID = D.DS_ID)"
77 "\n WHERE V.PAGE_ID = :PAGE_ID"
78 "\n ORDER BY V.NO"
79 );
80 q.params()[0].setValue(__nPageID);
81 q.execute();
82 q.fetch();
83 for(size_t i = 0; !q.eof(); i++) {
84 SQLFields& fields = q.fields();
85 HtmlView* pView = HtmlView::createObject(
86 this,
87 fields.byName(L"CLASS_ID").asInteger(),
88 i
89 );
90 if (pView) {
91 pView->init(fields);
92 __views.add(pView);
93 }
94
95 q.fetch();
96 }
97 __DCL_TRACE1(L"init: %ls\n", (DateTime::getCurrentLocalTime() - dtStart).toString().data());
98 return true;
99}
#define __DCL_TRACE1(fmt, arg1)
Definition Object.h:399
static DateTime getCurrentLocalTime()
Definition DateTime.cpp:954
String __strLanguage
Definition HtmlPage.h:36
String __strCharset
Definition HtmlPage.h:35
String __strTitle
Definition HtmlPage.h:37
String __strType
Definition HtmlPage.h:34
DateTime __dtUpdate
Definition HtmlPage.h:38
static HtmlView * createObject(HtmlPage *pPage, int nClassID, int nIndex)
Definition HtmlView.cpp:126
virtual void init(SQLFields &fields) __DCL_THROWS1(Exception *)
Definition HtmlView.cpp:298
virtual String toString() const
Definition Object.cpp:187
_CONST SQLField & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
Definition SQLQuery.cpp:77
void prepare(const String &_sql) __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:282
_CONST SQLParams & params() _CONST
Definition SQL.inl:106
_CONST SQLFields & fields() _CONST
Definition SQL.inl:101
void execute() __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:316
bool eof() const
Definition SQL.inl:91
void fetch() __DCL_THROWS1(SQLException *)
Definition SQLQuery.cpp:336

◆ invoke()

void HtmlPage::invoke ( Session & session)

Definition at line 154 of file HtmlPage.cpp.

156{
157 HttpServletContextEx& ctx = session.__ctx;
158 int nViewIndex = -1;
159
160 ListedStringToStringArrayMap::ConstIterator it =
161 ctx.__queryMap.find(L"view");
162 if (it != ctx.__queryMap.end()) {
163 // HTTP 요청에서 특정 뷰가 지정되었다.
164 // v=1, ...
165 if (!((*it).value.isEmpty()))
166 nViewIndex = Integer::parse((*it).value[0], 10, nViewIndex) - 1;
167
168 if (!(0 <= nViewIndex && nViewIndex < (int)__views.size())) {
169 // 인덱스가 잘못되었다.
170 ctx.setStatusCode(HTTP_STATUS_NOT_FOUND);
171 return;
172 }
173 }
174
175 switch(ctx.methodNo()) {
176 case HTTP_METHOD_GET: {
177 if (nViewIndex < 0) // == -1
178 print(session);
179 else {
180 // Content-Type, Content-Length는 뷰에서 설정한다.
181 __views[nViewIndex]->onGet(session);
182 }
183 break;
184 }
185 case HTTP_METHOD_POST: {
186 if (nViewIndex < 0) { // == -1
187 // POST에서는 반드시 뷰 인덱스가 지졍되어야 한다.
188 ctx.setStatusCode(HTTP_STATUS_NOT_FOUND);
189 }
190 else {
191 __views[nViewIndex]->onPost(session);
192 }
193 break;
194 }
195 default: {
196 ctx.setStatusCode(HTTP_STATUS_NOT_IMPLEMENTED);
197 }
198 }
199}
@ HTTP_METHOD_POST
@ HTTP_METHOD_GET
@ HTTP_STATUS_NOT_IMPLEMENTED
@ HTTP_STATUS_NOT_FOUND
void print(Session &session) __DCL_THROWS1(Exception *)
Definition HtmlPage.cpp:101
static int parse(const wchar_t *_number, unsigned _base=10) __DCL_THROWS1(NumericConvertException *)
Definition Numeric.inl:36
HttpServletContextEx & __ctx
Definition Session.h:41

◆ print()

void HtmlPage::print ( Session & session)

Definition at line 101 of file HtmlPage.cpp.

103{
104 session.__ctx.setContentType(
105 __strType,
106 __strCharset.isEmpty() ? NULL : __strCharset.data()
107 );
108
109 if (!__strLanguage.isEmpty())
110 session.__ctx.addHeader(HttpHeader(L"Content-Language", __strLanguage));
111
112 Writer& out = session.__ctx.writer();
113
114 if (!(__views.size() > 0
115#ifdef __DCL_NO_RTTI
116 && (__views[0]->isKindOf(CLASSINFO(HeadView))
117 || __views[0]->isKindOf(CLASSINFO(HeadSignMenuForm)))
118#else
119 && (dynamic_cast<HeadView*>(__views[0]) != NULL
120 || dynamic_cast<HeadSignMenuForm*>(__views[0]) != NULL)
121#endif
122 )) {
123 String strCharset = L"utf-8";
124 String strEncoding = L"UTF-8";
125 String strLang = L"ko-KR";
126
127 if (!__strCharset.isEmpty()) {
128 strCharset = __strCharset;
129 strEncoding = strCharset.toUpperCase();
130 }
131 if (!__strLanguage.isEmpty())
132 strLang = __strLanguage;
133
134 out << L""
135 "<!DOCTYPE html>\r\n"
136 "<html lang=\"" << strLang << L"\">\r\n"
137 "<head>\r\n"
138 "<title>" << __strTitle << L"</title>\r\n"
139 "<meta charset=\"" << strCharset << L"\">\r\n"
140 "<meta name=\"Generator\" content=\"DCL FastPage 1.1\">\r\n"
141 "</head>\r\n<body>\r\n";
142 }
143
144 for(size_t i = 0; i < __views.size(); i++) {
145#ifdef __DCL_DEBUG
146 DateTime dtStart = DateTime::getCurrentLocalTime();
147#endif
148 __views[i]->onPrint(session);
149 __DCL_TRACE2(L"view:%d: %ls\n", i + 1, (DateTime::getCurrentLocalTime() - dtStart).toString().data());
150 }
151
152}
#define NULL
Definition Config.h:312
#define CLASSINFO(class_name)
Definition Object.h:226
#define __DCL_TRACE2(fmt, arg1, arg2)
Definition Object.h:400
StringWriter & writer()

◆ printError()

void HtmlPage::printError ( Session & session,
const String & strTitle,
const String & strMessage )

Definition at line 218 of file HtmlPage.cpp.

223{
225 HtmlPage errorPage(
226 __pSite->nErrorPageID,
227 __pSite
228 );
229
230 errorPage.init(session.__query);
231 errorPage.__strTitle = strTitle;
232
233 HtmlView* pErrorView = NULL;
234 for(size_t i = 0; i < errorPage.__views.size(); i++) {
235#ifdef __DCL_NO_RTTI
236 if (errorPage.__views[i]->isKindOf(CLASSINFO(ErrorView))) {
237 pErrorView = errorPage.__views[i];
238 break;
239 }
240#else
241 pErrorView = dynamic_cast<ErrorView*>(errorPage.__views[i]);
242 if (pErrorView != NULL)
243 break;
244#endif
245 }
246
247 if (pErrorView) {
248 pErrorView->assign(L"ERROR_TITLE", strTitle);
249 pErrorView->assign(L"ERROR_MESSAGE", strMessage);
250 }
251
252 errorPage.print(session);
253}
#define __DCL_ASSERT(expr)
Definition Object.h:394
HtmlPage(int nPageID, const SiteContext *pSite)
Definition HtmlPage.cpp:26
SQLQuery & __query
Definition Session.h:42

◆ refresh()

void HtmlPage::refresh ( Session & session,
const String & strURI,
unsigned int nAfterSecond = 0 ) const

Definition at line 201 of file HtmlPage.cpp.

206{
207 HttpServletContextEx& ctx = session.__ctx;
208
209 ctx.setContentType(L"text/html");
210 Writer& out = ctx.writer();
211 out << L"<html>\r\n<head>\r\n"
212 "<meta http-equiv=\"Refresh\" content=\"" << nAfterSecond << L";";
213
214 out << L" url=" << strURI << L"\">\r\n"
215 "</head>\r\n<body>\r\n";
216}

◆ site()

__DCL_BEGIN_NAMESPACE const SiteContext * HtmlPage::site ( ) const

Definition at line 20 of file HtmlPage.cpp.

21{
23 return __pSite;
24}

Member Data Documentation

◆ __dtUpdate

DateTime HtmlPage::__dtUpdate

Definition at line 38 of file HtmlPage.h.

◆ __nPageID

int HtmlPage::__nPageID

Definition at line 32 of file HtmlPage.h.

◆ __nPermID

int HtmlPage::__nPermID

Definition at line 33 of file HtmlPage.h.

◆ __pSite

const SiteContext* HtmlPage::__pSite
protected

Definition at line 46 of file HtmlPage.h.

◆ __strCharset

String HtmlPage::__strCharset

Definition at line 35 of file HtmlPage.h.

◆ __strDTD

String HtmlPage::__strDTD
protected

Definition at line 43 of file HtmlPage.h.

◆ __strHeadImport

String HtmlPage::__strHeadImport
protected

Definition at line 44 of file HtmlPage.h.

◆ __strLanguage

String HtmlPage::__strLanguage

Definition at line 36 of file HtmlPage.h.

◆ __strPageID

String HtmlPage::__strPageID

Definition at line 31 of file HtmlPage.h.

◆ __strTitle

String HtmlPage::__strTitle

Definition at line 37 of file HtmlPage.h.

◆ __strType

String HtmlPage::__strType

Definition at line 34 of file HtmlPage.h.

◆ __views

HtmlViewPArray HtmlPage::__views
protected

Definition at line 47 of file HtmlPage.h.


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