/* ===========================================================
* TradeManager : a application to trade strategies for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Project Info: org.trade
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library 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 Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Oracle, Inc.
* in the United States and other countries.]
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Original Author: Simon Allen;
* Contributor(s): -;
*
* Changes
* -------
*
*/
package org.trade.ui.widget;
import java.awt.Color;
import java.awt.Insets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Hashtable;
import java.util.Locale;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
import org.trade.core.valuetype.Date;
/**
*
* @version $Id: DateField.java,v 1.5 2001/12/28 21:14:55 simon Exp $
* @author Simon Allen
*/
public class DateField extends JTextField {
/**
*
*/
private static final long serialVersionUID = -6932225666197539617L;
private static Hashtable<Integer, Character> editMask = new Hashtable<Integer, Character>();
private SimpleDateFormat dateFormat = null;
private Color originalColor = null;
/**
* Constructor for DateField.
*
* @param mask
* String
*/
public DateField(String mask) {
super(mask);
originalColor = this.getBackground();
this.setHorizontalAlignment(SwingConstants.CENTER);
this.setBorder(new EmptyBorder(new Insets(2, 2, 2, 2)));
dateFormat = new SimpleDateFormat(mask, Locale.getDefault());
dateFormat.setLenient(false);
}
/**
* Method createDefaultModel.
*
* @return Document
*/
protected Document createDefaultModel() {
DateDocument doc = new DateDocument();
return doc;
}
/**
* Method getDate.
*
* @return Date
*/
public Date getDate() {
try {
return new Date(dateFormat.parse(this.getText().trim()));
} catch (ParseException e) {
return (Date.NULLIPDATE);
}
}
/**
* Method setDate.
*
* @param date
* Date
*/
public void setDate(Date date) {
if (date.equals(Date.NULLIPDATE)) {
super.setText("");
} else {
super.setText(dateFormat.format(date.getDate()));
}
}
/**
* Method setDate.
*
* @param date
* java.util.Date
*/
public void setDate(java.util.Date date) {
if (date.equals(Date.NULLIPDATE)) {
super.setText("");
} else {
super.setText(dateFormat.format(date));
}
}
/**
* Method isValid.
*
* @return boolean
*/
public boolean isValid() {
boolean isValid = super.isValid();
if (isValid) {
String dateText = this.getText().trim();
if (dateText.length() > 0) {
try {
dateFormat.parse(dateText);
this.setBackground(originalColor);
} catch (ParseException ep) {
this.setBackground(Color.red);
isValid = false;
}
} else {
isValid = true;
}
}
return isValid;
}
/**
*/
class DateDocument extends PlainDocument {
/**
*
*/
private static final long serialVersionUID = -498598784381540618L;
/**
* Method insertString.
*
* @param offs
* int
* @param str
* String
* @param a
* AttributeSet
* @throws BadLocationException
* @see javax.swing.text.Document#insertString(int, String,
* AttributeSet)
*/
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if (editMask.isEmpty()) {
char[] maskChars = str.toCharArray();
for (int i = 0; i < maskChars.length; i++) {
editMask.put(new Integer(i), new Character(maskChars[i]));
}
}
String mask2 = null;
for (int i = 0; i < editMask.size(); i++) {
Character mask1 = editMask.get(i);
if (null == mask2) {
mask2 = mask1.toString();
} else {
mask2 = mask2 + mask1.toString();
}
}
if (str != null) {
if (!(editMask.isEmpty())) {
Character selected = editMask.get(new Integer(offs));
if (selected != null) {
if (Character.isLetter(selected.charValue())) {
} else {
str = selected.charValue() + str;
}
} else {
return;
}
}
} else {
return;
}
char[] upper = str.toCharArray();
for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
Character selected = editMask.get(new Integer(offs + i));
if (selected != null) {
if (Character.isLetter(selected.charValue())) {
if (!(Character.isDigit(upper[i]))) {
return;
}
}
}
}
if (super.getLength() > offs) {
super.remove(offs, upper.length);
}
super.insertString(offs, new String(upper), a);
}
}
}