blob: 18d75a16843b9744cc809a86dbe1636628be6817 [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.cache;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.geode.internal.Assert;
/**
* UserSpecifiedDiskStoreAttributes provides an way to detect departures from default attribute
* values. It may be used when collecting attributes from an XML parser or from attribute changes
* made using the {@link org.apache.geode.cache.DiskStoreFactory}. Its initial usage was to validate
* when a user set a value which should not be set (for DiskStore).
*
* @since GemFire prPersistSprint2
*
*/
public class UserSpecifiedDiskStoreAttributes extends DiskStoreAttributes {
private boolean hasAutoCompact = false;
private boolean hasCompactionThreshold = false;
private boolean hasAllowForceCompaction = false;
private boolean hasMaxOplogSize = false;
private boolean hasTimeInterval = false;
private boolean hasWriteBufferSize = false;
private boolean hasQueueSize = false;
private boolean hasDiskDirs = false;
private boolean hasDiskDirSizes = false;
private boolean hasDiskUsageWarningPercentage = false;
private boolean hasDiskUsageCriticalPercentage = false;
private static final int HAS_COUNT = 11;
public boolean hasAutoCompact() {
return hasAutoCompact;
}
public boolean hasCompactionThreshold() {
return hasCompactionThreshold;
}
public boolean hasAllowForceCompaction() {
return hasAllowForceCompaction;
}
public boolean hasMaxOplogSize() {
return hasMaxOplogSize;
}
public boolean hasTimeInterval() {
return hasTimeInterval;
}
public boolean hasWriteBufferSize() {
return hasWriteBufferSize;
}
public boolean hasQueueSize() {
return hasQueueSize;
}
public boolean hasDiskDirs() {
return hasDiskDirs;
}
public boolean hasDiskDirSizes() {
return hasDiskDirSizes;
}
public boolean hasDiskUsageWarningPercentage() {
return hasDiskUsageWarningPercentage;
}
public boolean hasDiskUsageCriticalPercentage() {
return hasDiskUsageCriticalPercentage;
}
public void setHasAutoCompact(boolean hasAutoCompact) {
this.hasAutoCompact = hasAutoCompact;
}
public void setHasCompactionThreshold(boolean hasCompactionThreshold) {
this.hasCompactionThreshold = hasCompactionThreshold;
}
public void setHasAllowForceCompaction(boolean hasAllowForceCompaction) {
this.hasAllowForceCompaction = hasAllowForceCompaction;
}
public void setHasMaxOplogSize(boolean hasMaxOplogSize) {
this.hasMaxOplogSize = hasMaxOplogSize;
}
public void setHasTimeInterval(boolean hasTimeInterval) {
this.hasTimeInterval = hasTimeInterval;
}
public void setHasWriteBufferSize(boolean hasWriteBufferSize) {
this.hasWriteBufferSize = hasWriteBufferSize;
}
public void setHasQueueSize(boolean hasQueueSize) {
this.hasQueueSize = hasQueueSize;
}
public void setHasDiskDirs(boolean hasDiskDirs) {
this.hasDiskDirs = hasDiskDirs;
}
public void setHasDiskDirSizes(boolean hasDiskDirSizes) {
this.hasDiskDirSizes = hasDiskDirSizes;
}
public void setHasDiskUsageWarningPercentage(boolean hasDiskUsageWarningPercentage) {
this.hasDiskUsageWarningPercentage = true;
}
public void setHasDiskUsageCriticalPercentage(boolean hasDiskUsageCriticalPercentage) {
this.hasDiskUsageCriticalPercentage = true;
}
public void setAllHasFields(boolean b) {
int hasCounter = 0;
Field thisFields[] = UserSpecifiedDiskStoreAttributes.class.getDeclaredFields();
for (int i = 0; i < thisFields.length; i++) {
if (thisFields[i].getName().startsWith("has")) {
hasCounter++;
try {
thisFields[i].setBoolean(this, b);
} catch (IllegalAccessException ouch) {
Assert.assertTrue(false,
"Could not access field" + thisFields[i].getName() + " on " + getClass());
}
}
}
Assert.assertTrue(hasCounter == HAS_COUNT, "Found " + hasCounter + " methods");
}
public void initHasFields(UserSpecifiedDiskStoreAttributes other) {
Field thisFields[] = UserSpecifiedDiskStoreAttributes.class.getDeclaredFields();
Object[] emptyArgs = new Object[] {};
int hasCounter = 0;
String fieldName = null;
for (int i = 0; i < thisFields.length; i++) {
fieldName = thisFields[i].getName();
if (fieldName.startsWith("has")) {
hasCounter++;
boolean bval = false;
try {
Method otherMeth = other.getClass().getMethod(fieldName/* , (Class[])null */);
bval = ((Boolean) otherMeth.invoke(other, emptyArgs)).booleanValue();
} catch (NoSuchMethodException darnit) {
Assert.assertTrue(false, "A has* method accessor is required for field " + fieldName);
} catch (IllegalAccessException boom) {
Assert.assertTrue(false, "Could not access method " + fieldName + " on " + getClass());
} catch (IllegalArgumentException e) {
Assert.assertTrue(false,
"Illegal argument trying to set field " + e.getLocalizedMessage());
} catch (InvocationTargetException e) {
Assert.assertTrue(false, "Failed trying to invoke method " + e.getLocalizedMessage());
}
try {
thisFields[i].setBoolean(this, bval);
} catch (IllegalAccessException ouch) {
Assert.assertTrue(false, "Could not access field" + fieldName + " on " + getClass());
}
}
}
Assert.assertTrue(hasCounter == HAS_COUNT,
"Expected " + HAS_COUNT + " methods, got " + hasCounter + " last field: " + fieldName);
Assert.assertTrue(thisFields.length == HAS_COUNT);
}
}