/* * Licensed to the Apache Software Foundation (ASF) under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional information regarding * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the License. You may obtain a * copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package org.apache.geode.admin.internal; import org.apache.geode.admin.*; import org.apache.geode.cache.*; // import org.apache.geode.internal.Assert; // import org.apache.geode.internal.admin.*; import org.apache.geode.internal.admin.remote.*; import java.io.File; import java.util.*; /** * View of a region in a GemFire system member's cache. * * @since GemFire 3.5 */ public class SystemMemberRegionImpl implements SystemMemberRegion { private AdminRegion r; private RegionAttributes ra; private CacheStatistics rs; private Set subregionNames; private Set subregionFullPaths; private int entryCount; private int subregionCount; /** The cache to which this region belongs */ private final SystemMemberCacheImpl cache; // constructors public SystemMemberRegionImpl(SystemMemberCacheImpl cache, Region r) { this.cache = cache; this.r = (AdminRegion) r; } private void refreshFields() { this.ra = this.r.getAttributes(); if (getStatisticsEnabled() && !this.ra.getDataPolicy().withPartitioning()) { this.rs = this.r.getStatistics(); } else { this.rs = null; } { // set subregionNames Set s = this.r.subregions(false); Set names = new TreeSet(); Set paths = new TreeSet(); Iterator it = s.iterator(); while (it.hasNext()) { Region r = (Region) it.next(); String name = r.getName(); names.add(name); paths.add(this.getFullPath() + Region.SEPARATOR_CHAR + name); } this.subregionNames = names; this.subregionFullPaths = paths; } try { int[] sizes = this.r.sizes(); this.entryCount = sizes[0]; this.subregionCount = sizes[1]; } catch (CacheException ignore) { this.entryCount = 0; this.subregionCount = 0; } } // attributes public String getName() { return this.r.getName(); } public String getFullPath() { return this.r.getFullPath(); } public java.util.Set getSubregionNames() { return this.subregionNames; } public java.util.Set getSubregionFullPaths() { return this.subregionFullPaths; } public String getUserAttribute() { return (String) r.getUserAttribute(); } public String getCacheLoader() { Object o = this.ra.getCacheLoader(); if (o == null) { return ""; } else { return o.toString(); } } public String getCacheWriter() { Object o = this.ra.getCacheWriter(); if (o == null) { return ""; } else { return o.toString(); } } public String getKeyConstraint() { Class constraint = this.ra.getKeyConstraint(); if (constraint == null) { return ""; } else { return constraint.getName(); } } public String getValueConstraint() { Class constraint = this.ra.getValueConstraint(); if (constraint == null) { return ""; } else { return constraint.getName(); } } public boolean getEarlyAck() { return this.ra.getEarlyAck(); } public int getRegionTimeToLiveTimeLimit() { return this.ra.getRegionTimeToLive().getTimeout(); } public ExpirationAction getRegionTimeToLiveAction() { return this.ra.getRegionTimeToLive().getAction(); } public int getEntryTimeToLiveTimeLimit() { return this.ra.getEntryTimeToLive().getTimeout(); } public ExpirationAction getEntryTimeToLiveAction() { return this.ra.getEntryTimeToLive().getAction(); } public String getCustomEntryTimeToLive() { Object o = this.ra.getCustomEntryTimeToLive(); if (o == null) { return ""; } else { return o.toString(); } } public int getRegionIdleTimeoutTimeLimit() { return this.ra.getRegionIdleTimeout().getTimeout(); } public ExpirationAction getRegionIdleTimeoutAction() { return this.ra.getRegionIdleTimeout().getAction(); } public int getEntryIdleTimeoutTimeLimit() { return this.ra.getEntryIdleTimeout().getTimeout(); } public ExpirationAction getEntryIdleTimeoutAction() { return this.ra.getEntryIdleTimeout().getAction(); } public String getCustomEntryIdleTimeout() { Object o = this.ra.getCustomEntryIdleTimeout(); if (o == null) { return ""; } else { return o.toString(); } } public MirrorType getMirrorType() { return this.ra.getMirrorType(); } public DataPolicy getDataPolicy() { return this.ra.getDataPolicy(); } public Scope getScope() { return this.ra.getScope(); } public EvictionAttributes getEvictionAttributes() { return this.ra.getEvictionAttributes(); } /** * This method will return an empty string if there are no CacheListeners defined on the region. * If there are more than 1 CacheListeners defined, this method will return the description of the * 1st CacheListener in the list returned by the getCacheListeners method. If there is only one * CacheListener defined this method will return it's description * * @return String the region's <code>CacheListener</code> description * @deprecated as of 6.0, use {@link #getCacheListeners} instead */ @Deprecated public String getCacheListener() { String[] o = this.getCacheListeners(); if (o.length == 0) { return ""; } else { return o[0].toString(); } } /** * This method will return an empty array if there are no CacheListeners defined on the region. If * there are one or more than 1 CacheListeners defined, this method will return an array which has * the description of all the CacheListeners * * @return String[] the region's <code>CacheListeners</code> descriptions as a String array * @since GemFire 6.0 */ public String[] getCacheListeners() { Object[] o = this.ra.getCacheListeners(); String[] ret = null; if (o == null || o.length == 0) { ret = new String[0]; } else { ret = new String[o.length]; for (int i = 0; i < o.length; i++) { ret[i] = o[i].toString(); } } return ret; } public int getInitialCapacity() { return this.ra.getInitialCapacity(); } public float getLoadFactor() { return this.ra.getLoadFactor(); } public int getConcurrencyLevel() { return this.ra.getConcurrencyLevel(); } public boolean getConcurrencyChecksEnabled() { return this.ra.getConcurrencyChecksEnabled(); } public boolean getStatisticsEnabled() { return this.ra.getStatisticsEnabled(); } public boolean getPersistBackup() { return this.ra.getPersistBackup(); } public DiskWriteAttributes getDiskWriteAttributes() { return this.ra.getDiskWriteAttributes(); } public File[] getDiskDirs() { return this.ra.getDiskDirs(); } public int getEntryCount() { return this.entryCount; } public int getSubregionCount() { return this.subregionCount; } public long getLastModifiedTime() { if (this.rs == null) { return 0; } else { return this.rs.getLastModifiedTime(); } } public long getLastAccessedTime() { if (this.rs == null) { return 0; } else { return this.rs.getLastAccessedTime(); } } public long getHitCount() { if (this.rs == null) { return 0; } else { return this.rs.getHitCount(); } } public long getMissCount() { if (this.rs == null) { return 0; } else { return this.rs.getMissCount(); } } public float getHitRatio() { if (this.rs == null) { return 0; } else { return this.rs.getHitRatio(); } } // operations public void refresh() { refreshFields(); } /** * Returns a string representation of the object. * * @return a string representation of the object */ @Override public String toString() { return getName(); } public SystemMemberRegion createSubregion(String name, RegionAttributes attrs) throws AdminException { Region r = this.cache.getVM().createSubregion(this.cache.getCacheInfo(), this.getFullPath(), name, attrs); if (r == null) { return null; } else { return this.cache.createSystemMemberRegion(r); } } public MembershipAttributes getMembershipAttributes() { return this.ra.getMembershipAttributes(); } public SubscriptionAttributes getSubscriptionAttributes() { return this.ra.getSubscriptionAttributes(); } public PartitionAttributes getPartitionAttributes() { return this.ra.getPartitionAttributes(); } }