blob: b62c07e665040e24f5a43b1686eff719cba490ab [file] [log] [blame]
/*
* =========================================================================
* Copyright (c) 2002-2012 VMware, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. VMware products are covered by
* more patents listed at http://www.vmware.com/go/patents.
* All Rights Reserved.
* ========================================================================
*/
package com.gemstone.gemfire.mgmt.DataBrowser.query.internal;
import java.lang.reflect.Field;
import com.gemstone.gemfire.mgmt.DataBrowser.utils.LogUtil;
/**
* FieldType enum is made 1 public class since GemFire 6.6.2.
* In 6.6 it is: com.gemstone.gemfire.pdx.internal.FieldType
* In 6.6.2 it is: com.gemstone.gemfire.pdx.FieldType
*
* This class is used to access the enums defined by FieldType using reflection.
*
* @author abhishek
*
*/
public class FieldTypeAccessor {
private Class<?> fieldTypeClass;
FieldTypeAccessor(Class<?> fieldTypeClass) {
this.fieldTypeClass = fieldTypeClass;
}
public Object getField(String name) {
Object value = null;
try {
Field declaredField = fieldTypeClass.getDeclaredField(name);
//No null check as it'll throw NoSuchFieldException if Field is not found
value = declaredField.get(fieldTypeClass);
} catch (SecurityException e) {
LogUtil.info("Could not access "+name+" in "+fieldTypeClass, e);
value = null;
} catch (NoSuchFieldException e) {
LogUtil.info("Could not find "+name+" in "+fieldTypeClass, e);
value = null;
} catch (IllegalArgumentException e) {
LogUtil.info("Could not find "+name+" in "+fieldTypeClass, e);
value = null;
} catch (IllegalAccessException e) {
LogUtil.info("Could not access "+name+" in "+fieldTypeClass, e);
value = null;
}
return value;
}
public Object getBoolean() {
return getField("BOOLEAN");
}
public Object getByte() {
return getField("BYTE");
}
public Object getChar() {
return getField("CHAR");
}
public Object getShort() {
return getField("SHORT");
}
public Object getInt() {
return getField("INT");
}
public Object getLong() {
return getField("LONG");
}
public Object getFloat() {
return getField("FLOAT");
}
public Object getDouble() {
return getField("DOUBLE");
}
public Object getDate() {
return getField("DATE");
}
public Object getString() {
return getField("STRING");
}
public Object getObject() {
return getField("OBJECT");
}
public Object getBooleanArray() {
return getField("BOOLEAN_ARRAY");
}
public Object getByteArray() {
return getField("BYTE_ARRAY");
}
public Object getCharArray() {
return getField("CHAR_ARRAY");
}
public Object getShortArray() {
return getField("SHORT_ARRAY");
}
public Object getIntArray() {
return getField("INT_ARRAY");
}
public Object getLongArray() {
return getField("LONG_ARRAY");
}
public Object getFloatArray() {
return getField("FLOAT_ARRAY");
}
public Object getDoubleArray() {
return getField("DOUBLE_ARRAY");
}
public Object getStringArray() {
return getField("STRING_ARRAY");
}
public Object getObjectArray() {
return getField("OBJECT_ARRAY");
}
public Object getArrayOfByteArrays() {
return getField("ARRAY_OF_BYTE_ARRAYS");
}
// public static void main(String[] args) throws ClassNotFoundException {
//// FieldTypeProxy proxy = new FieldTypeProxy(Class.forName("com.gemstone.gemfire.pdx.internal.FieldType"));
// FieldTypeProxy proxy = new FieldTypeProxy(Class.forName("com.gemstone.gemfire.pdx.FieldType"));
//
// System.out.println(proxy.getBoolean());
// System.out.println(proxy.getByte());
// }
@Override
public String toString() {
return FieldTypeAccessor.class.getSimpleName()+"["+fieldTypeClass+"]";
}
}