DateWidget
Jetzt werden die Formularfelder in der für die Locale korrekten Reihenfolge angezeigt und die Monate sind lokalisiert git-svn-id: https://svn.libreccm.org/ccm/trunk@706 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
8f2246aba2
commit
13e047472c
|
|
@ -32,10 +32,10 @@ import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.Form;
|
import com.arsdigita.bebop.Form;
|
||||||
import com.arsdigita.bebop.FormData;
|
import com.arsdigita.bebop.FormData;
|
||||||
import com.arsdigita.bebop.parameters.NotNullValidationListener;
|
import com.arsdigita.bebop.parameters.NotNullValidationListener;
|
||||||
import com.arsdigita.kernel.Kernel;
|
|
||||||
// This interface contains the XML element name of this class
|
// This interface contains the XML element name of this class
|
||||||
// in a constant which is used when generating XML
|
// in a constant which is used when generating XML
|
||||||
import com.arsdigita.bebop.util.BebopConstants;
|
import com.arsdigita.bebop.util.BebopConstants;
|
||||||
|
import com.arsdigita.dispatcher.DispatcherHelper;
|
||||||
|
|
||||||
import com.arsdigita.xml.Element;
|
import com.arsdigita.xml.Element;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
|
@ -57,6 +57,7 @@ public class Date extends Widget implements BebopConstants {
|
||||||
protected TextField m_day;
|
protected TextField m_day;
|
||||||
private int m_year_begin;
|
private int m_year_begin;
|
||||||
private int m_year_end;
|
private int m_year_end;
|
||||||
|
private Locale m_locale;
|
||||||
|
|
||||||
// Inner classes for the fragment widgets
|
// Inner classes for the fragment widgets
|
||||||
protected class YearFragment extends SingleSelect {
|
protected class YearFragment extends SingleSelect {
|
||||||
|
|
@ -154,13 +155,6 @@ public class Date extends Widget implements BebopConstants {
|
||||||
String nameMonth = name + ".month";
|
String nameMonth = name + ".month";
|
||||||
String nameDay = name + ".day";
|
String nameDay = name + ".day";
|
||||||
|
|
||||||
DateFormatSymbols dfs = null;
|
|
||||||
Locale locale = Kernel.getContext().getLocale();
|
|
||||||
if (locale != null) {
|
|
||||||
dfs = new DateFormatSymbols(locale);
|
|
||||||
} else {
|
|
||||||
dfs = new DateFormatSymbols();
|
|
||||||
}
|
|
||||||
Calendar currentTime = GregorianCalendar.getInstance();
|
Calendar currentTime = GregorianCalendar.getInstance();
|
||||||
|
|
||||||
m_year = new YearFragment(nameYear, this);
|
m_year = new YearFragment(nameYear, this);
|
||||||
|
|
@ -169,16 +163,9 @@ public class Date extends Widget implements BebopConstants {
|
||||||
|
|
||||||
m_day.setMaxLength(2);
|
m_day.setMaxLength(2);
|
||||||
m_day.setSize(2);
|
m_day.setSize(2);
|
||||||
String[] months = dfs.getMonths();
|
|
||||||
|
|
||||||
for (int i = 0; i < months.length; i += 1) {
|
populateMonthOptions();
|
||||||
// This check is necessary because
|
|
||||||
// java.text.DateFormatSymbols.getMonths() returns an array
|
|
||||||
// of 13 Strings: 12 month names and an empty string.
|
|
||||||
if (months[i].length() > 0) {
|
|
||||||
m_month.addOption(new Option(String.valueOf(i), months[i]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int currentYear = currentTime.get(Calendar.YEAR);
|
int currentYear = currentTime.get(Calendar.YEAR);
|
||||||
setYearRange(currentYear - 1, currentYear + 3);
|
setYearRange(currentYear - 1, currentYear + 3);
|
||||||
|
|
||||||
|
|
@ -205,13 +192,13 @@ public class Date extends Widget implements BebopConstants {
|
||||||
Calendar cal = new GregorianCalendar();
|
Calendar cal = new GregorianCalendar();
|
||||||
cal.setTime(date);
|
cal.setTime(date);
|
||||||
int year = (cal.get(Calendar.YEAR));
|
int year = (cal.get(Calendar.YEAR));
|
||||||
if (year < m_year_begin) {
|
if (year < m_year_begin) {
|
||||||
m_year.prependOption(new Option(String.valueOf(year)));
|
m_year.prependOption(new Option(String.valueOf(year)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (year > m_year_end) {
|
if (year > m_year_end) {
|
||||||
m_year.addOption(new Option(String.valueOf(year)));
|
m_year.addOption(new Option(String.valueOf(year)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -261,13 +248,47 @@ public class Date extends Widget implements BebopConstants {
|
||||||
// Resepct the localized
|
// Resepct the localized
|
||||||
public void generateLocalizedWidget(PageState ps, Element date) {
|
public void generateLocalizedWidget(PageState ps, Element date) {
|
||||||
|
|
||||||
// Get the current Pattern
|
Locale defaultLocale = Locale.getDefault();
|
||||||
// String format = new SimpleDateFormat(SimpleDateFormat.SHORT, Kernel.getContext().getLocale()).toPattern();
|
Locale locale = DispatcherHelper.getNegotiatedLocale();
|
||||||
String format = new SimpleDateFormat().toPattern();
|
|
||||||
|
|
||||||
m_month.generateXML(ps, date);
|
// Get the current Pattern
|
||||||
m_day.generateXML(ps, date);
|
// XXX This is really, really, really, really, really, really bad
|
||||||
m_year.generateXML(ps, date);
|
// but there is no way to get a SimpleDateFormat object for a
|
||||||
|
// different locale the the system default (the one you get with
|
||||||
|
// Locale.getDefault();). Also there is now way getting the pattern
|
||||||
|
// in another way (up until JDK 1.1 there was), so I have to temporarly
|
||||||
|
// switch the default locale to my desired locale, get a SimpleDateFormat
|
||||||
|
// and switch back.
|
||||||
|
Locale.setDefault(locale);
|
||||||
|
String format = new SimpleDateFormat().toPattern();
|
||||||
|
Locale.setDefault(defaultLocale);
|
||||||
|
|
||||||
|
// Repopulate the options for the month select box to get them localized
|
||||||
|
populateMonthOptions();
|
||||||
|
|
||||||
|
char[] chars = format.toCharArray();
|
||||||
|
for (int i = 0; i < chars.length; i++) {
|
||||||
|
|
||||||
|
// Test for doublettes
|
||||||
|
if (i >= 1 && chars[i - 1] == chars[i]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (chars[i]) {
|
||||||
|
case 'd':
|
||||||
|
m_day.generateXML(ps, date);
|
||||||
|
break;
|
||||||
|
case 'M':
|
||||||
|
m_month.generateXML(ps, date);
|
||||||
|
break;
|
||||||
|
case 'y':
|
||||||
|
m_year.generateXML(ps, date);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -323,4 +344,27 @@ public class Date extends Widget implements BebopConstants {
|
||||||
m_day.setClassAttr(at);
|
m_day.setClassAttr(at);
|
||||||
super.setClassAttr(at);
|
super.setClassAttr(at);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void populateMonthOptions() {
|
||||||
|
|
||||||
|
Locale locale = DispatcherHelper.getNegotiatedLocale();
|
||||||
|
|
||||||
|
if (m_locale == null || (locale != null && !m_locale.equals(locale))) {
|
||||||
|
|
||||||
|
DateFormatSymbols dfs = new DateFormatSymbols(locale);
|
||||||
|
String[] months = dfs.getMonths();
|
||||||
|
|
||||||
|
m_month.clearOptions();
|
||||||
|
|
||||||
|
for (int i = 0; i < months.length; i += 1) {
|
||||||
|
// This check is necessary because
|
||||||
|
// java.text.DateFormatSymbols.getMonths() returns an array
|
||||||
|
// of 13 Strings: 12 month names and an empty string.
|
||||||
|
if (months[i].length() > 0) {
|
||||||
|
m_month.addOption(new Option(String.valueOf(i), months[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_locale = DispatcherHelper.getNegotiatedLocale();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue