blob: 79824e50ee2b8e37062608dc7a71f3708e1b3d56 [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 integration.extensions;
import com.sun.star.uno.*;
import com.sun.star.lang.*;
import com.sun.star.beans.*;
import com.sun.star.reflection.*;
import com.sun.star.inspection.*;
/**
*
* @author fs93730
*/
public class MethodHandler implements XPropertyHandler
{
private XComponentContext m_context;
private XIntrospection m_introspection;
private XIntrospectionAccess m_introspectionAccess;
private XIdlClass m_idlClass;
private XIdlMethod[] m_methods;
private java.util.HashMap m_methodsHash;
/** Creates a new instance of MethodHandler */
public MethodHandler( XComponentContext _context )
{
m_context = _context;
m_methodsHash = new java.util.HashMap();
try
{
m_introspection = (XIntrospection)UnoRuntime.queryInterface( XIntrospection.class,
m_context.getServiceManager().createInstanceWithContext( "com.sun.star.beans.Introspection", m_context )
);
}
catch( com.sun.star.uno.Exception e )
{
System.err.println( "MethodHandler: could not create a Introspection service, not much functionality will be available." );
}
}
static public XSingleComponentFactory getFactory()
{
return new ComponentFactory( MethodHandler.class );
}
public void actuatingPropertyChanged(String _propertyName, Object _newValue, Object _oldValue, com.sun.star.inspection.XObjectInspectorUI _objectInspectorUI, boolean _firstTimeInit) throws com.sun.star.lang.NullPointerException
{
// not interested in
}
public void addEventListener(com.sun.star.lang.XEventListener _eventListener)
{
// ingnoring this
}
public void addPropertyChangeListener(com.sun.star.beans.XPropertyChangeListener _propertyChangeListener) throws com.sun.star.lang.NullPointerException
{
// ingnoring this
}
public Object convertToControlValue(String _propertyName, Object _propertyValue, com.sun.star.uno.Type type) throws com.sun.star.beans.UnknownPropertyException
{
return _propertyValue;
}
public Object convertToPropertyValue(String _propertyName, Object _controlValue) throws com.sun.star.beans.UnknownPropertyException
{
return _controlValue;
}
public com.sun.star.inspection.LineDescriptor describePropertyLine(String _propertyName, com.sun.star.inspection.XPropertyControlFactory _propertyControlFactory) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.NullPointerException
{
com.sun.star.inspection.LineDescriptor descriptor = new com.sun.star.inspection.LineDescriptor();
descriptor = new LineDescriptor();
descriptor.Category = "Methods";
descriptor.DisplayName = "has method";
descriptor.HasPrimaryButton = descriptor.HasSecondaryButton = false;
descriptor.IndentLevel = 0;
try
{
XPropertyControl control = (XPropertyControl)UnoRuntime.queryInterface(
XPropertyControl.class, _propertyControlFactory.createPropertyControl(
PropertyControlType.TextField, true ) );
descriptor.Control = control;
}
catch( com.sun.star.lang.IllegalArgumentException e )
{
}
return descriptor;
}
public void dispose()
{
// nothing to do
}
public String[] getActuatingProperties()
{
// none
return new String[] { };
}
public com.sun.star.beans.PropertyState getPropertyState(String _propertyName) throws com.sun.star.beans.UnknownPropertyException
{
return com.sun.star.beans.PropertyState.DIRECT_VALUE;
}
public Object getPropertyValue(String _propertyName) throws com.sun.star.beans.UnknownPropertyException
{
XIdlMethod method = impl_getMethod( _propertyName );
String signature = new String();
signature += method.getReturnType().getName();
signature += " ";
signature += method.getName();
signature += "(";
XIdlClass[] parameterTypes = method.getParameterTypes();
for ( int param = 0; param<parameterTypes.length; ++param )
{
signature += ( param == 0 ) ? " " : ", ";
signature += parameterTypes[param].getName();
}
signature += " )";
return signature;
}
public String[] getSupersededProperties()
{
return new String[] { };
}
public com.sun.star.beans.Property[] getSupportedProperties()
{
Property[] properties = new Property[] { };
if ( m_methods != null )
{
properties = new Property[ m_methods.length ];
for ( int i=0; i<m_methods.length; ++i )
{
properties[i] = new Property( m_methods[i].getName(), 0, new Type( String.class ), (short)0 );
m_methodsHash.put( m_methods[i].getName(), m_methods[i] );
}
}
return properties;
}
public void inspect(Object _component) throws com.sun.star.lang.NullPointerException
{
if ( m_introspection == null )
return;
m_introspectionAccess = null;
m_methods = null;
m_methodsHash = new java.util.HashMap();
m_introspectionAccess = m_introspection.inspect( _component );
if ( m_introspectionAccess == null )
return;
m_methods = m_introspectionAccess.getMethods( MethodConcept.ALL );
}
public boolean isComposable(String _propertyName) throws com.sun.star.beans.UnknownPropertyException
{
return true;
}
public com.sun.star.inspection.InteractiveSelectionResult onInteractivePropertySelection(String str, boolean param, Object[] obj, com.sun.star.inspection.XObjectInspectorUI xObjectInspectorUI) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.NullPointerException
{
return InteractiveSelectionResult.Cancelled;
}
public void removeEventListener(com.sun.star.lang.XEventListener _eventListener)
{
// ignoring this
}
public void removePropertyChangeListener(com.sun.star.beans.XPropertyChangeListener _propertyChangeListener)
{
// ignoring this
}
public void setPropertyValue(String str, Object obj) throws com.sun.star.beans.UnknownPropertyException
{
// we declared our properties as readonly
throw new java.lang.RuntimeException();
}
public boolean suspend(boolean param)
{
return true;
}
/** returns the descriptor for the method with the given name
* @param _propertyName
* the name of the method whose descriptor should be obtained
* @throws com.sun.star.beans.UnknownPropertyException
* if we don't have a method hash, or the given property name does not denote a method of our inspectee
*/
private XIdlMethod impl_getMethod( String _methodName ) throws UnknownPropertyException
{
XIdlMethod method = (XIdlMethod)m_methodsHash.get( _methodName );
if ( method == null )
throw new com.sun.star.beans.UnknownPropertyException();
return method;
}
}