1*b4a4f18cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*b4a4f18cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*b4a4f18cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*b4a4f18cSAndrew Rist  * distributed with this work for additional information
6*b4a4f18cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*b4a4f18cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*b4a4f18cSAndrew Rist  * "License"); you may not use this file except in compliance
9*b4a4f18cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*b4a4f18cSAndrew Rist  *
11*b4a4f18cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*b4a4f18cSAndrew Rist  *
13*b4a4f18cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*b4a4f18cSAndrew Rist  * software distributed under the License is distributed on an
15*b4a4f18cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b4a4f18cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*b4a4f18cSAndrew Rist  * specific language governing permissions and limitations
18*b4a4f18cSAndrew Rist  * under the License.
19*b4a4f18cSAndrew Rist  *
20*b4a4f18cSAndrew Rist  *************************************************************/
21*b4a4f18cSAndrew Rist 
22*b4a4f18cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include <stdio.h>
25cdf0e10cSrcweir #include <resourcemodel/XPathLogger.hxx>
26cdf0e10cSrcweir 
27cdf0e10cSrcweir namespace writerfilter
28cdf0e10cSrcweir {
XPathLogger()29cdf0e10cSrcweir XPathLogger::XPathLogger()
30cdf0e10cSrcweir : mp_tokenMap(new TokenMap_t)
31cdf0e10cSrcweir {
32cdf0e10cSrcweir }
33cdf0e10cSrcweir 
~XPathLogger()34cdf0e10cSrcweir XPathLogger::~XPathLogger()
35cdf0e10cSrcweir {
36cdf0e10cSrcweir }
37cdf0e10cSrcweir 
getXPath() const38cdf0e10cSrcweir string XPathLogger::getXPath() const
39cdf0e10cSrcweir {
40cdf0e10cSrcweir     return m_currentPath;
41cdf0e10cSrcweir }
42cdf0e10cSrcweir 
updateCurrentPath()43cdf0e10cSrcweir void XPathLogger::updateCurrentPath()
44cdf0e10cSrcweir {
45cdf0e10cSrcweir     m_currentPath = "";
46cdf0e10cSrcweir 
47cdf0e10cSrcweir     for (vector<string>::const_iterator aIt = m_path.begin();
48cdf0e10cSrcweir          aIt != m_path.end();
49cdf0e10cSrcweir          aIt++)
50cdf0e10cSrcweir     {
51cdf0e10cSrcweir         if (m_currentPath.size() > 0)
52cdf0e10cSrcweir             m_currentPath += "/";
53cdf0e10cSrcweir 
54cdf0e10cSrcweir         m_currentPath += *aIt;
55cdf0e10cSrcweir     }
56cdf0e10cSrcweir }
57cdf0e10cSrcweir 
startElement(string _token)58cdf0e10cSrcweir void XPathLogger::startElement(string _token)
59cdf0e10cSrcweir {
60cdf0e10cSrcweir     TokenMap_t::const_iterator aIt = mp_tokenMap->find(_token);
61cdf0e10cSrcweir 
62cdf0e10cSrcweir     if (aIt == mp_tokenMap->end())
63cdf0e10cSrcweir         (*mp_tokenMap)[_token] = 1;
64cdf0e10cSrcweir     else
65cdf0e10cSrcweir         (*mp_tokenMap)[_token]++;
66cdf0e10cSrcweir 
67cdf0e10cSrcweir     static char sBuffer[256];
68cdf0e10cSrcweir     snprintf(sBuffer, sizeof(sBuffer), "[%d]", (*mp_tokenMap)[_token]);
69cdf0e10cSrcweir     m_path.push_back(_token + sBuffer);
70cdf0e10cSrcweir 
71cdf0e10cSrcweir     m_tokenMapStack.push(mp_tokenMap);
72cdf0e10cSrcweir     mp_tokenMap.reset(new TokenMap_t);
73cdf0e10cSrcweir 
74cdf0e10cSrcweir     updateCurrentPath();
75cdf0e10cSrcweir }
76cdf0e10cSrcweir 
endElement()77cdf0e10cSrcweir void XPathLogger::endElement()
78cdf0e10cSrcweir {
79cdf0e10cSrcweir     mp_tokenMap = m_tokenMapStack.top();
80cdf0e10cSrcweir     m_tokenMapStack.pop();
81cdf0e10cSrcweir     m_path.pop_back();
82cdf0e10cSrcweir 
83cdf0e10cSrcweir     updateCurrentPath();
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir }
87