1*ae77b8caSAriel Constenla-Haile /************************************************************** 2*ae77b8caSAriel Constenla-Haile * 3*ae77b8caSAriel Constenla-Haile * Licensed to the Apache Software Foundation (ASF) under one 4*ae77b8caSAriel Constenla-Haile * or more contributor license agreements. See the NOTICE file 5*ae77b8caSAriel Constenla-Haile * distributed with this work for additional information 6*ae77b8caSAriel Constenla-Haile * regarding copyright ownership. The ASF licenses this file 7*ae77b8caSAriel Constenla-Haile * to you under the Apache License, Version 2.0 (the 8*ae77b8caSAriel Constenla-Haile * "License"); you may not use this file except in compliance 9*ae77b8caSAriel Constenla-Haile * with the License. You may obtain a copy of the License at 10*ae77b8caSAriel Constenla-Haile * 11*ae77b8caSAriel Constenla-Haile * http://www.apache.org/licenses/LICENSE-2.0 12*ae77b8caSAriel Constenla-Haile * 13*ae77b8caSAriel Constenla-Haile * Unless required by applicable law or agreed to in writing, 14*ae77b8caSAriel Constenla-Haile * software distributed under the License is distributed on an 15*ae77b8caSAriel Constenla-Haile * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ae77b8caSAriel Constenla-Haile * KIND, either express or implied. See the License for the 17*ae77b8caSAriel Constenla-Haile * specific language governing permissions and limitations 18*ae77b8caSAriel Constenla-Haile * under the License. 19*ae77b8caSAriel Constenla-Haile * 20*ae77b8caSAriel Constenla-Haile *************************************************************/ 21*ae77b8caSAriel Constenla-Haile 22*ae77b8caSAriel Constenla-Haile // MARKER(update_precomp.py): autogen include statement, do not remove 23*ae77b8caSAriel Constenla-Haile #include "precompiled_shell.hxx" 24*ae77b8caSAriel Constenla-Haile 25*ae77b8caSAriel Constenla-Haile #include "syscmdmail.hxx" 26*ae77b8caSAriel Constenla-Haile #include "cmdmailmsg.hxx" 27*ae77b8caSAriel Constenla-Haile 28*ae77b8caSAriel Constenla-Haile #include <com/sun/star/system/MailClientFlags.hpp> 29*ae77b8caSAriel Constenla-Haile #include <com/sun/star/container/XNameAccess.hpp> 30*ae77b8caSAriel Constenla-Haile #include <com/sun/star/beans/PropertyValue.hpp> 31*ae77b8caSAriel Constenla-Haile #include <com/sun/star/beans/XPropertySet.hpp> 32*ae77b8caSAriel Constenla-Haile 33*ae77b8caSAriel Constenla-Haile #include <osl/file.hxx> 34*ae77b8caSAriel Constenla-Haile #include <osl/thread.hxx> 35*ae77b8caSAriel Constenla-Haile #include <rtl/bootstrap.hxx> 36*ae77b8caSAriel Constenla-Haile #include <rtl/strbuf.hxx> 37*ae77b8caSAriel Constenla-Haile 38*ae77b8caSAriel Constenla-Haile #include <unistd.h> 39*ae77b8caSAriel Constenla-Haile 40*ae77b8caSAriel Constenla-Haile using com::sun::star::beans::PropertyValue; 41*ae77b8caSAriel Constenla-Haile using com::sun::star::container::XNameAccess; 42*ae77b8caSAriel Constenla-Haile using com::sun::star::system::XMailClient; 43*ae77b8caSAriel Constenla-Haile using com::sun::star::system::XMailMessage; 44*ae77b8caSAriel Constenla-Haile using rtl::OString; 45*ae77b8caSAriel Constenla-Haile using rtl::OStringBuffer; 46*ae77b8caSAriel Constenla-Haile using rtl::OUString; 47*ae77b8caSAriel Constenla-Haile using rtl::OUStringToOString; 48*ae77b8caSAriel Constenla-Haile 49*ae77b8caSAriel Constenla-Haile using namespace com::sun::star::lang; 50*ae77b8caSAriel Constenla-Haile using namespace com::sun::star::system::MailClientFlags; 51*ae77b8caSAriel Constenla-Haile using namespace com::sun::star::uno; 52*ae77b8caSAriel Constenla-Haile 53*ae77b8caSAriel Constenla-Haile #define COMP_SERVICE_NAME "com.sun.star.system.SystemMailProvider" 54*ae77b8caSAriel Constenla-Haile #define COMP_IMPL_NAME "com.sun.star.comp.system.unx.SystemMailProvider" 55*ae77b8caSAriel Constenla-Haile 56*ae77b8caSAriel Constenla-Haile namespace shell 57*ae77b8caSAriel Constenla-Haile { 58*ae77b8caSAriel Constenla-Haile 59*ae77b8caSAriel Constenla-Haile namespace 60*ae77b8caSAriel Constenla-Haile { 61*ae77b8caSAriel Constenla-Haile static void escapeDoubleQuotes( OStringBuffer &rBuffer, 62*ae77b8caSAriel Constenla-Haile const OUString &ustr, 63*ae77b8caSAriel Constenla-Haile rtl_TextEncoding iEncoding ) 64*ae77b8caSAriel Constenla-Haile { 65*ae77b8caSAriel Constenla-Haile const OString rStr( OUStringToOString( ustr, iEncoding ) ); 66*ae77b8caSAriel Constenla-Haile sal_Int32 nIndex = rStr.indexOf('"'); 67*ae77b8caSAriel Constenla-Haile if ( nIndex == -1 ) 68*ae77b8caSAriel Constenla-Haile rBuffer.append( rStr ); 69*ae77b8caSAriel Constenla-Haile else 70*ae77b8caSAriel Constenla-Haile { 71*ae77b8caSAriel Constenla-Haile const sal_Char *pStart = rStr.getStr(); 72*ae77b8caSAriel Constenla-Haile const sal_Char *pFrom = pStart; 73*ae77b8caSAriel Constenla-Haile const sal_Int32 nLen = rStr.getLength(); 74*ae77b8caSAriel Constenla-Haile sal_Int32 nPrev = 0;; 75*ae77b8caSAriel Constenla-Haile do 76*ae77b8caSAriel Constenla-Haile { 77*ae77b8caSAriel Constenla-Haile rBuffer.append( pFrom, nIndex - nPrev ); 78*ae77b8caSAriel Constenla-Haile rBuffer.append( RTL_CONSTASCII_STRINGPARAM( "\\\"" ) ); 79*ae77b8caSAriel Constenla-Haile nIndex++; 80*ae77b8caSAriel Constenla-Haile pFrom = pStart + nIndex; 81*ae77b8caSAriel Constenla-Haile nPrev = nIndex; 82*ae77b8caSAriel Constenla-Haile } 83*ae77b8caSAriel Constenla-Haile while ( ( nIndex = rStr.indexOf( '"' , nIndex ) ) != -1 ); 84*ae77b8caSAriel Constenla-Haile 85*ae77b8caSAriel Constenla-Haile rBuffer.append( pFrom, nLen - nPrev ); 86*ae77b8caSAriel Constenla-Haile } 87*ae77b8caSAriel Constenla-Haile } 88*ae77b8caSAriel Constenla-Haile } 89*ae77b8caSAriel Constenla-Haile 90*ae77b8caSAriel Constenla-Haile SystemCommandMail::SystemCommandMail( 91*ae77b8caSAriel Constenla-Haile const Reference< XComponentContext >& xContext ) 92*ae77b8caSAriel Constenla-Haile : SystemCommandMail_Base( m_aMutex ) 93*ae77b8caSAriel Constenla-Haile , m_xContext( xContext ) 94*ae77b8caSAriel Constenla-Haile { 95*ae77b8caSAriel Constenla-Haile try 96*ae77b8caSAriel Constenla-Haile { 97*ae77b8caSAriel Constenla-Haile m_xConfigurationProvider.set( 98*ae77b8caSAriel Constenla-Haile m_xContext->getServiceManager()->createInstanceWithContext( 99*ae77b8caSAriel Constenla-Haile OUString( RTL_CONSTASCII_USTRINGPARAM( 100*ae77b8caSAriel Constenla-Haile "com.sun.star.configuration.ConfigurationProvider") ), 101*ae77b8caSAriel Constenla-Haile m_xContext ), 102*ae77b8caSAriel Constenla-Haile UNO_QUERY ); 103*ae77b8caSAriel Constenla-Haile } 104*ae77b8caSAriel Constenla-Haile catch(...){} 105*ae77b8caSAriel Constenla-Haile } 106*ae77b8caSAriel Constenla-Haile 107*ae77b8caSAriel Constenla-Haile SystemCommandMail::~SystemCommandMail() 108*ae77b8caSAriel Constenla-Haile { 109*ae77b8caSAriel Constenla-Haile m_xConfigurationProvider.clear(); 110*ae77b8caSAriel Constenla-Haile m_xContext.clear(); 111*ae77b8caSAriel Constenla-Haile } 112*ae77b8caSAriel Constenla-Haile 113*ae77b8caSAriel Constenla-Haile Reference< XMailClient > SAL_CALL 114*ae77b8caSAriel Constenla-Haile SystemCommandMail::queryMailClient() 115*ae77b8caSAriel Constenla-Haile throw ( RuntimeException ) 116*ae77b8caSAriel Constenla-Haile { 117*ae77b8caSAriel Constenla-Haile return Reference< XMailClient >( 118*ae77b8caSAriel Constenla-Haile static_cast < cppu::OWeakObject * >( this ), UNO_QUERY ); 119*ae77b8caSAriel Constenla-Haile } 120*ae77b8caSAriel Constenla-Haile 121*ae77b8caSAriel Constenla-Haile 122*ae77b8caSAriel Constenla-Haile Reference< XMailMessage > SAL_CALL 123*ae77b8caSAriel Constenla-Haile SystemCommandMail::createMailMessage() 124*ae77b8caSAriel Constenla-Haile throw ( RuntimeException ) 125*ae77b8caSAriel Constenla-Haile { 126*ae77b8caSAriel Constenla-Haile return Reference< XMailMessage >( 127*ae77b8caSAriel Constenla-Haile static_cast< cppu::OWeakObject *>( 128*ae77b8caSAriel Constenla-Haile new CmdMailMsg() ), 129*ae77b8caSAriel Constenla-Haile UNO_QUERY ); 130*ae77b8caSAriel Constenla-Haile } 131*ae77b8caSAriel Constenla-Haile 132*ae77b8caSAriel Constenla-Haile 133*ae77b8caSAriel Constenla-Haile void SAL_CALL 134*ae77b8caSAriel Constenla-Haile SystemCommandMail::sendMailMessage( 135*ae77b8caSAriel Constenla-Haile const Reference< XMailMessage >& xMailMessage, 136*ae77b8caSAriel Constenla-Haile sal_Int32 /*aFlag*/ ) 137*ae77b8caSAriel Constenla-Haile throw (IllegalArgumentException, Exception, RuntimeException) 138*ae77b8caSAriel Constenla-Haile { 139*ae77b8caSAriel Constenla-Haile osl::ClearableMutexGuard aGuard( m_aMutex ); 140*ae77b8caSAriel Constenla-Haile Reference< XMultiServiceFactory > xConfigurationProvider = m_xConfigurationProvider; 141*ae77b8caSAriel Constenla-Haile aGuard.clear(); 142*ae77b8caSAriel Constenla-Haile 143*ae77b8caSAriel Constenla-Haile if ( ! xMailMessage.is() ) 144*ae77b8caSAriel Constenla-Haile { 145*ae77b8caSAriel Constenla-Haile throw IllegalArgumentException( 146*ae77b8caSAriel Constenla-Haile OUString(RTL_CONSTASCII_USTRINGPARAM( "No message specified" )), 147*ae77b8caSAriel Constenla-Haile static_cast < XMailClient * > (this), 1 ); 148*ae77b8caSAriel Constenla-Haile } 149*ae77b8caSAriel Constenla-Haile 150*ae77b8caSAriel Constenla-Haile if( ! xConfigurationProvider.is() ) 151*ae77b8caSAriel Constenla-Haile { 152*ae77b8caSAriel Constenla-Haile throw Exception( 153*ae77b8caSAriel Constenla-Haile OUString(RTL_CONSTASCII_USTRINGPARAM( "Can not access configuration" )), 154*ae77b8caSAriel Constenla-Haile static_cast < XMailClient * > (this) ); 155*ae77b8caSAriel Constenla-Haile } 156*ae77b8caSAriel Constenla-Haile 157*ae77b8caSAriel Constenla-Haile OStringBuffer aBuffer; 158*ae77b8caSAriel Constenla-Haile aBuffer.append("\""); 159*ae77b8caSAriel Constenla-Haile 160*ae77b8caSAriel Constenla-Haile OUString aProgramURL(RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/program/senddoc")); 161*ae77b8caSAriel Constenla-Haile rtl::Bootstrap::expandMacros(aProgramURL); 162*ae77b8caSAriel Constenla-Haile OUString aProgram; 163*ae77b8caSAriel Constenla-Haile if ( osl::FileBase::E_None != osl::FileBase::getSystemPathFromFileURL(aProgramURL, aProgram)) 164*ae77b8caSAriel Constenla-Haile { 165*ae77b8caSAriel Constenla-Haile throw Exception( 166*ae77b8caSAriel Constenla-Haile OUString(RTL_CONSTASCII_USTRINGPARAM("Cound not convert executable path")), 167*ae77b8caSAriel Constenla-Haile static_cast < XMailClient * > (this)); 168*ae77b8caSAriel Constenla-Haile } 169*ae77b8caSAriel Constenla-Haile 170*ae77b8caSAriel Constenla-Haile const rtl_TextEncoding iEncoding = osl_getThreadTextEncoding(); 171*ae77b8caSAriel Constenla-Haile aBuffer.append(OUStringToOString(aProgram, iEncoding)); 172*ae77b8caSAriel Constenla-Haile aBuffer.append("\" "); 173*ae77b8caSAriel Constenla-Haile 174*ae77b8caSAriel Constenla-Haile try 175*ae77b8caSAriel Constenla-Haile { 176*ae77b8caSAriel Constenla-Haile // Query XNameAccess interface of the org.openoffice.Office.Common/ExternalMailer 177*ae77b8caSAriel Constenla-Haile // configuration node to retriece the users preferred email application. This may 178*ae77b8caSAriel Constenla-Haile // transparently by redirected to e.g. the corresponding GConf setting in GNOME. 179*ae77b8caSAriel Constenla-Haile OUString aConfigRoot = OUString( 180*ae77b8caSAriel Constenla-Haile RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/ExternalMailer" ) ); 181*ae77b8caSAriel Constenla-Haile 182*ae77b8caSAriel Constenla-Haile PropertyValue aProperty; 183*ae77b8caSAriel Constenla-Haile aProperty.Name = OUString( RTL_CONSTASCII_USTRINGPARAM("nodepath" )); 184*ae77b8caSAriel Constenla-Haile aProperty.Value = makeAny( aConfigRoot ); 185*ae77b8caSAriel Constenla-Haile 186*ae77b8caSAriel Constenla-Haile Sequence< Any > aArgumentList( 1 ); 187*ae77b8caSAriel Constenla-Haile aArgumentList[0] = makeAny( aProperty ); 188*ae77b8caSAriel Constenla-Haile 189*ae77b8caSAriel Constenla-Haile Reference< XNameAccess > xNameAccess = 190*ae77b8caSAriel Constenla-Haile Reference< XNameAccess > ( 191*ae77b8caSAriel Constenla-Haile xConfigurationProvider->createInstanceWithArguments( 192*ae77b8caSAriel Constenla-Haile OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationAccess" )), 193*ae77b8caSAriel Constenla-Haile aArgumentList ), 194*ae77b8caSAriel Constenla-Haile UNO_QUERY ); 195*ae77b8caSAriel Constenla-Haile 196*ae77b8caSAriel Constenla-Haile if( xNameAccess.is() ) 197*ae77b8caSAriel Constenla-Haile { 198*ae77b8caSAriel Constenla-Haile OUString aMailer; 199*ae77b8caSAriel Constenla-Haile 200*ae77b8caSAriel Constenla-Haile // Retrieve the value for "Program" node and append it feed senddoc with it 201*ae77b8caSAriel Constenla-Haile // using the (undocumented) --mailclient switch 202*ae77b8caSAriel Constenla-Haile xNameAccess->getByName( OUString( RTL_CONSTASCII_USTRINGPARAM("Program") ) ) >>= aMailer; 203*ae77b8caSAriel Constenla-Haile 204*ae77b8caSAriel Constenla-Haile if( aMailer.getLength() ) 205*ae77b8caSAriel Constenla-Haile { 206*ae77b8caSAriel Constenla-Haile // make sure we have a system path 207*ae77b8caSAriel Constenla-Haile osl::FileBase::getSystemPathFromFileURL( aMailer, aMailer ); 208*ae77b8caSAriel Constenla-Haile 209*ae77b8caSAriel Constenla-Haile aBuffer.append("--mailclient "); 210*ae77b8caSAriel Constenla-Haile aBuffer.append(OUStringToOString( aMailer, iEncoding )); 211*ae77b8caSAriel Constenla-Haile aBuffer.append(" "); 212*ae77b8caSAriel Constenla-Haile } 213*ae77b8caSAriel Constenla-Haile #ifdef MACOSX 214*ae77b8caSAriel Constenla-Haile else 215*ae77b8caSAriel Constenla-Haile aBuffer.append("--mailclient Mail "); 216*ae77b8caSAriel Constenla-Haile #endif 217*ae77b8caSAriel Constenla-Haile } 218*ae77b8caSAriel Constenla-Haile 219*ae77b8caSAriel Constenla-Haile } 220*ae77b8caSAriel Constenla-Haile catch( RuntimeException e ) 221*ae77b8caSAriel Constenla-Haile { 222*ae77b8caSAriel Constenla-Haile OSL_TRACE( "RuntimeException caught accessing configuration provider." ); 223*ae77b8caSAriel Constenla-Haile OSL_TRACE( OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US ).getStr() ); 224*ae77b8caSAriel Constenla-Haile throw e; 225*ae77b8caSAriel Constenla-Haile } 226*ae77b8caSAriel Constenla-Haile 227*ae77b8caSAriel Constenla-Haile // Append body if set in the message 228*ae77b8caSAriel Constenla-Haile OUString ustr = xMailMessage->getBody(); 229*ae77b8caSAriel Constenla-Haile if ( ustr.getLength() > 0 ) 230*ae77b8caSAriel Constenla-Haile { 231*ae77b8caSAriel Constenla-Haile aBuffer.append("--body \""); 232*ae77b8caSAriel Constenla-Haile escapeDoubleQuotes( aBuffer, ustr, iEncoding ); 233*ae77b8caSAriel Constenla-Haile aBuffer.append("\" "); 234*ae77b8caSAriel Constenla-Haile } 235*ae77b8caSAriel Constenla-Haile 236*ae77b8caSAriel Constenla-Haile // Append subject if set in the message 237*ae77b8caSAriel Constenla-Haile ustr = xMailMessage->getSubject(); 238*ae77b8caSAriel Constenla-Haile if ( ustr.getLength() > 0 ) 239*ae77b8caSAriel Constenla-Haile { 240*ae77b8caSAriel Constenla-Haile aBuffer.append("--subject \""); 241*ae77b8caSAriel Constenla-Haile escapeDoubleQuotes( aBuffer, ustr, iEncoding ); 242*ae77b8caSAriel Constenla-Haile aBuffer.append("\" "); 243*ae77b8caSAriel Constenla-Haile } 244*ae77b8caSAriel Constenla-Haile 245*ae77b8caSAriel Constenla-Haile // Append originator if set in the message 246*ae77b8caSAriel Constenla-Haile if ( xMailMessage->getOriginator().getLength() > 0 ) 247*ae77b8caSAriel Constenla-Haile { 248*ae77b8caSAriel Constenla-Haile aBuffer.append("--from \""); 249*ae77b8caSAriel Constenla-Haile aBuffer.append(OUStringToOString(xMailMessage->getOriginator(), iEncoding)); 250*ae77b8caSAriel Constenla-Haile aBuffer.append("\" "); 251*ae77b8caSAriel Constenla-Haile } 252*ae77b8caSAriel Constenla-Haile 253*ae77b8caSAriel Constenla-Haile // Append receipient if set in the message 254*ae77b8caSAriel Constenla-Haile if ( xMailMessage->getRecipient().getLength() > 0 ) 255*ae77b8caSAriel Constenla-Haile { 256*ae77b8caSAriel Constenla-Haile aBuffer.append("--to \""); 257*ae77b8caSAriel Constenla-Haile aBuffer.append(OUStringToOString(xMailMessage->getRecipient(), iEncoding)); 258*ae77b8caSAriel Constenla-Haile aBuffer.append("\" "); 259*ae77b8caSAriel Constenla-Haile } 260*ae77b8caSAriel Constenla-Haile 261*ae77b8caSAriel Constenla-Haile // Append carbon copy receipients set in the message 262*ae77b8caSAriel Constenla-Haile Sequence< OUString > aStringList = xMailMessage->getCcRecipient(); 263*ae77b8caSAriel Constenla-Haile sal_Int32 n, nmax = aStringList.getLength(); 264*ae77b8caSAriel Constenla-Haile for ( n = 0; n < nmax; n++ ) 265*ae77b8caSAriel Constenla-Haile { 266*ae77b8caSAriel Constenla-Haile aBuffer.append("--cc \""); 267*ae77b8caSAriel Constenla-Haile aBuffer.append(OUStringToOString(aStringList[n], iEncoding)); 268*ae77b8caSAriel Constenla-Haile aBuffer.append("\" "); 269*ae77b8caSAriel Constenla-Haile } 270*ae77b8caSAriel Constenla-Haile 271*ae77b8caSAriel Constenla-Haile // Append blind carbon copy receipients set in the message 272*ae77b8caSAriel Constenla-Haile aStringList = xMailMessage->getBccRecipient(); 273*ae77b8caSAriel Constenla-Haile nmax = aStringList.getLength(); 274*ae77b8caSAriel Constenla-Haile for ( n = 0; n < nmax; n++ ) 275*ae77b8caSAriel Constenla-Haile { 276*ae77b8caSAriel Constenla-Haile aBuffer.append("--bcc \""); 277*ae77b8caSAriel Constenla-Haile aBuffer.append(OUStringToOString(aStringList[n], iEncoding)); 278*ae77b8caSAriel Constenla-Haile aBuffer.append("\" "); 279*ae77b8caSAriel Constenla-Haile } 280*ae77b8caSAriel Constenla-Haile 281*ae77b8caSAriel Constenla-Haile // Append attachments set in the message 282*ae77b8caSAriel Constenla-Haile aStringList = xMailMessage->getAttachement(); 283*ae77b8caSAriel Constenla-Haile nmax = aStringList.getLength(); 284*ae77b8caSAriel Constenla-Haile for ( n = 0; n < nmax; n++ ) 285*ae77b8caSAriel Constenla-Haile { 286*ae77b8caSAriel Constenla-Haile OUString aSystemPath; 287*ae77b8caSAriel Constenla-Haile if ( osl::FileBase::E_None == osl::FileBase::getSystemPathFromFileURL(aStringList[n], aSystemPath) ) 288*ae77b8caSAriel Constenla-Haile { 289*ae77b8caSAriel Constenla-Haile aBuffer.append("--attach \""); 290*ae77b8caSAriel Constenla-Haile aBuffer.append(OUStringToOString(aSystemPath, iEncoding)); 291*ae77b8caSAriel Constenla-Haile aBuffer.append("\" "); 292*ae77b8caSAriel Constenla-Haile } 293*ae77b8caSAriel Constenla-Haile } 294*ae77b8caSAriel Constenla-Haile 295*ae77b8caSAriel Constenla-Haile OString cmd = aBuffer.makeStringAndClear(); 296*ae77b8caSAriel Constenla-Haile if ( 0 != pclose(popen(cmd.getStr(), "w")) ) 297*ae77b8caSAriel Constenla-Haile { 298*ae77b8caSAriel Constenla-Haile throw ::com::sun::star::uno::Exception( 299*ae77b8caSAriel Constenla-Haile OUString(RTL_CONSTASCII_USTRINGPARAM( "No mail client configured" )), 300*ae77b8caSAriel Constenla-Haile static_cast < XMailClient * > (this) ); 301*ae77b8caSAriel Constenla-Haile } 302*ae77b8caSAriel Constenla-Haile } 303*ae77b8caSAriel Constenla-Haile 304*ae77b8caSAriel Constenla-Haile OUString SAL_CALL 305*ae77b8caSAriel Constenla-Haile SystemCommandMail::getImplementationName( ) 306*ae77b8caSAriel Constenla-Haile throw( RuntimeException ) 307*ae77b8caSAriel Constenla-Haile { 308*ae77b8caSAriel Constenla-Haile return getImplementationName_static(); 309*ae77b8caSAriel Constenla-Haile } 310*ae77b8caSAriel Constenla-Haile 311*ae77b8caSAriel Constenla-Haile sal_Bool SAL_CALL 312*ae77b8caSAriel Constenla-Haile SystemCommandMail::supportsService( 313*ae77b8caSAriel Constenla-Haile const OUString& ServiceName ) 314*ae77b8caSAriel Constenla-Haile throw( RuntimeException ) 315*ae77b8caSAriel Constenla-Haile { 316*ae77b8caSAriel Constenla-Haile Sequence < OUString > SupportedServicesNames = getSupportedServiceNames_static(); 317*ae77b8caSAriel Constenla-Haile 318*ae77b8caSAriel Constenla-Haile for ( sal_Int32 n = SupportedServicesNames.getLength(); n--; ) 319*ae77b8caSAriel Constenla-Haile if (SupportedServicesNames[n].compareTo(ServiceName) == 0) 320*ae77b8caSAriel Constenla-Haile return sal_True; 321*ae77b8caSAriel Constenla-Haile 322*ae77b8caSAriel Constenla-Haile return sal_False; 323*ae77b8caSAriel Constenla-Haile } 324*ae77b8caSAriel Constenla-Haile 325*ae77b8caSAriel Constenla-Haile Sequence< OUString > SAL_CALL 326*ae77b8caSAriel Constenla-Haile SystemCommandMail::getSupportedServiceNames() 327*ae77b8caSAriel Constenla-Haile throw( RuntimeException ) 328*ae77b8caSAriel Constenla-Haile { 329*ae77b8caSAriel Constenla-Haile return getSupportedServiceNames_static(); 330*ae77b8caSAriel Constenla-Haile } 331*ae77b8caSAriel Constenla-Haile 332*ae77b8caSAriel Constenla-Haile Reference< XInterface > 333*ae77b8caSAriel Constenla-Haile SystemCommandMail::Create( 334*ae77b8caSAriel Constenla-Haile const Reference< XComponentContext > &xContext) 335*ae77b8caSAriel Constenla-Haile { 336*ae77b8caSAriel Constenla-Haile return Reference< XInterface >( 337*ae77b8caSAriel Constenla-Haile static_cast< cppu::OWeakObject *>( 338*ae77b8caSAriel Constenla-Haile new SystemCommandMail( xContext ) ) ); 339*ae77b8caSAriel Constenla-Haile } 340*ae77b8caSAriel Constenla-Haile 341*ae77b8caSAriel Constenla-Haile OUString 342*ae77b8caSAriel Constenla-Haile SystemCommandMail::getImplementationName_static() 343*ae77b8caSAriel Constenla-Haile { 344*ae77b8caSAriel Constenla-Haile return OUString( RTL_CONSTASCII_USTRINGPARAM( COMP_IMPL_NAME ) ); 345*ae77b8caSAriel Constenla-Haile } 346*ae77b8caSAriel Constenla-Haile 347*ae77b8caSAriel Constenla-Haile Sequence< OUString > 348*ae77b8caSAriel Constenla-Haile SystemCommandMail::getSupportedServiceNames_static() 349*ae77b8caSAriel Constenla-Haile { 350*ae77b8caSAriel Constenla-Haile Sequence< OUString > aRet(1); 351*ae77b8caSAriel Constenla-Haile aRet[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( COMP_SERVICE_NAME ) ); 352*ae77b8caSAriel Constenla-Haile return aRet; 353*ae77b8caSAriel Constenla-Haile } 354*ae77b8caSAriel Constenla-Haile 355*ae77b8caSAriel Constenla-Haile } 356