package org.safehaus.penrose.management.service; import org.safehaus.penrose.service.*; import org.safehaus.penrose.util.FileUtil; import org.safehaus.penrose.management.BaseService; import org.safehaus.penrose.management.PenroseJMXService; import java.io.File; import java.util.ArrayList; import java.util.Collection; /** * @author Endi Sukma Dewata */ public class ServiceManagerService extends BaseService implements ServiceManagerServiceMBean { ServiceManager serviceManager; public ServiceManagerService(PenroseJMXService jmxService, ServiceManager serviceManager) { this.jmxService = jmxService; this.serviceManager = serviceManager; } public Object getObject() { return serviceManager; } public String getObjectName() { return ServiceManagerClient.getStringObjectName(); } public Collection<String> getServiceNames() throws Exception { Collection<String> list = new ArrayList<String>(); ServiceConfigManager serviceConfigManager = serviceManager.getServiceConfigManager(); list.addAll(serviceConfigManager.getAvailableServiceNames()); return list; } public ServiceConfig getServiceConfig(String serviceName) throws Exception { return serviceManager.getServiceConfig(serviceName); } public ServiceService getServiceService(String name) throws Exception { return new ServiceService(jmxService, serviceManager, name); } public void startService(String name) throws Exception { serviceManager.startService(name); ServiceService service = getServiceService(name); service.init(); } public void stopService(String name) throws Exception { ServiceService service = getServiceService(name); service.destroy(); serviceManager.stopService(name); } public void createService(ServiceConfig serviceConfig) throws Exception { String serviceName = serviceConfig.getName(); serviceManager.addServiceConfig(serviceConfig); File servicesDir = serviceManager.getServicesDir(); File path = new File(servicesDir, serviceName); ServiceWriter serviceWriter = new ServiceWriter(); serviceWriter.write(path, serviceConfig); } public void updateService(String serviceName, ServiceConfig serviceConfig) throws Exception { serviceManager.unloadService(serviceName); serviceManager.addServiceConfig(serviceConfig); File servicesDir = serviceManager.getServicesDir(); File oldDir = new File(servicesDir, serviceName); File newDir = new File(servicesDir, serviceConfig.getName()); oldDir.renameTo(newDir); ServiceWriter serviceWriter = new ServiceWriter(); serviceWriter.write(newDir, serviceConfig); } public void removeService(String name) throws Exception { File servicesDir = serviceManager.getServicesDir(); File serviceDir = new File(servicesDir, name); serviceManager.unloadService(name); FileUtil.delete(serviceDir); } public void init() throws Exception { super.init(); for (String serviceName : getServiceNames()) { ServiceService serviceService = getServiceService(serviceName); serviceService.init(); } } public void destroy() throws Exception { for (String serviceName : getServiceNames()) { ServiceService serviceService = getServiceService(serviceName); serviceService.destroy(); } super.destroy(); } }