blob: f64dfafa48ff65423e8b5e0618c7d5ecf31c8bce [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.member;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import com.gemstone.gemfire.admin.AdminException;
import com.gemstone.gemfire.admin.GemFireMemberStatus;
import com.gemstone.gemfire.admin.RegionSubRegionSnapshot;
import com.gemstone.gemfire.admin.SystemMember;
import com.gemstone.gemfire.admin.SystemMemberCache;
import com.gemstone.gemfire.admin.SystemMemberCacheServer;
import com.gemstone.gemfire.admin.SystemMemberRegion;
import com.gemstone.gemfire.mgmt.DataBrowser.connection.ClientConfiguration;
import com.gemstone.gemfire.mgmt.DataBrowser.model.region.GemFireRegion;
import com.gemstone.gemfire.mgmt.DataBrowser.model.region.RegionFactory;
import com.gemstone.gemfire.mgmt.DataBrowser.utils.LogUtil;
import com.gemstone.gemfire.mgmt.DataBrowser.connection.EndPoint;
/**
* This class provides factory methods to create member model beans from
* corresponding GemFire member representation.
*
* @author Hrishi
**/
public class MemberFactory {
/**
* Factory method to create member model beans from corresponding GemFire
* member representation.
*
* @param member
* GemFire member representation.
* @return Member model bean.
*/
public static GemFireMember createGemFireMember(SystemMember member)
throws AdminException {
GemFireMember result = new GemFireMember();
updateGemFireMember(result, member);
return result;
}
public static void updateGemFireMember(GemFireMember member,
SystemMember update) throws AdminException {
member.resetCacheServerInfo();
// / member.resetRegionInfo();
member.setId(update.getId());
member.setName(update.getName());
member.setHost(update.getHost());
if (update.hasCache()) {
SystemMemberCache cache = update.getCache();
SystemMemberCacheServer[] cacheServers = cache.getCacheServers();
short type = (cacheServers.length > 0) ? GemFireMember.GEMFIRE_CACHE_SERVER
: GemFireMember.GEMFIRE_PEER;
member.setType(type);
for (int i = 0; i < cacheServers.length; i++) {
CacheServerInfo info = new CacheServerInfo();
info.setBindAddress(cacheServers[i].getHostnameForClients());
info.setPort(cacheServers[i].getPort());
member.addCacheServer(info);
LogUtil.info("Adding CacheServer :" + info);
}
Set regions = cache.getRootRegionNames();
Iterator iterator = regions.iterator();
while (iterator.hasNext()) {
String regionName = (String) iterator.next();
SystemMemberRegion region = cache.getRegion(regionName);
// TODO MGH - what is this for?
GemFireRegion reg = RegionFactory.getRegion(member.getId(), cache, region);
// member.addRegion(reg);
}
} else {
member.setType(GemFireMember.GEMFIRE_CACHELESS_MEMBER);
}
}
public static GemFireMember createGemFireMember(ClientConfiguration conf) {
if(conf.getCacheServers().size() > 0) {
GemFireMember member = new GemFireMember();
member.setType(GemFireMember.GEMFIRE_CACHE_SERVER);
member.setName("GemFire Cache Server");
member.setId("default-id");
member.setHost("host");
for(EndPoint endpt : conf.getCacheServers()) {
CacheServerInfo info = new CacheServerInfo();
info.setBindAddress(endpt.getHostName());
info.setPort(endpt.getPort());
member.addCacheServer(info);
}
return member;
}
GemFireMember member = new GemFireMember();
member.setType(GemFireMember.GEMFIRE_SERVER_LOCATOR);
member.setName("GemFire Server Locator");
member.setId("default-id");
member.setHost("host");
for(EndPoint endpt : conf.getLocators()) {
CacheServerInfo info = new CacheServerInfo();
info.setBindAddress(endpt.getHostName());
info.setPort(endpt.getPort());
member.addCacheServer(info);
}
return member;
}
public static GemFireMember createGemFireMember(String memberId, List<MemberConfigurationPrms> config, List<CacheServerInfo> cs_info, GemFireMemberStatus status, RegionSubRegionSnapshot snapshot) {
GemFireMember member = new GemFireMember();
member.setType(GemFireMember.GEMFIRE_CACHE_SERVER);
member.setHost(status.getHostAddress().getCanonicalHostName());
member.setName(status.getMemberName());
member.setId(memberId);
member.setConfig(config);
if((cs_info != null) && (!cs_info.isEmpty())) {
for(CacheServerInfo info : cs_info)
member.addCacheServer(info);
} else {
CacheServerInfo info = new CacheServerInfo();
info.setBindAddress(status.getBindAddress());
info.setPort(status.getServerPort());
info.setNotifyBySubscription(false); //TODO : There is no way to fetch this information from GemFireMemberStatus.
member.addCacheServer(info);
}
if(snapshot != null) {
GemFireRegion root = RegionFactory.getRegion(memberId, snapshot);
member.setRootRegion(root);
}
return member;
}
public static GemFireMember createGemFireMemberMbean(String memberId, List<MemberConfigurationPrms> config, List<CacheServerInfo> cs_info, MemberStatus status, GemFireRegion root) {
GemFireMember member = new GemFireMember();
member.setType(GemFireMember.GEMFIRE_CACHE_SERVER);
member.setHost(status.getHostAddress().getCanonicalHostName());
member.setName(status.getMemberName());
member.setId(memberId);
member.setConfig(config);
if((cs_info != null) && (!cs_info.isEmpty())) {
for(CacheServerInfo info : cs_info) {
LogUtil.fine("Adding cache server info: " + info);
member.addCacheServer(info);
}
} else {
CacheServerInfo info = new CacheServerInfo();
info.setBindAddress(status.getBindAddress());
info.setPort(status.getServerPort());
info.setNotifyBySubscription(true);
member.addCacheServer(info);
}
member.setRootRegion(root);
return member;
}
}