blob: d802f43c4d49a2759d1d6ab6d3a0c0302736802a [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.uno.XComponentContext;
import com.sun.star.util.XMacroExpander;
import java.util.Calendar;
import com.sun.star.beans.Property;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
// import com.sun.star.i18n.NumberFormatIndex;
import com.sun.star.lang.Locale;
import com.sun.star.lang.XMultiServiceFactory;
// import com.sun.star.uno.Any;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.RuntimeException;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.DateTime;
import com.sun.star.util.XNumberFormatsSupplier;
import com.sun.star.util.XNumberFormatter;
public class Helper
{
/** Creates a new instance of Helper */
public Helper()
{
}
public static long convertUnoDatetoInteger(com.sun.star.util.Date DateValue)
{
java.util.Calendar oCal = java.util.Calendar.getInstance();
oCal.set(DateValue.Year, DateValue.Month, DateValue.Day);
java.util.Date dTime = oCal.getTime();
long lTime = dTime.getTime();
return lTime / (3600 * 24000);
}
public static void setUnoPropertyValue(Object oUnoObject, String PropertyName, Object PropertyValue)
{
try
{
XPropertySet xPSet = UnoRuntime.queryInterface(XPropertySet.class, oUnoObject);
if (xPSet.getPropertySetInfo().hasPropertyByName(PropertyName))
{
xPSet.setPropertyValue(PropertyName, PropertyValue);
}
else
{
Property[] selementnames = xPSet.getPropertySetInfo().getProperties();
throw new java.lang.IllegalArgumentException("No Such Property: '" + PropertyName + "'");
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
public static Object getUnoObjectbyName(Object oUnoObject, String ElementName)
{
try
{
com.sun.star.container.XNameAccess xName = UnoRuntime.queryInterface(com.sun.star.container.XNameAccess.class, oUnoObject);
if (xName.hasByName(ElementName))
{
return xName.getByName(ElementName);
}
else
{
throw new RuntimeException();
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
return null;
}
}
public static Object getPropertyValue(PropertyValue[] CurPropertyValue, String PropertyName)
{
int MaxCount = CurPropertyValue.length;
for (int i = 0; i < MaxCount; i++)
{
if (CurPropertyValue[i] != null)
{
if (CurPropertyValue[i].Name.equals(PropertyName))
{
return CurPropertyValue[i].Value;
}
}
}
throw new RuntimeException();
}
public static Object getUnoPropertyValue(Object oUnoObject, String PropertyName, java.lang.Class xClass)
{
try
{
if (oUnoObject != null)
{
XPropertySet xPSet = UnoRuntime.queryInterface(XPropertySet.class, oUnoObject);
Object oObject = xPSet.getPropertyValue(PropertyName);
if (AnyConverter.isVoid(oObject))
{
return null;
}
else
{
return com.sun.star.uno.AnyConverter.toObject(new com.sun.star.uno.Type(xClass), oObject);
}
}
return null;
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
return null;
}
}
public static Object getPropertyValuefromAny(Object[] CurPropertyValue, String PropertyName)
{
if (CurPropertyValue != null)
{
int MaxCount = CurPropertyValue.length;
for (int i = 0; i < MaxCount; i++)
{
if (CurPropertyValue[i] != null)
{
PropertyValue aValue = (PropertyValue) CurPropertyValue[i];
if (aValue != null && aValue.Name.equals(PropertyName))
{
return aValue.Value;
}
}
}
}
// System.out.println("Property not found: " + PropertyName);
return null;
}
public static Object getPropertyValuefromAny(Object[] CurPropertyValue, String PropertyName, java.lang.Class xClass)
{
try
{
if (CurPropertyValue != null)
{
int MaxCount = CurPropertyValue.length;
for (int i = 0; i < MaxCount; i++)
{
if (CurPropertyValue[i] != null)
{
PropertyValue aValue = (PropertyValue) CurPropertyValue[i];
if (aValue != null && aValue.Name.equals(PropertyName))
{
return com.sun.star.uno.AnyConverter.toObject(new com.sun.star.uno.Type(xClass), aValue.Value);
}
}
}
}
// System.out.println("Property not found: " + PropertyName);
return null;
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
return null;
}
}
public static Object getUnoPropertyValue(Object oUnoObject, String PropertyName)
{
try
{
if (oUnoObject != null)
{
XPropertySet xPSet = UnoRuntime.queryInterface(XPropertySet.class, oUnoObject);
// Property[] aProps = xPSet.getPropertySetInfo().getProperties();
return xPSet.getPropertyValue(PropertyName);
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
return null;
}
public static Object getUnoArrayPropertyValue(Object oUnoObject, String PropertyName)
{
try
{
if (oUnoObject != null)
{
XPropertySet xPSet = UnoRuntime.queryInterface(XPropertySet.class, oUnoObject);
Object oObject = xPSet.getPropertyValue(PropertyName);
if (AnyConverter.isArray(oObject))
{
return getArrayValue(oObject);
}
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
return null;
}
public static Object getUnoStructValue(Object oUnoObject, String PropertyName)
{
try
{
if (oUnoObject != null)
{
XPropertySet xPSet = UnoRuntime.queryInterface(XPropertySet.class, oUnoObject);
if (xPSet.getPropertySetInfo().hasPropertyByName(PropertyName))
{
return xPSet.getPropertyValue(PropertyName);
}
}
return null;
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
return null;
}
}
public static void setUnoPropertyValues(Object oUnoObject, String[] PropertyNames, Object[] PropertyValues)
{
try
{
com.sun.star.beans.XMultiPropertySet xMultiPSetLst = UnoRuntime.queryInterface(com.sun.star.beans.XMultiPropertySet.class, oUnoObject);
if (xMultiPSetLst != null)
{
xMultiPSetLst.setPropertyValues(PropertyNames, PropertyValues);
}
else
{
for (int i = 0; i < PropertyNames.length; i++)
{
//System.out.println(PropertyNames[i] + "=" + PropertyValues[i]);
setUnoPropertyValue(oUnoObject, PropertyNames[i], PropertyValues[i]);
}
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
/**
* @author bc93774
* checks if the value of an object that represents an array is null.
* check beforehand if the Object is really an array with "AnyConverter.IsArray(oObject)
* @param oValue the paramter that has to represent an object
* @return a null reference if the array is empty
*/
public static Object getArrayValue(Object oValue)
{
try
{
Object oPropList = com.sun.star.uno.AnyConverter.toArray(oValue);
int nlen = java.lang.reflect.Array.getLength(oPropList);
if (nlen == 0)
{
return null;
}
else
{
return oPropList;
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
return null;
}
}
private static long DAY_IN_MILLIS = (24 * 60 * 60 * 1000);
public static class DateUtils
{
private long docNullTime;
private XNumberFormatter formatter;
private XNumberFormatsSupplier formatSupplier;
private Calendar calendar;
public DateUtils(XMultiServiceFactory xmsf, Object document) throws Exception
{
XMultiServiceFactory docMSF = UnoRuntime.queryInterface(XMultiServiceFactory.class, document);
Object defaults = docMSF.createInstance("com.sun.star.text.Defaults");
Locale l = (Locale) Helper.getUnoStructValue(defaults, "CharLocale");
java.util.Locale jl = new java.util.Locale(
l.Language, l.Country, l.Variant);
calendar = Calendar.getInstance(jl);
formatSupplier = UnoRuntime.queryInterface(XNumberFormatsSupplier.class, document);
Object formatSettings = formatSupplier.getNumberFormatSettings();
com.sun.star.util.Date date = (com.sun.star.util.Date) Helper.getUnoPropertyValue(formatSettings, "NullDate");
calendar.set(date.Year, date.Month - 1, date.Day);
docNullTime = getTimeInMillis();
formatter = NumberFormatter.createNumberFormatter(xmsf, formatSupplier);
}
/**
* @param format a constant of the enumeration NumberFormatIndex
* @return
*/
public int getFormat(short format)
{
return NumberFormatter.getNumberFormatterKey(formatSupplier, format);
}
public XNumberFormatter getFormatter()
{
return formatter;
}
private long getTimeInMillis()
{
java.util.Date dDate = calendar.getTime();
return dDate.getTime();
}
/**
* @param date a VCL date in form of 20041231
* @return a document relative date
*/
public synchronized double getDocumentDateAsDouble(int date)
{
calendar.clear();
calendar.set(date / 10000,
(date % 10000) / 100 - 1,
date % 100);
long date1 = getTimeInMillis();
/*
* docNullTime and date1 are in millis, but
* I need a day...
*/
return (date1 - docNullTime) / DAY_IN_MILLIS + 1;
}
public double getDocumentDateAsDouble(DateTime date)
{
return getDocumentDateAsDouble(date.Year * 10000 + date.Month * 100 + date.Day);
}
public synchronized double getDocumentDateAsDouble(long javaTimeInMillis)
{
calendar.clear();
JavaTools.setTimeInMillis(calendar, javaTimeInMillis);
long date1 = getTimeInMillis();
/*
* docNullTime and date1 are in millis, but
* I need a day...
*/
return (date1 - docNullTime) / DAY_IN_MILLIS + 1;
}
public String format(int formatIndex, int date)
{
return formatter.convertNumberToString(formatIndex, getDocumentDateAsDouble(date));
}
public String format(int formatIndex, DateTime date)
{
return formatter.convertNumberToString(formatIndex, getDocumentDateAsDouble(date));
}
public String format(int formatIndex, long javaTimeInMillis)
{
return formatter.convertNumberToString(formatIndex, getDocumentDateAsDouble(javaTimeInMillis));
}
}
public static XComponentContext getComponentContext(XMultiServiceFactory _xMSF)
{
// Get the path to the extension and try to add the path to the class loader
final XPropertySet xProps = UnoRuntime.queryInterface(XPropertySet.class, _xMSF);
final PropertySetHelper aHelper = new PropertySetHelper(xProps);
final Object aDefaultContext = aHelper.getPropertyValueAsObject("DefaultContext");
return UnoRuntime.queryInterface(XComponentContext.class, aDefaultContext);
}
public static XMacroExpander getMacroExpander(XMultiServiceFactory _xMSF)
{
final XComponentContext xComponentContext = getComponentContext(_xMSF);
final Object aSingleton = xComponentContext.getValueByName("/singletons/com.sun.star.util.theMacroExpander");
return UnoRuntime.queryInterface(XMacroExpander.class, aSingleton);
}
}