I have made an extension with multiple services implemented in one java class, but when I tried to implement the same services in two classes I got it wrong. I get the error message:
“No factory object for org.libreoffice.example.comp.ProtocolHandlerImpl”
So my question is:
Is it possible to write an add-extension with two or more services implemented in two classes?
The code for the class with the registry information looks like:
public final class StarterProjectImpl extends WeakBase
implements com.sun.star.lang.XServiceInfo,
com.sun.star.task.XJobExecutor
{
private static final Logger LOGGER = Logger.getLogger(StarterProjectImpl.class.getName());
private final XComponentContext m_xContext;
private static final String m_implementationName = StarterProjectImpl.class.getName();
private static final String[] m_serviceNames = {
"org.libreoffice.example.StarterProject" };
public StarterProjectImpl( XComponentContext context )
{
m_xContext = context;
};
public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) {
XSingleComponentFactory xFactory = null;
LOGGER.log(Level.SEVERE, sImplementationName);
if ( sImplementationName.equals( m_implementationName ) )
xFactory = Factory.createComponentFactory(StarterProjectImpl.class, m_serviceNames);
else if ( sImplementationName.equals( ProtocolHandlerImpl.class.getName() ))
xFactory = Factory.createComponentFactory(ProtocolHandlerImpl.class, ProtocolHandlerImpl.getServiceNames());
return xFactory;
}
public static boolean __writeRegistryServiceInfo( XRegistryKey xRegistryKey ) {
boolean a=Factory.writeRegistryServiceInfo(m_implementationName,
m_serviceNames,
xRegistryKey);
boolean b=Factory.writeRegistryServiceInfo(ProtocolHandlerImpl.class.getName(),
ProtocolHandlerImpl.getServiceNames(),
xRegistryKey);
String x=ProtocolHandlerImpl.getServiceNames()[0]+" "+Boolean.toString(b);
LOGGER.log(Level.SEVERE, x);
return a && b;
}
// com.sun.star.lang.XServiceInfo:
public String getImplementationName() {
return m_implementationName;
}
public boolean supportsService( String sService ) {
int len = m_serviceNames.length;
for( int i=0; i < len; i++) {
if (sService.equals(m_serviceNames[i]))
return true;
}
return false;
}
public String[] getSupportedServiceNames() {
return m_serviceNames;
}
// com.sun.star.task.XJobExecutor:
public void trigger(String action)
{
switch (action) {
case "actionOne":
ActionOneDialog actionOneDialog = new ActionOneDialog(m_xContext);
actionOneDialog.show();
break;
default:
DialogHelper.showErrorMessage(m_xContext, null, "Unknown action: " + action);
}
}
}