diff options
Diffstat (limited to 'ucbhelper/workben')
20 files changed, 4402 insertions, 0 deletions
diff --git a/ucbhelper/workben/myucp/exports.map b/ucbhelper/workben/myucp/exports.map new file mode 100644 index 000000000000..14a2531f23ad --- /dev/null +++ b/ucbhelper/workben/myucp/exports.map @@ -0,0 +1,8 @@ +VERS_1_0 { + global: + component_getImplementationEnvironment; + component_writeInfo; + component_getFactory; + local: + *; +}; diff --git a/ucbhelper/workben/myucp/makefile.mk b/ucbhelper/workben/myucp/makefile.mk new file mode 100644 index 000000000000..06117e001ed7 --- /dev/null +++ b/ucbhelper/workben/myucp/makefile.mk @@ -0,0 +1,132 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: hr $ $Date: 2000-09-18 17:03:37 $ +# +# 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): _______________________________________ +# +# +# +#************************************************************************* + +# @@@ UCP Version - Increase, if your UCP libraray becomes incompatible. +UCP_VERSION=1 + +# @@@ Name for your UCP. Will become part of the library name (See below). +UCP_NAME=myucp + +# @@@ Relative path to project root. +PRJ=..$/.. + +# @@@ Name of the project your UCP code recides it. +PRJNAME=UCBHELPER + +TARGET=ucp$(UCP_NAME) + +ENABLE_EXCEPTIONS=TRUE +USE_DEFFILE=TRUE +NO_BSYMBOLIC=TRUE + +# --- Settings --------------------------------------------------------- + +.INCLUDE: svpre.mk +.INCLUDE: settings.mk +.INCLUDE: sv.mk + +# --- General ----------------------------------------------------- + +# @@@ Adjust template file names. Add own files here. +SLOFILES=\ + $(SLO)$/myucp_services.obj \ + $(SLO)$/myucp_provider.obj \ + $(SLO)$/myucp_content.obj \ + $(SLO)$/myucp_contentcaps.obj + +# You need these only if you implement a folder content, +# which supports the command "open" returning a result set. +# $(SLO)$/myucp_resultset.obj +# $(SLO)$/myucp_datasupplier.obj + +LIB1TARGET=$(SLB)$/_$(TARGET).lib +LIB1OBJFILES=$(SLOFILES) + +# --- Shared-Library --------------------------------------------------- + +SHL1TARGET=$(TARGET)$(UCP_VERSION) +SHL1IMPLIB=i$(TARGET) +SHL1VERSIONMAP=exports.map + +# @@@ Add additional libs here. +SHL1STDLIBS=\ + $(CPPUHELPERLIB) \ + $(CPPULIB) \ + $(SALLIB) \ + $(VOSLIB) \ + $(UCBHELPERLIB) + +SHL1DEF=$(MISC)$/$(SHL1TARGET).def +SHL1LIBS=$(LIB1TARGET) + +# --- Def-File --------------------------------------------------------- + +DEF1NAME=$(SHL1TARGET) +DEF1EXPORTFILE=exports.dxp + +# @@@ A description string for you UCP. +DEF1DES=UCB Content Provider + +# --- Targets ---------------------------------------------------------- + +.INCLUDE: target.mk + diff --git a/ucbhelper/workben/myucp/myucp_content.cxx b/ucbhelper/workben/myucp/myucp_content.cxx new file mode 100644 index 000000000000..938dec90661d --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_content.cxx @@ -0,0 +1,805 @@ +/************************************************************************* + * + * $RCSfile: myucp_content.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:37 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +/************************************************************************** + TODO + ************************************************************************** + + *************************************************************************/ + +#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_ +#include <com/sun/star/beans/PropertyAttribute.hpp> +#endif +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYACCESS_HPP_ +#include <com/sun/star/beans/XPropertyAccess.hpp> +#endif +#ifndef _COM_SUN_STAR_SDBC_XROW_HPP_ +#include <com/sun/star/sdbc/XRow.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_OPENCOMMANDARGUMENT2_HPP_ +#include <com/sun/star/ucb/OpenCommandArgument2.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_XCOMMANDINFO_HPP_ +#include <com/sun/star/ucb/XCommandInfo.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_XPERSISTENTPROPERTYSET_HPP_ +#include <com/sun/star/ucb/XPersistentPropertySet.hpp> +#endif +#ifndef _VOS_DIAGNOSE_HXX_ +#include <vos/diagnose.hxx> +#endif +#ifndef _UCBHELPER_CONTENTIDENTIFIER_HXX +#include <ucbhelper/contentidentifier.hxx> +#endif +#ifndef _UCBHELPER_PROPERTYVALUESET_HXX +#include <ucbhelper/propertyvalueset.hxx> +#endif + +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_CONTENT_HXX +#include "myucp_content.hxx" +#endif +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_PROVIDER_HXX +#include "myucp_provider.hxx" +#endif +// @@@ Adjust multi-include-protection-ifdef and header file name. +//#ifndef _MYUCP_RESULTSET_HXX +//#include "myucp_resultset.hxx" +//#endif + +using namespace com::sun::star::container; +using namespace com::sun::star::beans; +using namespace com::sun::star::lang; +using namespace com::sun::star::sdbc; +using namespace com::sun::star::ucb; +using namespace com::sun::star::uno; +using namespace cppu; +using namespace rtl; + +// @@@ Adjust namespace name. +using namespace myucp; + +//========================================================================= +//========================================================================= +// +// Content Implementation. +// +//========================================================================= +//========================================================================= + +Content::Content( const Reference< XMultiServiceFactory >& rxSMgr, + ::ucb::ContentProviderImplHelper* pProvider, + const Reference< XContentIdentifier >& Identifier ) +: ContentImplHelper( rxSMgr, pProvider, Identifier ) +{ + // @@@ Fill m_aProps here or implement lazy evaluation logic for this. + // m_aProps.aTitle = + // m_aprops.aContentType = + // m_aProps.bIsDocument = + // m_aProps.bIsFolder = +} + +//========================================================================= +// virtual +Content::~Content() +{ +} + +//========================================================================= +// +// XInterface methods. +// +//========================================================================= + +// virtual +void SAL_CALL Content::acquire() + throw( RuntimeException ) +{ + ContentImplHelper::acquire(); +} + +//========================================================================= +// virtual +void SAL_CALL Content::release() + throw( RuntimeException ) +{ + ContentImplHelper::release(); +} + +//========================================================================= +// virtual +Any SAL_CALL Content::queryInterface( const Type & rType ) + throw ( RuntimeException ) +{ + Any aRet; + + // @@@ Add support for additional interfaces. +#if 0 + aRet = cppu::queryInterface( rType, + static_cast< Xxxxxxxxx * >( this ) ); +#endif + + return aRet.hasValue() ? aRet : ContentImplHelper::queryInterface( rType ); +} + +//========================================================================= +// +// XTypeProvider methods. +// +//========================================================================= + +XTYPEPROVIDER_COMMON_IMPL( Content ); + +//========================================================================= +// virtual +Sequence< Type > SAL_CALL Content::getTypes() + throw( RuntimeException ) +{ + // @@@ Add own interfaces. + + static OTypeCollection* pCollection = NULL; + + if ( !pCollection ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if ( !pCollection ) + { + static OTypeCollection aCollection( + CPPU_TYPE_REF( XTypeProvider ), + CPPU_TYPE_REF( XServiceInfo ), + CPPU_TYPE_REF( XComponent ), + CPPU_TYPE_REF( XContent ), + CPPU_TYPE_REF( XCommandProcessor ), + CPPU_TYPE_REF( XPropertiesChangeNotifier ), + CPPU_TYPE_REF( XCommandInfoChangeNotifier ), + CPPU_TYPE_REF( XPropertyContainer ), + CPPU_TYPE_REF( XPropertySetInfoChangeNotifier ), + CPPU_TYPE_REF( XChild ) ); + pCollection = &aCollection; + } + } + + return (*pCollection).getTypes(); +} + +//========================================================================= +// +// XServiceInfo methods. +// +//========================================================================= + +// virtual +OUString SAL_CALL Content::getImplementationName() + throw( RuntimeException ) +{ + // @@@ Adjust implementation name. + return OUString::createFromAscii( "myucp_Content" ); +} + +//========================================================================= +// virtual +Sequence< OUString > SAL_CALL Content::getSupportedServiceNames() + throw( RuntimeException ) +{ + // @@@ Adjust macro name. + Sequence< OUString > aSNS( 1 ); + aSNS.getArray()[ 0 ] + = OUString::createFromAscii( MYUCP_CONTENT_SERVICE_NAME ); + return aSNS; +} + +//========================================================================= +// +// XContent methods. +// +//========================================================================= + +// virtual +OUString SAL_CALL Content::getContentType() + throw( RuntimeException ) +{ + // @@@ Adjust macro name ( def in myucp_provider.hxx ). + return OUString::createFromAscii( MYUCP_CONTENT_TYPE ); +} + +//========================================================================= +// +// XCommandProcessor methods. +// +//========================================================================= + +// virtual +Any SAL_CALL Content::execute( const Command& aCommand, + sal_Int32 CommandId, + const Reference< + XCommandEnvironment >& Environment ) + throw( Exception, CommandAbortedException, RuntimeException ) +{ + Any aRet; + + if ( aCommand.Name.compareToAscii( "getPropertyValues" ) == 0 ) + { + ////////////////////////////////////////////////////////////////// + // getPropertyValues + ////////////////////////////////////////////////////////////////// + + Sequence< Property > Properties; + if ( !( aCommand.Argument >>= Properties ) ) + { + VOS_ENSURE( sal_False, "Wrong argument type!" ); + return Any(); + } + + aRet <<= getPropertyValues( Properties ); + } + else if ( aCommand.Name.compareToAscii( "setPropertyValues" ) == 0 ) + { + ////////////////////////////////////////////////////////////////// + // setPropertyValues + ////////////////////////////////////////////////////////////////// + + Sequence< PropertyValue > aProperties; + if ( !( aCommand.Argument >>= aProperties ) ) + { + VOS_ENSURE( sal_False, "Wrong argument type!" ); + return Any(); + } + + if ( !aProperties.getLength() ) + { + VOS_ENSURE( sal_False, "No properties!" ); + return Any(); + } + + setPropertyValues( aProperties ); + } + else if ( aCommand.Name.compareToAscii( "getPropertySetInfo" ) == 0 ) + { + ////////////////////////////////////////////////////////////////// + // getPropertySetInfo + ////////////////////////////////////////////////////////////////// + + // Note: Implemented by base class. + aRet <<= getPropertySetInfo(); + } + else if ( aCommand.Name.compareToAscii( "getCommandInfo" ) == 0 ) + { + ////////////////////////////////////////////////////////////////// + // getCommandInfo + ////////////////////////////////////////////////////////////////// + + // Note: Implemented by base class. + aRet <<= getCommandInfo(); + } +#if 0 + else if ( isFolder() && ( aCommand.Name.compareToAscii( "open" ) == 0 ) ) + { + ////////////////////////////////////////////////////////////////// + // open command for a folder content + ////////////////////////////////////////////////////////////////// + + OpenCommandArgument2 aOpenCommand; + if ( aCommand.Argument >>= aOpenCommand ) + { + Reference< XDynamicResultSet > xSet + = new DynamicResultSet( m_xSMgr, this, aOpenCommand ); + aRet <<= xSet; + } + else + { + VOS_ENSURE( sal_False, + "Content::execute - invalid parameter!" ); + throw CommandAbortedException(); + } + } + else if ( aCommand.Name.compareToAscii( "insert" ) == 0 ) + { + ////////////////////////////////////////////////////////////////// + // insert + ////////////////////////////////////////////////////////////////// + + insert(); + } + else if ( aCommand.Name.compareToAscii( "delete" ) == 0 ) + { + ////////////////////////////////////////////////////////////////// + // delete + ////////////////////////////////////////////////////////////////// + + sal_Bool bDeletePhysical = sal_False; + aCommand.Argument >>= bDeletePhysical; + destroy( bDeletePhysical ); + + // Remove own and all childrens(!) persistent data. +// removeData(); + } +#endif + else + { + ////////////////////////////////////////////////////////////////// + // Unknown command + ////////////////////////////////////////////////////////////////// + + VOS_ENSURE( sal_False, + "Content::execute - unknown command!" ); + throw CommandAbortedException(); + } + + return aRet; +} + +//========================================================================= +// virtual +void SAL_CALL Content::abort( sal_Int32 CommandId ) + throw( RuntimeException ) +{ + // @@@ Implement logic to abort running commands, if this makes + // sense for your content. +} + +//========================================================================= +// +// Non-interface methods. +// +//========================================================================= + +// virtual +OUString Content::getParentURL() +{ + OUString aURL = m_xIdentifier->getContentIdentifier(); + + // @@@ Assemble URL of parent... + + return OUString(); +} + +//========================================================================= +// static +Reference< XRow > Content::getPropertyValues( + const Reference< XMultiServiceFactory >& rSMgr, + const Sequence< Property >& rProperties, + const ContentProperties& rData, + const vos::ORef< ucb::ContentProviderImplHelper >& rProvider, + const OUString& rContentId ) +{ + // Note: Empty sequence means "get values of all supported properties". + + vos::ORef< ::ucb::PropertyValueSet > xRow + = new ::ucb::PropertyValueSet( rSMgr ); + + sal_Int32 nCount = rProperties.getLength(); + if ( nCount ) + { + Reference< XPropertySet > xAdditionalPropSet; + sal_Bool bTriedToGetAdditonalPropSet = sal_False; + + const Property* pProps = rProperties.getConstArray(); + for ( sal_Int32 n = 0; n < nCount; ++n ) + { + const Property& rProp = pProps[ n ]; + + // Process Core properties. + + if ( rProp.Name.compareToAscii( "ContentType" ) == 0 ) + { + xRow->appendString ( rProp, rData.aContentType ); + } + else if ( rProp.Name.compareToAscii( "Title" ) == 0 ) + { + xRow->appendString ( rProp, rData.aTitle ); + } + else if ( rProp.Name.compareToAscii( "IsDocument" ) == 0 ) + { + xRow->appendBoolean( rProp, rData.bIsDocument ); + } + else if ( rProp.Name.compareToAscii( "IsFolder" ) == 0 ) + { + xRow->appendBoolean( rProp, rData.bIsFolder ); + } + + // @@@ Process other properties supported directly. +#if 0 + else if ( rProp.Name.compareToAscii( "xxxxxx" ) == 0 ) + { + } +#endif + else + { + // @@@ Note: If your data source supports adding/removing + // properties, you should implement the interface + // XPropertyContainer by yourself and supply your own + // logic here. The base class uses the service + // "com.sun.star.ucb.Store" to maintain Additional Core + // properties. But using server functionality is preferred! + + // Not a Core Property! Maybe it's an Additional Core Property?! + + if ( !bTriedToGetAdditonalPropSet && !xAdditionalPropSet.is() ) + { + xAdditionalPropSet + = Reference< XPropertySet >( + rProvider->getAdditionalPropertySet( rContentId, + sal_False ), + UNO_QUERY ); + bTriedToGetAdditonalPropSet = sal_True; + } + + if ( xAdditionalPropSet.is() ) + { + if ( !xRow->appendPropertySetValue( + xAdditionalPropSet, + rProp ) ) + { + // Append empty entry. + xRow->appendVoid( rProp ); + } + } + else + { + // Append empty entry. + xRow->appendVoid( rProp ); + } + } + } + } + else + { + // Append all Core Properties. + xRow->appendString ( + Property( OUString::createFromAscii( "ContentType" ), + -1, + getCppuType( static_cast< const OUString * >( 0 ) ), + PropertyAttribute::BOUND | PropertyAttribute::READONLY ), + rData.aContentType ); + xRow->appendString ( + Property( OUString::createFromAscii( "Title" ), + -1, + getCppuType( static_cast< const OUString * >( 0 ) ), + PropertyAttribute::BOUND ), + rData.aTitle ); + xRow->appendBoolean( + Property( OUString::createFromAscii( "IsDocument" ), + -1, + getCppuBooleanType(), + PropertyAttribute::BOUND | PropertyAttribute::READONLY ), + rData.bIsDocument ); + xRow->appendBoolean( + Property( OUString::createFromAscii( "IsFolder" ), + -1, + getCppuBooleanType(), + PropertyAttribute::BOUND | PropertyAttribute::READONLY ), + rData.bIsFolder ); + + // @@@ Append other properties supported directly. + + // @@@ Note: If your data source supports adding/removing + // properties, you should implement the interface + // XPropertyContainer by yourself and supply your own + // logic here. The base class uses the service + // "com.sun.star.ucb.Store" to maintain Additional Core + // properties. But using server functionality is preferred! + + // Append all Additional Core Properties. + + Reference< XPropertySet > xSet( + rProvider->getAdditionalPropertySet( rContentId, sal_False ), + UNO_QUERY ); + xRow->appendPropertySet( xSet ); + } + + return Reference< XRow >( xRow.getBodyPtr() ); +} + +//========================================================================= +Reference< XRow > Content::getPropertyValues( + const Sequence< Property >& rProperties ) +{ + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + return getPropertyValues( m_xSMgr, + rProperties, + m_aProps, + m_xProvider, + m_xIdentifier->getContentIdentifier() ); +} + +//========================================================================= +void Content::setPropertyValues( const Sequence< PropertyValue >& rValues ) +{ + osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); + + Sequence< PropertyChangeEvent > aChanges( rValues.getLength() ); + sal_Int32 nChanged = 0; + + PropertyChangeEvent aEvent; + aEvent.Source = static_cast< OWeakObject * >( this ); + aEvent.Further = sal_False; +// aEvent.PropertyName = + aEvent.PropertyHandle = -1; +// aEvent.OldValue = +// aEvent.NewValue = + + const PropertyValue* pValues = rValues.getConstArray(); + sal_Int32 nCount = rValues.getLength(); + + Reference< XPersistentPropertySet > xAdditionalPropSet; + sal_Bool bTriedToGetAdditonalPropSet = sal_False; + + for ( sal_Int32 n = 0; n < nCount; ++n ) + { + const PropertyValue& rValue = pValues[ n ]; + + if ( rValue.Name.compareToAscii( "ContentType" ) == 0 ) + { + // Read-only property! + } + else if ( rValue.Name.compareToAscii( "IsDocument" ) == 0 ) + { + // Read-only property! + } + else if ( rValue.Name.compareToAscii( "IsFolder" ) == 0 ) + { + // Read-only property! + } + else if ( rValue.Name.compareToAscii( "Title" ) == 0 ) + { + OUString aNewValue; + if ( rValue.Value >>= aNewValue ) + { + if ( aNewValue != m_aProps.aTitle ) + { + osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); + m_aProps.aTitle = aNewValue; + + aGuard.clear(); + + aEvent.PropertyName = rValue.Name; + aEvent.OldValue = makeAny( m_aProps.aTitle ); + aEvent.NewValue = makeAny( aNewValue ); + + aChanges.getArray()[ nChanged ] = aEvent; + nChanged++; + } + } + } + + // @@@ Process other properties supported directly. +#if 0 + else if ( rValue.Name.compareToAscii( "xxxxx" ) == 0 ) + { + } +#endif + else + { + // @@@ Note: If your data source supports adding/removing + // properties, you should implement the interface + // XPropertyContainer by yourself and supply your own + // logic here. The base class uses the service + // "com.sun.star.ucb.Store" to maintain Additional Core + // properties. But using server functionality is preferred! + + // Not a Core Property! Maybe it's an Additional Core Property?! + + if ( !bTriedToGetAdditonalPropSet && !xAdditionalPropSet.is() ) + { + xAdditionalPropSet = getAdditionalPropertySet( sal_False ); + bTriedToGetAdditonalPropSet = sal_True; + } + + if ( xAdditionalPropSet.is() ) + { + try + { + Any aOldValue = xAdditionalPropSet->getPropertyValue( + rValue.Name ); + xAdditionalPropSet->setPropertyValue( + rValue.Name, rValue.Value ); + + if ( aOldValue != rValue.Value ) + { + aEvent.PropertyName = rValue.Name; + aEvent.OldValue = aOldValue; + aEvent.NewValue = rValue.Value; + + aChanges.getArray()[ nChanged ] = aEvent; + nChanged++; + } + } + catch ( UnknownPropertyException ) + { + } + catch ( WrappedTargetException ) + { + } + catch ( PropertyVetoException ) + { + } + catch ( IllegalArgumentException ) + { + } + } + } + } + + if ( nChanged > 0 ) + { + // @@@ Save changes. +// storeData(); + + aGuard.clear(); + aChanges.realloc( nChanged ); + notifyPropertiesChange( aChanges ); + } +} + +#if 0 +//========================================================================= +void Content::queryChildren( ::myucp::ContentRefList& rChildren ) +{ + // @@@ Adapt method to your URL scheme... + + // Obtain a list with a snapshot of all currently instanciated contents + // from provider and extract the contents which are direct children + // of this content. + + ::ucb::ContentRefList aAllContents; + m_xProvider->queryExistingContents( aAllContents ); + + OUString aURL = m_xIdentifier->getContentIdentifier(); + sal_Int32 nPos = aURL.lastIndexOf( '/' ); + + if ( nPos != ( aURL.getLength() - 1 ) ) + { + // No trailing slash found. Append. + aURL += OUString::createFromAscii( "/" ); + } + + sal_Int32 nLen = aURL.getLength(); + + ::ucb::ContentRefList::const_iterator it = aAllContents.begin(); + ::ucb::ContentRefList::const_iterator end = aAllContents.end(); + + while ( it != end ) + { + ::ucb::ContentImplHelperRef xChild = (*it); + OUString aChildURL = xChild->getIdentifier()->getContentIdentifier(); + + // Is aURL a prefix of aChildURL? + if ( ( aChildURL.getLength() > nLen ) && + ( aChildURL.compareTo( aURL, nLen ) == 0 ) ) + { + sal_Int32 nPos = nLen; + nPos = aChildURL.indexOf( '/', nPos ); + + if ( ( nPos == -1 ) || + ( nPos == ( aChildURL.getLength() - 1 ) ) ) + { + // No further slashes / only a final slash. It's a child! + rChildren.push_back( + HierarchyContentRef( + static_cast< HierarchyContent * >( + xChild.getBodyPtr() ) ) ); + } + } + ++it; + } +} + +//========================================================================= +void Content::insert() + throw( CommandAbortedException ) +{ + osl::ClearableGuard< osl::Mutex > aGuard( m_aMutex ); + + // Check, if all required properties were set. + if ( m_aProps.xxxx == yyyyy ) + { + VOS_ENSURE( sal_False, "Content::insert - property value missing!" ); + throw CommandAbortedException(); + } + + // Assemble new content identifier... + + Reference< XContentIdentifier > xId = ...; + if ( !xId.is() ) + throw CommandAbortedException(); + + // Fail, if a content with given id already exists. + if ( hasData( xId ) ) + throw CommandAbortedException(); + + m_xIdentifier = xId; + +// @@@ +// storeData(); + + aGuard.clear(); + inserted(); +} + +//========================================================================= +void Content::destroy( sal_Bool bDeletePhysical ) + throw( CommandAbortedException ) +{ + // @@@ take care about bDeletePhysical -> trashcan support + + Reference< XContent > xThis = this; + + deleted(); + + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + + // Process instanciated children... + + ::myucp::ContentRefList aChildren; + queryChildren( aChildren ); + + ContentRefList::const_iterator it = aChildren.begin(); + ContentRefList::const_iterator end = aChildren.end(); + + while ( it != end ) + { + (*it)->destroy( bDeletePhysical ); + ++it; + } +} +#endif + diff --git a/ucbhelper/workben/myucp/myucp_content.hxx b/ucbhelper/workben/myucp/myucp_content.hxx new file mode 100644 index 000000000000..cef039ec6ffa --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_content.hxx @@ -0,0 +1,207 @@ +/************************************************************************* + * + * $RCSfile: myucp_content.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:37 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +// @@@ Adjust multi-include-protection-ifdef. +#ifndef _MYUCP_CONTENT_HXX +#define _MYUCP_CONTENT_HXX + +#ifndef __LIST__ +#include <stl/list> +#endif +#ifndef _VOS_REF_HXX_ +#include <vos/ref.hxx> +#endif + +#ifndef _UCBHELPER_CONTENTHELPER_HXX +#include <ucbhelper/contenthelper.hxx> +#endif + +namespace com { namespace sun { namespace star { namespace beans { + struct Property; + struct PropertyValue; +} } } } + +namespace com { namespace sun { namespace star { namespace sdbc { + class XRow; +} } } } + +// @@@ Adjust namespace name. +namespace myucp +{ + +//========================================================================= + +// @@@ Adjust service name. + +// UNO service name for the content. +#define MYUCP_CONTENT_SERVICE_NAME \ + "com.sun.star.ucb.MyContent" + +//========================================================================= + +struct ContentProperties +{ + ::rtl::OUString aTitle; // Title + ::rtl::OUString aContentType; // ContentType + sal_Bool bIsDocument; // IsDocument + sal_Bool bIsFolder; // IsFolder + + // @@@ Add other properties supported by your content. + + ContentProperties() + : bIsDocument( sal_False ), bIsFolder( sal_True ) {} +}; + +//========================================================================= + +class Content : public ::ucb::ContentImplHelper +{ + ContentProperties m_aProps; + +private: + virtual const ::ucb::PropertyInfoTableEntry& getPropertyInfoTable(); + virtual const ::ucb::CommandInfoTableEntry& getCommandInfoTable(); + virtual ::rtl::OUString getParentURL(); + + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > + getPropertyValues( const ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::Property >& rProperties ); + void setPropertyValues( + const ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue >& rValues ); + +// typedef vos::ORef< HierarchyContent > HierarchyContentRef; +// typedef std::list< HierarchyContentRef > HierarchyContentRefList; +// void queryChildren( HierarchyContentRefList& rChildren ); + +// // Command "insert" +// void insert() +// throw( ::com::sun::star::ucb::CommandAbortedException ); + +// // Command "delete" +// void destroy( sal_Bool bDeletePhysical ) +// throw( ::com::sun::star::ucb::CommandAbortedException ); + +public: + Content( const ::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, + ::ucb::ContentProviderImplHelper* pProvider, + const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XContentIdentifier >& Identifier ); + virtual ~Content(); + + // XInterface + XINTERFACE_DECL() + + // XTypeProvider + XTYPEPROVIDER_DECL() + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL + getImplementationName() + throw( ::com::sun::star::uno::RuntimeException ); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL + getSupportedServiceNames() + throw( ::com::sun::star::uno::RuntimeException ); + + // XContent + virtual rtl::OUString SAL_CALL + getContentType() + throw( com::sun::star::uno::RuntimeException ); + + // XCommandProcessor + virtual com::sun::star::uno::Any SAL_CALL + execute( const com::sun::star::ucb::Command& aCommand, + sal_Int32 CommandId, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XCommandEnvironment >& Environment ) + throw( com::sun::star::uno::Exception, + com::sun::star::ucb::CommandAbortedException, + com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL + abort( sal_Int32 CommandId ) + throw( com::sun::star::uno::RuntimeException ); + + ////////////////////////////////////////////////////////////////////// + // Additional interfaces + ////////////////////////////////////////////////////////////////////// + + // Add additional interfaces ( like com::sun:.star::ucb::XContentCreator ). + + ////////////////////////////////////////////////////////////////////// + // Non-interface methods. + ////////////////////////////////////////////////////////////////////// + + // Called from resultset data supplier. + static ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > + getPropertyValues( const ::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory >& rSMgr, + const ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::Property >& rProperties, + const ContentProperties& rData, + const ::vos::ORef< ::ucb::ContentProviderImplHelper >& + rProvider, + const ::rtl::OUString& rContentId ); +}; + +} + +#endif diff --git a/ucbhelper/workben/myucp/myucp_contentcaps.cxx b/ucbhelper/workben/myucp/myucp_contentcaps.cxx new file mode 100644 index 000000000000..8feff8e28cda --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_contentcaps.cxx @@ -0,0 +1,253 @@ +/************************************************************************* + * + * $RCSfile: myucp_contentcaps.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:37 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +/************************************************************************** + TODO + ************************************************************************** + + *************************************************************************/ + +#ifndef _COM_SUN_STAR_BEANS_PROPERTY_HPP_ +#include <com/sun/star/beans/Property.hpp> +#endif +#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_ +#include <com/sun/star/beans/PropertyAttribute.hpp> +#endif +#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_ +#include <com/sun/star/beans/PropertyValue.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_OPENCOMMANDARGUMENT2_HPP_ +#include <com/sun/star/ucb/OpenCommandArgument2.hpp> +#endif +#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_ +#include <com/sun/star/uno/Sequence.hxx> +#endif + +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_CONTENT_HXX +#include "myucp_content.hxx" +#endif + +using namespace com::sun::star::beans; +using namespace com::sun::star::uno; +using namespace com::sun::star::ucb; +using namespace rtl; + +// @@@ Adjust namespace name. +using namespace myucp; + +//========================================================================= +// +// Content implementation. +// +//========================================================================= + +//========================================================================= +// +// IMPORTENT: If any property data ( name / type / ... ) are changed, then +// Content::getPropertyValues(...) must be adapted too! +// +//========================================================================= + +// virtual +const ::ucb::PropertyInfoTableEntry& Content::getPropertyInfoTable() +{ + // @@@ Add additional properties... + + // @@@ Note: If your data source supports adding/removing properties, + // you should implement the interface XPropertyContainer + // by yourself and supply your own logic here. The base class + // uses the service "com.sun.star.ucb.Store" to maintain + // Additional Core properties. But using server functionality + // is preferred! In fact you should return a table conatining + // even that dynamicly added properties. + + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + + //================================================================= + // + // Supported properties + // + //================================================================= + + static ::ucb::PropertyInfoTableEntry aPropertyInfoTable[] = + { + /////////////////////////////////////////////////////////////// + // Required properties + /////////////////////////////////////////////////////////////// + { + "ContentType", + -1, + &getCppuType( static_cast< const OUString * >( 0 ) ), + PropertyAttribute::BOUND | PropertyAttribute::READONLY + }, + { + "IsDocument", + -1, + &getCppuBooleanType(), + PropertyAttribute::BOUND | PropertyAttribute::READONLY + }, + { + "IsFolder", + -1, + &getCppuBooleanType(), + PropertyAttribute::BOUND | PropertyAttribute::READONLY + }, + { + "Title", + -1, + &getCppuType( static_cast< const OUString * >( 0 ) ), + PropertyAttribute::BOUND + }, + /////////////////////////////////////////////////////////////// + // Optional standard properties + /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + // New properties + /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + // EOT + /////////////////////////////////////////////////////////////// + { + 0, // name + 0, // handle + 0, // type + 0 // attributes + } + }; + return *aPropertyInfoTable; +} + +//========================================================================= +// virtual +const ::ucb::CommandInfoTableEntry& Content::getCommandInfoTable() +{ + // @@@ Add additional commands... + + osl::Guard< osl::Mutex > aGuard( m_aMutex ); + + //================================================================= + // + // Supported commands + // + //================================================================= + + static ::ucb::CommandInfoTableEntry aCommandInfoTable[] = + { + /////////////////////////////////////////////////////////////// + // Required commands + /////////////////////////////////////////////////////////////// + { + "getCommandInfo", + -1, + &getCppuVoidType() + }, + { + "getPropertySetInfo", + -1, + &getCppuVoidType() + }, + { + "getPropertyValues", + -1, + &getCppuType( static_cast< Sequence< Property > * >( 0 ) ) + }, + { + "setPropertyValues", + -1, + &getCppuType( static_cast< Sequence< PropertyValue > * >( 0 ) ) + }, + /////////////////////////////////////////////////////////////// + // Optional standard commands + /////////////////////////////////////////////////////////////// +#if 0 + { + "delete", + -1, + &getCppuBooleanType() + }, + { + "insert", + -1, + &getCppuVoidType() + }, + { + "open", + -1, + &getCppuType( static_cast< OpenCommandArgument2 * >( 0 ) ) + }, +#endif + /////////////////////////////////////////////////////////////// + // New commands + /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + // EOT + /////////////////////////////////////////////////////////////// + { + 0, // name + 0, // handle + 0 // type + } + }; + + return *aCommandInfoTable; +} + diff --git a/ucbhelper/workben/myucp/myucp_datasupplier.cxx b/ucbhelper/workben/myucp/myucp_datasupplier.cxx new file mode 100644 index 000000000000..3fc120d1f40d --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_datasupplier.cxx @@ -0,0 +1,443 @@ +/************************************************************************* + * + * $RCSfile: myucp_datasupplier.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +/************************************************************************** + TODO + ************************************************************************** + + *************************************************************************/ + +#ifndef __VECTOR__ +#include <stl/vector> +#endif +#ifndef _UCBHELPER_CONTENTIDENTIFIER_HXX +#include <ucbhelper/contentidentifier.hxx> +#endif +#ifndef _UCBHELPER_PROVIDERHELPER_HXX +#include <ucbhelper/providerhelper.hxx> +#endif + +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_DATASUPPLIER_HXX +#include "myucp_datasupplier.hxx" +#endif +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_CONTENT_HXX +#include "myucp_content.hxx" +#endif + +using namespace com::sun::star::beans; +using namespace com::sun::star::lang; +using namespace com::sun::star::ucb; +using namespace com::sun::star::uno; +using namespace com::sun::star::sdbc; +using namespace rtl; +using namespace ucb; + +// @@@ Adjust namespace name. +using namespace myucp; + +// @@@ Adjust namespace name. +namespace myucp +{ + +//========================================================================= +// +// struct ResultListEntry. +// +//========================================================================= + +struct ResultListEntry +{ + OUString aId; + Reference< XContentIdentifier > xId; + Reference< XContent > xContent; + Reference< XRow > xRow; + const ContentProperties& rData; + + ResultListEntry( const ContentProperties& rEntry ) : rData( rEntry ) {} +}; + +//========================================================================= +// +// ResultList. +// +//========================================================================= + +typedef std::vector< ResultListEntry* > ResultList; + +//========================================================================= +// +// struct DataSupplier_Impl. +// +//========================================================================= + +struct DataSupplier_Impl +{ + osl::Mutex m_aMutex; + ResultList m_aResults; + vos::ORef< Content > m_xContent; + Reference< XMultiServiceFactory > m_xSMgr; +// @@@ The data source and an iterator for it +// HierarchyEntry m_aFolder; +// HierarchyEntry::iterator m_aIterator; + sal_Bool m_bCountFinal; + + DataSupplier_Impl( const Reference< XMultiServiceFactory >& rxSMgr, + const vos::ORef< Content >& rContent ) + : m_xContent( rContent ), m_xSMgr( rxSMgr ), +// m_aFolder( rxSMgr, rContent->getIdentifier()->getContentIdentifier() ), + m_bCountFinal( sal_False ) {} + ~DataSupplier_Impl(); +}; + +//========================================================================= +DataSupplier_Impl::~DataSupplier_Impl() +{ + ResultList::const_iterator it = m_aResults.begin(); + ResultList::const_iterator end = m_aResults.end(); + + while ( it != end ) + { + delete (*it); + it++; + } +} + +} + +//========================================================================= +//========================================================================= +// +// DataSupplier Implementation. +// +//========================================================================= +//========================================================================= + +DataSupplier::DataSupplier( const Reference< XMultiServiceFactory >& rxSMgr, + const vos::ORef< Content >& rContent ) +: m_pImpl( new DataSupplier_Impl( rxSMgr, rContent ) ) +{ +} + +//========================================================================= +// virtual +DataSupplier::~DataSupplier() +{ + delete m_pImpl; +} + +//========================================================================= +// virtual +OUString DataSupplier::queryContentIdentifierString( sal_uInt32 nIndex ) +{ + osl::Guard< osl::Mutex > aGuard( m_pImpl->m_aMutex ); + + if ( nIndex < m_pImpl->m_aResults.size() ) + { + OUString aId = m_pImpl->m_aResults[ nIndex ]->aId; + if ( aId.getLength() ) + { + // Already cached. + return aId; + } + } + + if ( getResult( nIndex ) ) + { + OUString aId + = m_pImpl->m_xContent->getIdentifier()->getContentIdentifier(); + + aId += m_pImpl->m_aResults[ nIndex ]->rData.aTitle; + + m_pImpl->m_aResults[ nIndex ]->aId = aId; + return aId; + } + return OUString(); +} + +//========================================================================= +// virtual +Reference< XContentIdentifier > DataSupplier::queryContentIdentifier( + sal_uInt32 nIndex ) +{ + osl::Guard< osl::Mutex > aGuard( m_pImpl->m_aMutex ); + + if ( nIndex < m_pImpl->m_aResults.size() ) + { + Reference< XContentIdentifier > xId + = m_pImpl->m_aResults[ nIndex ]->xId; + if ( xId.is() ) + { + // Already cached. + return xId; + } + } + + OUString aId = queryContentIdentifierString( nIndex ); + if ( aId.getLength() ) + { + Reference< XContentIdentifier > xId = new ContentIdentifier( aId ); + m_pImpl->m_aResults[ nIndex ]->xId = xId; + return xId; + } + return Reference< XContentIdentifier >(); +} + +//========================================================================= +// virtual +Reference< XContent > DataSupplier::queryContent( sal_uInt32 nIndex ) +{ + osl::Guard< osl::Mutex > aGuard( m_pImpl->m_aMutex ); + + if ( nIndex < m_pImpl->m_aResults.size() ) + { + Reference< XContent > xContent + = m_pImpl->m_aResults[ nIndex ]->xContent; + if ( xContent.is() ) + { + // Already cached. + return xContent; + } + } + + Reference< XContentIdentifier > xId = queryContentIdentifier( nIndex ); + if ( xId.is() ) + { + try + { + Reference< XContent > xContent + = m_pImpl->m_xContent->getProvider()->queryContent( xId ); + m_pImpl->m_aResults[ nIndex ]->xContent = xContent; + return xContent; + + } + catch ( IllegalIdentifierException& ) + { + } + } + return Reference< XContent >(); +} + +//========================================================================= +// virtual +sal_Bool DataSupplier::getResult( sal_uInt32 nIndex ) +{ + osl::ClearableGuard< osl::Mutex > aGuard( m_pImpl->m_aMutex ); + + if ( m_pImpl->m_aResults.size() > nIndex ) + { + // Result already present. + return sal_True; + } + + // Result not (yet) present. + + if ( m_pImpl->m_bCountFinal ) + return sal_False; + + // Try to obtain result... + + sal_uInt32 nOldCount = m_pImpl->m_aResults.size(); + sal_Bool bFound = sal_False; + sal_uInt32 nPos = nOldCount; + + // @@@ Obtain data and put it into result list... +/* + while ( m_pImpl->m_aFolder.next( m_pImpl->m_aIterator ) ) + { + m_pImpl->m_aResults.push_back( + new ResultListEntry( *m_pImpl->m_aIterator ) ); + + if ( nPos == nIndex ) + { + // Result obtained. + bFound = sal_True; + break; + } + + nPos++; + } +*/ + + if ( !bFound ) + m_pImpl->m_bCountFinal = sal_True; + + vos::ORef< ResultSet > xResultSet = getResultSet(); + if ( xResultSet.isValid() ) + { + // Callbacks follow! + aGuard.clear(); + + if ( nOldCount < m_pImpl->m_aResults.size() ) + xResultSet->rowCountChanged( + nOldCount, m_pImpl->m_aResults.size() ); + + if ( m_pImpl->m_bCountFinal ) + xResultSet->rowCountFinal(); + } + + return bFound; +} + +//========================================================================= +// virtual +sal_uInt32 DataSupplier::totalCount() +{ + osl::ClearableGuard< osl::Mutex > aGuard( m_pImpl->m_aMutex ); + + if ( m_pImpl->m_bCountFinal ) + return m_pImpl->m_aResults.size(); + + sal_uInt32 nOldCount = m_pImpl->m_aResults.size(); + + // @@@ Obtain data and put it into result list... +/* + while ( m_pImpl->m_aFolder.next( m_pImpl->m_aIterator ) ) + m_pImpl->m_aResults.push_back( + new ResultListEntry( *m_pImpl->m_aIterator ) ); +*/ + m_pImpl->m_bCountFinal = sal_True; + + vos::ORef< ResultSet > xResultSet = getResultSet(); + if ( xResultSet.isValid() ) + { + // Callbacks follow! + aGuard.clear(); + + if ( nOldCount < m_pImpl->m_aResults.size() ) + xResultSet->rowCountChanged( + nOldCount, m_pImpl->m_aResults.size() ); + + xResultSet->rowCountFinal(); + } + + return m_pImpl->m_aResults.size(); +} + +//========================================================================= +// virtual +sal_uInt32 DataSupplier::currentCount() +{ + return m_pImpl->m_aResults.size(); +} + +//========================================================================= +// virtual +sal_Bool DataSupplier::isCountFinal() +{ + return m_pImpl->m_bCountFinal; +} + +//========================================================================= +// virtual +Reference< XRow > DataSupplier::queryPropertyValues( sal_uInt32 nIndex ) +{ + osl::Guard< osl::Mutex > aGuard( m_pImpl->m_aMutex ); + + if ( nIndex < m_pImpl->m_aResults.size() ) + { + Reference< XRow > xRow = m_pImpl->m_aResults[ nIndex ]->xRow; + if ( xRow.is() ) + { + // Already cached. + return xRow; + } + } + + if ( getResult( nIndex ) ) + { + Reference< XRow > xRow = Content::getPropertyValues( + m_pImpl->m_xSMgr, + getResultSet()->getProperties(), + m_pImpl->m_aResults[ nIndex ]->rData, + m_pImpl->m_xContent->getProvider(), + queryContentIdentifierString( nIndex ) ); + m_pImpl->m_aResults[ nIndex ]->xRow = xRow; + return xRow; + } + + return Reference< XRow >(); +} + +//========================================================================= +// virtual +void DataSupplier::releasePropertyValues( sal_uInt32 nIndex ) +{ + osl::Guard< osl::Mutex > aGuard( m_pImpl->m_aMutex ); + + if ( nIndex < m_pImpl->m_aResults.size() ) + m_pImpl->m_aResults[ nIndex ]->xRow = Reference< XRow >(); +} + +//========================================================================= +// virtual +void DataSupplier::close() +{ +} + +//========================================================================= +// virtual +void DataSupplier::validate() + throw( ResultSetException ) +{ +} + diff --git a/ucbhelper/workben/myucp/myucp_datasupplier.hxx b/ucbhelper/workben/myucp/myucp_datasupplier.hxx new file mode 100644 index 000000000000..a7337d565d5f --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_datasupplier.hxx @@ -0,0 +1,111 @@ +/************************************************************************* + * + * $RCSfile: myucp_datasupplier.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +// @@@ Adjust multi-include-protection-ifdef. +#ifndef _MYUCP_DATASUPPLIER_HXX +#define _MYUCP_DATASUPPLIER_HXX + +#ifndef _UCBHELPER_RESULTSET_HXX +#include <ucbhelper/resultset.hxx> +#endif + +// @@@ Adjust namespace name. +namespace myucp { + +struct DataSupplier_Impl; +class Content; + +class DataSupplier : public ucb::ResultSetDataSupplier +{ + DataSupplier_Impl* m_pImpl; + +public: + DataSupplier( const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory >& rxSMgr, + const vos::ORef< Content >& rContent ); + virtual ~DataSupplier(); + + virtual rtl::OUString queryContentIdentifierString( sal_uInt32 nIndex ); + virtual com::sun::star::uno::Reference< + com::sun::star::ucb::XContentIdentifier > + queryContentIdentifier( sal_uInt32 nIndex ); + virtual com::sun::star::uno::Reference< com::sun::star::ucb::XContent > + queryContent( sal_uInt32 nIndex ); + + virtual sal_Bool getResult( sal_uInt32 nIndex ); + + virtual sal_uInt32 totalCount(); + virtual sal_uInt32 currentCount(); + virtual sal_Bool isCountFinal(); + + virtual com::sun::star::uno::Reference< com::sun::star::sdbc::XRow > + queryPropertyValues( sal_uInt32 nIndex ); + virtual void releasePropertyValues( sal_uInt32 nIndex ); + + virtual void close(); + + virtual void validate() + throw( com::sun::star::ucb::ResultSetException ); +}; + +} + +#endif diff --git a/ucbhelper/workben/myucp/myucp_provider.cxx b/ucbhelper/workben/myucp/myucp_provider.cxx new file mode 100644 index 000000000000..2e409d46191a --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_provider.cxx @@ -0,0 +1,211 @@ +/************************************************************************* + * + * $RCSfile: myucp_provider.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +/************************************************************************** + TODO + ************************************************************************** + + *************************************************************************/ + +#ifndef _VOS_DIAGNOSE_HXX_ +#include <vos/diagnose.hxx> +#endif +#ifndef _UCBHELPER_CONTENTIDENTIFIER_HXX +#include <ucbhelper/contentidentifier.hxx> +#endif + +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_PROVIDER_HXX +#include "myucp_provider.hxx" +#endif +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_CONTENT_HXX +#include "myucp_content.hxx" +#endif + +using namespace com::sun::star::lang; +using namespace com::sun::star::ucb; +using namespace com::sun::star::uno; +using namespace rtl; + +// @@@ Adjust namespace name. +using namespace myucp; + +//========================================================================= +//========================================================================= +// +// ContentProvider Implementation. +// +//========================================================================= +//========================================================================= + +ContentProvider::ContentProvider( + const Reference< XMultiServiceFactory >& rSMgr ) +: ::ucb::ContentProviderImplHelper( rSMgr ) +{ +} + +//========================================================================= +// virtual +ContentProvider::~ContentProvider() +{ +} + +//========================================================================= +// +// XInterface methods. +// +//========================================================================= + +// @@@ Add own interfaces. +XINTERFACE_IMPL_3( ContentProvider, + XTypeProvider, + XServiceInfo, + XContentProvider ); + +//========================================================================= +// +// XTypeProvider methods. +// +//========================================================================= + +// @@@ Add own interfaces. +XTYPEPROVIDER_IMPL_3( ContentProvider, + XTypeProvider, + XServiceInfo, + XContentProvider ); + +//========================================================================= +// +// XServiceInfo methods. +// +//========================================================================= + +// @@@ Adjust implementation name and service name. +XSERVICEINFO_IMPL_1( ContentProvider, + OUString::createFromAscii( + "myucp_ContentProvider" ), + OUString::createFromAscii( + MYUCP_CONTENT_PROVIDER_SERVICE_NAME ) ); + +//========================================================================= +// +// Service factory implementation. +// +//========================================================================= + +ONE_INSTANCE_SERVICE_FACTORY_IMPL( ContentProvider ); + +//========================================================================= +// +// XContentProvider methods. +// +//========================================================================= + +// virtual +Reference< XContent > SAL_CALL ContentProvider::queryContent( + const Reference< XContentIdentifier >& Identifier ) + throw( IllegalIdentifierException, RuntimeException ) +{ + vos::OGuard aGuard( m_aMutex ); + + // Check URL scheme... + + OUString aScheme( OUString::createFromAscii( MYUCP_URL_SCHEME ) ); + if ( !Identifier->getContentProviderScheme().equalsIgnoreCase( aScheme ) ) + throw IllegalIdentifierException(); + + // @@@ Further id checks may go here... +#if 0 + if ( id-check-failes ) + throw IllegalIdentifierException(); +#endif + + // @@@ Id normalization may go here... +#if 0 + // Normalize URL and create new Id. + OUString aCanonicURL = xxxxx( Identifier->getContentIdentifier() ); + Reference< XContentIdentifier > xCanonicId = + new ::ucb::ContentIdentifier( m_xSMgr, aCanonicURL ); +#else + Reference< XContentIdentifier > xCanonicId = Identifier; +#endif + + // Check, if a content with given id already exists... + Reference< XContent > xContent + = queryExistingContent( xCanonicId ).getBodyPtr(); + if ( xContent.is() ) + return xContent; + + // @@@ Decision, which content implementation to instanciate may be + // made here ( in case you have different content classes ). + + // Create a new content. Note that the content will insert itself + // into providers content list by calling addContent(...) from it's ctor. + + xContent = new Content( m_xSMgr, this, xCanonicId ); + + if ( !xContent->getIdentifier().is() ) + throw IllegalIdentifierException(); + + return xContent; +} + diff --git a/ucbhelper/workben/myucp/myucp_provider.hxx b/ucbhelper/workben/myucp/myucp_provider.hxx new file mode 100644 index 000000000000..4d52c82fa7e9 --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_provider.hxx @@ -0,0 +1,131 @@ +/************************************************************************* + * + * $RCSfile: myucp_provider.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +// @@@ Adjust multi-include-protection-ifdef. +#ifndef _MYUCP_PROVIDER_HXX +#define _MYUCP_PROVIDER_HXX + +#ifndef _UCBHELPER_PROVIDERHELPER_HXX +#include <ucbhelper/providerhelper.hxx> +#endif + +// @@@ Adjust namespace name. +namespace myucp { + +//========================================================================= + +// @@@ Adjust defines. + +// UNO service name for the provider. This name will be used by the UCB to +// create instances of the provider. +#define MYUCP_CONTENT_PROVIDER_SERVICE_NAME \ + "com.sun.star.ucb.MyContentProvider" +#define MYUCP_CONTENT_PROVIDER_SERVICE_NAME_LENGTH 34 + +// URL scheme. This is the scheme the provider will be able to create +// contents for. The UCB will select the provider ( i.e. in order to create +// contents ) according to this scheme. +#define MYUCP_URL_SCHEME \ + "vnd.sun.star.myucp" +#define MYUCP_URL_SCHEME_LENGTH 24 + +// UCB Content Type. +#define MYUCP_CONTENT_TYPE \ + "application/" MYUCP_URL_SCHEME "-content" + +//========================================================================= + +class ContentProvider : public ::ucb::ContentProviderImplHelper +{ +public: + ContentProvider( const ::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory >& rSMgr ); + virtual ~ContentProvider(); + + // XInterface + XINTERFACE_DECL() + + // XTypeProvider + XTYPEPROVIDER_DECL() + + // XServiceInfo + XSERVICEINFO_DECL() + + // XContentProvider + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XContent > SAL_CALL + queryContent( const ::com::sun::star::uno::Reference< + ::com::sun::star::ucb::XContentIdentifier >& Identifier ) + throw( ::com::sun::star::ucb::IllegalIdentifierException, + ::com::sun::star::uno::RuntimeException ); + + ////////////////////////////////////////////////////////////////////// + // Additional interfaces + ////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////// + // Non-interface methods. + ////////////////////////////////////////////////////////////////////// +}; + +} + +#endif diff --git a/ucbhelper/workben/myucp/myucp_resultset.cxx b/ucbhelper/workben/myucp/myucp_resultset.cxx new file mode 100644 index 000000000000..07f470972f87 --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_resultset.cxx @@ -0,0 +1,129 @@ +/************************************************************************* + * + * $RCSfile: myucp_resultset.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +/************************************************************************** + TODO + ************************************************************************** + + - This implementation is not a dynamic result set!!! It only implements + the necessary interfaces, but never recognizes/notifies changes!!! + + *************************************************************************/ + +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_DATASUPPLIER_HXX +#include "myucp_datasupplier.hxx" +#endif +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_RESULTSET_HXX +#include "myucp_resultset.hxx" +#endif + +using namespace com::sun::star::lang; +using namespace com::sun::star::ucb; +using namespace com::sun::star::uno; + +// @@@ Adjust namespace name. +using namespace myucp; + +//========================================================================= +//========================================================================= +// +// DynamicResultSet Implementation. +// +//========================================================================= +//========================================================================= + +DynamicResultSet::DynamicResultSet( + const Reference< XMultiServiceFactory >& rxSMgr, + const vos::ORef< Content >& rxContent, + const OpenCommandArgument2& rCommand ) +: ResultSetImplHelper( rxSMgr, rCommand ), + m_xContent( rxContent ) +{ +} + +//========================================================================= +// +// Non-interface methods. +// +//========================================================================= + +void DynamicResultSet::initStatic() +{ + m_xResultSet1 + = new ::ucb::ResultSet( m_xSMgr, + m_aCommand.Properties, + new ResultSetDataSupplier( m_xSMgr, + m_xContent ) ); +} + +//========================================================================= +void DynamicResultSet::initDynamic() +{ + m_xResultSet1 + = new ::ucb::ResultSet( m_xSMgr, + m_aCommand.Properties, + new ResultSetDataSupplier( m_xSMgr, + m_xContent ) ); + m_xResultSet2 = m_xResultSet1; +} + diff --git a/ucbhelper/workben/myucp/myucp_resultset.hxx b/ucbhelper/workben/myucp/myucp_resultset.hxx new file mode 100644 index 000000000000..e6899a26c319 --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_resultset.hxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * $RCSfile: myucp_resultset.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ + +// @@@ Adjust multi-include-protection-ifdef. +#ifndef _MYUCP_RESULTSET_HXX +#define _MYUCP_RESULTSET_HXX + +#ifndef _UCBHELPER_RESULTSETHELPER_HXX +#include <ucbhelper/resultsethelper.hxx> +#endif +#ifndef _VOS_REF_HXX_ +#include <vos/ref.hxx> +#endif + +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_CONTENT_HXX +#include "myucp_content.hxx" +#endif + +// @@@ Adjust namespace name. +namespace myucp { + +class DynamicResultSet : public ::ucb::ResultSetImplHelper +{ + vos::ORef< Content > m_xContent; + +private: + virtual void initStatic(); + virtual void initDynamic(); + +public: + DynamicResultSet( + const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory >& rxSMgr, + const vos::ORef< Content >& rxContent, + const com::sun::star::ucb::OpenCommandArgument2& rCommand ); +}; + +} + +#endif diff --git a/ucbhelper/workben/myucp/myucp_services.cxx b/ucbhelper/workben/myucp/myucp_services.cxx new file mode 100644 index 000000000000..0659725a3a72 --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_services.cxx @@ -0,0 +1,175 @@ +/************************************************************************* + * + * $RCSfile: myucp_services.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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 _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_ +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#endif +#ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_ +#include <com/sun/star/lang/XSingleServiceFactory.hpp> +#endif +#ifndef _COM_SUN_STAR_REGISTRY_XREGISTRYKEY_HPP_ +#include <com/sun/star/registry/XRegistryKey.hpp> +#endif + +// @@@ Adjust multi-include-protection-ifdef and header file name. +#ifndef _MYUCP_PROVIDER_HXX +#include "myucp_provider.hxx" +#endif + +using namespace rtl; +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; +using namespace com::sun::star::registry; + +//========================================================================= +static sal_Bool writeInfo( void * pRegistryKey, + const OUString & rImplementationName, + Sequence< OUString > const & rServiceNames ) +{ + OUString aKeyName( OUString::createFromAscii( "/" ) ); + aKeyName += rImplementationName; + aKeyName += OUString::createFromAscii( "/UNO/SERVICES" ); + + Reference< XRegistryKey > xKey; + try + { + xKey = static_cast< XRegistryKey * >( + pRegistryKey )->createKey( aKeyName ); + } + catch ( InvalidRegistryException const & ) + { + } + + if ( !xKey.is() ) + return sal_False; + + sal_Bool bSuccess = sal_True; + + for ( sal_Int32 n = 0; n < rServiceNames.getLength(); ++n ) + { + try + { + xKey->createKey( rServiceNames[ n ] ); + } + catch ( InvalidRegistryException const & ) + { + bSuccess = sal_False; + break; + } + } + return bSuccess; +} + +//========================================================================= +extern "C" void SAL_CALL component_getImplementationEnvironment( + const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv ) +{ + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} + +//========================================================================= +extern "C" sal_Bool SAL_CALL component_writeInfo( + void * pServiceManager, void * pRegistryKey ) +{ + return pRegistryKey && + + ////////////////////////////////////////////////////////////////////// + // Write info into registry. + ////////////////////////////////////////////////////////////////////// + + // @@@ Adjust namespace names. + writeInfo( pRegistryKey, + ::myucp::ContentProvider::getImplementationName_Static(), + ::myucp::ContentProvider::getSupportedServiceNames_Static() ); +} + +//========================================================================= +extern "C" void * SAL_CALL component_getFactory( + const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey ) +{ + void * pRet = 0; + + Reference< XMultiServiceFactory > xSMgr( + reinterpret_cast< XMultiServiceFactory * >( pServiceManager ) ); + Reference< XSingleServiceFactory > xFactory; + + ////////////////////////////////////////////////////////////////////// + // Create factory, if implementation name matches. + ////////////////////////////////////////////////////////////////////// + + // @@@ Adjust namespace names. + if ( ::myucp::ContentProvider::getImplementationName_Static(). + compareToAscii( pImplName ) == 0 ) + { + xFactory = ::myucp::ContentProvider::createServiceFactory( xSMgr ); + } + + ////////////////////////////////////////////////////////////////////// + + if ( xFactory.is() ) + { + xFactory->acquire(); + pRet = xFactory.get(); + } + + return pRet; +} + diff --git a/ucbhelper/workben/ucbexplorer/bmp/document.bmp b/ucbhelper/workben/ucbexplorer/bmp/document.bmp Binary files differnew file mode 100644 index 000000000000..63baf47eca46 --- /dev/null +++ b/ucbhelper/workben/ucbexplorer/bmp/document.bmp diff --git a/ucbhelper/workben/ucbexplorer/bmp/fldclose.bmp b/ucbhelper/workben/ucbexplorer/bmp/fldclose.bmp Binary files differnew file mode 100644 index 000000000000..c0f26b337f7a --- /dev/null +++ b/ucbhelper/workben/ucbexplorer/bmp/fldclose.bmp diff --git a/ucbhelper/workben/ucbexplorer/bmp/fldopen.bmp b/ucbhelper/workben/ucbexplorer/bmp/fldopen.bmp Binary files differnew file mode 100644 index 000000000000..f38643510e78 --- /dev/null +++ b/ucbhelper/workben/ucbexplorer/bmp/fldopen.bmp diff --git a/ucbhelper/workben/ucbexplorer/bmp/link.bmp b/ucbhelper/workben/ucbexplorer/bmp/link.bmp Binary files differnew file mode 100644 index 000000000000..0269a76d98d0 --- /dev/null +++ b/ucbhelper/workben/ucbexplorer/bmp/link.bmp diff --git a/ucbhelper/workben/ucbexplorer/makefile.mk b/ucbhelper/workben/ucbexplorer/makefile.mk new file mode 100644 index 000000000000..ea3ebcc2afc8 --- /dev/null +++ b/ucbhelper/workben/ucbexplorer/makefile.mk @@ -0,0 +1,111 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ +# +# 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=UCBEXPLORER +TARGET=ucbexplorer +LIBTARGET=NO +ENABLE_EXCEPTIONS=TRUE + +# --- Settings --- + +.INCLUDE : svpre.mk +.INCLUDE : settings.mk +.INCLUDE : sv.mk + +# --- Files --- + +.IF "$(depend)" != "" + +OBJFILES=$(OBJ)$/$(TARGET).obj + +.ENDIF # depend + +SRCFILES=$(TARGET).src + +# +# UCBEXPLORER +# + +APP1TARGET=$(TARGET) + +RESLIB1NAME=$(TARGET) +RESLIB1SRSFILES=$(SRS)$/$(TARGET).srs + +APP1OBJS=$(OBJ)$/$(TARGET).obj +APP1RES=$(RES)$/$(TARGET).res + +APP1STDLIBS=$(SALLIB) \ + $(CPPULIB) \ + $(CPPUHELPERLIB) \ + $(VOSLIB) \ + $(TOOLSLIB) \ + $(SVTOOLLIB) \ + $(UNOTOOLSLIB) \ + $(UCBHELPERLIB) \ + $(SVLIB) + +# --- Targets --- + +.INCLUDE : target.mk + diff --git a/ucbhelper/workben/ucbexplorer/ucbexplorer.cxx b/ucbhelper/workben/ucbexplorer/ucbexplorer.cxx new file mode 100644 index 000000000000..8e72263ee671 --- /dev/null +++ b/ucbhelper/workben/ucbexplorer/ucbexplorer.cxx @@ -0,0 +1,1293 @@ +/************************************************************************* + * + * $RCSfile: ucbexplorer.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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 _CPPUHELPER_WEAK_HXX_ +#include <cppuhelper/weak.hxx> +#endif +#ifndef _CPPUHELPER_SERVICEFACTORY_HXX_ +#include <cppuhelper/servicefactory.hxx> +#endif +#ifndef _UNOTOOLS_PROCESSFACTORY_HXX_ +#include <unotools/processfactory.hxx> +#endif +#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_ +#include <com/sun/star/beans/PropertyAttribute.hpp> +#endif +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HPP_ +#include <com/sun/star/beans/XPropertySetInfo.hpp> +#endif +#ifndef _COM_SUN_STAR_IO_XACTIVEDATASINK_HPP_ +#include <com/sun/star/io/XActiveDataSink.hpp> +#endif +#ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HPP_ +#include <com/sun/star/lang/XComponent.hpp> +#endif +#ifndef _COM_SUN_STAR_SDBC_XRESULTSET_HPP_ +#include <com/sun/star/sdbc/XResultSet.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_XCOMMMANDINFO_HPP_ +#include <com/sun/star/ucb/XCommandInfo.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_XCONTENTACCESS_HPP_ +#include <com/sun/star/ucb/XContentAccess.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_XCONTENTCREATOR_HPP_ +#include <com/sun/star/ucb/XContentCreator.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_COMMANDABORTEDEXCEPTION_HPP_ +#include <com/sun/star/ucb/CommandAbortedException.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_CONTENTINFOATTRIBUTE_HPP_ +#include <com/sun/star/ucb/ContentInfoAttribute.hpp> +#endif + +#ifndef _VOS_PROCESS_HXX_ +#include <vos/process.hxx> +#endif +#ifndef _UCBHELPER_CONTENT_HXX +#include <ucbhelper/content.hxx> +#endif +#ifndef _UCBHELPER_CONTENTBROKER_HXX +#include <ucbhelper/contentbroker.hxx> +#endif +#ifndef _UCBHELPER_COMMANDENVIRONMENT_HXX +#include <ucbhelper/commandenvironment.hxx> +#endif +#ifndef _SVTREEBOX_HXX +#include <svtools/svtreebx.hxx> +#endif +#ifndef _SV_WRKWIN_HXX +#include <vcl/wrkwin.hxx> +#endif +#ifndef _SV_SVAPP_HXX +#include <vcl/svapp.hxx> +#endif +#ifndef _SV_MENU_HXX +#include <vcl/menu.hxx> +#endif +#ifndef _SV_DIALOG_HXX +#include <vcl/dialog.hxx> +#endif +#ifndef _SV_FIXED_HXX +#include <vcl/fixed.hxx> +#endif +#ifndef _SV_GROUP_HXX +#include <vcl/group.hxx> +#endif +#ifndef _SV_BUTTON_HXX +#include <vcl/button.hxx> +#endif +#ifndef _SV_MSGBOX_HXX +#include <vcl/msgbox.hxx> +#endif + +#ifndef _UCBHELPER_MACROS_HXX +#include <ucbhelper/macros.hxx> +#endif + +#ifndef _UCBEXPLORER_HRC +#include "ucbexplorer.hrc" +#endif + +using namespace com::sun::star::beans; +using namespace com::sun::star::io; +using namespace com::sun::star::lang; +using namespace com::sun::star::sdbc; +using namespace com::sun::star::task; +using namespace com::sun::star::ucb; +using namespace com::sun::star::uno; +using namespace rtl; +using namespace vos; + +//========================================================================= +// +// class TestDataSink. +// +//========================================================================= + +class TestDataSink : public cppu::OWeakObject, public XActiveDataSink +{ + Reference< XInputStream > m_xStream; + +public: +// TestDataSink() {} +// virtual ~TestDataSink(); + + // XInterface methods + virtual Any SAL_CALL queryInterface( const Type & rType ) + throw( RuntimeException ); + virtual void SAL_CALL acquire() + throw ( RuntimeException ); + virtual void SAL_CALL release() + throw ( RuntimeException ); + + // XActiveDataSink methods. + virtual void SAL_CALL setInputStream( + const Reference< XInputStream >& aStream ) + throw( RuntimeException ); + virtual Reference< XInputStream > SAL_CALL getInputStream() + throw( RuntimeException ); +}; + +//========================================================================= +// +// class StringInputDialog. +// +//========================================================================= + +class StringInputDialog : public ModalDialog +{ +private: + FixedText m_aNameText; + Edit m_aNameEdit; + GroupBox m_aNameGroup; + OKButton m_aOKBtn; + CancelButton m_aCancelBtn; + HelpButton m_aHelpBtn; + + DECL_LINK( OKHdl, Button * ); + DECL_LINK( NameHdl, Edit * ); + +public: + StringInputDialog( const String& rTitle, + const String& rDefaultText, + String* pGroupName = 0 ); + String GetValue() const { return m_aNameEdit.GetText(); } + void SetValue( const String& rNewName ) { m_aNameEdit.SetText( rNewName ); } +}; + +//========================================================================= +// +// class UcbExplorerListBoxEntry. +// +//========================================================================= + +class UcbExplorerListBoxEntry : public SvLBoxEntry +{ + friend class UcbExplorerTreeListBox; + + enum EntryType { FOLDER, DOCUMENT, LINK }; + + ::ucb::Content m_aContent; + EntryType m_eType; + +public: + UcbExplorerListBoxEntry(); + virtual ~UcbExplorerListBoxEntry(); + + BOOL createNewContent( const ContentInfo& rInfo, + ::ucb::Content& rNewContent ); +}; + +//========================================================================= +// +// class UcbExplorerTreeListBox. +// +//========================================================================= + +class UcbExplorerTreeListBox : public SvTreeListBox +{ + Bitmap m_aFolderClosed; + Bitmap m_aFolderOpened; + Bitmap m_aDocument; + Bitmap m_aLink; + +private: + virtual SvLBoxEntry* CreateEntry() const; + virtual void RequestingChilds( SvLBoxEntry* pParent ); + +public: + UcbExplorerTreeListBox( Window* pParent, WinBits nWinStyle = 0 ); + virtual ~UcbExplorerTreeListBox(); + + virtual void Command( const CommandEvent& rCEvt ); + + UcbExplorerListBoxEntry* + InsertEntry( ::ucb::Content& rContent, SvLBoxEntry* pParent ); + UcbExplorerListBoxEntry* + InsertEntry( const String& rURL, SvLBoxEntry* pParent = 0 ); +}; + +//========================================================================= +// +// class UcbExplorerWindow. +// +//========================================================================= + +class UcbExplorerWindow : public WorkWindow +{ + friend class MyApp; + + UcbExplorerTreeListBox m_aTree; + +public: + UcbExplorerWindow( Window *pParent, WinBits nWinStyle ); + virtual ~UcbExplorerWindow(); + + virtual void Resize(); +}; + +//========================================================================= +// +// class MyApp. +// +//========================================================================= + +class MyApp : public Application +{ +public: + virtual void Main(); +}; + +//========================================================================= +// +// TestDataSink implementation. +// +//========================================================================= + +// virtual +Any SAL_CALL TestDataSink::queryInterface( const Type & rType ) + throw( RuntimeException ) +{ + Any aRet = cppu::queryInterface( + rType, + static_cast< XActiveDataSink * >( this ) ); + return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType ); +} + +//========================================================================= +// virtual +void SAL_CALL TestDataSink::acquire() + throw( RuntimeException ) +{ + OWeakObject::acquire(); +} + +//========================================================================= +// virtual +void SAL_CALL TestDataSink::release() + throw( RuntimeException ) +{ + OWeakObject::release(); +} + +//========================================================================= +// virtual +void SAL_CALL TestDataSink::setInputStream( + const Reference< XInputStream >& aStream ) + throw( RuntimeException ) +{ + m_xStream = aStream; +} + +//========================================================================= +// virtual +Reference< XInputStream > SAL_CALL TestDataSink::getInputStream() + throw( RuntimeException ) +{ + return m_xStream; +} + +//========================================================================= +// +// StringInputDialog implementation. +// +//========================================================================= + +StringInputDialog::StringInputDialog( const String& rTitle, + const String& rDefaultText, + String* pGroupName ) +: ModalDialog( GetpApp()->GetDefModalDialogParent(), ResId( DLG_STRINGINPUT ) ), + m_aNameText ( this, ResId( FT_STRINGINPUT_DLG_NAME ) ), + m_aNameEdit ( this, ResId( ED_STRINGINPUT_DLG_NAME ) ), + m_aNameGroup( this, ResId( GB_STRINGINPUT_DLG_NAME ) ), + m_aOKBtn ( this, ResId( BT_STRINGINPUT_DLG_OK ) ), + m_aCancelBtn( this, ResId( BT_STRINGINPUT_DLG_CANCEL ) ), + m_aHelpBtn ( this, ResId( BT_STRINGINPUT_DLG_HELP ) ) +{ + FreeResource(); + SetText( rTitle ); + m_aNameEdit.SetText( rDefaultText ); + m_aOKBtn.SetClickHdl( LINK( this, StringInputDialog, OKHdl ) ); + m_aNameEdit.SetModifyHdl( LINK( this, StringInputDialog, NameHdl ) ); + + if ( pGroupName ) + m_aNameGroup.SetText( *pGroupName ); +}; + +//========================================================================= +IMPL_LINK( StringInputDialog, OKHdl, Button *, EMPTYARG ) +{ + // trim the strings + m_aNameEdit.SetText( + m_aNameEdit.GetText().EraseLeadingChars().EraseTrailingChars() ); + EndDialog( RET_OK ); + return 1; +} + +//========================================================================= +IMPL_LINK( StringInputDialog, NameHdl, Edit *, EMPTYARG ) +{ + // trim the strings + String aName = m_aNameEdit.GetText(); + aName.EraseLeadingChars().EraseTrailingChars(); + if ( aName.Len() ) + { + if ( !m_aOKBtn.IsEnabled() ) + m_aOKBtn.Enable( TRUE ); + } + else + { + if ( m_aOKBtn.IsEnabled() ) + m_aOKBtn.Enable( FALSE ); + } + return 0; +} + +//========================================================================= +// +// UcbExplorerListBoxEntry implementation. +// +//========================================================================= + +UcbExplorerListBoxEntry::UcbExplorerListBoxEntry() +{ +} + +//========================================================================= +// virtual +UcbExplorerListBoxEntry::~UcbExplorerListBoxEntry() +{ +} + +//========================================================================= +BOOL UcbExplorerListBoxEntry::createNewContent( const ContentInfo& rInfo, + ::ucb::Content& rNewContent ) +{ + sal_Int32 nCount = rInfo.Properties.getLength(); + Sequence< Any > aPropValues( nCount ); + Sequence< OUString > aPropNames( nCount ); + + if ( nCount > 0 ) + { + // Collect property values. + + Any* pValues = aPropValues.getArray(); + const Property* pProps = rInfo.Properties.getConstArray(); + for ( sal_Int32 n = 0; n < nCount; ++n ) + { + const OUString& rName = pProps[ n ].Name; + StringInputDialog* pDlg = new StringInputDialog( rName, rName ); + USHORT nRet = pDlg->Execute(); + if ( nRet == RET_OK ) + { + OUString aValue( pDlg->GetValue() ); + + // Convert value according to supplied type info... + + const Type& rType = pProps[ n ].Type; + + if ( rType == getCppuType( + static_cast< const OUString * >( 0 ) ) ) + { + // string + pValues[ n ] <<= aValue; + } + else if ( rType == getCppuType( + static_cast< const sal_Int32 * >( 0 ) ) ) + { + // long + pValues[ n ] <<= aValue.toInt32(); + } + else if ( rType == getCppuType( + static_cast< const sal_Int16 * >( 0 ) ) ) + { + // short + pValues[ n ] <<= sal_Int16( aValue.toInt32() ) ; + } + else if ( rType == getCppuBooleanType() ) + { + // boolean + pValues[ n ] <<= sal_Bool( aValue.toChar() ) ; + } + else if ( rType == getCppuCharType() ) + { + // char + pValues[ n ] <<= aValue.toChar(); + } + else if ( rType == getCppuType( + static_cast< const sal_Int8 * >( 0 ) ) ) + { + // byte + pValues[ n ] <<= sal_Int8( aValue.toChar() ) ; + } + else if ( rType == getCppuType( + static_cast< const sal_Int64 * >( 0 ) ) ) + { + // hyper + pValues[ n ] <<= aValue.toInt64(); + } + else if ( rType == getCppuType( + static_cast< const float * >( 0 ) ) ) + { + // float + pValues[ n ] <<= aValue.toFloat(); + } + else if ( rType == getCppuType( + static_cast< const double * >( 0 ) ) ) + { + // double + pValues[ n ] <<= aValue.toDouble(); + } + else + { + // See com/sun/star/ucb/ContentInfo.idl + DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " + "Invlid type for bootstrap property!" ); + } + } + + delete pDlg; + + if ( nRet != RET_OK ) + return FALSE; + + aPropNames[ n ] = rName; + } + } + + Reference< XInputStream > xData; + + if ( rInfo.Attributes & ContentInfoAttribute::INSERT_WITH_INPUTSTREAM ) + { + // Let the user specify the URL of a content containing the + // data to supply to the new content. + + StringInputDialog* pDlg = new StringInputDialog( + OUString::createFromAscii( + "Document Data Source URL" ), + OUString() ); + USHORT nRet = pDlg->Execute(); + if ( nRet == RET_OK ) + { + // Create a content object for the given URL. + + OUString aSourceURL( pDlg->GetValue() ); + if ( aSourceURL.getLength() == 0 ) + { + DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " + "No document data URL!" ); + return FALSE; + } + + try + { + Reference< XCommandEnvironment > xEnv; + + ::ucb::ContentBroker* pBroker = ::ucb::ContentBroker::get(); + if ( pBroker ) + { + Reference< XInteractionHandler > xInteractionHandler( + pBroker->getServiceManager()->createInstance( + OUString::createFromAscii( + "com.sun.star.uui.InteractionHandler" ) ), + UNO_QUERY ); + + Reference< XProgressHandler > xProgressHandler + /* = new ProgressHandler( *pBroker ) */ ; + + xEnv = new ::ucb::CommandEnvironment( xInteractionHandler, + xProgressHandler ); + } + + ::ucb::Content aSourceContent( aSourceURL, xEnv ); + + // Get source data. + vos::ORef< TestDataSink > xSourceData = new TestDataSink; + aSourceContent.openStream( xSourceData.getBodyPtr() ); + xData = xSourceData->getInputStream(); + } + catch ( ::ucb::ContentCreationException& ) + { + DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " + "No content for document data!" ); + return FALSE; + } + catch ( CommandAbortedException& ) + { + DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " + "CommandAbortedException!" ); + return FALSE; + } + catch ( RuntimeException& ) + { + throw; + } + catch ( Exception& ) + { + DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " + "Exception!" ); + return FALSE; + } + } + + delete pDlg; + + if ( nRet != RET_OK ) + return FALSE; + } + + // Create new content. + + ULONG n = Application::ReleaseSolarMutex(); + BOOL bRet = sal_False; + + try + { + bRet = m_aContent.insertNewContent( + rInfo.Type, aPropNames, aPropValues, xData, rNewContent ); + } + catch ( CommandAbortedException& ) + { + DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " + "CommandAbortedException!" ); + } + catch ( RuntimeException& ) + { + throw; + } + catch ( Exception& ) + { + DBG_ERROR( "UcbExplorerListBoxEntry::createNewContent - " + "Exception!" ); + } + + Application::AcquireSolarMutex( n ); + return bRet; +} + +//========================================================================= +// +// UcbExplorerTreeListBox implementation. +// +//========================================================================= + +UcbExplorerTreeListBox::UcbExplorerTreeListBox( + Window* pParent, WinBits nWinStyle ) +: SvTreeListBox( pParent, nWinStyle ), + m_aFolderClosed( ResId( BMP_FOLDER_CLOSED ) ), + m_aFolderOpened( ResId( BMP_FOLDER_OPENED ) ), + m_aDocument( ResId( BMP_DOCUMENT ) ), + m_aLink( ResId( BMP_LINK ) ) +{ +} + +//========================================================================= +// virtual +UcbExplorerTreeListBox::~UcbExplorerTreeListBox() +{ +} + +//========================================================================= +// virtual +SvLBoxEntry* UcbExplorerTreeListBox::CreateEntry() const +{ + return new UcbExplorerListBoxEntry(); +} + +//========================================================================= +// virtual +void UcbExplorerTreeListBox::RequestingChilds( SvLBoxEntry* pParent ) +{ + UcbExplorerListBoxEntry* pEntry + = static_cast< UcbExplorerListBoxEntry * >( pParent ); + if ( !pEntry->HasChilds() ) + { + switch ( pEntry->m_eType ) + { + case UcbExplorerListBoxEntry::FOLDER: + { + ULONG n = Application::ReleaseSolarMutex(); + + try + { + Sequence< OUString > aPropertyNames( 0 ); +// OUString* pNames = aPropertyNames.getArray(); +// pNames[ 0 ] = OUString::createFromAscii( "Title" ); + + Reference< XResultSet > xResultSet + = pEntry->m_aContent.createCursor( + aPropertyNames, + ::ucb::INCLUDE_FOLDERS_AND_DOCUMENTS ); + Reference< XContentAccess > xContentAccess( + xResultSet, UNO_QUERY ); + + if ( xResultSet.is() && xContentAccess.is() ) + { + while ( xResultSet->next() ) + { + Application::AcquireSolarMutex( n ); + + InsertEntry( + xContentAccess->queryContentIdentfierString(), + pParent ); + + n = Application::ReleaseSolarMutex(); + } + } + } + catch ( CommandAbortedException& ) + { + DBG_ERROR( + "UcbExplorerTreeListBox::RequestingChilds - " + "CommandAbortedException!" ); + } + catch ( RuntimeException& ) + { + throw; + } + catch ( Exception& ) + { + DBG_ERROR( + "UcbExplorerTreeListBox::RequestingChilds - " + "Exception!" ); + } + Application::AcquireSolarMutex( n ); + break; + } + + case UcbExplorerListBoxEntry::DOCUMENT: + break; + + case UcbExplorerListBoxEntry::LINK: + break; + + default: + break; + } + } +} + +//========================================================================= +// virtual +void UcbExplorerTreeListBox::Command( const CommandEvent& rCEvt ) +{ + if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU ) + { + const Point& rPos = rCEvt.GetMousePosPixel(); + UcbExplorerListBoxEntry* pEntry + = static_cast< UcbExplorerListBoxEntry * >( + GetEntry( rPos, TRUE ) ); + if ( pEntry ) + { + PopupMenu* pMenu = new PopupMenu( ResId( MENU_POPUP ) ); + PopupMenu* pNewMenu = 0; + +// pMenu->SetSelectHdl( LINK( this, +// SfxCommonTemplateDialog_Impl, +// MenuSelectHdl ) ); + + ////////////////////////////////////////////////////////////// + // Configure "New" + ////////////////////////////////////////////////////////////// + + Reference< XContentCreator > xCreator( + pEntry->m_aContent.get(), UNO_QUERY ); + Sequence< ContentInfo > aInfo; + BOOL bCanCreate = xCreator.is(); + if ( bCanCreate ) + { + aInfo = xCreator->queryCreatableContentsInfo(); + const ContentInfo* pInfo = aInfo.getConstArray(); + sal_Int32 nCount = aInfo.getLength(); + bCanCreate = ( nCount > 0 ); + + pNewMenu = new PopupMenu; + pMenu->SetPopupMenu( MENU_NEW, pNewMenu ); + + for ( sal_Int32 n = 0; n < nCount; ++n ) + { + const ContentInfo& rInfo = pInfo[ n ]; + pNewMenu->InsertItem( 20000 + n + 1, rInfo.Type ); + } + } + + pMenu->EnableItem( MENU_NEW, bCanCreate ); + + ////////////////////////////////////////////////////////////// + // Configure "Rename" + ////////////////////////////////////////////////////////////// + + sal_Bool bEnable = sal_False; + + try + { + Property aProp = + pEntry->m_aContent.getProperties()->getPropertyByName( + OUString::createFromAscii( "Title" ) ); + bEnable = !( aProp.Attributes & PropertyAttribute::READONLY ); + } + catch( UnknownPropertyException& ) + { + // getPropertyByName + bEnable = sal_False; + } + catch ( CommandAbortedException& ) + { + DBG_ERROR( "UcbExplorerTreeListBox::Command - " + "CommandAbortedException!" ); + } + catch ( RuntimeException& ) + { + throw; + } + catch ( Exception& ) + { + DBG_ERROR( "UcbExplorerTreeListBox::Command - " + "Exception!" ); + } + + pMenu->EnableItem( MENU_RENAME, bEnable ); + + ////////////////////////////////////////////////////////////// + // Configure "Delete" + ////////////////////////////////////////////////////////////// + + try + { + pMenu->EnableItem( MENU_DELETE, + pEntry->m_aContent + .getCommands()->hasCommandByName( + OUString::createFromAscii( + "delete" ) ) ); + } + catch ( CommandAbortedException& ) + { + DBG_ERROR( "UcbExplorerTreeListBox::Command - " + "CommandAbortedException!" ); + } + catch ( RuntimeException& ) + { + throw; + } + catch ( Exception& ) + { + DBG_ERROR( "UcbExplorerTreeListBox::Command - " + "Exception!" ); + } + + ////////////////////////////////////////////////////////////// + // Execute menu. + ////////////////////////////////////////////////////////////// + + USHORT nSelected = pMenu->Execute( this, rPos ); + switch ( nSelected ) + { +// case MENU_NEW: +// break; + + case MENU_RENAME: + { + OUString aNewTitle; + + try + { + pEntry->m_aContent.getPropertyValue( + OUString::createFromAscii( "Title" ) ) + >>= aNewTitle; + } + catch ( CommandAbortedException& ) + { + DBG_ERROR( "UcbExplorerTreeListBox::Command - " + "CommandAbortedException!" ); + } + catch ( RuntimeException& ) + { + throw; + } + catch ( Exception& ) + { + DBG_ERROR( "UcbExplorerTreeListBox::Command - " + "Exception!" ); + } + + StringInputDialog* pDlg + = new StringInputDialog( + OUString::createFromAscii( "Title" ), + aNewTitle ); + + USHORT nRet = pDlg->Execute(); + + Any aValue; + + if ( nRet == RET_OK ) + { + aNewTitle = pDlg->GetValue(); + aValue <<= aNewTitle; + } + + delete pDlg; + + if ( nRet != RET_OK ) + break; + + sal_Bool bOK = sal_False; + + ULONG n = Application::ReleaseSolarMutex(); + + try + { + pEntry->m_aContent.setPropertyValue( + OUString::createFromAscii( "Title" ), + aValue ); + bOK = sal_True; + } + catch ( CommandAbortedException& ) + { + DBG_ERROR( "UcbExplorerTreeListBox::Command - " + "CommandAbortedException!" ); + } + catch ( RuntimeException& ) + { + throw; + } + catch ( Exception& ) + { + DBG_ERROR( "UcbExplorerTreeListBox::Command - " + "Exception!" ); + } + + Application::AcquireSolarMutex( n ); + + if ( bOK ) + { + OUString aText( aNewTitle ); + OUString aTargetURL; + try + { + pEntry->m_aContent.getPropertyValue( + OUString::createFromAscii( "TargetURL" ) ) + >>= aTargetURL; + } + catch ( CommandAbortedException& ) + { + // The property is optional! + } + + if ( aTargetURL.getLength() > 0 ) + { + // Insert link. + aText += OUString::createFromAscii( " --> " ); + aText += aTargetURL; + } + + SetEntryText( pEntry, aText ); + } + break; + } + + case MENU_DELETE: + { + ULONG n = Application::ReleaseSolarMutex(); + sal_Bool bOK = sal_True; + + try + { + pEntry->m_aContent.executeCommand( + OUString::createFromAscii( "delete" ), + makeAny( sal_True ) ); + } + catch ( CommandAbortedException& ) + { + DBG_ERROR( + "UcbExplorerTreeListBox::Command - " + "CommandAbortedException!" ); + bOK = sal_False; + } + catch ( RuntimeException& ) + { + throw; + } + catch ( Exception& ) + { + DBG_ERROR( + "UcbExplorerTreeListBox::Command - " + "Exception!" ); + bOK = sal_False; + } + + Application::AcquireSolarMutex( n ); + + if ( bOK ) + RemoveSelection(); + + break; + } + + default: + { + if ( ( nSelected > 20000 ) && + ( ( nSelected - 20000 ) <= aInfo.getLength() ) ) + { + // New-menu entry selected. + + ::ucb::Content aNewContent; + if ( pEntry->createNewContent( + aInfo.getConstArray()[ nSelected - 20001 ], + aNewContent ) ) + { + if ( !IsExpanded( pEntry ) ) + Expand( pEntry ); + else + InsertEntry( aNewContent, pEntry ); + } + } + break; + } + } + + delete pMenu; + delete pNewMenu; + return; + } + } + + SvTreeListBox::Command( rCEvt ); +} + +//========================================================================= +UcbExplorerListBoxEntry* UcbExplorerTreeListBox::InsertEntry( + ::ucb::Content& rContent, + SvLBoxEntry* pParent ) +{ + try + { + OUString aTitle; + rContent.getPropertyValue( + OUString::createFromAscii( "Title" ) ) >>= aTitle; + if ( !aTitle.getLength() ) + aTitle = OUString::createFromAscii( "/" ); + + UcbExplorerListBoxEntry* pEntry = 0; + + if ( rContent.isFolder() ) + { + // Insert folder. + pEntry = static_cast< UcbExplorerListBoxEntry * >( + SvTreeListBox::InsertEntry( aTitle, + m_aFolderOpened, + m_aFolderClosed, + pParent, + TRUE ) ); + pEntry->m_eType = UcbExplorerListBoxEntry::FOLDER; + } + else + { + OUString aTargetURL; + try + { + rContent.getPropertyValue( + OUString::createFromAscii( "TargetURL" ) ) >>= aTargetURL; + } + catch ( CommandAbortedException& ) + { + // The property is optional! + } + + if ( aTargetURL.getLength() > 0 ) + { + // Insert link. + aTitle += OUString::createFromAscii( " --> " ); + aTitle += aTargetURL; + pEntry = static_cast< UcbExplorerListBoxEntry * >( + SvTreeListBox::InsertEntry( aTitle, + m_aLink, + m_aLink, + pParent, + TRUE ) ); + pEntry->m_eType = UcbExplorerListBoxEntry::LINK; + } + else + { + // Insert Document + pEntry = static_cast< UcbExplorerListBoxEntry * >( + SvTreeListBox::InsertEntry( aTitle, + m_aDocument, + m_aDocument, + pParent, + TRUE ) ); + pEntry->m_eType = UcbExplorerListBoxEntry::DOCUMENT; + } + } + + pEntry->m_aContent = rContent; + return pEntry; + } + catch ( ::com::sun::star::ucb::CommandAbortedException& ) + { + DBG_ERROR( + "UcbExplorerTreeListBox::InsertEntry - CommandAbortedException!" ); + } + catch ( Exception& ) + { + DBG_ERROR( + "UcbExplorerTreeListBox::InsertEntry - Exception!" ); + } + + return 0; +} + +//========================================================================= +UcbExplorerListBoxEntry* UcbExplorerTreeListBox::InsertEntry( + const String& rURL, + SvLBoxEntry* pParent ) +{ + try + { + Reference< XCommandEnvironment > xEnv; + + ::ucb::ContentBroker* pBroker = ::ucb::ContentBroker::get(); + if ( pBroker ) + { + Reference< XInteractionHandler > xInteractionHandler( + pBroker->getServiceManager()->createInstance( + OUString::createFromAscii( + "com.sun.star.uui.InteractionHandler" ) ), + UNO_QUERY ); + + Reference< XProgressHandler > xProgressHandler + /* = new ProgressHandler( *pBroker ) */ ; + + xEnv = new ::ucb::CommandEnvironment( xInteractionHandler, + xProgressHandler ); + } + + ::ucb::Content aContent( rURL, xEnv ); + return InsertEntry( aContent, pParent ); + } + catch ( ::ucb::ContentCreationException& ) + { + DBG_ERROR( + "UcbExplorerTreeListBox::InsertEntry - ContentCreationException!" ); + } + + return 0; +} + +//========================================================================= +// +// UcbExplorerWindow implementation. +// +//========================================================================= + +UcbExplorerWindow::UcbExplorerWindow( Window *pParent, WinBits nWinStyle ) +: WorkWindow( pParent, nWinStyle ), + m_aTree( this, WB_HSCROLL ) +{ + Font aTreeFont( m_aTree.GetFont() ); + aTreeFont.SetName( String( RTL_CONSTASCII_USTRINGPARAM("Courier") ) ); + aTreeFont.SetFamily( FAMILY_MODERN ); + aTreeFont.SetPitch( PITCH_FIXED ); + aTreeFont.SetSize( Size( 0, 12 ) ); + + m_aTree.SetFont( aTreeFont ); + m_aTree.SetIndent( 20 ); + m_aTree.SetPosPixel( Point( 0, 0 ) ); + + m_aTree.Show(); +} + +//------------------------------------------------------------------------- +// virtual +UcbExplorerWindow::~UcbExplorerWindow() +{ +} + +//------------------------------------------------------------------------- +// virtual +void UcbExplorerWindow::Resize() +{ + m_aTree.SetSizePixel( GetOutputSizePixel() ); +} + +//========================================================================= +// +// MyApp implementation. +// +//========================================================================= + +// virtual +void MyApp::Main() +{ + ////////////////////////////////////////////////////////////////////// + // Initialize local Service Manager and basic services. + ////////////////////////////////////////////////////////////////////// + + OStartupInfo aInfo; + OUString aExeName; + if ( aInfo.getExecutableFile( aExeName ) + != OStartupInfo::E_None ) + { + DBG_ERROR( "Error getting Executable file name!" ); + return; + } + + OUString aReadOnlyRegFile + = aExeName.copy( 0, aExeName.lastIndexOf( '/' ) + 1 ); + OUString aWritableRegFile + = aReadOnlyRegFile; + aReadOnlyRegFile += OUString::createFromAscii( "applicat.rdb" ); + aWritableRegFile += OUString::createFromAscii( "ucbexplorer.rdb" ); + + Reference< XMultiServiceFactory > xFac; + try + { + xFac = cppu::createRegistryServiceFactory( + aWritableRegFile, aReadOnlyRegFile ); + } + catch ( com::sun::star::uno::Exception ) + { + DBG_ERROR( "Error creating RegistryServiceFactory!" ); + return; + } + + utl::setProcessServiceFactory( xFac ); + + Reference< XComponent > xComponent( xFac, UNO_QUERY ); + + ////////////////////////////////////////////////////////////////////// + // Create UCB. + ////////////////////////////////////////////////////////////////////// + + Sequence< Any > aArgs(1); + aArgs[0] <<= sal_True; + sal_Bool bSuccess = ::ucb::ContentBroker::initialize( xFac, aArgs ); + + if ( !bSuccess ) + { + DBG_ERROR( "Error creating UCB!" ); + return; + } + + ////////////////////////////////////////////////////////////////////// + // Create/init/show app window. + ////////////////////////////////////////////////////////////////////// + + ResMgr* pMgr = ResMgr::CreateResMgr( + CREATEVERSIONRESMGR_NAME( ucbexplorer ) ); + Resource::SetResManager( pMgr ); + + UcbExplorerWindow aAppWin( 0, WB_APP | WB_STDWORK ); + + MenuBar aMBMain( ResId( MENU_MAIN ) ); + + // Check for command line params +#if 0 + for ( int i = 0; i < GetCommandLineParamCount(); ++i ) + { + String aPara = GetCommandLineParam( i ); + } +#endif + + String aRootURL = GetCommandLineParam( 0 ); + if ( aRootURL.Len() == 0 ) + aRootURL = UniString::CreateFromAscii( + RTL_CONSTASCII_STRINGPARAM( "vnd.sun.star.hier:/" ) ); + + String aTitle( ResId( TEXT_TITLEBAR ) ); + aTitle.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " - " ) ); + aTitle += aRootURL; + + aAppWin.SetText( aTitle ); + + aAppWin.SetPosSizePixel( 0, 0, 500, 750 ); + + aAppWin.Show(); + + aAppWin.m_aTree.InsertEntry( aRootURL ); + + ////////////////////////////////////////////////////////////////////// + // Execute app. + ////////////////////////////////////////////////////////////////////// + + Execute(); + + ////////////////////////////////////////////////////////////////////// + // Cleanup. + ////////////////////////////////////////////////////////////////////// + + // m_aTree holds UCB contents! + aAppWin.m_aTree.Clear(); + + ::ucb::ContentBroker::deinitialize(); + + if ( xComponent.is() ) + xComponent->dispose(); +} + +//========================================================================= +// +// The Application. +// +//========================================================================= + +MyApp aMyApp; + diff --git a/ucbhelper/workben/ucbexplorer/ucbexplorer.hrc b/ucbhelper/workben/ucbexplorer/ucbexplorer.hrc new file mode 100644 index 000000000000..0d8ab2b5c60d --- /dev/null +++ b/ucbhelper/workben/ucbexplorer/ucbexplorer.hrc @@ -0,0 +1,99 @@ +/************************************************************************* + * + * $RCSfile: ucbexplorer.hrc,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ +//========================================================================= +// +// UCB Explorer ( resource identifiers ) +// +// (C) 2000 StarOffice Entwicklungs GmbH, Hamburg, Germany +// +// $Author: hr $ $Date: 2000-09-18 17:03:38 $Revision: 1.4 $ +// +//========================================================================= + +#ifndef _UCBEXPLORER_HRC +#define _UCBEXPLORER_HRC + +#define MENU_MAIN 1000 +#define MENU_FILE 100 +#define MENU_EXIT 10 + +#define MENU_POPUP 1001 +#define MENU_NEW 10 +#define MENU_RENAME 11 +#define MENU_DELETE 12 + +#define TEXT_TITLEBAR 5000 + +#define BMP_FOLDER_CLOSED 6001 +#define BMP_FOLDER_OPENED 6002 +#define BMP_DOCUMENT 6003 +#define BMP_LINK 6004 + +#define DLG_STRINGINPUT 7000 +#define FT_STRINGINPUT_DLG_NAME 10 +#define ED_STRINGINPUT_DLG_NAME 11 +#define GB_STRINGINPUT_DLG_NAME 12 +#define BT_STRINGINPUT_DLG_OK 13 +#define BT_STRINGINPUT_DLG_CANCEL 14 +#define BT_STRINGINPUT_DLG_HELP 15 + + +#endif /* !_UCBEXPLORER_HRC */ diff --git a/ucbhelper/workben/ucbexplorer/ucbexplorer.src b/ucbhelper/workben/ucbexplorer/ucbexplorer.src new file mode 100644 index 000000000000..a29fa31bec19 --- /dev/null +++ b/ucbhelper/workben/ucbexplorer/ucbexplorer.src @@ -0,0 +1,195 @@ +/************************************************************************* + * + * $RCSfile: ucbexplorer.src,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:03:38 $ + * + * 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): _______________________________________ + * + * + ************************************************************************/ +//========================================================================= +// +// UCB Explorer ( resources ) +// +// (C) 2000 StarOffice Entwicklungs GmbH, Hamburg, Germany +// +// $Author: hr $ $Date: 2000-09-18 17:03:38 $Revision: 1.4 $ +// +//========================================================================= + +#include "ucbexplorer.hrc" + +Menu MENU_MAIN +{ + ItemList = + + { + MenuItem + { + Identifier = MENU_FILE ; + Text = "~File" ; + SubMenu = Menu + { + ItemList = + + { + MenuItem + { + Identifier = MENU_EXIT ; + Text = "~Exit" ; + Text [ English ] = "~Exit" ; + AccelKey = KeyCode + { + Function = KEYFUNC_QUIT ; + }; + }; + }; + }; + }; + }; +}; + +Menu MENU_POPUP +{ + ItemList = + + { + MenuItem + { + Identifier = MENU_NEW ; + Text = "~New" ; + }; + MenuItem + { + Identifier = MENU_RENAME ; + Text = "~Rename" ; + }; + MenuItem + { + Identifier = MENU_DELETE ; + Text = "~Delete" ; + }; + }; +}; + +Bitmap BMP_FOLDER_CLOSED +{ + File = "bmp/fldclose.bmp" ; +}; +Bitmap BMP_FOLDER_OPENED +{ + File = "bmp/fldopen.bmp" ; +}; +Bitmap BMP_DOCUMENT +{ + File = "bmp/document.bmp" ; +}; +Bitmap BMP_LINK +{ + File = "bmp/link.bmp" ; +}; + +ModalDialog DLG_STRINGINPUT +{ +//! HelpId = ; + Border = TRUE ; + Moveable = TRUE ; + OutputSize = TRUE ; + SVLook = TRUE ; +// Text = "" ; + Size = MAP_APPFONT ( 218 , 44 ) ; + FixedText FT_STRINGINPUT_DLG_NAME + { + Pos = MAP_APPFONT ( 12 , 18 ) ; + Size = MAP_APPFONT ( 28 , 10 ) ; + Text = "~Value" ; + }; + Edit ED_STRINGINPUT_DLG_NAME + { + Pos = MAP_APPFONT ( 40 , 16 ) ; + Size = MAP_APPFONT ( 110 , 12 ) ; + Border = TRUE ; + Left = TRUE ; + }; + GroupBox GB_STRINGINPUT_DLG_NAME + { + Group = TRUE ; + Pos = MAP_APPFONT ( 6 , 3 ) ; + Size = MAP_APPFONT ( 150 , 36 ) ; +// Text = "" ; + }; + OKButton BT_STRINGINPUT_DLG_OK + { + Pos = MAP_APPFONT ( 162 , 6 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + DefButton = TRUE ; + }; + CancelButton BT_STRINGINPUT_DLG_CANCEL + { + Pos = MAP_APPFONT ( 162 , 23 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + }; + HelpButton BT_STRINGINPUT_DLG_HELP + { + Pos = MAP_APPFONT ( 162 , 200 ) ; + /*sic!*/ + Size = MAP_APPFONT ( 50 , 14 ) ; + }; +}; + +String TEXT_TITLEBAR +{ + Text = "UCB Explorer" ; +}; + |