/*
* This file is part of the LibreOffice project .
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice :
*
* Licensed to the Apache Software Foundation ( ASF ) under one or more
* contributor license agreements . See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership . The ASF licenses this file to you under the Apache
* License , Version 2 . 0 ( 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.apache.org/licenses/LICENSE-2.0 .
*/
package com.sun.star.wizards.common;
import com.sun.star.beans.PropertyValue;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.util.XURLTransformer;
import com.sun.star.lang.Locale;
import com.sun.star.bridge.XUnoUrlResolver;
import com.sun.star.comp.helper.Bootstrap;
import com.sun.star.container.XHierarchicalNameAccess;
import com.sun.star.container.XNameAccess;
import com.sun.star.frame.*;
import com.sun.star.i18n.KParseType;
import com.sun.star.i18n.ParseResult;
import com.sun.star.i18n.XCharacterClassification;
public class Desktop
{
public static XDesktop getDesktop(XMultiServiceFactory xMSF)
{
com.sun.star.uno.XInterface xInterface = null ;
XDesktop xDesktop = null ;
if (xMSF != null )
{
try
{
xInterface = (com.sun.star.uno.XInterface) xMSF.createInstance("com.sun.star.frame.Desktop" );
xDesktop = UnoRuntime.queryInterface(XDesktop.class , xInterface);
}
catch (Exception exception)
{
exception.printStackTrace(System.err);
}
}
else
{
System.out.println("Can't create a desktop. null pointer !" );
}
return xDesktop;
}
public static XFrame getActiveFrame(XMultiServiceFactory xMSF)
{
XDesktop xDesktop = getDesktop(xMSF);
XFramesSupplier xFrameSuppl = UnoRuntime.queryInterface(XFramesSupplier.class , xDesktop);
return xFrameSuppl.getActiveFrame();
}
private static XDispatch getDispatcher(XFrame xFrame, String _stargetframe, com.sun.star.util.URL oURL)
{
try
{
com.sun.star.util.URL[] oURLArray = new com.sun.star.util.URL[1 ];
oURLArray[0 ] = oURL;
XDispatchProvider xDispatchProvider = UnoRuntime.queryInterface(XDispatchProvider.class , xFrame);
return xDispatchProvider.queryDispatch(oURLArray[0 ], _stargetframe, FrameSearchFlag.ALL); // "_self"
}
catch (Exception e)
{
e.printStackTrace(System.err);
}
return null ;
}
private static com.sun.star.util.URL getDispatchURL(XMultiServiceFactory xMSF, String _sURL) throws com.sun.star.uno.Exception
{
Object oTransformer = xMSF.createInstance("com.sun.star.util.URLTransformer" );
XURLTransformer xTransformer = UnoRuntime.queryInterface(XURLTransformer.class , oTransformer);
com.sun.star.util.URL[] oURL = new com.sun.star.util.URL[1 ];
oURL[0 ] = new com.sun.star.util.URL();
oURL[0 ].Complete = _sURL;
xTransformer.parseStrict(oURL);
return oURL[0 ];
}
private static void dispatchURL(XMultiServiceFactory xMSF, String sURL, XFrame xFrame, String _stargetframe) throws com.sun.star.uno.Exception
{
com.sun.star.util.URL oURL = getDispatchURL(xMSF, sURL);
XDispatch xDispatch = getDispatcher(xFrame, _stargetframe, oURL);
dispatchURL(xDispatch, oURL);
}
public static void dispatchURL(XMultiServiceFactory xMSF, String sURL, XFrame xFrame) throws com.sun.star.uno.Exception
{
dispatchURL(xMSF, sURL, xFrame, PropertyNames.EMPTY_STRING);
}
private static void dispatchURL(XDispatch _xDispatch, com.sun.star.util.URL oURL)
{
PropertyValue[] oArg = new PropertyValue[0 ];
_xDispatch.dispatch(oURL, oArg);
}
private static XMultiComponentFactory getMultiComponentFactory() throws com.sun.star.uno.Exception, RuntimeException, java.lang.Exception
{
XComponentContext xcomponentcontext = Bootstrap.createInitialComponentContext(null );
// initial serviceManager
return xcomponentcontext.getServiceManager();
}
public static XMultiServiceFactory connect(String connectStr) throws com.sun.star.uno.Exception, com.sun.star.uno.RuntimeException, Exception
{
XMultiComponentFactory componentFactory = getMultiComponentFactory();
Object xUrlResolver = componentFactory.createInstanceWithContext( "com.sun.star.bridge.UnoUrlResolver" , null );
XUnoUrlResolver urlResolver = UnoRuntime.queryInterface(XUnoUrlResolver.class , xUrlResolver);
return UnoRuntime.queryInterface(XMultiServiceFactory.class , urlResolver.resolve( connectStr ) );
}
public static String getIncrementSuffix(XNameAccess xElementContainer, String ElementName)
{
boolean bElementexists = true ;
int i = 1 ;
String sIncSuffix = PropertyNames.EMPTY_STRING;
String BaseName = ElementName;
while (bElementexists)
{
bElementexists = xElementContainer.hasByName(ElementName);
if (bElementexists)
{
i += 1 ;
ElementName = BaseName + Integer.toString(i);
}
}
if (i > 1 )
{
sIncSuffix = Integer.toString(i);
}
return sIncSuffix;
}
private static String getIncrementSuffix(XHierarchicalNameAccess xElementContainer, String ElementName)
{
boolean bElementexists = true ;
int i = 1 ;
String sIncSuffix = PropertyNames.EMPTY_STRING;
String BaseName = ElementName;
while (bElementexists)
{
bElementexists = xElementContainer.hasByHierarchicalName(ElementName);
if (bElementexists)
{
i += 1 ;
ElementName = BaseName + Integer.toString(i);
}
}
if (i > 1 )
{
sIncSuffix = Integer.toString(i);
}
return sIncSuffix;
}
private static int checkforfirstSpecialCharacter(XMultiServiceFactory _xMSF, String _sString, Locale _aLocale)
{
try
{
int nStartFlags = com.sun.star.i18n.KParseTokens.ANY_LETTER_OR_NUMBER + com.sun.star.i18n.KParseTokens.ASC_UNDERSCORE;
Object ocharservice = _xMSF.createInstance("com.sun.star.i18n.CharacterClassification" );
XCharacterClassification xCharacterClassification = UnoRuntime.queryInterface(XCharacterClassification.class , ocharservice);
ParseResult aResult = xCharacterClassification.parsePredefinedToken(KParseType.IDENTNAME, _sString, 0 , _aLocale, nStartFlags, PropertyNames.EMPTY_STRING, nStartFlags, PropertyNames.SPACE);
return aResult.EndPos;
}
catch (Exception e)
{
e.printStackTrace(System.err);
return -1 ;
}
}
public static String removeSpecialCharacters(XMultiServiceFactory _xMSF, Locale _aLocale, String _sname)
{
String snewname = _sname;
int i = 0 ;
while (i < snewname.length())
{
i = Desktop.checkforfirstSpecialCharacter(_xMSF, snewname, _aLocale);
if (i < snewname.length())
{
String sspecialchar = snewname.substring(i, i + 1 );
snewname = JavaTools.replaceSubString(snewname, PropertyNames.EMPTY_STRING, sspecialchar);
}
}
return snewname;
}
/**
* Checks if the passed Element Name already exists in the ElementContainer . If yes it appends a
* suffix to make it unique
* @ return a unique Name ready to be added to the container .
*/
public static String getUniqueName(XNameAccess xElementContainer, String sElementName)
{
String sIncSuffix = getIncrementSuffix(xElementContainer, sElementName);
return sElementName + sIncSuffix;
}
/**
* Checks if the passed Element Name already exists in the ElementContainer . If yes it appends a
* suffix to make it unique
* @ return a unique Name ready to be added to the container .
*/
public static String getUniqueName(XHierarchicalNameAccess xElementContainer, String sElementName)
{
String sIncSuffix = getIncrementSuffix(xElementContainer, sElementName);
return sElementName + sIncSuffix;
}
/**
* Checks if the passed Element Name already exists in the list . If yes it appends a
* suffix to make it unique .
* @ return a unique Name not being in the passed list .
*/
public static String getUniqueName(String[] _slist, String _sElementName, String _sSuffixSeparator)
{
if (_slist == null || _slist.length == 0 )
{
return _sElementName;
}
String scompname = _sElementName;
int a = 2 ;
while (true )
{
for (int i = 0 ; i < _slist.length; i++)
{
if (JavaTools.FieldInList(_slist, scompname) == -1 )
{
return scompname;
}
}
scompname = _sElementName + _sSuffixSeparator + a++;
}
}
private static String getTemplatePath(XMultiServiceFactory _xMSF)
{
try
{
return FileAccess.getOfficePath(_xMSF, "Template" , "share" , "/wizard" );
}
catch (NoValidPathException nopathexception)
{
}
return PropertyNames.EMPTY_STRING;
}
public static String getBitmapPath(XMultiServiceFactory _xMSF)
{
try
{
return FileAccess.combinePaths(_xMSF, getTemplatePath(_xMSF), "/../wizard/bitmap" );
}
catch (NoValidPathException nopathexception)
{
}
return PropertyNames.EMPTY_STRING;
}
}
Messung V0.5 in Prozent C=97 H=93 G=94
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-11)
¤
*© Formatika GbR, Deutschland