// 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/TagAttributes.java
// public class TagAttributes {
// 	
// 	// conveniance methods
// 	public static TagAttributes of(String key, String value) {
// 		return new TagAttributes(key, value);
// 	}
// 	
// 	public static TagAttributes of(Map<String, String> attribs) {
// 		return new TagAttributes(attribs);
// 	}
// 	
// 	LinkedHashMap<String, String> attributes;
// 
// 	public TagAttributes(Map<String, String> attribs) {
// 		attributes = new LinkedHashMap<>(attribs);
// 	}
// 
// 	public TagAttributes(LinkedHashMap<String, String> attribs) {
// 		attributes = attribs;
// 	}
// 
// 	public TagAttributes() {
// 		this(new LinkedHashMap<>());
// 	}
// 
// 	public TagAttributes(String key, String value) {
// 		this();
// 		this.put(key, value);
// 	}
// 
// 	public TagAttributes put(String key, String value) {
// 		attributes.put(key, value);
// 		return this;
// 	}
// 
// 	public String get(String key) {
// 		return attributes.get(key);
// 	}
// 
// 	public void addToAttribute(String key, String value) {
// 		if (!attributes.containsKey(key)) {
// 			attributes.put(key, value);
// 		} else {
// 			attributes.put(key, attributes.get(key) + value);
// 		}
// 	}
// 
// 	public Set<String> keySet() {
// 		return attributes.keySet();
// 	}
// 	
// 	public Map<String, String> getAttributes() {
// 		return attributes;
// 	}
// 
// 	public void add(TagAttributes formAttributes) {
// 		if (formAttributes != null) {
// 			formAttributes.attributes.forEach((key, value) -> this.addToAttribute(key, value));
// 		}
// 	}
// 
// 	public void add(LinkedHashMap<String, String> attribs) {
// 		if (attribs != null) {
// 			attribs.forEach((key, value) -> this.addToAttribute(key, value));
// 		}
// 	}
// 
// }
// 
// Path: src/main/java/de/jformchecker/message/MessageSource.java
// @FunctionalInterface
// public interface MessageSource {
// 
// 	public String getMessage(String key);
// 
// 	public default String getSafeMessage(String key) {
// 		try {
// 			String msg = this.getMessage(key);
// 			return msg;
// 		} catch (Exception e) {
// 			return "??" + key + "??";
// 		}
// 	}
// 
// 	
// 	public default String getMessage(ValidationResult vr) {
// 		// give translated messages higher prio than message-keys
// 		if (vr.getTranslatedMessage() != null) {
// 			return vr.getTranslatedMessage();
// 		} else 
// 		if (vr.getMessage() != null) {
// 			return(String.format(this.getSafeMessage(
// 					vr.getMessage()
// 					), vr.getErrorVals()));
// 			
// 		} else {
// 			throw new IllegalArgumentException("ValidationResult has neither message-key nor translated text");
// 		}
// 	}
// 
// }


import java.util.Map;
import de.jformchecker.FormCheckerElement;
import de.jformchecker.TagAttributes;
import de.jformchecker.message.MessageSource;
package de.jformchecker.elements;



public class PasswordInput extends TextInput implements FormCheckerElement {

	public static PasswordInput build(String name) {
		PasswordInput i = new PasswordInput();
		i.name = name;
		return i;
	}

// 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/TagAttributes.java
// public class TagAttributes {
// 	
// 	// conveniance methods
// 	public static TagAttributes of(String key, String value) {
// 		return new TagAttributes(key, value);
// 	}
// 	
// 	public static TagAttributes of(Map<String, String> attribs) {
// 		return new TagAttributes(attribs);
// 	}
// 	
// 	LinkedHashMap<String, String> attributes;
// 
// 	public TagAttributes(Map<String, String> attribs) {
// 		attributes = new LinkedHashMap<>(attribs);
// 	}
// 
// 	public TagAttributes(LinkedHashMap<String, String> attribs) {
// 		attributes = attribs;
// 	}
// 
// 	public TagAttributes() {
// 		this(new LinkedHashMap<>());
// 	}
// 
// 	public TagAttributes(String key, String value) {
// 		this();
// 		this.put(key, value);
// 	}
// 
// 	public TagAttributes put(String key, String value) {
// 		attributes.put(key, value);
// 		return this;
// 	}
// 
// 	public String get(String key) {
// 		return attributes.get(key);
// 	}
// 
// 	public void addToAttribute(String key, String value) {
// 		if (!attributes.containsKey(key)) {
// 			attributes.put(key, value);
// 		} else {
// 			attributes.put(key, attributes.get(key) + value);
// 		}
// 	}
// 
// 	public Set<String> keySet() {
// 		return attributes.keySet();
// 	}
// 	
// 	public Map<String, String> getAttributes() {
// 		return attributes;
// 	}
// 
// 	public void add(TagAttributes formAttributes) {
// 		if (formAttributes != null) {
// 			formAttributes.attributes.forEach((key, value) -> this.addToAttribute(key, value));
// 		}
// 	}
// 
// 	public void add(LinkedHashMap<String, String> attribs) {
// 		if (attribs != null) {
// 			attribs.forEach((key, value) -> this.addToAttribute(key, value));
// 		}
// 	}
// 
// }
// 
// Path: src/main/java/de/jformchecker/message/MessageSource.java
// @FunctionalInterface
// public interface MessageSource {
// 
// 	public String getMessage(String key);
// 
// 	public default String getSafeMessage(String key) {
// 		try {
// 			String msg = this.getMessage(key);
// 			return msg;
// 		} catch (Exception e) {
// 			return "??" + key + "??";
// 		}
// 	}
// 
// 	
// 	public default String getMessage(ValidationResult vr) {
// 		// give translated messages higher prio than message-keys
// 		if (vr.getTranslatedMessage() != null) {
// 			return vr.getTranslatedMessage();
// 		} else 
// 		if (vr.getMessage() != null) {
// 			return(String.format(this.getSafeMessage(
// 					vr.getMessage()
// 					), vr.getErrorVals()));
// 			
// 		} else {
// 			throw new IllegalArgumentException("ValidationResult has neither message-key nor translated text");
// 		}
// 	}
// 
// }


// Path: src/main/java/de/jformchecker/elements/PasswordInput.java
import java.util.Map;
import de.jformchecker.FormCheckerElement;
import de.jformchecker.TagAttributes;
import de.jformchecker.message.MessageSource;

package de.jformchecker.elements;



public class PasswordInput extends TextInput implements FormCheckerElement {

	public static PasswordInput build(String name) {
		PasswordInput i = new PasswordInput();
		i.name = name;
		return i;
	}

	@Override