blob: ad740bc129d17db32fd1e85259d9446f2e5236ee [file] [log] [blame]
/*
* 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.internal.modules.util;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.geode.DataSerializable;
import org.apache.geode.DataSerializer;
import org.apache.geode.Instantiator;
import org.apache.geode.cache.CacheWriter;
import org.apache.geode.cache.CustomExpiry;
/**
* Class <code>RegionConfiguration</code> encapsulates the configuration attributes for a
* <code>Region</code> to be created on the server.
*
*
* @since GemFire 6.5
*/
@SuppressWarnings({"serial", "unchecked"})
public class RegionConfiguration implements DataSerializable {
/**
* The name of the <code>Region</code> to be created
*/
private String regionName;
/**
* The id of the <code>RegionAttributes</code> to be used
*/
private String regionAttributesId;
/**
* The default max inactive interval. The default value is -1.
*/
public static final int DEFAULT_MAX_INACTIVE_INTERVAL = -1;
/**
* The maximum time interval in seconds before entries are expired
*/
private int maxInactiveInterval = DEFAULT_MAX_INACTIVE_INTERVAL;
/**
* The <code>CustomExpiry</code> to be used
*/
private CustomExpiry customExpiry;
/**
* Whether delta replication across a <code>Gateway</code> is enabled.
*/
private boolean enableGatewayDeltaReplication = false;
/**
* Whether replication across a <code>Gateway</code> is enabled.
*/
private boolean enableGatewayReplication = false;
/**
* Whether to add a <code>DebugCacheListener</code> to the <code>Region</code>.
*/
private boolean enableDebugListener = false;
/**
* name for the CacheWriter to be associated with this region. This cache writer must have a zero
* arg constructor and must be present on the classpath on the server.
*/
private String cacheWriterName;
/**
* Default constructor used by the <code>DataSerialiable</code> interface
*/
public RegionConfiguration() {}
/**
* Sets the name of the <code>Region</code> to be created
*
* @param regionName The name of the <code>Region</code> to be created
*/
public void setRegionName(String regionName) {
this.regionName = regionName;
}
/**
* Returns the name of the <code>Region</code> to be created
*
* @return the name of the <code>Region</code> to be created
*/
public String getRegionName() {
return this.regionName;
}
/**
* Sets the id of the <code>RegionAttributes</code> to be used
*
* @param regionAttributesId The id of the <code>RegionAttributes</code> to be used
*/
public void setRegionAttributesId(String regionAttributesId) {
this.regionAttributesId = regionAttributesId;
}
/**
* Returns the id of the <code>RegionAttributes</code> to be used
*
* @return the id of the <code>RegionAttributes</code> to be used
*/
public String getRegionAttributesId() {
return this.regionAttributesId;
}
/**
* Sets the maximum time interval in seconds before entries are expired
*
* @param maxInactiveInterval The maximum time interval in seconds before entries are expired
*/
public void setMaxInactiveInterval(int maxInactiveInterval) {
this.maxInactiveInterval = maxInactiveInterval;
}
/**
* Returns the maximum time interval in seconds entries are expired
*
* @return the maximum time interval in seconds before entries are expired
*/
public int getMaxInactiveInterval() {
return this.maxInactiveInterval;
}
/**
* Sets the <code>CustomExpiry</code> to be used
*
* @param customExpiry The <code>CustomExpiry</code> to be used
*/
public void setCustomExpiry(CustomExpiry customExpiry) {
this.customExpiry = customExpiry;
}
/**
* Returns the <code>CustomExpiry</code> to be used
*
* @return the <code>CustomExpiry</code> to be used
*/
public CustomExpiry getCustomExpiry() {
return this.customExpiry;
}
/**
* Enables/disables delta replication across a <code>Gateway</code>.
*
* @param enableGatewayDeltaReplication true to enable, false to disable gateway delta
* replication.
*/
public void setEnableGatewayDeltaReplication(boolean enableGatewayDeltaReplication) {
this.enableGatewayDeltaReplication = enableGatewayDeltaReplication;
}
/**
* Returns whether delta replication across a <code>Gateway</code> is enabled.
*
* @return whether delta replication across a <code>Gateway</code> is enabled
*/
public boolean getEnableGatewayDeltaReplication() {
return this.enableGatewayDeltaReplication;
}
/**
* Enables/disables replication across a <code>Gateway</code>.
*
* @param enableGatewayReplication true to enable, false to disable gateway replication.
*/
public void setEnableGatewayReplication(boolean enableGatewayReplication) {
this.enableGatewayReplication = enableGatewayReplication;
}
/**
* Returns whether replication across a <code>Gateway</code> is enabled.
*
* @return whether replication across a <code>Gateway</code> is enabled
*/
public boolean getEnableGatewayReplication() {
return this.enableGatewayReplication;
}
/**
* Enables/disables a debug <code>CacheListener</code>.
*
* @param enableDebugListener true to enable, false to disable debug <code>CacheListener</code>.
*/
public void setEnableDebugListener(boolean enableDebugListener) {
this.enableDebugListener = enableDebugListener;
}
/**
* Returns whether a debug <code>CacheListener</code> is enabled.
*
* @return whether a debug <code>CacheListener</code> is enabled
*/
public boolean getEnableDebugListener() {
return this.enableDebugListener;
}
@Override
public void toData(DataOutput out) throws IOException {
DataSerializer.writeString(this.regionName, out);
DataSerializer.writeString(this.regionAttributesId, out);
DataSerializer.writePrimitiveInt(this.maxInactiveInterval, out);
DataSerializer.writeObject(this.customExpiry, out);
DataSerializer.writeBoolean(this.enableGatewayDeltaReplication, out);
DataSerializer.writeBoolean(this.enableGatewayReplication, out);
DataSerializer.writeBoolean(this.enableDebugListener, out);
DataSerializer.writeString(this.cacheWriterName, out);
}
@Override
public void fromData(DataInput in) throws IOException, ClassNotFoundException {
this.regionName = DataSerializer.readString(in);
this.regionAttributesId = DataSerializer.readString(in);
this.maxInactiveInterval = DataSerializer.readPrimitiveInt(in);
this.customExpiry = DataSerializer.readObject(in);
this.enableGatewayDeltaReplication = DataSerializer.readBoolean(in);
this.enableGatewayReplication = DataSerializer.readBoolean(in);
this.enableDebugListener = DataSerializer.readBoolean(in);
this.cacheWriterName = DataSerializer.readString(in);
}
/**
* Registers an <code>Instantiator</code> for the <code>SessionConfiguration</code> class
*/
public static void registerInstantiator(int id) {
Instantiator.register(new Instantiator(RegionConfiguration.class, id) {
@Override
public DataSerializable newInstance() {
return new RegionConfiguration();
}
});
}
public String toString() {
return new StringBuilder().append("RegionConfiguration[").append("regionName=")
.append(this.regionName).append("; regionAttributesId=").append(this.regionAttributesId)
.append("; maxInactiveInterval=").append(this.maxInactiveInterval)
.append("; enableGatewayDeltaReplication=").append(this.enableGatewayDeltaReplication)
.append("; enableGatewayReplication=").append(this.enableGatewayReplication)
.append("; enableDebugListener=").append(this.enableDebugListener).append("; cacheWriter=")
.append(this.cacheWriterName).append("]").toString();
}
/**
* set the fully qualified name of the {@link CacheWriter} to be created on the server. The
* cacheWriter must have a zero arg constructor, and must be present on the classpath on the
* server.
*
* @param cacheWriterName fully qualified class name of the cacheWriter
*/
public void setCacheWriterName(String cacheWriterName) {
this.cacheWriterName = cacheWriterName;
}
public String getCacheWriterName() {
return cacheWriterName;
}
}