// Path: src/main/java/de/jformchecker/AttributeUtils.java
// public class AttributeUtils {
// 
// 
// 	public static String buildAttributes(Map<String, String> attributes) {
// 		StringBuilder attrStr = new StringBuilder();
// 		attributes.forEach((k,v) ->
// 			attrStr.append(AttributeUtils.buildSingleAttribute(k, attributes.get(k)))
// 				);
// 		return attrStr.toString();
// 	}
// 
// 	public static String buildSingleAttribute(String key, String value) {
// 		StringBuilder attrStr = new StringBuilder();
// 		if (StringUtils.isEmpty(value)) {
// 			attrStr.append(key);
// 		} else {
// 			attrStr.append(key).append("=\"").append(value).append("\"");
// 		}
// 		attrStr.append(" ");
// 		return attrStr.toString();
// 	}
// 
// 	public static String buildAttributes(TagAttributes attributes) {
// 		return AttributeUtils.buildAttributes(attributes.attributes);
// 	}
// }
// 
// Path: src/main/java/de/jformchecker/FormCheckerElement.java
// public interface FormCheckerElement {
// 
// 	// RFE: check, if some methods can be protected
// 
// 	// get internal name of this input-element
// 	public String getName();
// 	
// 	// set internal name
// 	public void setName(String name);
// 
// 
// 	// get the value that the user entered
// 	public String getValue();
// 
// 	// get the value that the user entered, but html-encoded
// 	@Deprecated
// 	public String getValueHtmlEncoded();
// 
// 	public void setValue(String value);
// 
// 	public String getPreSetValue();
// 
// 	// set an initial value to the element, before the user edited it.
// 	public <T extends FormCheckerElement> T setPreSetValue(String value);
// 
// 	public <T extends FormCheckerElement> T setTabIndex(int tabIndex);
// 
// 	public int getTabIndex();
// 
// 	public int getLastTabIndex();
// 
// 	// set the test in the label (builder pattern)
// 	
// 	public <T extends FormCheckerElement> T setDescription(String desc);
// 
// 	// as "setDescription" but does not return anything (no builder pattern)
// 	public void changeDescription(String desc);
// 
// 	public String getDescription();
// 
// 	// returns true if element is valid
// 	public boolean isValid();
// 
// 	public void setInvalid();
// 
// 	// inits the value with the current http-request
// 	public void init(Request req, boolean firstrun, Validator validator);
// 
// 	public ValidationResult getValidationResult();
// 
// 	public void setValidationResult(ValidationResult validationResult);
// 
// 	public String getInputTag();
// 
// 	public String getInputTag(Map<String, String> attributes, MessageSource messageSource, boolean html5Validation);
// 	
// 	@Deprecated
// 	public String getInputTag(Map<String, String> attributes);
// 
// 	public boolean isRequired();
// 
// 	public <T extends FormCheckerElement> T setRequired();
// 
// 	public List<Criterion> getCriteria();
// 
// 	public void setFormChecker(FormChecker fc);
// 
// 	// returns the complete label-html tag
// 	public String getLabel();
// 
// 	// returns the label-html and the input-html
// 	public String getCompleteInput(); // RFE: Perhaps toString makes this even
// 										// more convenient?!
// 
// 	public String getHelpText();
// 
// 	// sets the size attribute
// 	public <T extends FormCheckerElement> T setSize(int size);
// 
// 	public String getType();
// 
// }


