source: branches/work_304/doc/DocAllMatchingIdsTable.cpp @ 489

Revision 489, 3.4 KB checked in by jls17, 6 years ago (diff)
  • fixed: in push-field actions with all-matching-id mapping, the source and target forms were switched
Line 
1//Copyright (C) 2014 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 ARInside.  If not, see <http://www.gnu.org/licenses/>.
16
17#include "stdafx.h"
18#include "DocAllMatchingIdsTable.h"
19#include "../ARInside.h"
20
21CDocAllMatchingIdsTable::CDocAllMatchingIdsTable(const string& targetForm, const string& sourceForm, CARServerObject& obj, AllMatchingMode mode, int nAction, IfElseState ifElse, int rootLevel)
22: tableLeftTarget(targetForm), tableRightSource(sourceForm), obj(obj), matchMode(mode), nAction(nAction), ifElse(ifElse), rootLevel(rootLevel)
23{
24}
25
26std::ostream& CDocAllMatchingIdsTable::ToStream(std::ostream &strm)
27{
28        try
29        {
30                CARInside& arIn = *CARInside::GetInstance();
31                CARSchema schema1(tableLeftTarget);
32                CARSchema schema2(tableRightSource);
33
34                CTable tblListField("tblListMatchingIds", "TblObjectList");
35                tblListField.AddColumn(0, "Id");
36                tblListField.AddColumn(0, "Field Name");
37                tblListField.AddColumn(0, "Value");
38
39                if(schema1.Exists() && schema2.Exists())
40                {
41                        int msgIdTarget = -1;
42                        int msgIdValue = -1;
43
44                        switch (matchMode)
45                        {
46                        case AMM_PUSHFIELDS:
47                                msgIdTarget = REFM_PUSHFIELD_TARGET_MATCHING;
48                                msgIdValue  = REFM_PUSHFIELD_VALUE_MATCHING;
49                                break;
50                        case AMM_SETFIELDS:
51                                msgIdTarget = REFM_SETFIELDS_TARGET_MATCHING;
52                                msgIdValue  = REFM_SETFIELDS_VALUE_MATCHING;
53                                break;
54                        }
55
56                        // Reference object for left field
57                        CRefItem refItemField1(obj, ifElse, nAction, msgIdTarget);
58
59                        // Reference object for right field
60                        CRefItem refItemField2(obj, ifElse, nAction, msgIdValue);
61
62                        // scan the fields
63                        unsigned int fieldCount1 = schema1.GetFields()->GetCount();
64                        for(unsigned int fieldIndex1 = 0; fieldIndex1 < fieldCount1; ++fieldIndex1)
65                        {
66                                CARField tmpField1(schema1.GetInsideId(), 0, fieldIndex1);
67
68                                if (tmpField1.GetDataType() <= AR_MAX_STD_DATA_TYPE)
69                                {
70                                        CARField tmpField2(schema2.GetInsideId(), tmpField1.GetFieldId());
71
72                                        if(tmpField2.Exists() && tmpField2.GetDataType() <= AR_MAX_STD_DATA_TYPE)
73                                        {
74                                                // add reference for left field
75                                                arIn.AddFieldReference(schema1.GetInsideId(), tmpField1.GetInsideId(), refItemField1);
76                                               
77                                                // add reference for right field
78                                                arIn.AddFieldReference(schema2.GetInsideId(), tmpField2.GetInsideId(), refItemField2);
79
80                                                //Matching ID
81                                                CTableRow row("cssStdRow");             
82                                                row.AddCell(CTableCell(tmpField1.GetFieldId()));
83                                                row.AddCell(CTableCell(arIn.LinkToField(schema1.GetInsideId(), tmpField1.GetInsideId(), rootLevel)));
84                                                row.AddCell(CTableCell(arIn.LinkToField(schema2.GetInsideId(), tmpField2.GetInsideId(), rootLevel)));
85                                                tblListField.AddRow(row);
86                                        }
87                                }
88                        }
89                }
90
91                strm << tblListField;
92        }
93        catch(exception& e)
94        {
95                cout << "EXCEPTION in AllMatchingIds of " << tableLeftTarget << ", " << tableRightSource << ": " << e.what() << endl;
96        }
97
98        return strm;
99}
Note: See TracBrowser for help on using the repository browser.