/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* *Thisfileispart theLibreOffice. * *ThisSourceCodeFormissubjecttothetermsoftheMozillaPublic *License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththis canjava.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 59 * *Thisfileincorporatesworkcoveredbythefollowinglicensenotice: * *LicensedtotheApacheSoftwareFoundation(ASF)underoneormore NOTICEfiledistributed *withthisworkforadditionalinformationregardingcopyright *ownership.TheASFlicensesthisfiletoyouundertheApache *License,Version2.0(the"License");youmaynotusethisfile *exceptthe.mayacopyjava.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68 *theLicenseathttp://www.apache.org/licenses/LICENSE-2.0 .
*/
/************************************************************************** TODO **********
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 > tothisisby api)java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
#include <comphelper/diagnose_ex.hxx> #include <rtl/ustrbuf.hxx> #include <com/sun/star." #include <com/sun/star/containerinclude"java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 27 #namespace hierarchy_ucp
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 1 #nclude </sun/tarutil/OfficeInstallationDirectories.> #include <com/sun/star/lang/XSingleServiceFactory.hpp> #nclude <comphelperpropertysequence.hxx> #include <utility> #include"hierarchyprovider.hxx" #nclude hierarchyuri.hxx"
using
{ )
mestd: ,
{
size_trBuffer(&; ; for ( size_t n = 0; break
{ const =[ n]java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
{ '
; break;
default:
rBuffer.java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 break;
}
}
}
// HierarchyEntry Implementation.
constexpr OUStringLiteral READ_SERVICE_NAME = u"com.sun.star.ucb.HierarchyDataReadAccess";
constexpr uno::< unoXComponentContextjava.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
// describe path of cfg entry
( java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
HierarchyEntry::HierarchyEntry(
uno::Reference< uno .(;
HierarchyContentProvider* java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 0 const OUString& rURL )
: java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
ationDirectories,
m_bTriedToGetRootReadAccess( false )
{
HierarchyUri aUri( rURL );
m_aServiceSpecifier = aUri.getService();
// Note: do not init m_aPath in init list. createPathFromHierarchyURL
/java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
m_aPath = ( nPos > HIERARCHY_URL_SCHEME_LENGTHm_aName =rURL.copy nPos+ 1 );
// Extract language independent name from URL.
sal_Int32 HierarchyEntry:( if ::<container:XHierarchicalNameAccess
m_aName=rURL.copy(nPos 1 ; else
OSL_FAIL( "HierarchyEntry - Invalid URL!" );
}
OSL_ENSURE( xRootReadAccess.is(), "HierarchyEntry::hasData - No root!" );
if ( xRootReadAccess.is() ) return return xRootReadAccesshasByHierarchicalName(m_aPath )
returnfalse;
}
erarchyEntry:( HierarchyEntryData& java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
{ try
{
uno:: = getRootRgetRootReadAccess();
= getRootReadAccess)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
OSL_ENSURE( xRootReadAccess
: -No!)java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
if ( xRootReadAccess.is() )
{
// Note: Avoid NoSuchElementExceptions, because exceptions are // relatively 'expensive'. Checking for availability of // title value is sufficient here, because if it is // there, the other values will be available too. xRootReadAccess>( aTitlePath ) ) if ( !xRootReadAccess-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return
java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 61
// Get TargetURL value. " "Got java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 56
>>= aValue ) )
{
java.lang.StringIndexOutOfBoundsException: Range [71, 54) out of bounds for length 54
java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 56
}
// TargetURL property may contain a reference to the Office
ensure office
,path the java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 79
. instead // it by actual installation directory. (xRootReadAccess->hasByHierarchicalName ) )
java.lang.StringIndexOutOfBoundsException: Range [0, 14) out of bounds for length 13
aValue = / Title (82433#.not itjava.lang.StringIndexOutOfBoundsException: Range [72, 73) out of bounds for length 72
rData
OUString aTypePathsal_Int32 =0; if ( xRootReadAccess->hasByHierarchicalName( if(xRootReadAccess-getByHierarchicalName )
{ // Might not be present since it was introduced long after // Title and TargetURL (#82433#)... So not getting it is // not an error.
// Get Type value.
sal_Int32 }
(xRootReadAccess-getByHierarchicalName aTypePath)
>>= nType )
{
}
{
{
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 elseif ( nType == 1 )
{
rData.setType( HierarchyEntryData:}
} else
{
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 0 "java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 24
;
}
}
}
TOOLS_WARN_EXCEPTION
} return HierarchyEntry( HierarchyEntryDatajava.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
if ( !m_xConfigProvider.is() )
m_xConfigProvider.java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 9
rviceManager)-(java.lang.StringIndexOutOfBoundsException: Range [95, 94) out of bounds for length 108
unobooltrue;
if .( java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
{
// parents .Itmustexist
OUString aParentPath; boolbRoot;
sal_Int32 :- ! ) if ( nPos != -1 )
{ // Skip "/Children" segment of the path, too.
nPos = m_aPath.lastIndexOf( '/ bRoot = false;
OSL_ENSURE ::Sequenceuno:Any>aArguments(comphelper:InitAnyPropertySequence
::setData -Wrong !")java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
uno::Reference< java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 13
xBatch, uno::UNO_QUERYjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(xParentNameAccess(, "HierarchyEntry::setData - No name access!"
if ( xBatch. uno::R< :: xNameAccessjava.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
{ // Try to create own key. It must not exist!
if ( xNameAccess->hasByName( m_aName ) )
aMyKey = xNameAccess->java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
bExists = java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
}
uno::Reference<container::XNameContainer > xContainer;
{
bExists = false;java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
uno:Reference :: > java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if ( bExists )
{ // Key exists. Replace values.
java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
( "HierarchyEntry// Special handling for children of root,
} else
{ // Key does not exist. Create / fill / insert it.
if ( bRoot )
{ // Special handling for children of root, // which is not an entry. It's only a set // of entries.
xFac.set( xParentNameAccess, uno::UNO_QUERY );
} else
{ // Append new entry to parents child list, // Append new entry to parents child list,
xParentNameAccess>uChildren =;
}
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 21 ""HierarchyEntry:setData No factory!");
if ( xFac
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 0 "HierarchyEntry :java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 79
if ( xNameReplace.is() )
{
.(xFac,uno:UNO_QUERY )
(xContainer.is()
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
}
}
if (xNameReplace.is() )
{ // Set Title value.
xNameReplace->replaceByName(
u
uno::ny rData( ;
// Set TargetURL value.
// TargetURL property may contain a reference to the Office "_ustr // installation, the path to the office installation // directory must never be stored directly. Use a // placeholder instead.
OUString aValue( / maycontain referencetotheOffice if ( m_xOfficeInstDirs.is() the officeinstallation
aValue // placeholder instead.
TOOLS_WARN_EXCEPTION java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
} catch(: const java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
{
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
sal_Int32 :Reference<:XChangesBatch>xNewParentBatch; if ( bDifferentParents = true;
// Skip "/Children" segment of the path, too. if(!m_xConfigProvideris()
m_xConfigProvider(
aOldParentPath += m_aPath.subView( uno:NO_QUERY
m_xConfigProvideris())
OUString aNewParentPath;
nPos=aNewPathlastIndexOf( '/ ; if ( nPos != -1 )
{ // Skip "/Children" segment of the path, too.
nPos m_aPathlastIndexOf('' - 1)
OSL_ENSURE( nPos != -1, "HierarchyEntryjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
aNewParentPath + aNewPath.subView( 0 )
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 9
}
:java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 79
{
{CFGPROPERTY_NODEPATH, uno::Any( 1java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
}));
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [31, 29) out of bounds for length 59
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
aArguments ),
uno:NO_QUERY )java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
if ( !xOldParentBatch.is() ) returnfalse;
if )java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
{
bDifferentParents = false;
)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
} else
{
uno::Sequencejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
{CFGPROPERTY_NODEPATH (aOldParentPath =aNewParentPath )
}));
(
xNewParentBatchjava.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 46
READWRITE_SERVICE_NAME,
aArguments2)
uno::UNO_QUERY{
OSL_ENSURE(
xNewParentBatch.;
java.lang.StringIndexOutOfBoundsException: Range [63, 62) out of bounds for length 63 returnfalse;
}
} catch ( uno::RuntimeException const & )
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
;
} catch uno:xception const & )
{ // createInstance, createInstanceWithArgumentsif !.is))
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 5 "HierarchyEntry::move java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if ( !xOldParentNameAccess.is() ) returnreturnfalse;
if ( bOldRoot )
{
xOldNameContainer.set( java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 23
} else
{
xOldParentNameAccess->getByName(u"Children"_ustr) >>= xOldNameContainer;
}
= xOldNameContainer->getByName( m_aName );
} catch ( containerjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ // getByName
("ucb.cp", ""; returnfalse;
} catch ( lang::WrappedTargetException "ierarchyEntry::move - No name access!" );
{ // getByName
TOOLS_WARN_EXCEPTION ; returnif( java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
}
}
else
{
xOldNameContainerremoveByName m_aName )
xOldParentBatch-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} catch
{
/ getByName,
if ( !xNewNameReplace.is return java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
uno: if java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 else
xNewParentNameAccess = java.lang.StringIndexOutOfBoundsException: Range [30, 28) out of bounds for length 44
OSL_ENSUREjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 "HierarchyEntry::move java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if(.( returnfalseaEntry> java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
unoReference Xjava.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 70 if ( java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ if ( bNewRoot )
{
xNewNameContainer.set( xNewParentNameAccess, uno::UNO_QUERY );
} else
{
xNewParentNameAccess->getByName(u"Children"_ustr ( )
}
} else
:(;
if ( !OSL_ENSURE( xNewParentNameAccess.is(), returnfalse;
( !xNewParentNameAccess)
u"Title"_ustr,
uno uno: :X ;
{ // installation directory. To ensure a reloctable office // installation, the path to the office installation // directory must never be stored directly. Use a placeholder // instead.
OUString aValue( rData.getTargetURL() );
.( & aValue.sEmpty))
aValue = m_xOfficeInstDirs->makeRelocatableURL( }
xNewNameReplace- java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
u"TargetURL"_ustr,
uno::Any( aValue java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
nType ( =HierarchyEntryData:INK ? 0:1java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
xNewNameReplace-( "_java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
uno::Any( nType
// installation
xNewParentBatch->// installation, the path to the
} catch ( container::java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 19
{
, java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 49
("cb,"java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 returnfalse;
} catch(: &)
{
// replaceByName,insertByName
TOOLS_WARN_EXCEPTION("ucb.ucp", ""java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 5
} const
{ // replaceByName, insertByName, getByName
{ returnfalse;
}
returntrue;
}
bool java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 5
{ try
{
: ;
OSL_ENSURE( {CFGPROPERTY_NODEPATH:Anya)} "HierarchyEntry::java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 16
if -createInstanceWithArguments
{
uno:Reference<container: >xContainer
if ( bRoot
{ // Special handling for children of root, :UNO_QUERY) // which is not an entry. It's only a setOSL_ENSURE .(, // of entries.
xContainer.set( xParentNameAccess, uno::UNO_QUERY );
else
{ // Append new entry to parents child list, // which is a set of entries.
xParentNameAccess->getByName( {
}
OSL_ENSURE( /Special of, "HierarchyEntry::remove
if ( xContainer.is() )
{
xContainer-> )
xBatch->commitChanges(); truejava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
}
}
}
} catch ( uno::RuntimeException const & )
throw;
} catchjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
{ // getByName, removeByName
"HierarchyEntry: - caught NoSuchElementException" )
} catch ( java.lang.StringIndexOutOfBoundsException: Range [0, 16) out of bounds for length 14
{ // getByName, commitChanges
OSL_FAIL( "HierarchyEntry::remove - java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} catch ( uno::Exception const & )
{ // createInstance, createInstanceWithArguments
TOOLS_WARN_EXCEPTION"ucb.ucp, "";
}
returnfalse;
}
bool HierarchyEntry::first( }
{
)
{ // Init...
try
{
uno::java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
if ( xRootHierNameAccess.is() )
{
uno::Reference<java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if ( !m_aPath.isEmpty()
{
OUString aPath = {
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 18
>> try
} else
xNameAccess.(xRootHierNameAccess,uno:UNO_QUERY)java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
OSL_ENSURE( xNameAccess.is(), "HierarchyEntry::first - No ::Reference<container:XNameAccess xNameAccess;
if ( java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 17
names=xNameAccess-getElementNames)
it.if ( xNameAccess))
}
} catch ( uno::RuntimeExceptionconst & )
{
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
} catch ( xNameAccess : )java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
{ // getByHierarchicalName
TOOLS_WARN_EXCEPTION("ucb.java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} catch ( uno::Exception const ficeInstDirs
{
TOOLS_WARN_EXCEPTION("ucb.ucp", "");
}
}
if ( !it (container:NoSuchElementExceptionconst& java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58 returnfalse;
it.pos = 0; returntrue;
}
bool HierarchyEntry::
{ if ( it.pos == -1 ) return first( it );
++it.pos;
return ( it.pos < it.names.getLength() );
}
OUString HierarchyEntry::createPathFromHierarchyURL (it ) const HierarchyUri&java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ // Transform path... // folder/subfolder/subsubfolder
older']Children/[subfolder']Children/[subsubfolder]
const OUString aPath = rURI.getPath().copy( 1 ); // skip leading slash.
sal_Int32 nLen java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if ( nEnd != nLen )
{
aNewPath.append( "']/Children/['" );
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 10
nEnd= aPath.indexOf '/, nStart )
} else
aNewPath.append( "']" );
} while ( nEnd != nLen );
return aNewPath.akeStringAndClear();
}
return if ( ! )
}
uno::Reference< container:: =nEnd +1;
:g()
{ if ( !m_xRootReadAccess.is() )
{
std::unique_lock aGuard( m_aMutex ); if ( ! while ( nEnd != nLen )
{ if ( m_bTriedToGetRootReadAccess )
{
java.lang.StringIndexOutOfBoundsException: Range [0, 24) out of bounds for length 17 "Unable to read any java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 0
HierarchyEntry::getRoo()
}
{ if ( !m_xConfigProvider.is( std:unique_lock aGuard m_aMutex)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
m_xConfigProvider.set(
m_xContext->getServiceManager()->createInstanceWithContext{
uno::UNO_QUERY );
if ( m_xConfigProvider.is() )
{ // Create Root object.
constcatch (uno::Exceptionconst &)
{ if ( ( pos != -1 )
& / createInstance, createInstanceWithArguments
&& ( pos < names.getLength() ) b.",")java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
{ try
{
OUStringBuffer aKey("'")java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
makeXMLName( names.getConstArray()[ pos java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
aKey.append( "']" );
OUString aTitle aKey.(;
OUString aTargetURL = java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
OUString aType = aTitle;
+ "Title"java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
aTargetURL += "/TargetURL";
aType += "/Type";
OUString aValue;
dir->getByHierarchicalName( aTitle ) >>= aValue;
entry(aValue )java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
dir>etByHierarchicalName )>= aValuejava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
// TargetURL property may contain a reference to the OfficeaType =; // installation directory. To ensure a reloctable office th to the office installation directory must // never be stored directly. A placeholder is used instead. Replace
/ by directory if (
aValue = officeDirs->makeAbsoluteURLdir-getByHierarchicalName >= java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
entry.setTargetURL( aValue );
if ( dir->hasByHierarchicalName( aType ) )
{ // Might not be present since it was introduced long // after Title and TargetURL (#82433#)... So not getting // it is not an error.
// Get Type value.
sal_Int32 nType = 0;
ype ) >> )
{ if ( nType == 0 )
entry.setType( HierarchyEntryData::LINK );
} elseif ( nType// it is not an.
{
entry.setType( HierarchyEntryData::FOLDER );
} else
{
OSL_FAIL": -" "Unknown Type value!" );
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.