source: branches/work_304/doc/DocFilterDetails.cpp @ 405

Revision 405, 8.2 KB checked in by jls17, 6 years ago (diff)
  • changed some of the still existent calls to CARInside::GetSchemaInsideId? and replaced them by lookups via CARSchema
Line 
1//Copyright (C) 2009 Stefan Nerlich | stefan.nerlich@hotmail.com
2//
3//This file is part of ARInside.
4//
5//    ARInside is free software: you can redistribute it and/or modify
6//    it under the terms of the GNU General Public License as published by
7//    the Free Software Foundation, version 2 of the License.
8//
9//    ARInside is distributed in the hope that it will be useful,
10//    but WITHOUT ANY WARRANTY; without even the implied warranty of
11//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12//    GNU General Public License for more details.
13//
14//    You should have received a copy of the GNU General Public License
15//    along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
16
17#include "stdafx.h"
18#include "DocFilterDetails.h"
19#include "DocOverlayHelper.h"
20
21CDocFilterDetails::CDocFilterDetails(unsigned int filterInsideId)
22: filter(filterInsideId)
23{       
24}
25
26CDocFilterDetails::~CDocFilterDetails(void)
27{
28}
29
30void CDocFilterDetails::Documentation()
31{       
32        CPageParams file(PAGE_DETAILS, &filter);
33        this->rootLevel = file->GetRootLevel();
34        this->path = file->GetPath();
35
36        try
37        {
38                FileSystemUtil fsUtil(this->pInside->appConfig);
39                if(fsUtil.CreateSubDirectory(this->path)>=0)
40                {
41                        stringstream pgStream;
42                        CWebPage webPage(file->GetFileName(), filter.GetName(), this->rootLevel, this->pInside->appConfig);
43                        CDocOverlayHelper overlayHelper(filter, rootLevel);
44
45                        //ContentHead informations
46                        stringstream strmHead;
47                        strmHead.str("");
48                        int overlayType = this->filter.GetOverlayType();
49
50                        strmHead << CWebUtil::LinkToFilterIndex(this->rootLevel) << MenuSeparator << CWebUtil::ObjName(filter.GetName()) << CAREnum::GetOverlayTypeString(overlayType);
51
52                        if(!filter.GetAppRefName().empty())
53                                strmHead << MenuSeparator << " Application " << this->pInside->LinkToContainer(filter.GetAppRefName(), this->rootLevel);
54
55                        webPage.AddContentHead(strmHead.str(), overlayHelper.PlaceOverlayLink());
56                        webPage.AddContent(overlayHelper.PlaceOverlaidNotice());
57
58                        //Filter Properties
59                        stringstream strmTmp;
60                        CTable tblObjProp("objProperties", "TblObjectList");
61                        tblObjProp.AddColumn(30, "Property");   
62                        tblObjProp.AddColumn(70, "Value");
63
64                        //Status
65                        CTableRow tblRow("");
66                        tblRow.AddCellList(CTableCell("Status"), CTableCell(CAREnum::ObjectEnable(filter.GetEnabled())));
67                        tblObjProp.AddRow(tblRow);
68
69                        //Execution Order               
70                        strmTmp << filter.GetOrder();
71                        tblRow.AddCellList(CTableCell("Execution Order"), CTableCell(strmTmp.str()));
72                        tblObjProp.AddRow(tblRow);
73
74                        //Execute On
75                        tblRow.AddCellList(CTableCell("Execute On"), CTableCell(filter.GetExecuteOn()));
76                        tblObjProp.AddRow(tblRow);
77
78                        // Error Handler
79                        strmTmp.str("");
80                        if (filter.GetErrorOption() == AR_FILTER_ERRHANDLER_ENABLE)
81                        {
82                                strmTmp << pInside->LinkToFilter(filter.GetErrorHandler(), rootLevel);
83                        }
84                        else 
85                        {
86                                strmTmp << "None";
87                        }
88                        tblRow.AddCellList(CTableCell("Error Handler"), strmTmp.str());
89                        tblObjProp.AddRow(tblRow);
90
91                        //Workflow
92                        const ARWorkflowConnectStruct &schemas = filter.GetSchemaList();
93
94                        if(schemas.u.schemaList->numItems > 0)
95                        {               
96                                for(unsigned int i=0; i< schemas.u.schemaList->numItems; i++)
97                                {
98                                        //Workflowlink to each page     
99                                        tblRow.AddCellList(
100                                                CTableCell(this->pInside->LinkToSchema(schemas.u.schemaList->nameList[i], rootLevel)), 
101                                                CTableCell(this->CreateSpecific(schemas.u.schemaList->nameList[i]))
102                                        );
103                                       
104                                        tblObjProp.AddRow(tblRow);
105                                }
106                        }
107                        else // Filter is not related to any form
108                        {
109                                tblRow.AddCellList(CTableCell("No schema specified"), CTableCell(this->CreateSpecific("")));
110                                tblObjProp.AddRow(tblRow);
111                        }       
112
113                        //Filter used in container?
114                        tblRow.AddCellList(CTableCell("Container References"), CTableCell(this->ContainerReferences()));
115                        tblObjProp.AddRow(tblRow);             
116
117                        //Table description
118                        stringstream tblDesc;
119                        tblDesc << CWebUtil::ImageTag("doc.gif", rootLevel) << "Filter Properties";
120                        tblObjProp.description = tblDesc.str();
121
122                        //Add table to page
123                        webPage.AddContent(tblObjProp.ToXHtml());
124                        tblObjProp.Clear();
125
126                        //Properties
127                        webPage.AddContent(CARProplistHelper::GetList(filter.GetPropList()));
128
129                        // Workflow References
130                        webPage.AddContent(this->WorkflowReferences());
131
132                        //History
133                        webPage.AddContent(this->pInside->ServerObjectHistory(&this->filter, this->rootLevel));
134                        webPage.SaveInFolder(this->path);
135                }
136        }
137        catch(exception& e)
138        {
139                cout << "EXCEPTION filter details common props of '" << filter.GetName() << "': " << e.what() << endl;
140        }
141}
142
143string CDocFilterDetails::ContainerReferences()
144{
145        stringstream strm;
146        strm.str("");
147        try
148        {
149                CContainerTable contTable(*this->pInside);
150
151                unsigned int cntCount = this->pInside->containerList.GetCount();
152                for ( unsigned int cntIndex = 0; cntIndex < cntCount; ++cntIndex )
153                {
154                        CARContainer cont(cntIndex);
155                       
156                        if (pInside->appConfig.bOverlaySupport && !IsVisibleObject(cont))
157                                continue;
158
159                        if(cont.GetType() != ARCON_APP)
160                        {
161                                const ARReferenceList& refs = cont.GetReferences();
162                                for(unsigned int nCnt = 0; nCnt < refs.numItems; nCnt++)
163                                {
164                                        if(refs.referenceList[nCnt].type == ARREF_FILTER)
165                                        {
166                                                if(refs.referenceList[nCnt].reference.u.name != NULL && 
167                                                         refs.referenceList[nCnt].reference.u.name == filter.GetName())
168                                                {
169                                                        contTable.AddRow(cont, rootLevel);
170                                                }
171                                        }
172                                }
173                        }
174                }               
175
176                strm << contTable;
177        }
178        catch(exception& e)
179        {
180                cout << "EXCEPTION enumerating filter container references of '" << this->filter.GetName() << "': " << e.what() << endl;
181        }
182
183        return strm.str();
184}
185
186string CDocFilterDetails::CreateSpecific(string schemaName)
187{
188        stringstream pgStrm;
189        pgStrm.str("");
190
191        try
192        {
193                //Query
194                stringstream strmQuery;
195                if(this->filter.GetRunIf().operation != 0)
196                {               
197                        CRefItem refItem(this->filter, REFM_RUNIF);
198                        CARQualification arQual(*this->pInside);
199                        CARSchema wfSchema(schemaName);
200
201                        arQual.CheckQuery(&this->filter.GetRunIf(), refItem, 0, wfSchema.GetInsideId(), wfSchema.GetInsideId(), strmQuery, rootLevel);
202                }
203                else
204                {
205                        strmQuery << EmptyRunIf << endl;
206                }
207
208                pgStrm << "Run If Qualification: <br/>" << strmQuery.str();
209
210                //If-Actions           
211                CDocFilterActionStruct actionStruct(*this->pInside, this->filter, schemaName, this->rootLevel, AR_STRUCT_ITEM_XML_FILTER);
212                pgStrm << actionStruct.Get(IES_IF, this->filter.GetIfActions());
213
214                //Else-Actions
215                pgStrm << actionStruct.Get(IES_ELSE, this->filter.GetElseActions());
216        }
217        catch(exception& e)
218        {
219                cout << "EXCEPTION filter specific props of '" << this->filter.GetName() << "': " << e.what() << endl;
220        }
221
222        return pgStrm.str();
223}
224
225string CDocFilterDetails::WorkflowReferences()
226{
227        unsigned int refCount = 0; 
228        stringstream strm;
229        strm.str("");
230
231        try
232        {
233                //create table for workflow references
234                CTable tblRef("referenceList", "TblObjectList");
235                tblRef.AddColumn(10, "Type");
236                tblRef.AddColumn(45, "Server object");
237                tblRef.AddColumn(5, "Enabled");
238                tblRef.AddColumn(40, "Description");
239
240                // output error handler callers here
241                vector<unsigned int>::iterator curIt = this->filter.ErrorCallers().begin();
242                vector<unsigned int>::iterator endIt = this->filter.ErrorCallers().end();
243                for ( ; curIt != endIt; ++curIt)
244                {
245                        CARFilter flt(*curIt);
246
247                        CTableRow row("cssStdRow");
248                        row.AddCell(CAREnum::XmlStructItem(AR_STRUCT_ITEM_XML_FILTER));
249                        row.AddCell(pInside->LinkToFilterRef(&flt, rootLevel));
250
251                        string tmpEnabled = this->pInside->XmlObjEnabled(&flt);
252                        string tmpCssEnabled = "";
253
254                        if(strcmp(tmpEnabled.c_str(), "Disabled")==0)
255                                tmpCssEnabled = "objStatusDisabled";
256
257                        row.AddCell(CTableCell(tmpEnabled, tmpCssEnabled));
258                        row.AddCell("Selected as Error Handler");                               
259                        tblRef.AddRow(row);
260                        refCount++;
261                }
262                       
263                // output table on if references exists
264                if (refCount > 0)
265                {
266                        stringstream tblDesc;
267                        tblDesc << CWebUtil::ImageTag("doc.gif", rootLevel) << "Workflow Reference:";
268
269                        tblRef.description = tblDesc.str();
270
271                        strm << tblRef;
272                }
273        }
274        catch (...)
275        {
276                cout << "EXCEPTION enumerating workflow references for filter: " << this->filter.GetName() << endl;
277        }
278
279        return strm.str();
280}
281
Note: See TracBrowser for help on using the repository browser.