1*e9cbe144SAndrew Rist /**************************************************************
2*e9cbe144SAndrew Rist  *
3*e9cbe144SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*e9cbe144SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*e9cbe144SAndrew Rist  * distributed with this work for additional information
6*e9cbe144SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*e9cbe144SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*e9cbe144SAndrew Rist  * "License"); you may not use this file except in compliance
9*e9cbe144SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*e9cbe144SAndrew Rist  *
11*e9cbe144SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*e9cbe144SAndrew Rist  *
13*e9cbe144SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*e9cbe144SAndrew Rist  * software distributed under the License is distributed on an
15*e9cbe144SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*e9cbe144SAndrew Rist  * KIND, either express or implied.  See the License for the
17*e9cbe144SAndrew Rist  * specific language governing permissions and limitations
18*e9cbe144SAndrew Rist  * under the License.
19*e9cbe144SAndrew Rist  *
20*e9cbe144SAndrew Rist  *************************************************************/
21*e9cbe144SAndrew Rist 
22*e9cbe144SAndrew Rist 
23cdf0e10cSrcweir #include <stdio.h>
24cdf0e10cSrcweir 
25cdf0e10cSrcweir #include <com/sun/star/lang/IllegalArgumentException.hpp>
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "testlistener.hxx"
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #define U2S(s) OUStringToOString(s, RTL_TEXTENCODING_UTF8).getStr()
30cdf0e10cSrcweir 
31cdf0e10cSrcweir 
32cdf0e10cSrcweir using ::com::sun::star::lang::XMultiServiceFactory;
33cdf0e10cSrcweir using ::com::sun::star::lang::IllegalArgumentException;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir 
36cdf0e10cSrcweir namespace DOM { namespace events
37cdf0e10cSrcweir {
38cdf0e10cSrcweir 
_getInstance(const Reference<XMultiServiceFactory> & rSMgr)39cdf0e10cSrcweir     Reference< XInterface > CTestListener::_getInstance(const Reference< XMultiServiceFactory >& rSMgr)
40cdf0e10cSrcweir     {
41cdf0e10cSrcweir         // XXX
42cdf0e10cSrcweir         // return static_cast< XXPathAPI* >(new CTestListener());
43cdf0e10cSrcweir         return Reference< XInterface >(static_cast<XEventListener*>(new CTestListener(rSMgr)));
44cdf0e10cSrcweir     }
45cdf0e10cSrcweir 
46cdf0e10cSrcweir     const char* CTestListener::aImplementationName = "com.sun.star.comp.xml.dom.events.TestListener";
47cdf0e10cSrcweir     const char* CTestListener::aSupportedServiceNames[] = {
48cdf0e10cSrcweir         "com.sun.star.comp.xml.dom.events.TestListener",
49cdf0e10cSrcweir         NULL
50cdf0e10cSrcweir     };
51cdf0e10cSrcweir 
_getImplementationName()52cdf0e10cSrcweir     OUString CTestListener::_getImplementationName()
53cdf0e10cSrcweir     {
54cdf0e10cSrcweir 	    return OUString::createFromAscii(aImplementationName);
55cdf0e10cSrcweir     }
_getSupportedServiceNames()56cdf0e10cSrcweir     Sequence<OUString> CTestListener::_getSupportedServiceNames()
57cdf0e10cSrcweir     {
58cdf0e10cSrcweir 	    Sequence<OUString> aSequence;
59cdf0e10cSrcweir 	    for (int i=0; aSupportedServiceNames[i]!=NULL; i++) {
60cdf0e10cSrcweir 		    aSequence.realloc(i+1);
61cdf0e10cSrcweir 		    aSequence[i]=(OUString::createFromAscii(aSupportedServiceNames[i]));
62cdf0e10cSrcweir 	    }
63cdf0e10cSrcweir 	    return aSequence;
64cdf0e10cSrcweir     }
65cdf0e10cSrcweir 
getSupportedServiceNames()66cdf0e10cSrcweir     Sequence< OUString > SAL_CALL CTestListener::getSupportedServiceNames()
67cdf0e10cSrcweir         throw (RuntimeException)
68cdf0e10cSrcweir     {
69cdf0e10cSrcweir         return CTestListener::_getSupportedServiceNames();
70cdf0e10cSrcweir     }
71cdf0e10cSrcweir 
getImplementationName()72cdf0e10cSrcweir     OUString SAL_CALL CTestListener::getImplementationName()
73cdf0e10cSrcweir         throw (RuntimeException)
74cdf0e10cSrcweir     {
75cdf0e10cSrcweir         return CTestListener::_getImplementationName();
76cdf0e10cSrcweir     }
77cdf0e10cSrcweir 
supportsService(const OUString & aServiceName)78cdf0e10cSrcweir     sal_Bool SAL_CALL CTestListener::supportsService(const OUString& aServiceName)
79cdf0e10cSrcweir         throw (RuntimeException)
80cdf0e10cSrcweir     {
81cdf0e10cSrcweir         Sequence< OUString > supported = CTestListener::_getSupportedServiceNames();
82cdf0e10cSrcweir         for (sal_Int32 i=0; i<supported.getLength(); i++)
83cdf0e10cSrcweir         {
84cdf0e10cSrcweir             if (supported[i] == aServiceName) return sal_True;
85cdf0e10cSrcweir         }
86cdf0e10cSrcweir         return sal_False;
87cdf0e10cSrcweir     }
88cdf0e10cSrcweir 
89cdf0e10cSrcweir     // --- XInitialize
90cdf0e10cSrcweir 
initialize(const Sequence<Any> & args)91cdf0e10cSrcweir     void SAL_CALL CTestListener::initialize(const Sequence< Any >& args) throw(RuntimeException)
92cdf0e10cSrcweir     {
93cdf0e10cSrcweir         if (args.getLength() < 3) throw IllegalArgumentException(
94cdf0e10cSrcweir             OUString::createFromAscii("Wrong number of arguments"), Reference< XInterface >(), 0);
95cdf0e10cSrcweir 
96cdf0e10cSrcweir         Reference <XEventTarget> aTarget;
97cdf0e10cSrcweir         if(! (args[0] >>= aTarget)) throw IllegalArgumentException(
98cdf0e10cSrcweir                 OUString::createFromAscii("Illegal argument 1"), Reference< XInterface >(), 1);
99cdf0e10cSrcweir 
100cdf0e10cSrcweir         OUString aType;
101cdf0e10cSrcweir         if (! (args[1] >>= aType))
102cdf0e10cSrcweir             throw IllegalArgumentException(OUString::createFromAscii("Illegal argument 2"), Reference< XInterface >(), 2);
103cdf0e10cSrcweir 
104cdf0e10cSrcweir         sal_Bool bCapture = sal_False;
105cdf0e10cSrcweir         if(! (args[2]  >>=  bCapture)) throw IllegalArgumentException(
106cdf0e10cSrcweir             OUString::createFromAscii("Illegal argument 3"), Reference< XInterface >(), 3);
107cdf0e10cSrcweir 
108cdf0e10cSrcweir         if(! (args[3] >>= m_name)) m_name = OUString::createFromAscii("<unnamed listener>");
109cdf0e10cSrcweir 
110cdf0e10cSrcweir         m_target = aTarget;
111cdf0e10cSrcweir         m_type = aType;
112cdf0e10cSrcweir         m_capture = bCapture;
113cdf0e10cSrcweir 
114cdf0e10cSrcweir         m_target->addEventListener(m_type, Reference< XEventListener >(this), m_capture);
115cdf0e10cSrcweir 
116cdf0e10cSrcweir 
117cdf0e10cSrcweir     }
118cdf0e10cSrcweir 
~CTestListener()119cdf0e10cSrcweir     CTestListener::~CTestListener()
120cdf0e10cSrcweir     {
121cdf0e10cSrcweir         fprintf(stderr, "CTestListener::~CTestListener()\n");
122cdf0e10cSrcweir         if( m_target.is())
123cdf0e10cSrcweir             m_target->removeEventListener(m_type, Reference< XEventListener >(this), m_capture);
124cdf0e10cSrcweir     }
125cdf0e10cSrcweir 
126cdf0e10cSrcweir     // --- XEventListener
127cdf0e10cSrcweir 
handleEvent(const Reference<XEvent> & evt)128cdf0e10cSrcweir     void SAL_CALL CTestListener::handleEvent(const Reference< XEvent >& evt) throw (RuntimeException)
129cdf0e10cSrcweir     {
130cdf0e10cSrcweir         FILE* f = fopen("C:\\listener.out", "a");
131cdf0e10cSrcweir         fprintf(f, "CTestListener::handleEvent in %s\n", U2S(m_name));
132cdf0e10cSrcweir         fprintf(f, "    type: %s\n\n", OUStringToOString(evt->getType(), RTL_TEXTENCODING_ASCII_US).getStr());
133cdf0e10cSrcweir         fclose(f);
134cdf0e10cSrcweir 
135cdf0e10cSrcweir     }
136cdf0e10cSrcweir 
137cdf0e10cSrcweir }}
138