blob: 63ea67e586382788390e351d6e7f2a2d041d3af6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.service.IServiceInitializer.ServiceInitializerResult;
import org.eclipse.scout.service.internal.Activator;
import org.osgi.framework.ServiceRegistration;
/**
* Convenience {@link IService} implementation with support for config.ini
* variable injection. see {@link ServiceUtility#injectConfigProperties(IService)}
*/
public abstract class AbstractService implements IService {
private static final IScoutLogger LOG = ScoutLogManager.getLogger(AbstractService.class);
public AbstractService() {
}
/**
* This default implementation calls the default initializer {@link DefaultServiceInitializer} which calls
* {@link org.eclipse.scout.service.ServiceUtility#injectConfigParams}(this).
* It ensures that properties are getting initialized. This method can be overwritten by
* implementers. Implementers should aware the property injection is only done if the super call is made.
*/
@Override
public void initializeService(ServiceRegistration registration) {
Activator activator = Activator.getDefault();
if (activator == null || activator.getServicesExtensionManager() == null) {
LOG.error("Could not initialize service. " + getClass().getName());
return;
}
//get service initializers
List<IServiceInitializer> initializers = new ArrayList<IServiceInitializer>();
Collection<IServiceInitializerFactory> factories = activator.getServicesExtensionManager().getServiceIntializerFactories();
for (IServiceInitializerFactory factory : factories) {
IServiceInitializer serviceInitializer = factory.createInstance(this);
if (serviceInitializer != null) {
initializers.add(serviceInitializer);
}
}
//sort with respect to priority
final Comparator<IServiceInitializer> priorityComparator = new Comparator<IServiceInitializer>() {
@Override
public int compare(IServiceInitializer o1, IServiceInitializer o2) {
return (int) ((o1.getRunOrder() - o2.getRunOrder()) * 100);
}
};
Collections.sort(initializers, priorityComparator);
//execute service initializers until an initializer returns stop
for (IServiceInitializer initializer : initializers) {
ServiceInitializerResult res = initializer.initializeService(this);
if (ServiceInitializerResult.STOP.equals(res)) {
break;
}
}
}
/**
* This default implementation does nothing
*/
public void disposeServices() {
}
}