blob: 03065f5ec6098d021ed20a6a7a080d4c8f05c9ed [file] [log] [blame]
/*=========================================================================
* (c)Copyright 2002-2009, GemStone Systems, Inc. All Rights Reserved.
* 1260 NW Waterhouse Ave., Suite 200, Beaverton, OR 97006
* All Rights Reserved.
* =======================================================================*/
package com.gemstone.gemfire.mgmt.DataBrowser.model.region;
import java.util.Iterator;
import java.util.Set;
import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import com.gemstone.gemfire.admin.AdminException;
import com.gemstone.gemfire.admin.RegionSubRegionSnapshot;
import com.gemstone.gemfire.admin.SystemMemberCache;
import com.gemstone.gemfire.admin.SystemMemberRegion;
import com.gemstone.gemfire.management.DistributedSystemMXBean;
import com.gemstone.gemfire.management.RegionAttributesData;
import com.gemstone.gemfire.management.RegionMXBean;
import com.gemstone.gemfire.mgmt.DataBrowser.utils.LogUtil;
/**
* This class provides factory methods to create region model beans from
* corresponding GemFire region representation.
*
* @author Hrishi
**/
public class RegionFactory {
/**
* Factory method to create region model beans from
* corresponding GemFire region representation.
*
* @param region GemFire region representation.
* @return Region model bean.
*/
public static GemFireRegion getRegion(String memberId,
SystemMemberCache cache, SystemMemberRegion region) throws AdminException {
GemFireRegion result = new GemFireRegion();
result.setMemberId(memberId);
result.setName(region.getName());
result.setFullPath(region.getFullPath());
result.setDataPolicy(region.getDataPolicy().toString());
result.setScope(region.getScope().toString());
Set subRegions = region.getSubregionFullPaths();
Iterator iter = subRegions.iterator();
while (iter.hasNext()) {
String path = (String)iter.next();
SystemMemberRegion temp = cache.getRegion(path);
GemFireRegion subRegion = getRegion(memberId, cache, temp);
result.addSubRegion(subRegion);
}
return result;
}
public static GemFireRegion getRegion(String memberId, RegionSubRegionSnapshot snapshot) {
LogUtil.fine("Region Update : "+snapshot);
GemFireRegion result = new GemFireRegion();
result.setMemberId(memberId);
result.setName(snapshot.getName());
result.setFullPath(snapshot.getFullPath());
//Need to make these available through JMX...
//result.setDataPolicy(region.getDataPolicy().toString());
//result.setScope(region.getScope().toString());
Set subRegions = snapshot.getSubRegionSnapshots();
Iterator iter = subRegions.iterator();
while (iter.hasNext()) {
RegionSubRegionSnapshot reg = (RegionSubRegionSnapshot)iter.next();
GemFireRegion subRegion = getRegion(memberId, reg);
result.addSubRegion(subRegion);
}
return result;
}
public static GemFireRegion getRootRegion(String memberId, DistributedSystemMXBean distributedSystemMXBeanProxy, MBeanServerConnection connServer, String[] regionNames) throws Exception{
GemFireRegion gfRegion = new GemFireRegion();
gfRegion.setName("Root");
gfRegion.setMemberId(memberId);
for (String region : regionNames) {
gfRegion.addSubRegion(createGemFireRegion(distributedSystemMXBeanProxy, connServer,memberId, region));
}
return gfRegion;
}
public static GemFireRegion createGemFireRegion(DistributedSystemMXBean distributedSystemMXBeanProxy, MBeanServerConnection connServer, String memberId, String regionName) throws Exception{
ObjectName regionObjectName = distributedSystemMXBeanProxy.fetchRegionObjectName(memberId, regionName);
RegionMXBean rbean = JMX.newMXBeanProxy(connServer, regionObjectName, RegionMXBean.class);
RegionAttributesData ra = rbean.listRegionAttributes();
GemFireRegion region = new GemFireRegion();
region.setDataPolicy( ra.getDataPolicy());
region.setFullPath(rbean.getFullPath());
region.setName(rbean.getName());
for(String subRegionName : rbean.listSubRegionPaths(true)){
GemFireRegion subRegion = createGemFireRegion(distributedSystemMXBeanProxy, connServer, memberId, subRegionName);
region.addSubRegion(subRegion);
}
return region;
}
}