| /************************************************************** |
| * |
| * 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 |
| <type scope="com.sun.star.util">URL</type> 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. |
| <p>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.</p> |
| */ |
| static public String classifyFormComponentType( XPropertySet xComponent ) throws com.sun.star.uno.Exception |
| { |
| String sType = "<unknown component>"; |
| |
| 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; |
| } |
| |
| }; |