blob: f90b1ad26ebe57d1af96bda4f492ddbc80e6e050 [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.lang.ClassNotFoundException;
import com.sun.star.uno.*;
import com.sun.star.beans.*;
import com.sun.star.inspection.*;
import com.sun.star.frame.*;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XSingleComponentFactory;
/**
*
* @author fs93730
*/
public class ServicesHandler implements XPropertyHandler
{
private XComponentContext m_context;
private String[] m_supportedServices;
private class ClickHandler implements com.sun.star.awt.XActionListener
{
XComponentContext m_context;
private String m_serviceName;
public ClickHandler( XComponentContext _context, String _serviceName )
{
m_context = _context;
m_serviceName = _serviceName;
}
public void disposing(com.sun.star.lang.EventObject eventObject)
{
// not interested in
}
public void actionPerformed(com.sun.star.awt.ActionEvent actionEvent)
{
try
{
// translate the service name into a URL to dispatch
String documentationURL = "http://api.openoffice.org/docs/common/ref/" + m_serviceName.replace('.','/') + ".html";
System.out.println( documentationURL );
// the OpenHyperlink command, to be dispatched to the Desktop
com.sun.star.util.URL dispatchURL[] = { new com.sun.star.util.URL() };
dispatchURL[0].Complete = ".uno:OpenHyperlink";
com.sun.star.util.XURLTransformer transformer = (com.sun.star.util.XURLTransformer)UnoRuntime.queryInterface(
com.sun.star.util.XURLTransformer.class,
m_context.getServiceManager().createInstanceWithContext( "com.sun.star.util.URLTransformer", m_context ) );
transformer.parseStrict( dispatchURL );
// the dispatcher for the OpenHyperlink command
Frame desktop = new Frame(
m_context.getServiceManager().createInstanceWithContext( "com.sun.star.frame.Desktop", m_context ) );
XDispatch dispatcher = desktop.queryDispatch(dispatchURL[0],"",0);
// the arguments for the OpenHyperlink command
PropertyValue dispatchArgs[] = new PropertyValue[] { new PropertyValue() };
dispatchArgs[0].Name = "URL";
dispatchArgs[0].Value = documentationURL;
dispatcher.dispatch(dispatchURL[0], dispatchArgs );
}
catch( com.sun.star.uno.Exception e )
{
e.printStackTrace( System.err );
}
}
}
/** Creates a new instance of ServicesHandler */
public ServicesHandler( XComponentContext _context )
{
m_context = _context;
m_supportedServices = new String[] { };
}
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 = "Services";
descriptor.DisplayName = "supports service";
descriptor.HasPrimaryButton = descriptor.HasSecondaryButton = false;
descriptor.IndentLevel = 0;
try
{
XHyperlinkControl hyperlinkControl = (XHyperlinkControl)UnoRuntime.queryInterface(
XHyperlinkControl.class, _propertyControlFactory.createPropertyControl( PropertyControlType.HyperlinkField, true ) );
hyperlinkControl.addActionListener( new ClickHandler( m_context, _propertyName ) );
descriptor.Control = hyperlinkControl;
}
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
{
return _propertyName;
}
public String[] getSupersededProperties()
{
return new String[] { "SupportedServiceNames" };
// we're used in conjunction with a GenericPropertyHandler, which (via inspection) finds
// a property SupportedServiceNames, resulting from the XServiceInfo.getSupportedServiceNames
// method. Since we handle those ourself, we supersede them.
}
public com.sun.star.beans.Property[] getSupportedProperties()
{
Property[] properties = new Property[ m_supportedServices.length ];
for ( int i=0; i<m_supportedServices.length; ++i )
properties[i] = new Property( m_supportedServices[i], 0, new Type( String.class ), (short)0 );
return properties;
}
public void inspect(Object _component) throws com.sun.star.lang.NullPointerException
{
XServiceInfo serviceInfo = (XServiceInfo)UnoRuntime.queryInterface( XServiceInfo.class, _component );
if ( serviceInfo != null )
m_supportedServices = serviceInfo.getSupportedServiceNames();
}
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;
}
}