import java.util.LinkedHashMap;
import java.util.Map;
import de.jformchecker.AttributeUtils;
import de.jformchecker.FormCheckerElement;
	public static RadioInput build(String name, String keys[], String values[]) {
		RadioInput si = RadioInput.build(name);
		if (keys.length != values.length) {
			throw new IllegalArgumentException("Key / Values with unequal lenght");
		}
		LinkedHashMap<String, String> possibleNames = new LinkedHashMap<>();
		for (int i = 0; i < keys.length; i++) {
			possibleNames.put(keys[i], values[i]);
		}
		si.setPossibleValues(possibleNames);
		return si;
	}

	public String getInputTag(Map<String, String> attributes) {
		StringBuilder inputTag = new StringBuilder();
		possibleNames.forEach((key, value) -> {
			// leer - bedeutet: Radio - Button ist optional, also nicht als
			// radio ausgeben!
			if (!"".equals(value)) {
				inputTag.append(this.getInputTag(key, attributes) + " <label for=\"form-radio-" + name + "-" + key + "\" class=\""
						+ "" + "\" id=\"label-" + name + "-" + key + "\">" + value + " </label>\n");
			}
			// do not increase tab-index:
			// http://stackoverflow.com/questions/14322564/can-you-tab-through-all-radio-buttons
			
		});
		return inputTag.toString();
	}

	public String getInputTag(String curValue, Map<String, String> attributes) {
// Path: src/main/java/de/jformchecker/AttributeUtils.java
// public class AttributeUtils {
// 
// 
// 	public static String buildAttributes(Map<String, String> attributes) {
// 		StringBuilder attrStr = new StringBuilder();
// 		attributes.forEach((k,v) ->
// 			attrStr.append(AttributeUtils.buildSingleAttribute(k, attributes.get(k)))
// 				);
// 		return attrStr.toString();
// 	}
// 
// 	public static String buildSingleAttribute(String key, String value) {
// 		StringBuilder attrStr = new StringBuilder();
// 		if (StringUtils.isEmpty(value)) {
// 			attrStr.append(key);
// 		} else {
// 			attrStr.append(key).append("=\"").append(value).append("\"");
// 		}
// 		attrStr.append(" ");
// 		return attrStr.toString();
// 	}
// 
// 	public static String buildAttributes(TagAttributes attributes) {
// 		return AttributeUtils.buildAttributes(attributes.attributes);
// 	}
// }
// 
// Path: src/main/java/de/jformchecker/FormCheckerElement.java
// public interface FormCheckerElement {
// 
// 	// RFE: check, if some methods can be protected
// 
// 	// get internal name of this input-element
// 	public String getName();
// 	
// 	// set internal name
// 	public void setName(String name);
// 
// 
// 	// get the value that the user entered
// 	public String getValue();
// 
// 	// get the value that the user entered, but html-encoded
// 	@Deprecated
// 	public String getValueHtmlEncoded();
// 
// 	public void setValue(String value);
// 
// 	public String getPreSetValue();
// 
// 	// set an initial value to the element, before the user edited it.
// 	public <T extends FormCheckerElement> T setPreSetValue(String value);
// 
// 	public <T extends FormCheckerElement> T setTabIndex(int tabIndex);
// 
// 	public int getTabIndex();
// 
// 	public int getLastTabIndex();
// 
// 	// set the test in the label (builder pattern)
// 	
// 	public <T extends FormCheckerElement> T setDescription(String desc);
// 
// 	// as "setDescription" but does not return anything (no builder pattern)
// 	public void changeDescription(String desc);
// 
// 	public String getDescription();
// 
// 	// returns true if element is valid
// 	public boolean isValid();
// 
// 	public void setInvalid();
// 
// 	// inits the value with the current http-request
// 	public void init(Request req, boolean firstrun, Validator validator);
// 
// 	public ValidationResult getValidationResult();
// 
// 	public void setValidationResult(ValidationResult validationResult);
// 
// 	public String getInputTag();
// 
// 	public String getInputTag(Map<String, String> attributes, MessageSource messageSource, boolean html5Validation);
// 	
// 	@Deprecated
// 	public String getInputTag(Map<String, String> attributes);
// 
// 	public boolean isRequired();
// 
// 	public <T extends FormCheckerElement> T setRequired();
// 
// 	public List<Criterion> getCriteria();
// 
// 	public void setFormChecker(FormChecker fc);
// 
// 	// returns the complete label-html tag
// 	public String getLabel();
// 
// 	// returns the label-html and the input-html
// 	public String getCompleteInput(); // RFE: Perhaps toString makes this even
// 										// more convenient?!
// 
// 	public String getHelpText();
// 
// 	// sets the size attribute
// 	public <T extends FormCheckerElement> T setSize(int size);
// 
// 	public String getType();
// 
// }


// Path: src/main/java/de/jformchecker/elements/RadioInput.java
import java.util.LinkedHashMap;
import java.util.Map;
import de.jformchecker.AttributeUtils;
import de.jformchecker.FormCheckerElement;

	public static RadioInput build(String name, String keys[], String values[]) {
		RadioInput si = RadioInput.build(name);
		if (keys.length != values.length) {
			throw new IllegalArgumentException("Key / Values with unequal lenght");
		}
		LinkedHashMap<String, String> possibleNames = new LinkedHashMap<>();
		for (int i = 0; i < keys.length; i++) {
			possibleNames.put(keys[i], values[i]);
		}
		si.setPossibleValues(possibleNames);
		return si;
	}

	public String getInputTag(Map<String, String> attributes) {
		StringBuilder inputTag = new StringBuilder();
		possibleNames.forEach((key, value) -> {
			// leer - bedeutet: Radio - Button ist optional, also nicht als
			// radio ausgeben!
			if (!"".equals(value)) {
				inputTag.append(this.getInputTag(key, attributes) + " <label for=\"form-radio-" + name + "-" + key + "\" class=\""
						+ "" + "\" id=\"label-" + name + "-" + key + "\">" + value + " </label>\n");
			}
			// do not increase tab-index:
			// http://stackoverflow.com/questions/14322564/can-you-tab-through-all-radio-buttons
			
		});
		return inputTag.toString();
	}

	public String getInputTag(String curValue, Map<String, String> attributes) {
		return "<input id=\"form-radio-" + name + "-" + curValue + "\" " + AttributeUtils.buildAttributes(attributes)