source: branches/work_304/doc/DocActionSetFieldsHelper.cpp @ 368

Revision 368, 6.7 KB checked in by jls17, 6 years ago (diff)
  • added support for filterApi calls (input-mapping, output-mapping, creates field-references)
Line 
1//Copyright (C) 2009 John Luthgers | jls17
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 "DocActionSetFieldsHelper.h"
19#include "../core/ARSetFieldHelper.h"
20#include "../core/ARAssignHelper.h"
21
22CDocActionSetFieldsHelper::CDocActionSetFieldsHelper(CARInside &arInside, CARServerObject &arServerObject, const ARSetFieldsActionStruct& sFieldStruct, int structItemType, IfElseState ifElseMode, int numAction)
23: arIn(arInside), obj(arServerObject), setFieldsStruct(sFieldStruct), ifElse(ifElseMode)
24{
25        arStructItemType = structItemType;
26        nAction = numAction;
27}
28
29CDocActionSetFieldsHelper::~CDocActionSetFieldsHelper(void)
30{
31}
32
33void CDocActionSetFieldsHelper::SetFieldsGetSecondaryForm(const string& fromSchema, int rootLevel, stringstream &strmSchema, stringstream &strmSchemaDisplay, stringstream &strmServer, stringstream &strmQual)
34{
35        CARSchema wfSchema(fromSchema);
36        if (wfSchema.Exists())
37        {
38                CARSetFieldHelper sfh(*CARInside::GetInstance(), wfSchema, setFieldsStruct, ifElse, nAction);
39
40                switch (sfh.GetType())
41                {
42                case SFT_CURRENT:
43                        strmServer << arIn.LinkToServerInfo(arIn.appConfig.serverName, rootLevel);
44                        strmSchemaDisplay << "CURRENT SCREEN";
45                        strmSchema << sfh.GetSchemaName();
46                        break;
47                case SFT_SERVER:
48                case SFT_SAMPLEDATA:
49                        {
50                                int pFormId = arIn.SchemaGetInsideId(fromSchema);
51                                int sFormId = -1;
52                                string readServer = sfh.GetServerName();
53                                string readSchema = sfh.GetSchemaName();
54
55                                if (readSchema.compare("@") == 0)
56                                {
57                                        readSchema = fromSchema;
58                                }
59
60                                if (sfh.GetType() == SFT_SAMPLEDATA)
61                                {
62                                        int fieldId = sfh.GetServerFieldId();
63                                        strmServer << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn.LinkToField(fromSchema, fieldId, rootLevel)) << "$ (Sample Server: " << arIn.LinkToServerInfo(readServer, rootLevel) << ")";
64
65                                        CRefItem refItemServer(obj, ifElse, nAction, REFM_SETFIELDS_SERVER);
66                                        arIn.AddFieldReference(pFormId, fieldId, refItemServer);
67
68                                        fieldId = sfh.GetSchemaFieldId();
69                                        strmSchemaDisplay << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn.LinkToField(fromSchema, fieldId, rootLevel)) << "$ (Sample Form: " << arIn.LinkToSchema(readSchema, rootLevel) << ")";
70                                        strmSchema << readSchema;
71
72                                        CRefItem refItemForm(obj, ifElse, nAction, REFM_SETFIELDS_FORM);
73                                        arIn.AddFieldReference(pFormId, fieldId, refItemForm);
74                                }
75                                else
76                                {
77                                        strmServer << arIn.LinkToServerInfo(readServer, rootLevel);
78
79                                        strmSchemaDisplay << readSchema;
80                                        strmSchema << readSchema;
81                                }
82
83                                // *************************************************************************
84
85                                sFormId = arIn.SchemaGetInsideId(readSchema);
86
87                                strmQual << "<br/>Set Field If<br/>" << endl;
88                                stringstream strmTmpQual;
89                                CRefItem refItem(obj, ifElse, nAction, REFM_SETFIELDS_QUALIFICATION);
90
91                                CARQualification arQual(arIn);
92                                arQual.arsStructItemType = arStructItemType;
93                                arQual.CheckQuery(sfh.GetQualifier(), refItem, 0, pFormId, sFormId, strmTmpQual, rootLevel);
94
95                                if(strmTmpQual.str().length() > 0)
96                                {
97                                        strmQual << strmTmpQual.str() << "<br/><br/>" << endl;
98                                }
99                                else
100                                {
101                                        strmQual << EmptyValue << "<br/><br/>" << endl;
102                                }
103
104                                strmQual << "If No Requests Match: " << CAREnum::NoMatchRequest(sfh.GetNoMatchOption()) << "<br/>" << endl;
105                                strmQual << "If Multiple Requests Match: " << CAREnum::MultiMatchRequest(sfh.GetMultiMatchOption()) << "<br/><br/>" << endl;
106                        }
107                        break;
108                case SFT_SQL:
109                        {
110                                strmServer << arIn.LinkToServerInfo(sfh.GetServerName(), rootLevel);
111                                strmSchema << AR_ASSIGN_SQL_SCHEMA_NAME;
112                                strmSchemaDisplay << "SQL";
113
114                                strmQual << "<br/>SQL command<br/>" << endl;
115
116                                if(!sfh.GetSqlCommand().empty())
117                                {
118                                        CRefItem refItem(obj, ifElse, nAction, REFM_SETFIELDS_SQL_QUALIFICATION);
119                                        strmQual << arIn.TextFindFields(sfh.GetSqlCommand(), "$", arIn.SchemaGetInsideId(fromSchema), rootLevel, true, &refItem) << "<br/><br/>" << endl;
120                                }
121                                else
122                                        strmQual << EmptyValue << "<br/><br/>" << endl;
123
124                                strmQual << "If No Requests Match: " << CAREnum::NoMatchRequest(sfh.GetNoMatchOption()) << "<br/>" << endl;
125                                strmQual << "If Multiple Requests Match: " << CAREnum::MultiMatchRequest(sfh.GetMultiMatchOption()) << "<br/><br/>" << endl;   
126                        }
127                        break;
128                case SFT_FILTERAPI:
129                        {
130                                string schemaName = sfh.GetSchemaName();
131                                strmSchema << sfh.GetSchemaName();
132
133                                if (schemaName.substr(0, 1) == "$")
134                                {
135                                        CRefItem refItem(obj, ifElse, nAction, REFM_SETFIELDS_FILTERAPI_PLUGINNAME);
136                                        schemaName = arIn.TextFindFields(sfh.GetSchemaName(), "$", arIn.SchemaGetInsideId(fromSchema), rootLevel, true, &refItem);
137                                }
138
139                                // the html-documtation for this action is generated directly here
140                                strmSchemaDisplay << "FILTER API<br/>";
141                                strmSchemaDisplay << "Plugin-Name: " << schemaName << "<br/><br/>" << endl;
142
143                                strmSchemaDisplay << "Input-Mapping: " << "<br/>";
144                                CARAssignHelper docInput(arIn, rootLevel, obj, fromSchema, fromSchema);
145                                strmSchemaDisplay << docInput.FilterApiInputAssignment(sfh.GetFilterAPIInputs(), sfh.GetFilterAPINumItems(), nAction, ifElse);
146
147                                strmSchemaDisplay << "Output-Mapping: " << "<br/>";
148                                CARAssignHelper assignHelper(arIn, rootLevel, obj, fromSchema, fromSchema);
149                                strmSchemaDisplay << assignHelper.SetFieldsAssignment(setFieldsStruct, nAction, ifElse);
150                        }
151                        break;
152                case SFT_WEBSERVICE:
153                case SFT_ATRIUM_ORCHESTRATOR:
154                        {
155                                // TODO: implement documenting of filter-api actions correctly
156                                // normally we should set assignSchemaDisplay to "FILTER API" but CDocFilterActionStruct checks
157                                // for "ARSYS.ARF.WEBSERVICE". To avoid breaking this implementation we leave it as it is until
158                                // there is enough time to re-work both (filter api & webservices) at the same time.
159                                //
160                                // Note: serviceName can hold a fieldId which is used to read the plugin-name from. add a
161                                // reference tho this field later.
162                                strmServer << arIn.LinkToServerInfo(AR_CURRENT_SERVER_TAG, rootLevel);
163                                strmSchema << sfh.GetSchemaName();
164                                strmSchemaDisplay << sfh.GetSchemaName();
165                        }
166                        break;
167                }
168        }
169}
Note: See TracBrowser for help on using the repository browser.