package org.safehaus.penrose.management.module;
import org.safehaus.penrose.module.*;
import org.safehaus.penrose.partition.Partition;
import org.safehaus.penrose.partition.PartitionConfig;
import org.safehaus.penrose.partition.PartitionManager;
import org.safehaus.penrose.management.BaseService;
import org.safehaus.penrose.management.PenroseJMXService;
import java.util.Collection;
import java.util.ArrayList;
/**
* @author Endi Sukma Dewata
*/
public class ModuleService extends BaseService implements ModuleServiceMBean {
private PartitionManager partitionManager;
private String partitionName;
private String moduleName;
public ModuleService(
PenroseJMXService jmxService,
PartitionManager partitionManager,
String partitionName,
String moduleName
) throws Exception {
this.jmxService = jmxService;
this.partitionManager = partitionManager;
this.partitionName = partitionName;
this.moduleName = moduleName;
}
public String getObjectName() {
return ModuleClient.getStringObjectName(partitionName, moduleName);
}
public Object getObject() {
return getModule();
}
public ModuleConfig getModuleConfig() throws Exception {
return getPartitionConfig().getModuleConfigManager().getModuleConfig(moduleName);
}
public Collection<String> getParameterNames() throws Exception {
ModuleConfig moduleConfig = getModuleConfig();
Collection<String> list = new ArrayList<String>();
list.addAll(moduleConfig.getParameterNames());
return list;
}
public String getParameter(String name) throws Exception {
ModuleConfig moduleConfig = getModuleConfig();
return moduleConfig.getParameter(name);
}
public Module getModule() {
Partition partition = getPartition();
if (partition == null) return null;
ModuleManager moduleManager = partition.getModuleManager();
return moduleManager.getModule(moduleName);
}
public PartitionConfig getPartitionConfig() {
return partitionManager.getPartitionConfig(partitionName);
}
public Partition getPartition() {
return partitionManager.getPartition(partitionName);
}
public void addModuleMapping(ModuleMapping moduleMapping) throws Exception {
ModuleConfig moduleConfig = getModuleConfig();
moduleConfig.addModuleMapping(moduleMapping);
//PartitionConfig partitionConfig = getPartitionConfig();
//ModuleConfigManager moduleConfigManager = partitionConfig.getModuleConfigManager();
//moduleConfigManager.addModuleMapping(moduleMapping);
}
public void removeModuleMapping(ModuleMapping moduleMapping) throws Exception {
ModuleConfig moduleConfig = getModuleConfig();
moduleConfig.removeModuleMapping(moduleMapping);
//PartitionConfig partitionConfig = getPartitionConfig();
//ModuleConfigManager moduleConfigManager = partitionConfig.getModuleConfigManager();
//moduleConfigManager.removeModuleMapping(moduleMapping);
}
public Collection<ModuleMapping> getModuleMappings() throws Exception {
ModuleConfig moduleConfig = getModuleConfig();
Collection<ModuleMapping> results = new ArrayList<ModuleMapping>();
results.addAll(moduleConfig.getModuleMappings());
/*
PartitionConfig partitionConfig = getPartitionConfig();
ModuleConfigManager moduleConfigManager = partitionConfig.getModuleConfigManager();
Collection<ModuleMapping> results = new ArrayList<ModuleMapping>();
Collection<ModuleMapping> list = moduleConfigManager.getModuleMappings(moduleName);
if (list != null) results.addAll(list);
*/
return results;
}
public String getStatus() throws Exception {
Module module = getModule();
return module == null ? ModuleServiceMBean.STOPPED : ModuleServiceMBean.STARTED;
}
public void start() throws Exception {
log.debug("Starting module "+partitionName+"/"+moduleName+"...");
Module module = getModule();
module.init();
log.debug("Module started.");
}
public void stop() throws Exception {
log.debug("Stopping module "+partitionName+"/"+moduleName+"...");
Module module = getModule();
module.destroy();
log.debug("Module stopped.");
}
public void restart() throws Exception {
log.debug("Restarting module "+partitionName+"/"+moduleName+"...");
Module module = getModule();
module.destroy();
module.init();
log.debug("Module restarted.");
}
}