source: branches/work_303/doc/DocActionSetFieldsHelper.cpp @ 250

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