/**
*
*/
package org.javabuilders.handler.type;
import java.awt.Component;
import java.awt.Font;
import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.Node;
import org.javabuilders.handler.ITypeAsValueHandler;
/**
* Handles methods where the parameter is a Font
* @author Jacek Furmankiewic
*
*/
public class FontAsValueHandler implements ITypeAsValueHandler<Font> {
public static final String REGEX = ".*";
private static final String REGEX_ITALIC = "italic";
private static final String REGEX_BOLD = "bold";
private static final String REGEX_SIZE= "[0-9]{1,3}pt";
public final static FontAsValueHandler singleton = new FontAsValueHandler();
/**
* Constructor
*/
private FontAsValueHandler() {}
/**
* @return Singleton
*/
public static FontAsValueHandler getInstance() {return singleton;}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeAsValueHandler#getInputValueSample()
*/
public String getInputValueSample() {
return "italic 12pt Arial";
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeAsValueHandler#getRegex()
*/
public String getRegex() {
return REGEX;
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeAsValueHandler#getValue(org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String, java.lang.Object)
*/
public Font getValue(BuildProcess process, Node node, String key,
Object inputValue) throws BuildException {
Font font = null;
int size = 12;
String name = "Arial";
//try to get default font property
if (node.getMainObject() instanceof Component) {
Component c= (Component) node.getMainObject();
size = c.getFont().getSize();
name = c.getFont().getName();
}
boolean italic = false;
boolean bold = false;
String sValue = String.valueOf(inputValue);
String[] parts = sValue.split("\\s");
for(String part : parts) {
if (part.matches(REGEX_BOLD)) {
bold = true;
} else if (part.matches(REGEX_ITALIC)) {
italic = true;
} else if (part.matches(REGEX_SIZE)) {
size = Integer.parseInt(part.substring(0,part.length() - 2));
} else {
name = part;
}
}
int style = Font.PLAIN;
if (italic == true) {
style = Font.ITALIC;
}
if (bold == true) {
style = style | Font.BOLD;
}
font = new Font(name,style,size);
return font;
}
/* (non-Javadoc)
* @see org.javabuilders.IApplicable#getApplicableClass()
*/
public Class<?> getApplicableClass() {
return Font.class;
}
}