Java tutorial
/* Copyright (C) 2015, University of Kansas Center for Research * * Specify Software Project, specify@ku.edu, Biodiversity Institute, * 1345 Jayhawk Boulevard, Lawrence, Kansas, 66045, USA * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package edu.ku.brc.af.ui.forms.validation; import static edu.ku.brc.ui.UIHelper.setControlSize; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import javax.swing.JPasswordField; import javax.swing.event.DocumentEvent; import javax.swing.text.Document; import org.apache.commons.lang.StringUtils; import edu.ku.brc.af.prefs.AppPrefsCache; import edu.ku.brc.af.prefs.AppPrefsChangeEvent; import edu.ku.brc.af.prefs.AppPrefsChangeListener; import edu.ku.brc.helpers.Encryption; import edu.ku.brc.ui.ColorWrapper; import edu.ku.brc.ui.DocumentAdaptor; import edu.ku.brc.ui.GetSetValueIFace; import edu.ku.brc.ui.UIHelper; /** * A JTextControl that implements UIValidatable for participating in validation * * @code_status Beta * * @author rods * */ @SuppressWarnings("serial") public class ValPasswordField extends JPasswordField implements UIValidatable, GetSetValueIFace, AppPrefsChangeListener { protected static ColorWrapper valTextColor = null; protected static ColorWrapper requiredFieldColor = null; protected UIValidatable.ErrorType valState = UIValidatable.ErrorType.Valid; protected boolean isRequired = false; protected boolean isChanged = false; protected boolean isEncrypted = false; protected boolean isNew = false; protected Color bgColor = null; protected String defaultValue = null; protected int minLen = 0; /** * Constructor. */ public ValPasswordField() { super(); init(); } /** * Constructor. * @param text initial text */ public ValPasswordField(String text) { super(text); init(); } /** * Constructor. * @param cols number of columns */ public ValPasswordField(int cols) { super(cols); init(); } /** * Constructor. * @param text initial text * @param cols number of columns */ public ValPasswordField(String text, int cols) { super(text, cols); } /** * Constructor. * @param doc initial document * @param text initial text * @param cols number of columns */ public ValPasswordField(Document doc, String text, int cols) { super(doc, text, cols); init(); } /** * Setup colors and listeners. */ public void init() { setControlSize(this); bgColor = getBackground(); if (valTextColor == null || requiredFieldColor == null) { valTextColor = AppPrefsCache.getColorWrapper("ui", "formatting", "valtextcolor"); requiredFieldColor = AppPrefsCache.getColorWrapper("ui", "formatting", "requiredfieldcolor"); } AppPrefsCache.addChangeListener("ui.formatting.requiredfieldcolor", this); addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { isNew = false; repaint(); } }); getDocument().addDocumentListener(new DocumentAdaptor() { @Override protected void changed(DocumentEvent e) { isChanged = true; } }); } /* (non-Javadoc) * @see edu.ku.brc.af.ui.forms.validation.UIValidatable#isNotEmpty() */ public boolean isNotEmpty() { return getPassword().length > 0; } /* (non-Javadoc) * @see java.awt.Component#paint(java.awt.Graphics) */ @Override public void paint(Graphics g) { super.paint(g); if (!isNew && valState == UIValidatable.ErrorType.Error && isEnabled()) { UIHelper.drawRoundedRect((Graphics2D) g, valTextColor.getColor(), getSize(), 1); } } /* (non-Javadoc) * @see java.awt.Component#setEnabled(boolean) */ @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); setBackground(isRequired && isEnabled() ? requiredFieldColor.getColor() : bgColor); } /* (non-Javadoc) * @see javax.swing.text.JTextComponent#setText(java.lang.String) */ @Override public void setText(String text) { super.setText(isEncrypted ? Encryption.decrypt(text) : text); } /** * Return the text without encryption (whether encrytption is turned on or not) * @return the text without encryption (whether encrytption is turned on or not) */ public String getPasswordText() { return new String(super.getPassword()); } /* (non-Javadoc) * @see javax.swing.text.JTextComponent#getText() */ @Override public char[] getPassword() { String text = new String(super.getPassword()); return (text.length() == 0) ? ("").toCharArray() : isEncrypted ? Encryption.encrypt(text).toCharArray() : text.toCharArray(); } public boolean isEncrypted() { return isEncrypted; } public void setEncrypted(boolean isEncrypted) { this.isEncrypted = isEncrypted; } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#cleanUp() */ public void cleanUp() { UIHelper.removeFocusListeners(this); UIHelper.removeKeyListeners(this); AppPrefsCache.removeChangeListener("ui.formatting.requiredfieldcolor", this); } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#getReason() */ public String getReason() { return null; } /** * @return the minLen */ public int getMinLen() { return minLen; } /** * @param minLen the minLen to set */ public void setMinLen(int minLen) { this.minLen = minLen; } //-------------------------------------------------------- // GetSetValueIFace //-------------------------------------------------------- /* (non-Javadoc) * @see edu.ku.brc.af.ui.GetSetValueIFace#setValue(java.lang.Object, java.lang.String) */ public void setValue(Object value, String defaultValue) { this.defaultValue = defaultValue; String data; if (value != null) { if (value instanceof String) { data = (String) value; } else { data = value.toString(); } } else { data = StringUtils.isNotEmpty(defaultValue) ? defaultValue : ""; } setText(data); validateState(); repaint(); } /* (non-Javadoc) * @see edu.ku.brc.af.ui.GetSetValueIFace#getValue() */ public Object getValue() { return new String(getPassword()); } //-------------------------------------------------- //-- UIValidatable Interface //-------------------------------------------------- /* (non-Javadoc) * @see edu.kui.brc.ui.validation.UIValidatable#isInError() */ public boolean isInError() { return valState != UIValidatable.ErrorType.Valid; } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#getState() */ public ErrorType getState() { return valState; } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#setState(edu.ku.brc.ui.forms.validation.UIValidatable.ErrorType) */ public void setState(ErrorType state) { this.valState = state; } /* (non-Javadoc) * @see edu.kui.brc.ui.validation.UIValidatable#isRequired() */ public boolean isRequired() { return isRequired; } /* (non-Javadoc) * @see edu.kui.brc.ui.validation.UIValidatable#setRequired(boolean) */ public void setRequired(boolean isRequired) { setBackground(isRequired && isEnabled() ? requiredFieldColor.getColor() : bgColor); this.isRequired = isRequired; } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#isChanged() */ public boolean isChanged() { return isChanged; } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#setChanged(boolean) */ public void setChanged(boolean isChanged) { this.isChanged = isChanged; } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#setAsNew(boolean) */ public void setAsNew(boolean isNew) { this.isNew = isRequired ? isNew : false; } /* (non-Javadoc) * @see java.awt.Component#validate() */ public UIValidatable.ErrorType validateState() { valState = getPassword().length < minLen ? UIValidatable.ErrorType.Incomplete : UIValidatable.ErrorType.Valid; return valState; } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#reset() */ public void reset() { setText(""); valState = isRequired ? UIValidatable.ErrorType.Incomplete : UIValidatable.ErrorType.Valid; repaint(); } /* (non-Javadoc) * @see edu.ku.brc.ui.forms.validation.UIValidatable#getValidatableUIComp() */ public Component getValidatableUIComp() { return this; } //------------------------------------------------- // AppPrefsChangeListener //------------------------------------------------- public void preferenceChange(AppPrefsChangeEvent evt) { if (evt.getKey().equals("requiredfieldcolor")) { setBackground(isRequired && isEnabled() ? requiredFieldColor.getColor() : bgColor); } } }