/** * */ package org.javabuilders.swing.handler.type; import static org.javabuilders.swing.handler.type.ColorAsValueHandler.COLOR_REGEX; import java.awt.Color; import java.awt.SystemColor; import java.text.MessageFormat; import javax.swing.BorderFactory; import javax.swing.border.Border; import javax.swing.border.EtchedBorder; import org.javabuilders.BuildException; import org.javabuilders.BuildProcess; import org.javabuilders.Node; import org.javabuilders.handler.ITypeAsValueHandler; /** * Handlels creating borders as property values * @author Jacek Furmankiewicz */ public class BorderAsValueHandler implements ITypeAsValueHandler<Border> { public final static String LOWERED_BEVEL = "loweredBevel"; public final static String RAISED_BEVEL = "raisedBevel"; public final static String LOWERED_ETCHED = "loweredEtched"; public final static String RAISED_ETCHED = "raisedEtched"; public final static String LINE_BORDER_REGEX = "\\d+"; public final static String COLOR_LINE_BORDER_REGEX = "^([a-zA-Z0-9]+)\\s+\\d+$"; private final static String regex = MessageFormat.format("{0}|{1}|{2}|{3}|{4}|({5})|{6}", LOWERED_BEVEL, RAISED_BEVEL, LOWERED_ETCHED, RAISED_ETCHED, LINE_BORDER_REGEX, COLOR_REGEX, COLOR_LINE_BORDER_REGEX); private final static BorderAsValueHandler singleton = new BorderAsValueHandler(); /** * @return Singleton */ public static BorderAsValueHandler getInstance() {return singleton;} //private constructor only private BorderAsValueHandler() {} /* (non-Javadoc) * @see org.javabuilders.handler.ITypeAsValueHandler#getInputValueSample() */ public String getInputValueSample() { return "olive 3 | 3 | raisedEtched | loweredBevel"; } /* (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 Border getValue(BuildProcess process, Node node, String key, Object inputValue) throws BuildException { Border border = null; if (RAISED_BEVEL.equals(inputValue)) { border = BorderFactory.createRaisedBevelBorder(); } else if (LOWERED_BEVEL.equals(inputValue)) { border = BorderFactory.createLoweredBevelBorder(); } else if (RAISED_ETCHED.equals(inputValue)) { border = BorderFactory.createEtchedBorder(EtchedBorder.RAISED); } else if (LOWERED_ETCHED.equals(inputValue)) { border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); } else if (inputValue instanceof Long || inputValue instanceof Integer) { //just a line int input = Integer.parseInt(String.valueOf(inputValue)); border = BorderFactory.createLineBorder(new Color(SystemColor.ACTIVE_CAPTION_BORDER), input); } else { //color + line String sValue = (String)inputValue; String[] parts = sValue.split(" "); String colorValue = null; int width = 1; for(String part : parts) { if (colorValue == null) { colorValue = part; } else if (part.length() > 0 && !part.equals(" ")) { width = Integer.parseInt(part); } } Color color = ColorAsValueHandler.getInstance().getValue(process, node, key, colorValue); border = BorderFactory.createLineBorder(color, width); } return border; } /* (non-Javadoc) * @see org.javabuilders.IApplicable#getApplicableClass() */ public Class<?> getApplicableClass() { return Border.class; } }