blob: eb9b9bc266e36988b94868078eccc1d8be791bc6 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package com.sun.star.wizards.common;
import com.sun.star.beans.*;
import com.sun.star.container.*;
import com.sun.star.lang.WrappedTargetException;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XSingleServiceFactory;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.lang.Locale;
import com.sun.star.util.XChangesBatch;
/**
* This class gives access to the OO configuration api.
* It contains 4 get and 4 set convenience methods for getting and settings properties
* in the configuration. <br/>
* For the get methods, two parameters must be given: name and parent, where name is the
* name of the property, parent is a HierarchyElement (::com::sun::star::configuration::HierarchyElement)<br/>
* The get and set methods support hieryrchical property names like "options/gridX". <br/>
* NOTE: not yet supported, but sometime later,
* If you will ommit the "parent" parameter, then the "name" parameter must be in hierarchy form from
* the root of the registry.
* @author rpiterman
*/
public abstract class Configuration
{
public static int getInt(String name, Object parent) throws Exception
{
Object o = getNode(name, parent);
if (AnyConverter.isVoid(o))
{
return 0;
}
return AnyConverter.toInt(o);
}
public static short getShort(String name, Object parent) throws Exception
{
Object o = getNode(name, parent);
if (AnyConverter.isVoid(o))
{
return (short) 0;
}
return AnyConverter.toShort(o);
}
public static float getFloat(String name, Object parent) throws Exception
{
Object o = getNode(name, parent);
if (AnyConverter.isVoid(o))
{
return (float) 0;
}
return AnyConverter.toFloat(o);
}
public static double getDouble(String name, Object parent) throws Exception
{
Object o = getNode(name, parent);
if (AnyConverter.isVoid(o))
{
return (double) 0;
}
return AnyConverter.toDouble(o);
}
public static String getString(String name, Object parent) throws Exception
{
Object o = getNode(name, parent);
if (AnyConverter.isVoid(o))
{
return PropertyNames.EMPTY_STRING;
}
return (String) o;
}
public static boolean getBoolean(String name, Object parent) throws Exception
{
Object o = getNode(name, parent);
if (AnyConverter.isVoid(o))
{
return false;
}
return AnyConverter.toBoolean(o);
}
public static Object getNode(String name, Object parent) throws Exception
{
return UnoRuntime.queryInterface(XNameAccess.class, parent).getByName(name);
}
public static void set(int value, String name, Object parent) throws Exception
{
set(new Integer(value), name, parent);
}
public static void set(short value, String name, Object parent) throws Exception
{
set(new Short(value), name, parent);
}
public static void set(String value, String name, Object parent) throws Exception
{
set((Object) value, name, parent);
}
public static void set(boolean value, String name, Object parent) throws Exception
{
if (value)
{
set(Boolean.TRUE, name, parent);
}
else
{
set(Boolean.FALSE, name, parent);
}
}
public static void set(Object value, String name, Object parent) throws com.sun.star.lang.IllegalArgumentException, PropertyVetoException, UnknownPropertyException, WrappedTargetException
{
UnoRuntime.queryInterface(XHierarchicalPropertySet.class, parent).setHierarchicalPropertyValue(name, value);
}
/** Creates a new instance of RegistryEntry
* @param name
* @param parent
* @return
* @throws Exception
*/
public static Object getConfigurationNode(String name, Object parent) throws Exception
{
return UnoRuntime.queryInterface(XNameAccess.class, parent).getByName(name);
}
public static Object getConfigurationRoot(XMultiServiceFactory xmsf, String sPath, boolean updateable) throws com.sun.star.uno.Exception
{
Object oConfigProvider;
oConfigProvider = xmsf.createInstance("com.sun.star.configuration.ConfigurationProvider");
XMultiServiceFactory confMsf = UnoRuntime.queryInterface(XMultiServiceFactory.class, oConfigProvider);
final String sView = updateable ? "com.sun.star.configuration.ConfigurationUpdateAccess" : "com.sun.star.configuration.ConfigurationAccess";
Object args[] = new Object[updateable ? 2 : 1];
PropertyValue aPathArgument = new PropertyValue();
aPathArgument.Name = "nodepath";
aPathArgument.Value = sPath;
args[0] = aPathArgument;
if (updateable)
{
PropertyValue aModeArgument = new PropertyValue();
aModeArgument.Name = "lazywrite";
aModeArgument.Value = Boolean.FALSE;
args[1] = aModeArgument;
}
return confMsf.createInstanceWithArguments(sView, args);
}
public static String[] getChildrenNames(Object configView)
{
XNameAccess nameAccess = UnoRuntime.queryInterface(XNameAccess.class, configView);
return nameAccess.getElementNames();
}
public static String getProductName(XMultiServiceFactory xMSF)
{
try
{
Object oProdNameAccess = getConfigurationRoot(xMSF, "org.openoffice.Setup/Product", false);
return (String) Helper.getUnoObjectbyName(oProdNameAccess, "ooName");
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
return null;
}
}
public static String getOfficeLocaleString(XMultiServiceFactory xMSF)
{
String sLocale = PropertyNames.EMPTY_STRING;
try
{
Locale aLocLocale = new Locale();
Object oMasterKey = getConfigurationRoot(xMSF, "org.openoffice.Setup/L10N/", false);
sLocale = (String) Helper.getUnoObjectbyName(oMasterKey, "ooLocale");
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
return sLocale;
}
public static Locale getOfficeLocale(XMultiServiceFactory xMSF)
{
Locale aLocLocale = new Locale();
// Object oMasterKey = getConfigurationRoot(xMSF, "org.openoffice.Setup/L10N/", false);
// String sLocale = (String) Helper.getUnoObjectbyName(oMasterKey, "ooLocale");
String sLocale = getOfficeLocaleString(xMSF);
String[] sLocaleList = JavaTools.ArrayoutofString(sLocale, "-");
aLocLocale.Language = sLocaleList[0];
if (sLocaleList.length > 1)
{
aLocLocale.Country = sLocaleList[1];
}
return aLocLocale;
}
public static String getOfficeLinguistic(XMultiServiceFactory xMSF)
{
try
{
Object oMasterKey = getConfigurationRoot(xMSF, "org.openoffice.Setup/L10N/", false);
return (String) Helper.getUnoObjectbyName(oMasterKey, "ooLocale");
}
catch (Exception exception)
{
exception.printStackTrace();
return null;
}
}
/**
* This method creates a new configuration node and adds it
* to the given view. Note that if a node with the given name
* already exists it will be completely removed from
* the configuration.
* @param configView
* @param name
* @return the new created configuration node.
* @throws com.sun.star.lang.WrappedTargetException
* @throws ElementExistException
* @throws NoSuchElementException
* @throws com.sun.star.uno.Exception
*/
public static Object addConfigNode(Object configView, String name) throws com.sun.star.lang.WrappedTargetException, ElementExistException, NoSuchElementException, com.sun.star.uno.Exception
{
XNameContainer xNameContainer = UnoRuntime.queryInterface(XNameContainer.class, configView);
if (xNameContainer == null)
{
XNameReplace xNameReplace = UnoRuntime.queryInterface(XNameReplace.class, configView);
return xNameReplace.getByName(name);
}
else
{
/*if (xNameContainer.hasByName(name))
xNameContainer.removeByName(name);*/
// create a new detached set element (instance of DataSourceDescription)
XSingleServiceFactory xElementFactory = UnoRuntime.queryInterface(XSingleServiceFactory.class, configView);
// the new element is the result !
Object newNode = xElementFactory.createInstance();
// insert it - this also names the element
xNameContainer.insertByName(name, newNode);
return newNode;
}
}
public static void removeNode(Object configView, String name) throws NoSuchElementException, WrappedTargetException
{
XNameContainer xNameContainer = UnoRuntime.queryInterface(XNameContainer.class, configView);
if (xNameContainer.hasByName(name))
{
xNameContainer.removeByName(name);
}
}
public static void commit(Object configView) throws WrappedTargetException
{
XChangesBatch xUpdateControl = UnoRuntime.queryInterface(XChangesBatch.class, configView);
xUpdateControl.commitChanges();
}
public static void updateConfiguration(XMultiServiceFactory xmsf, String path, String name, ConfigNode node, Object param) throws com.sun.star.uno.Exception, com.sun.star.container.ElementExistException, NoSuchElementException, WrappedTargetException
{
Object view = Configuration.getConfigurationRoot(xmsf, path, true);
addConfigNode(path, name);
node.writeConfiguration(view, param);
XChangesBatch xUpdateControl = UnoRuntime.queryInterface(XChangesBatch.class, view);
xUpdateControl.commitChanges();
}
public static void removeNode(XMultiServiceFactory xmsf, String path, String name) throws com.sun.star.uno.Exception, com.sun.star.container.ElementExistException, NoSuchElementException, WrappedTargetException
{
Object view = Configuration.getConfigurationRoot(xmsf, path, true);
removeNode(view, name);
XChangesBatch xUpdateControl = UnoRuntime.queryInterface(XChangesBatch.class, view);
xUpdateControl.commitChanges();
}
public static String[] getNodeDisplayNames(XNameAccess _xNameAccessNode)
{
String[] snames = null;
return getNodeChildNames(_xNameAccessNode, PropertyNames.PROPERTY_NAME);
}
public static String[] getNodeChildNames(XNameAccess xNameAccessNode, String _schildname)
{
String[] snames = null;
try
{
snames = xNameAccessNode.getElementNames();
String[] sdisplaynames = new String[snames.length];
for (int i = 0; i < snames.length; i++)
{
Object oContent = Helper.getUnoPropertyValue(xNameAccessNode.getByName(snames[i]), _schildname);
if (!AnyConverter.isVoid(oContent))
{
sdisplaynames[i] = (String) Helper.getUnoPropertyValue(xNameAccessNode.getByName(snames[i]), _schildname);
}
else
{
sdisplaynames[i] = snames[i];
}
}
return sdisplaynames;
}
catch (Exception e)
{
e.printStackTrace(System.out);
return snames;
}
}
public static XNameAccess getChildNodebyIndex(XNameAccess _xNameAccess, int _index)
{
try
{
String[] snames = _xNameAccess.getElementNames();
Object oNode = _xNameAccess.getByName(snames[_index]);
return UnoRuntime.queryInterface(XNameAccess.class, oNode);
}
catch (Exception e)
{
e.printStackTrace(System.out);
return null;
}
}
public static XNameAccess getChildNodebyName(XNameAccess _xNameAccessNode, String _SubNodeName)
{
try
{
if (_xNameAccessNode.hasByName(_SubNodeName))
{
return UnoRuntime.queryInterface(XNameAccess.class, _xNameAccessNode.getByName(_SubNodeName));
}
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
return null;
}
public static XNameAccess getChildNodebyDisplayName(XNameAccess _xNameAccessNode, String _displayname)
{
String[] snames = null;
return getChildNodebyDisplayName(_xNameAccessNode, _displayname, PropertyNames.PROPERTY_NAME);
}
public static XNameAccess getChildNodebyDisplayName(XNameAccess _xNameAccessNode, String _displayname, String _nodename)
{
String[] snames = null;
try
{
snames = _xNameAccessNode.getElementNames();
String[] sdisplaynames = new String[snames.length];
for (int i = 0; i < snames.length; i++)
{
String curdisplayname = (String) Helper.getUnoPropertyValue(_xNameAccessNode.getByName(snames[i]), _nodename);
if (curdisplayname.equals(_displayname))
{
return UnoRuntime.queryInterface(XNameAccess.class, _xNameAccessNode.getByName(snames[i]));
}
}
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
return null;
}
public static XNameAccess getChildNodebyDisplayName(XMultiServiceFactory _xMSF, Locale _aLocale, XNameAccess _xNameAccessNode, String _displayname, String _nodename, int _nmaxcharcount)
{
String[] snames = null;
try
{
snames = _xNameAccessNode.getElementNames();
String[] sdisplaynames = new String[snames.length];
for (int i = 0; i < snames.length; i++)
{
String curdisplayname = (String) Helper.getUnoPropertyValue(_xNameAccessNode.getByName(snames[i]), _nodename);
if ((_nmaxcharcount > 0) && (_nmaxcharcount < curdisplayname.length()))
{
curdisplayname = curdisplayname.substring(0, _nmaxcharcount);
}
curdisplayname = Desktop.removeSpecialCharacters(_xMSF, _aLocale, curdisplayname);
if (curdisplayname.equals(_displayname))
{
return UnoRuntime.queryInterface(XNameAccess.class, _xNameAccessNode.getByName(snames[i]));
}
}
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
return null;
}
}