package org.javabuilders.gtk.handler.type;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import org.freedesktop.bindings.Constant;
import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.Node;
import org.javabuilders.TypeDefinition;
import org.javabuilders.handler.ITypeAsValueHandler;
import org.javabuilders.util.PropertyUtils;
public class ConstantAsValueHandler implements ITypeAsValueHandler<Constant> {
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeAsValueHandler#getInputValueSample()
*/
public String getInputValueSample() {
return "tabPosition=left | tabPosition=LEFT";
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeAsValueHandler#getRegex()
*/
public String getRegex() {
return ".+";
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeAsValueHandler#getValue(org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String, java.lang.Object)
*/
public Constant getValue(BuildProcess process, Node node, String key,
Object inputValue) throws BuildException {
Constant c = null;
try {
Class<?> type = PropertyUtils.getPropertyType(node.getMainObject(), key);
Field[] fields = type.getFields();
for(Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isPublic(mod) && Modifier.isFinal(mod) && Modifier.isStatic(mod) && Constant.class.isAssignableFrom(field.getType())) {
String name = field.getName();
String camelCase = TypeDefinition.getShortEnumConstant(field.getName());
if (inputValue.equals(name) || inputValue.equals(camelCase)) { //value entered like the constant, e.g. EXIT_ON_CLOSE
try {
c = (Constant)field.get(null);
break;
} catch (Exception e) {
throw new BuildException(e);
}
}
}
}
} catch (Exception e) {
throw new BuildException(e,"Failed to process Constant property {0}", key);
}
return c;
}
/* (non-Javadoc)
* @see org.javabuilders.IApplicable#getApplicableClass()
*/
public Class<Constant> getApplicableClass() {
return Constant.class;
}
}