diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 14:29:57 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 14:29:57 +0000 |
commit | 41b1169be44061d52201e532982448a081a40645 (patch) | |
tree | e84be89cba249e830beb982098e960e2c6e2ae0f /stoc/source/defaultregistry | |
parent | 215e8c7210756d6d9033f8d742a6cd0e9be132aa (diff) |
initial import
Diffstat (limited to 'stoc/source/defaultregistry')
-rw-r--r-- | stoc/source/defaultregistry/defaultregistry.cxx | 1440 | ||||
-rw-r--r-- | stoc/source/defaultregistry/makefile.mk | 107 |
2 files changed, 1547 insertions, 0 deletions
diff --git a/stoc/source/defaultregistry/defaultregistry.cxx b/stoc/source/defaultregistry/defaultregistry.cxx new file mode 100644 index 000000000..cb7c051e5 --- /dev/null +++ b/stoc/source/defaultregistry/defaultregistry.cxx @@ -0,0 +1,1440 @@ +/************************************************************************* + * + * $RCSfile: defaultregistry.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 15:29:33 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _OSL_MUTEX_HXX_ +#include <osl/mutex.hxx> +#endif +#ifndef _OSL_DIAGNOSE_HXX_ +#include <osl/diagnose.h> +#endif + +#ifndef _CPPUHELPER_QUERYINTERFACE_HXX_ +#include <cppuhelper/queryinterface.hxx> +#endif +#ifndef _CPPUHELPER_WEAK_HXX_ +#include <cppuhelper/weak.hxx> +#endif +#ifndef _CPPUHELPER_FACTORY_HXX_ +#include <cppuhelper/factory.hxx> +#endif +#ifndef _CPPUHELPER_IMPLBASE1_HXX_ +#include <cppuhelper/implbase1.hxx> +#endif +#ifndef _CPPUHELPER_IMPLBASE3_HXX_ +#include <cppuhelper/implbase3.hxx> +#endif + +#ifndef _REGISTRY_REGISTRY_HXX_ +#include <registry/registry.hxx> +#endif + +#include <com/sun/star/registry/XSimpleRegistry.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/lang/XSingleServiceFactory.hpp> +#include <com/sun/star/lang/XInitialization.hpp> + +using namespace com::sun::star::uno; +using namespace com::sun::star::registry; +using namespace com::sun::star::lang; +using namespace cppu; +using namespace vos; +using namespace osl; +using namespace rtl; + + +#define NESTED_SERVICENAME "com.sun.star.registry.NestedRegistry" +#define NESTED_IMPLNAME "com.sun.star.comp.stoc.NestedRegistry" + +namespace stoc_defreg +{ + +//************************************************************************* +// NestedRegistryImpl +//************************************************************************* +class NestedKeyImpl; + +class NestedRegistryImpl : public WeakAggImplHelper3 < XSimpleRegistry, XInitialization, XServiceInfo > +{ +public: + NestedRegistryImpl( const Reference<XMultiServiceFactory> & rXSMgr ); + + NestedRegistryImpl( const Reference<XMultiServiceFactory> & rXSMgr, + Reference<XSimpleRegistry>& localReg, + Reference<XSimpleRegistry>& systemReg ); + + ~NestedRegistryImpl(); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException); + virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException); + static OUString SAL_CALL getImplementationName_Static( ); + static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static( ); + + // XInitialization + virtual void SAL_CALL initialize( const Sequence< Any >& aArguments ) + throw(Exception, RuntimeException); + + // XSimpleRegistry + virtual OUString SAL_CALL getURL() throw(RuntimeException); + virtual void SAL_CALL open( const OUString& rURL, sal_Bool bReadOnly, sal_Bool bCreate ) throw(InvalidRegistryException, RuntimeException); + virtual sal_Bool SAL_CALL isValid( ) throw(RuntimeException); + virtual void SAL_CALL close( ) throw(InvalidRegistryException, RuntimeException); + virtual void SAL_CALL destroy( ) throw(InvalidRegistryException, RuntimeException); + virtual Reference< XRegistryKey > SAL_CALL getRootKey( ) throw(InvalidRegistryException, RuntimeException); + virtual sal_Bool SAL_CALL isReadOnly( ) throw(InvalidRegistryException, RuntimeException); + virtual void SAL_CALL mergeKey( const OUString& aKeyName, const OUString& aUrl ) throw(InvalidRegistryException, MergeConflictException, RuntimeException); + + friend NestedKeyImpl; +protected: + Mutex m_mutex; + sal_uInt32 m_state; + Reference<XSimpleRegistry> m_localReg; + Reference<XSimpleRegistry> m_defaultReg; + +private: + Reference<XMultiServiceFactory> m_xSMgr; +}; + +//************************************************************************* +// class NestedKeyImpl the implenetation of interface XRegistryKey +//************************************************************************* +class NestedKeyImpl : public WeakImplHelper1< XRegistryKey > +{ +public: + NestedKeyImpl( NestedRegistryImpl* pDefaultRegistry, + Reference<XRegistryKey>& localKey, + Reference<XRegistryKey>& defaultKey); + + NestedKeyImpl( const OUString& aKeyName, + NestedKeyImpl* pKey); + + ~NestedKeyImpl(); + + // XRegistryKey + virtual OUString SAL_CALL getKeyName() throw(RuntimeException); + virtual sal_Bool SAL_CALL isReadOnly( ) throw(InvalidRegistryException, RuntimeException); + virtual sal_Bool SAL_CALL isValid( ) throw(RuntimeException); + virtual RegistryKeyType SAL_CALL getKeyType( const OUString& rKeyName ) throw(InvalidRegistryException, RuntimeException); + virtual RegistryValueType SAL_CALL getValueType( ) throw(InvalidRegistryException, RuntimeException); + virtual sal_Int32 SAL_CALL getLongValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException); + virtual void SAL_CALL setLongValue( sal_Int32 value ) throw(InvalidRegistryException, RuntimeException); + virtual Sequence< sal_Int32 > SAL_CALL getLongListValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException); + virtual void SAL_CALL setLongListValue( const ::com::sun::star::uno::Sequence< sal_Int32 >& seqValue ) throw(InvalidRegistryException, RuntimeException); + virtual OUString SAL_CALL getAsciiValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException); + virtual void SAL_CALL setAsciiValue( const OUString& value ) throw(InvalidRegistryException, RuntimeException); + virtual Sequence< OUString > SAL_CALL getAsciiListValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException); + virtual void SAL_CALL setAsciiListValue( const ::com::sun::star::uno::Sequence< OUString >& seqValue ) throw(InvalidRegistryException, RuntimeException); + virtual OUString SAL_CALL getStringValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException); + virtual void SAL_CALL setStringValue( const OUString& value ) throw(InvalidRegistryException, RuntimeException); + virtual Sequence< OUString > SAL_CALL getStringListValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException); + virtual void SAL_CALL setStringListValue( const ::com::sun::star::uno::Sequence< OUString >& seqValue ) throw(InvalidRegistryException, RuntimeException); + virtual Sequence< sal_Int8 > SAL_CALL getBinaryValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException); + virtual void SAL_CALL setBinaryValue( const ::com::sun::star::uno::Sequence< sal_Int8 >& value ) throw(InvalidRegistryException, RuntimeException); + virtual Reference< XRegistryKey > SAL_CALL openKey( const OUString& aKeyName ) throw(InvalidRegistryException, RuntimeException); + virtual Reference< XRegistryKey > SAL_CALL createKey( const OUString& aKeyName ) throw(InvalidRegistryException, RuntimeException); + virtual void SAL_CALL closeKey( ) throw(InvalidRegistryException, RuntimeException); + virtual void SAL_CALL deleteKey( const OUString& rKeyName ) throw(InvalidRegistryException, RuntimeException); + virtual Sequence< Reference< XRegistryKey > > SAL_CALL openKeys( ) throw(InvalidRegistryException, RuntimeException); + virtual Sequence< OUString > SAL_CALL getKeyNames( ) throw(InvalidRegistryException, RuntimeException); + virtual sal_Bool SAL_CALL createLink( const OUString& aLinkName, const OUString& aLinkTarget ) throw(InvalidRegistryException, RuntimeException); + virtual void SAL_CALL deleteLink( const OUString& rLinkName ) throw(InvalidRegistryException, RuntimeException); + virtual OUString SAL_CALL getLinkTarget( const OUString& rLinkName ) throw(InvalidRegistryException, RuntimeException); + virtual OUString SAL_CALL getResolvedName( const OUString& aKeyName ) throw(InvalidRegistryException, RuntimeException); + +protected: + void computeChanges(); + OUString computeName(const OUString& name); + + OUString m_name; + sal_uInt32 m_state; + NestedRegistryImpl* m_pRegistry; + Reference<XRegistryKey> m_localKey; + Reference<XRegistryKey> m_defaultKey; +}; + + +//************************************************************************* +NestedKeyImpl::NestedKeyImpl( NestedRegistryImpl* pDefaultRegistry, + Reference<XRegistryKey>& localKey, + Reference<XRegistryKey>& defaultKey ) + : m_pRegistry(pDefaultRegistry) +{ + m_pRegistry->acquire(); + + m_localKey = localKey; + m_defaultKey = defaultKey; + + if (m_localKey.is()) + { + m_name = m_localKey->getKeyName(); + } else + if (m_defaultKey.is()) + { + m_name = m_defaultKey->getKeyName(); + } + + m_state = m_pRegistry->m_state; +} + +//************************************************************************* +NestedKeyImpl::NestedKeyImpl( const OUString& rKeyName, + NestedKeyImpl* pKey) + : m_pRegistry(pKey->m_pRegistry) +{ + m_pRegistry->acquire(); + + if (pKey->m_localKey.is() && pKey->m_localKey->isValid()) + { + m_localKey = pKey->m_localKey->openKey(rKeyName); + } + if (pKey->m_defaultKey.is() && pKey->m_defaultKey->isValid()) + { + m_defaultKey = pKey->m_defaultKey->openKey(rKeyName); + } + + if (m_localKey.is()) + { + m_name = m_localKey->getKeyName(); + } else + if (m_defaultKey.is()) + { + m_name = m_defaultKey->getKeyName(); + } + + m_state = m_pRegistry->m_state; +} + +//************************************************************************* +NestedKeyImpl::~NestedKeyImpl() +{ + if ( m_pRegistry ) + m_pRegistry->release(); +} + +//************************************************************************* +void NestedKeyImpl::computeChanges() +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( m_state != m_pRegistry->m_state ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + + Reference<XRegistryKey> tmpKey = rootKey->openKey(m_name); + + if ( tmpKey.is() ) + { + m_localKey = rootKey->openKey(m_name); + } + + m_state = m_pRegistry->m_state; + } +} + +//************************************************************************* +// NestedKey_Impl::computeName() +// +OUString NestedKeyImpl::computeName(const OUString& name) +{ + OUString resLocalName, resDefaultName; + + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + try + { + if ( m_localKey.is() && m_localKey->isValid() ) + { + resLocalName = m_localKey->getResolvedName(name); + } else + { + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + return m_defaultKey->getResolvedName(name); + } + + if ( resLocalName.getLength() > 0 && m_pRegistry->m_defaultReg->isValid() ) + { + Reference<XRegistryKey> localRoot(m_pRegistry->m_localReg->getRootKey()); + Reference<XRegistryKey> defaultRoot(m_pRegistry->m_defaultReg->getRootKey()); + + resDefaultName = defaultRoot->getResolvedName(resLocalName); + + sal_uInt32 count = 100; + + while (resLocalName != resDefaultName && count > 0) + { + count--; + + if (resLocalName.getLength() == 0 || resDefaultName.getLength() == 0) + throw InvalidRegistryException(); + + resLocalName = localRoot->getResolvedName(resDefaultName); + resDefaultName = defaultRoot->getResolvedName(resLocalName); + } + } + } + catch(InvalidRegistryException& ) + { + } + + return resLocalName; +} + +//************************************************************************* +OUString SAL_CALL NestedKeyImpl::getKeyName() throw(RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + return m_name; +} + +//************************************************************************* +sal_Bool SAL_CALL NestedKeyImpl::isReadOnly( ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + return m_localKey->isReadOnly(); + else + throw InvalidRegistryException(); + + return sal_False; +} + +//************************************************************************* +sal_Bool SAL_CALL NestedKeyImpl::isValid( ) throw(RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + return ((m_localKey.is() && m_localKey->isValid()) || + (m_defaultKey.is() && m_defaultKey->isValid()) ); +} + +//************************************************************************* +RegistryKeyType SAL_CALL NestedKeyImpl::getKeyType( const OUString& rKeyName ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getKeyType(rKeyName); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getKeyType(rKeyName); + } + + return RegistryKeyType_KEY; +} + +//************************************************************************* +RegistryValueType SAL_CALL NestedKeyImpl::getValueType( ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getValueType(); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getValueType(); + } + + return RegistryValueType_NOT_DEFINED; +} + +//************************************************************************* +sal_Int32 SAL_CALL NestedKeyImpl::getLongValue( ) + throw(InvalidRegistryException, InvalidValueException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getLongValue(); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getLongValue(); + } else + { + throw InvalidRegistryException(); + } + + return 0; +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::setLongValue( sal_Int32 value ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + m_localKey->setLongValue(value); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + m_localKey->setLongValue(value); + m_state = m_pRegistry->m_state++; + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +Sequence< sal_Int32 > SAL_CALL NestedKeyImpl::getLongListValue( ) + throw(InvalidRegistryException, InvalidValueException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getLongListValue(); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getLongListValue(); + } else + { + throw InvalidRegistryException(); + } + + return Sequence<sal_Int32>(); +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::setLongListValue( const Sequence< sal_Int32 >& seqValue ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + m_localKey->setLongListValue(seqValue); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + m_localKey->setLongListValue(seqValue); + m_state = m_pRegistry->m_state++; + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +OUString SAL_CALL NestedKeyImpl::getAsciiValue( ) + throw(InvalidRegistryException, InvalidValueException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getAsciiValue(); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getAsciiValue(); + } else + { + throw InvalidRegistryException(); + } + + return OUString(); +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::setAsciiValue( const OUString& value ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + m_localKey->setAsciiValue(value); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + m_localKey->setAsciiValue(value); + m_state = m_pRegistry->m_state++; + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +Sequence< OUString > SAL_CALL NestedKeyImpl::getAsciiListValue( ) + throw(InvalidRegistryException, InvalidValueException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getAsciiListValue(); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getAsciiListValue(); + } else + { + throw InvalidRegistryException(); + } + + return Sequence<OUString>(); +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::setAsciiListValue( const Sequence< OUString >& seqValue ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + m_localKey->setAsciiListValue(seqValue); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + m_localKey->setAsciiListValue(seqValue); + m_state = m_pRegistry->m_state++; + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +OUString SAL_CALL NestedKeyImpl::getStringValue( ) + throw(InvalidRegistryException, InvalidValueException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getStringValue(); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getStringValue(); + } else + { + throw InvalidRegistryException(); + } + + return OUString(); +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::setStringValue( const OUString& value ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + m_localKey->setStringValue(value); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + m_localKey->setStringValue(value); + m_state = m_pRegistry->m_state++; + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +Sequence< OUString > SAL_CALL NestedKeyImpl::getStringListValue( ) + throw(InvalidRegistryException, InvalidValueException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getStringListValue(); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getStringListValue(); + } else + { + throw InvalidRegistryException(); + } + + return Sequence<OUString>(); +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::setStringListValue( const Sequence< OUString >& seqValue ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + m_localKey->setStringListValue(seqValue); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + m_localKey->setStringListValue(seqValue); + m_state = m_pRegistry->m_state++; + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +Sequence< sal_Int8 > SAL_CALL NestedKeyImpl::getBinaryValue( ) + throw(InvalidRegistryException, InvalidValueException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + return m_localKey->getBinaryValue(); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + return m_defaultKey->getBinaryValue(); + } else + { + throw InvalidRegistryException(); + } + + return Sequence<sal_Int8>(); +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::setBinaryValue( const Sequence< sal_Int8 >& value ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + computeChanges(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + m_localKey->setBinaryValue(value); + } else + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + m_localKey->setBinaryValue(value); + m_state = m_pRegistry->m_state++; + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +Reference< XRegistryKey > SAL_CALL NestedKeyImpl::openKey( const OUString& aKeyName ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( !m_localKey.is() && !m_defaultKey.is() ) + { + throw InvalidRegistryException(); + } + + OUString resolvedName = computeName(aKeyName); + + if ( resolvedName.getLength() == 0 ) + throw InvalidRegistryException(); + + Reference<XRegistryKey> localKey, defaultKey; + + if ( m_localKey.is() && m_localKey->isValid() ) + { + localKey = m_pRegistry->m_localReg->getRootKey()->openKey(resolvedName); + } + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + defaultKey = m_pRegistry->m_defaultReg->getRootKey()->openKey(resolvedName); + } + + if ( localKey.is() || defaultKey.is() ) + { + return ((XRegistryKey*)new NestedKeyImpl(m_pRegistry, localKey, defaultKey)); + } else + { + return Reference<XRegistryKey>(); + } +} + +//************************************************************************* +Reference< XRegistryKey > SAL_CALL NestedKeyImpl::createKey( const OUString& aKeyName ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( (!m_localKey.is() && !m_defaultKey.is()) || + (m_localKey.is() && m_localKey->isReadOnly()) ) + { + throw InvalidRegistryException(); + } + + OUString resolvedName = computeName(aKeyName); + + if ( resolvedName.getLength() == 0 ) + throw InvalidRegistryException(); + + if ( m_localKey.is() && m_localKey->isValid() ) + { + Reference<XRegistryKey> localKey, defaultKey; + + localKey = m_pRegistry->m_localReg->getRootKey()->createKey(resolvedName); + if ( localKey.is() ) + { + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + defaultKey = m_pRegistry->m_defaultReg->getRootKey()->openKey(resolvedName); + } + + m_state = m_pRegistry->m_state++; + + return ((XRegistryKey*)new NestedKeyImpl(m_pRegistry, localKey, defaultKey)); + } + } else + { + Reference<XRegistryKey> localKey, defaultKey; + + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + + localKey = m_pRegistry->m_localReg->getRootKey()->createKey(resolvedName); + + if ( localKey.is() ) + { + defaultKey = m_pRegistry->m_defaultReg->getRootKey()->openKey(resolvedName); + + m_state = m_pRegistry->m_state++; + + return ((XRegistryKey*)new NestedKeyImpl(m_pRegistry, localKey, defaultKey)); + } + } + } + + return Reference<XRegistryKey>(); +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::closeKey( ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( m_localKey.is() && m_localKey->isValid() ) + { + m_localKey->closeKey(); + } + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + m_defaultKey->closeKey(); + } +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::deleteKey( const OUString& rKeyName ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( m_localKey.is() && m_localKey->isValid() && + !m_localKey->isReadOnly() ) + { + OUString resolvedName = computeName(rKeyName); + + if ( resolvedName.getLength() == 0 ) + { + throw InvalidRegistryException(); + } + + m_pRegistry->m_localReg->getRootKey()->deleteKey(resolvedName); + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +Sequence< Reference< XRegistryKey > > SAL_CALL NestedKeyImpl::openKeys( ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( !m_localKey.is() && !m_defaultKey.is() ) + { + throw InvalidRegistryException(); + } + + Sequence<OUString> localSeq, defaultSeq; + + if ( m_localKey.is() && m_localKey->isValid() ) + { + localSeq = m_localKey->getKeyNames(); + } + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + defaultSeq = m_defaultKey->getKeyNames(); + } + + sal_uInt32 local = localSeq.getLength(); + sal_uInt32 def = defaultSeq.getLength(); + sal_uInt32 len = 0; + + sal_uInt32 i, j; + for (i=0; i < local; i++) + { + for (j=0 ; j < def; j++) + { + if ( localSeq.getConstArray()[i] == defaultSeq.getConstArray()[j] ) + { + len++; + break; + } + } + } + + Sequence< Reference<XRegistryKey> > retSeq(local + def - len); + sal_Bool insert = sal_True; + OUString name; + sal_Int32 lastIndex; + + for (i=0; i < local; i++) + { + name = localSeq.getConstArray()[i]; + lastIndex = name.lastIndexOf('/'); + name = name.copy(lastIndex); + retSeq.getArray()[i] = + (XRegistryKey*)new NestedKeyImpl(name, this); + } + + sal_uInt32 k = local; + for (i=0; i < def; i++) + { + insert = sal_True; + + for (j=0 ; j < local; j++) + { + if ( retSeq.getConstArray()[j]->getKeyName() + == defaultSeq.getConstArray()[i] ) + { + insert = sal_False; + break; + } + } + + if ( insert ) + { + name = defaultSeq.getConstArray()[i]; + lastIndex = name.lastIndexOf('/'); + name = name.copy(lastIndex); + retSeq.getArray()[k++] = + (XRegistryKey*)new NestedKeyImpl(name, this); + } + } + + return retSeq; +} + +//************************************************************************* +Sequence< OUString > SAL_CALL NestedKeyImpl::getKeyNames( ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( !m_localKey.is() && !m_defaultKey.is() ) + { + throw InvalidRegistryException(); + } + + Sequence<OUString> localSeq, defaultSeq; + + if ( m_localKey.is() && m_localKey->isValid() ) + { + localSeq = m_localKey->getKeyNames(); + } + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + defaultSeq = m_defaultKey->getKeyNames(); + } + + sal_uInt32 local = localSeq.getLength(); + sal_uInt32 def = defaultSeq.getLength(); + sal_uInt32 len = 0; + + sal_uInt32 i, j; + for (i=0; i < local; i++) + { + for (j=0 ; j < def; j++) + { + if ( localSeq.getConstArray()[i] == defaultSeq.getConstArray()[j] ) + { + len++; + break; + } + } + } + + Sequence<OUString> retSeq(local + def - len); + sal_Bool insert = sal_True; + + for (i=0; i < local; i++) + { + retSeq.getArray()[i] = localSeq.getConstArray()[i]; + } + + sal_uInt32 k = local; + for (i=0; i < def; i++) + { + insert = sal_True; + + for (j=0 ; j < local; j++) + { + if ( retSeq.getConstArray()[j] == defaultSeq.getConstArray()[i] ) + { + insert = sal_False; + break; + } + } + + if ( insert ) + retSeq.getArray()[k++] = defaultSeq.getConstArray()[i]; + } + + return retSeq; +} + +//************************************************************************* +sal_Bool SAL_CALL NestedKeyImpl::createLink( const OUString& aLinkName, const OUString& aLinkTarget ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + + sal_Bool isCreated = False; + if ( !m_localKey.is() && !m_defaultKey.is() ) + { + throw InvalidRegistryException(); + } + + OUString linkName; + OUString resolvedName; + sal_Int32 lastIndex = aLinkName.lastIndexOf('/'); + + if ( lastIndex > 0 ) + { + linkName = aLinkName.copy(0, lastIndex); + + resolvedName = computeName(linkName); + + if ( resolvedName.getLength() == 0 ) + { + throw InvalidRegistryException(); + } + + resolvedName = resolvedName + aLinkName.copy(lastIndex); + } else + { + if ( lastIndex == 0 ) + resolvedName = m_name + aLinkName; + else + resolvedName = m_name + OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + aLinkName; + } + + if ( m_localKey.is() && m_localKey->isValid() ) + { + isCreated = m_pRegistry->m_localReg->getRootKey()->createLink(resolvedName, aLinkTarget); + } else + { + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + { + Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey()); + m_localKey = rootKey->createKey(m_name); + + isCreated = m_pRegistry->m_localReg->getRootKey()->createLink(resolvedName, aLinkTarget); + } + } + + if ( isCreated ) + m_state = m_pRegistry->m_state++; + + return isCreated; +} + +//************************************************************************* +void SAL_CALL NestedKeyImpl::deleteLink( const OUString& rLinkName ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( !m_localKey.is() && !m_defaultKey.is() ) + { + throw InvalidRegistryException(); + } + + OUString linkName; + OUString resolvedName; + sal_Int32 lastIndex = rLinkName.lastIndexOf('/'); + + if ( lastIndex > 0 ) + { + linkName = rLinkName.copy(0, lastIndex); + + resolvedName = computeName(linkName); + + if ( resolvedName.getLength() == 0 ) + { + throw InvalidRegistryException(); + } + + resolvedName = resolvedName + rLinkName.copy(lastIndex); + } else + { + if ( lastIndex == 0 ) + resolvedName = m_name + rLinkName; + else + resolvedName = m_name + OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + rLinkName; + } + + if ( m_localKey.is() && m_localKey->isValid() && + !m_localKey->isReadOnly() ) + { + m_pRegistry->m_localReg->getRootKey()->deleteLink(resolvedName); + } else + { + throw InvalidRegistryException(); + } +} + +//************************************************************************* +OUString SAL_CALL NestedKeyImpl::getLinkTarget( const OUString& rLinkName ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( !m_localKey.is() && !m_defaultKey.is() ) + { + throw InvalidRegistryException(); + } + + OUString linkName; + OUString resolvedName; + sal_Int32 lastIndex = rLinkName.lastIndexOf('/'); + + if ( lastIndex > 0 ) + { + linkName = rLinkName.copy(0, lastIndex); + + resolvedName = computeName(linkName); + + if ( resolvedName.getLength() == 0 ) + { + throw InvalidRegistryException(); + } + + resolvedName = resolvedName + rLinkName.copy(lastIndex); + } else + { + if ( lastIndex == 0 ) + resolvedName = m_name + rLinkName; + else + resolvedName = m_name + OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + rLinkName; + } + + OUString linkTarget; + if ( m_localKey.is() && m_localKey->isValid() ) + { + try + { + linkTarget = m_pRegistry->m_localReg->getRootKey()->getLinkTarget(resolvedName); + return linkTarget; + } + catch(InvalidRegistryException& ) + { + } + } + + if ( m_defaultKey.is() && m_defaultKey->isValid() ) + linkTarget = m_pRegistry->m_defaultReg->getRootKey()->getLinkTarget(resolvedName); + + return linkTarget; +} + +//************************************************************************* +OUString SAL_CALL NestedKeyImpl::getResolvedName( const OUString& aKeyName ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_pRegistry->m_mutex ); + if ( !m_localKey.is() && !m_defaultKey.is() ) + { + throw InvalidRegistryException(); + } + + OUString resolvedName = computeName(aKeyName); + + if ( resolvedName.getLength() == 0 ) + { + throw InvalidRegistryException(); + } + + return resolvedName; +} + +//************************************************************************* +// +// DefaultRegistry Implementation +// +//************************************************************************* +NestedRegistryImpl::NestedRegistryImpl( const Reference<XMultiServiceFactory> & rSMgr ) + : m_state(0) + , m_xSMgr(rSMgr) +{ +} + +NestedRegistryImpl::NestedRegistryImpl( const Reference<XMultiServiceFactory> & rSMgr, + Reference<XSimpleRegistry>& localReg, + Reference<XSimpleRegistry>& defaultReg) + : m_state(0) + , m_localReg(localReg) + , m_defaultReg(defaultReg) + , m_xSMgr(rSMgr) +{ +} + +//************************************************************************* +NestedRegistryImpl::~NestedRegistryImpl() +{ +} + +//************************************************************************* +OUString SAL_CALL NestedRegistryImpl::getImplementationName( ) + throw(RuntimeException) +{ + return OUString::createFromAscii( NESTED_IMPLNAME ); +} + +//************************************************************************* +sal_Bool SAL_CALL NestedRegistryImpl::supportsService( const OUString& ServiceName ) + throw(RuntimeException) +{ + Guard< Mutex > aGuard( m_mutex ); + Sequence< OUString > aSNL = getSupportedServiceNames(); + const OUString * pArray = aSNL.getArray(); + for( sal_Int32 i = 0; i < aSNL.getLength(); i++ ) + if( pArray[i] == ServiceName ) + return sal_True; + return sal_False; +} + +//************************************************************************* +Sequence<OUString> SAL_CALL NestedRegistryImpl::getSupportedServiceNames( ) + throw(RuntimeException) +{ + return getSupportedServiceNames_Static(); +} + +//************************************************************************* +Sequence<OUString> SAL_CALL NestedRegistryImpl::getSupportedServiceNames_Static( ) +{ + OUString aStr( OUString::createFromAscii( NESTED_SERVICENAME ) ); + return Sequence< OUString >( &aStr, 1 ); +} + +//************************************************************************* +void SAL_CALL NestedRegistryImpl::initialize( const Sequence< Any >& aArguments ) + throw( Exception, RuntimeException ) +{ + Guard< Mutex > aGuard( m_mutex ); + if ( (aArguments.getLength() == 2) && + (aArguments[0].getValueType().getTypeClass() == TypeClass_INTERFACE) && + (aArguments[1].getValueType().getTypeClass() == TypeClass_INTERFACE) ) + { + aArguments[0] >>= m_localReg; + aArguments[1] >>= m_defaultReg; + if ( m_localReg == m_defaultReg ) + m_defaultReg = Reference< XSimpleRegistry >(); + } +} + +//************************************************************************* +OUString SAL_CALL NestedRegistryImpl::getURL() throw(RuntimeException) +{ + Guard< Mutex > aGuard( m_mutex ); + try + { + if ( m_localReg.is() && m_localReg->isValid() ) + return m_localReg->getURL(); + } + catch(InvalidRegistryException& ) + { + } + + return OUString(); +} + +//************************************************************************* +void SAL_CALL NestedRegistryImpl::open( const OUString& rURL, sal_Bool bReadOnly, sal_Bool bCreate ) + throw(InvalidRegistryException, RuntimeException) +{ + throw InvalidRegistryException(); +} + +//************************************************************************* +sal_Bool SAL_CALL NestedRegistryImpl::isValid( ) throw(RuntimeException) +{ + Guard< Mutex > aGuard( m_mutex ); + try + { + if ( (m_localReg.is() && m_localReg->isValid()) || + (m_defaultReg.is() && m_defaultReg->isValid()) ) + return sal_True; + } + catch(InvalidRegistryException& ) + { + } + + return sal_False; +} + +//************************************************************************* +void SAL_CALL NestedRegistryImpl::close( ) + throw(InvalidRegistryException, RuntimeException) +{ + throw InvalidRegistryException(); +} + +//************************************************************************* +void SAL_CALL NestedRegistryImpl::destroy( ) + throw(InvalidRegistryException, RuntimeException) +{ + throw InvalidRegistryException(); +} + +//************************************************************************* +Reference< XRegistryKey > SAL_CALL NestedRegistryImpl::getRootKey( ) + throw(InvalidRegistryException, RuntimeException) +{ + Reference<XRegistryKey> tmpKey; + + Guard< Mutex > aGuard( m_mutex ); + if ( m_localReg.is() && m_localReg->isValid() ) + { + Reference<XRegistryKey> localKey, defaultKey; + + localKey = m_localReg->getRootKey(); + + if ( localKey.is() ) + { + if ( m_defaultReg.is() && m_defaultReg->isValid() ) + { + defaultKey = m_defaultReg->getRootKey(); + } + + return ((XRegistryKey*)new NestedKeyImpl(this, localKey, defaultKey)); + } + } else + { + throw InvalidRegistryException(); + } + + return Reference<XRegistryKey>(); +} + +//************************************************************************* +sal_Bool SAL_CALL NestedRegistryImpl::isReadOnly( ) + throw(InvalidRegistryException, RuntimeException) +{ + Guard< Mutex > aGuard( m_mutex ); + try + { + if ( m_localReg.is() && m_localReg->isValid() ) + return m_localReg->isReadOnly(); + } + catch(InvalidRegistryException& ) + { + } + + return sal_False; +} + +//************************************************************************* +void SAL_CALL NestedRegistryImpl::mergeKey( const OUString& aKeyName, const OUString& aUrl ) + throw(InvalidRegistryException, MergeConflictException, RuntimeException) +{ + Guard< Mutex > aGuard( m_mutex ); + if ( m_localReg.is() && m_localReg->isValid() ) + { + m_localReg->mergeKey(aKeyName, aUrl); + + m_state++; + } +} + +//************************************************************************* +Reference<XInterface> SAL_CALL NestedRegistry_CreateInstance( const Reference<XMultiServiceFactory>& rSMgr ) + throw(Exception) +{ + Reference<XInterface> xRet; + XSimpleRegistry *pRegistry = (XSimpleRegistry*) new NestedRegistryImpl(rSMgr); + + if (pRegistry) + { + xRet = Reference<XInterface>::query(pRegistry); + } + + return xRet; +} + +} // namespace stco_defreg + +extern "C" +{ +//================================================================================================== +void SAL_CALL component_getImplementationEnvironment( + const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv ) +{ + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} +//================================================================================================== +sal_Bool SAL_CALL component_writeInfo( + void * pServiceManager, void * pRegistryKey ) +{ + if (pRegistryKey) + { + try + { + // NestedRegistry + Reference< XRegistryKey > xNewKey( + reinterpret_cast< XRegistryKey * >( pRegistryKey )->createKey( + OUString::createFromAscii( "/" NESTED_IMPLNAME "/UNO/SERVICES" ) ) ); + + Sequence< OUString > & rSNL = ::stoc_defreg::NestedRegistryImpl::getSupportedServiceNames_Static(); + const OUString * pArray = rSNL.getConstArray(); + for ( sal_Int32 nPos = rSNL.getLength(); nPos--; ) + xNewKey->createKey( pArray[nPos] ); + + return sal_True; + } + catch (InvalidRegistryException &) + { + OSL_ENSHURE( sal_False, "### InvalidRegistryException!" ); + } + } + return sal_False; +} +//================================================================================================== +void * SAL_CALL component_getFactory( + const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey ) +{ + void * pRet = 0; + if ( rtl_str_compare( pImplName, NESTED_IMPLNAME ) == 0 ) + { + Reference< XSingleServiceFactory > xFactory( createSingleFactory( + reinterpret_cast< XMultiServiceFactory * >( pServiceManager ), + OUString::createFromAscii( pImplName ), + ::stoc_defreg::NestedRegistry_CreateInstance, + ::stoc_defreg::NestedRegistryImpl::getSupportedServiceNames_Static() ) ); + + if (xFactory.is()) + { + xFactory->acquire(); + pRet = xFactory.get(); + } + } + + return pRet; +} +} + + + diff --git a/stoc/source/defaultregistry/makefile.mk b/stoc/source/defaultregistry/makefile.mk new file mode 100644 index 000000000..af0e7cd2f --- /dev/null +++ b/stoc/source/defaultregistry/makefile.mk @@ -0,0 +1,107 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: hr $ $Date: 2000-09-18 15:29:33 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (the "License"); You may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at http://www.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* +PRJ=..$/.. + +PRJNAME= stoc +TARGET= defreg +USE_DEFFILE= TRUE +NO_BSYMBOLIC= TRUE +ENABLE_EXCEPTIONS=TRUE +BOOTSTRAP_SERVICE=TRUE +COMP1TYPELIST=$(TARGET) + +# --- Settings ----------------------------------------------------- + +.INCLUDE : svpre.mk +.INCLUDE : settings.mk +.INCLUDE : sv.mk + +# ------------------------------------------------------------------ + +.INCLUDE : ..$/cppumaker.mk + +UNOTYPES=$($(TARGET)_XML2CMPTYPES) + + +SLOFILES= \ + $(SLO)$/defaultregistry.obj \ + $(SLO)$/$(COMP1TYPELIST)_description.obj + +SHL1TARGET= $(TARGET) + +SHL1STDLIBS= \ + $(CPPULIB) \ + $(CPPUHELPERLIB) \ + $(VOSLIB) \ + $(SALLIB) + +SHL1DEPN= +SHL1IMPLIB= i$(TARGET) +SHL1LIBS= $(SLB)$/$(TARGET).lib +SHL1DEF= $(MISC)$/$(SHL1TARGET).def + +DEF1NAME= $(SHL1TARGET) +DEF1EXPORTFILE= exports.dxp + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk |