package org.safehaus.penrose.management.mapping; import org.safehaus.penrose.mapping.*; import org.safehaus.penrose.management.BaseService; import org.safehaus.penrose.management.PenroseJMXService; import org.safehaus.penrose.partition.PartitionManager; import org.safehaus.penrose.partition.PartitionConfig; import org.safehaus.penrose.partition.Partition; import java.util.Collection; import java.util.ArrayList; import java.util.Map; import java.util.LinkedHashMap; /** * @author Endi Sukma Dewata */ public class MappingManagerService extends BaseService implements MappingManagerServiceMBean { private PartitionManager partitionManager; private String partitionName; Map<String,MappingService> mappingServices = new LinkedHashMap<String,MappingService>(); public MappingManagerService(PenroseJMXService jmxService, PartitionManager partitionManager, String partitionName) throws Exception { this.jmxService = jmxService; this.partitionManager = partitionManager; this.partitionName = partitionName; } public String getObjectName() { return MappingManagerClient.getStringObjectName(partitionName); } public Object getObject() { return getMappingManager(); } public PartitionConfig getPartitionConfig() { return partitionManager.getPartitionConfig(partitionName); } public Partition getPartition() { return partitionManager.getPartition(partitionName); } public MappingConfigManager getMappingConfigManager() { PartitionConfig partitionConfig = getPartitionConfig(); if (partitionConfig == null) return null; return partitionConfig.getMappingConfigManager(); } public MappingManager getMappingManager() { Partition partition = getPartition(); if (partition == null) return null; return partition.getMappingManager(); } public void createMappingService(String mappingName) throws Exception { MappingService mappingService = new MappingService(jmxService, partitionManager, partitionName, mappingName); mappingService.init(); mappingServices.put(mappingName, mappingService); } public MappingService getMappingService(String mappingName) throws Exception { return mappingServices.get(mappingName); } public void removeMappingService(String mappingName) throws Exception { MappingService mappingService = mappingServices.remove(mappingName); if (mappingService == null) return; mappingService.destroy(); } public void init() throws Exception { super.init(); MappingConfigManager mappingConfigManager = getMappingConfigManager(); for (String mappingName : mappingConfigManager.getMappingNames()) { createMappingService(mappingName); } } public void destroy() throws Exception { MappingConfigManager mappingConfigManager = getMappingConfigManager(); for (String mappingName : mappingConfigManager.getMappingNames()) { removeMappingService(mappingName); } super.destroy(); } public Collection<String> getMappingNames() throws Exception { PartitionConfig partitionConfig = getPartitionConfig(); MappingConfigManager mappingConfigManager = partitionConfig.getMappingConfigManager(); Collection<String> list = new ArrayList<String>(); list.addAll(mappingConfigManager.getMappingNames()); return list; } public void startMapping(String mappingName) throws Exception { Partition partition = getPartition(); if (partition == null) return; MappingManager mappingManager = partition.getMappingManager(); mappingManager.startMapping(mappingName); } public void stopMapping(String mappingName) throws Exception { Partition partition = getPartition(); if (partition == null) return; MappingManager mappingManager = partition.getMappingManager(); boolean running = mappingManager.isRunning(mappingName); if (running) mappingManager.stopMapping(mappingName); } public void createMapping(MappingConfig mappingConfig) throws Exception { PartitionConfig partitionConfig = getPartitionConfig(); MappingConfigManager mappingConfigManager = partitionConfig.getMappingConfigManager(); mappingConfigManager.addMappingConfig(mappingConfig); String mappingName = mappingConfig.getName(); startMapping(mappingName); createMappingService(mappingName); } public void updateMapping(String mappingName, MappingConfig mappingConfig) throws Exception { PartitionConfig partitionConfig = getPartitionConfig(); stopMapping(mappingName); MappingConfigManager mappingConfigManager = partitionConfig.getMappingConfigManager(); mappingConfigManager.updateMappingConfig(mappingName, mappingConfig); startMapping(mappingName); } public void removeMapping(String mappingName) throws Exception { PartitionConfig partitionConfig = getPartitionConfig(); removeMappingService(mappingName); stopMapping(mappingName); MappingConfigManager mappingConfigManager = partitionConfig.getMappingConfigManager(); mappingConfigManager.removeMappingConfig(mappingName); } }