/************************************************************** * * 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. * *************************************************************/ import com.sun.star.uno.*; import com.sun.star.lang.*; import com.sun.star.util.*; import com.sun.star.beans.*; import com.sun.star.container.*; import com.sun.star.awt.*; import com.sun.star.form.*; /** provides global helpers */ public class FLTools { /* ------------------------------------------------------------------ */ static void dump_Object( Object aObject ) { XServiceInfo xSI = UNO.queryServiceInfo( aObject ); if ( null != xSI ) System.out.println( "dumping object with name \"" + xSI.getImplementationName() + "\"" ); else System.out.println( "object has no service info!" ); } /* ------------------------------------------------------------------ */ /** translates a string containing an URL into a complete URL object. */ static public URL parseURL( String sURL, XComponentContext xCtx ) throws java.lang.Exception { URL[] aURL = new URL[] { new URL() }; aURL[0].Complete = sURL; // need an URLTransformer XURLTransformer xTransformer = (XURLTransformer)UnoRuntime.queryInterface( XURLTransformer.class, xCtx.getServiceManager().createInstanceWithContext( "com.sun.star.util.URLTransformer", xCtx ) ); xTransformer.parseStrict( aURL ); return aURL[0]; } /* ------------------------------------------------------------------ */ /** returns the name of the given form component */ public static String getName( Object aFormComponent ) throws com.sun.star.uno.Exception { XNamed xNamed = (XNamed)UnoRuntime.queryInterface( XNamed.class, aFormComponent ); String sName = ""; if ( null != xNamed ) sName = xNamed.getName(); return sName; } /* ------------------------------------------------------------------ */ /** returns the label of the given form component */ public static String getLabel( Object aFormComponent ) throws com.sun.star.uno.Exception { String sLabel = ""; XPropertySet xProps = UNO.queryPropertySet( aFormComponent ); XPropertySetInfo xPSI = ( null != xProps ) ? xProps.getPropertySetInfo() : null; if ( null == xPSI ) { // no property set or no property set info // can't do anything except falling back to the name return getName( aFormComponent ); } // first check if the component has a LabelControl if ( xPSI.hasPropertyByName( "LabelControl" ) ) sLabel = getLabel( xProps.getPropertyValue( "LabelControl" ) ); // no LabelControl or no label at the LabelControl if ( 0 == sLabel.length() ) { // a "Label" property? if ( xPSI.hasPropertyByName( "Label" ) ) sLabel = (String)xProps.getPropertyValue( "Label" ); if ( 0 == sLabel.length() ) { // no Label property or no label set // -> fallback to the component name sLabel = getName( aFormComponent ); } } return sLabel; } /* ------------------------------------------------------------------ */ /** retrieves the index of a form component within it's parent */ static public int getIndexInParent( Object aContainer, Object aElement ) throws com.sun.star.uno.Exception { int nIndex = -1; // norm the element XInterface xElement = (XInterface)UnoRuntime.queryInterface( XInterface.class, aElement ); // get the container XIndexContainer xIndexCont = UNO.queryIndexContainer( aContainer ); if ( null != xIndexCont ) { // loop through all children int nCount = xIndexCont.getCount(); for ( int i = 0; i < nCount; ++i ) { // compare with the element XInterface xCurrent = (XInterface)UnoRuntime.queryInterface( XInterface.class, xIndexCont.getByIndex( 0 ) ); if ( xCurrent.equals( xElement ) ) { // found nIndex = i; break; } } } // outta here return nIndex; } /* ------------------------------------------------------------------ */ /** retrieves the parent of the given object */ static Object getParent( Object aComponent, Class aInterfaceClass ) { XChild xAsChild = (XChild)UnoRuntime.queryInterface( XChild.class, aComponent ); return UnoRuntime.queryInterface( aInterfaceClass, xAsChild.getParent() ); } /* ------------------------------------------------------------------ */ /** retrieves the parent of the given object */ static XPropertySet getParent( Object aComponent ) { return (XPropertySet)getParent( aComponent, XPropertySet.class ); } /* ------------------------------------------------------------------ */ /** disposes the component given */ static public void disposeComponent( Object xComp ) throws java.lang.RuntimeException { XComponent xComponent = (XComponent)UnoRuntime.queryInterface( XComponent.class, xComp ); if ( null != xComponent ) xComponent.dispose(); } /* ------------------------------------------------------------------ */ /** get's the XControlModel for a control */ static public Object getModel( Object aControl, Class aInterfaceClass ) { XControl xControl = (XControl)UnoRuntime.queryInterface( XControl.class, aControl ); XControlModel xModel = null; if ( null != xControl ) xModel = xControl.getModel(); return UnoRuntime.queryInterface( aInterfaceClass, xModel ); } /* ------------------------------------------------------------------ */ /** retrieves the type of a form component.

Speaking strictly, the function recognizes more than form components. Especially, it survives a null argument. which means it can be safely applied to the a top-level forms container; and it is able to classify grid columns (which are no form components) as well.

*/ static public String classifyFormComponentType( XPropertySet xComponent ) throws com.sun.star.uno.Exception { String sType = ""; XServiceInfo xSI = UNO.queryServiceInfo( xComponent ); XPropertySetInfo xPSI = null; if ( null != xComponent ) xPSI = xComponent.getPropertySetInfo(); if ( ( null != xPSI ) && xPSI.hasPropertyByName( "ClassId" ) ) { // get the ClassId property XPropertySet xCompProps = UNO.queryPropertySet( xComponent ); Short nClassId = (Short)xCompProps.getPropertyValue( "ClassId" ); switch ( nClassId.intValue() ) { case FormComponentType.COMMANDBUTTON: sType = "Command button"; break; case FormComponentType.RADIOBUTTON : sType = "Radio button"; break; case FormComponentType.IMAGEBUTTON : sType = "Image button"; break; case FormComponentType.CHECKBOX : sType = "Check Box"; break; case FormComponentType.LISTBOX : sType = "List Box"; break; case FormComponentType.COMBOBOX : sType = "Combo Box"; break; case FormComponentType.GROUPBOX : sType = "Group Box"; break; case FormComponentType.FIXEDTEXT : sType = "Fixed Text"; break; case FormComponentType.GRIDCONTROL : sType = "Grid Control"; break; case FormComponentType.FILECONTROL : sType = "File Control"; break; case FormComponentType.HIDDENCONTROL: sType = "Hidden Control"; break; case FormComponentType.IMAGECONTROL : sType = "Image Control"; break; case FormComponentType.DATEFIELD : sType = "Date Field"; break; case FormComponentType.TIMEFIELD : sType = "Time Field"; break; case FormComponentType.NUMERICFIELD : sType = "Numeric Field"; break; case FormComponentType.CURRENCYFIELD: sType = "Currency Field"; break; case FormComponentType.PATTERNFIELD : sType = "Pattern Field"; break; case FormComponentType.TEXTFIELD : // there are two known services with this class id: the usual text field, // and the formatted field sType = "Text Field"; if ( ( null != xSI ) && xSI.supportsService( "com.sun.star.form.component.FormattedField" ) ) { sType = "Formatted Field"; } break; default: break; } } else { if ( ( null != xSI ) && xSI.supportsService( "com.sun.star.form.component.DataForm" ) ) { sType = "Form"; } } return sType; } };