Änderungen in Date, Time und DateTime Widgets um codeverdopplungen zu vermeiden

git-svn-id: https://svn.libreccm.org/ccm/trunk@379 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2010-04-23 14:39:46 +00:00
parent dbff86175b
commit 5cd3d70eb9
3 changed files with 130 additions and 373 deletions

View File

@ -29,7 +29,6 @@ import com.arsdigita.util.Assert;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.DateParameter;
import com.arsdigita.bebop.parameters.ParameterData;
import com.arsdigita.bebop.util.BebopConstants;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
@ -40,6 +39,7 @@ import com.arsdigita.kernel.Kernel;
import com.arsdigita.bebop.util.BebopConstants;
import com.arsdigita.xml.Element;
import java.text.SimpleDateFormat;
import java.util.Locale;
/**
@ -47,8 +47,9 @@ import java.util.Locale;
*
* @author Karl Goldstein
* @author Uday Mathur
* @author Michael Pih
* @version $Id: Date.java 287 2005-02-22 00:29:02Z sskracic $
* @author Michael Pih
* @author Sören Bernstein
* @version $Id: Date.java 288 2010-02-20 07:29:00Z sbernstein $
*/
public class Date extends Widget implements BebopConstants {
@ -66,6 +67,7 @@ public class Date extends Widget implements BebopConstants {
this.parent = parent;
}
@Override
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
@ -74,6 +76,7 @@ public class Date extends Widget implements BebopConstants {
return new ParameterData(getParameterModel(), value);
}
@Override
public Object getValue(PageState ps) {
Object value = parent.getFragmentValue(ps, Calendar.YEAR);
if (value == null) {
@ -95,6 +98,7 @@ public class Date extends Widget implements BebopConstants {
this.parent = parent;
}
@Override
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
@ -103,6 +107,7 @@ public class Date extends Widget implements BebopConstants {
return new ParameterData(getParameterModel(), value);
}
@Override
public Object getValue(PageState ps) {
return parent.getFragmentValue(ps, Calendar.MONTH);
}
@ -118,6 +123,7 @@ public class Date extends Widget implements BebopConstants {
this.parent = parent;
}
@Override
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
@ -126,6 +132,7 @@ public class Date extends Widget implements BebopConstants {
return new ParameterData(getParameterModel(), value);
}
@Override
public Object getValue(PageState ps) {
return parent.getFragmentValue(ps, Calendar.DATE);
}
@ -211,10 +218,12 @@ public class Date extends Widget implements BebopConstants {
/** The XML tag for this derived class of Widget.
*/
@Override
protected String getElementTag() {
return BEBOP_DATE;
}
@Override
public void generateWidget(PageState ps, Element parent) {
if ( ! isVisible(ps) ) {
@ -222,24 +231,37 @@ public class Date extends Widget implements BebopConstants {
}
Element date = parent.newChildElement(getElementTag(), BEBOP_XML_NS);
// parent.addContent(date);
date.addAttribute("name", getParameterModel().getName());
exportAttributes(date);
m_month.generateXML(ps, date);
m_day .generateXML(ps, date);
m_year .generateXML(ps, date);
generateLocalizedWidget(ps, date);
// If Element could be null insert an extra widget to clear entry
if (!hasValidationListener(new NotNullValidationListener())) {
date.newChildElement("NoDate");
}
}
// Resepct the localized
public void generateLocalizedWidget(PageState ps, Element date) {
// Get the current Pattern
// String format = new SimpleDateFormat(SimpleDateFormat.SHORT, Kernel.getContext().getLocale()).toPattern();
String format = new SimpleDateFormat().toPattern();
m_month.generateXML(ps, date);
m_day.generateXML(ps, date);
m_year.generateXML(ps, date);
}
@Override
public void setDisabled() {
m_month.setDisabled();
m_day.setDisabled();
m_year.setDisabled();
}
@Override
public void setReadOnly() {
m_month.setReadOnly();
m_day.setReadOnly();
@ -255,6 +277,7 @@ public class Date extends Widget implements BebopConstants {
* @param the <code>Form</code> Object for this Widget.
* @exception IllegalStateException if form already set.
*/
@Override
public void setForm(Form f) {
super .setForm(f);
m_year .setForm(f);
@ -276,6 +299,7 @@ public class Date extends Widget implements BebopConstants {
return null;
}
@Override
public void setClassAttr(String at) {
m_month.setClassAttr(at);
m_year.setClassAttr(at);
@ -284,5 +308,6 @@ public class Date extends Widget implements BebopConstants {
}
// Don't lock
@Override
public void lock() {}
}

View File

@ -19,221 +19,24 @@
package com.arsdigita.bebop.form;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.parameters.DateTimeParameter;
import com.arsdigita.bebop.parameters.NumberInRangeValidationListener;
import com.arsdigita.bebop.parameters.ParameterData;
import com.arsdigita.bebop.parameters.NotNullValidationListener;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.util.Assert;
import com.arsdigita.bebop.util.BebopConstants;
import com.arsdigita.bebop.util.BebopConstants;
import com.arsdigita.xml.Element;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* A class representing a date and time field in an HTML form.
* (based on the code in Date.java)
*
* @author Scott Seago
* @version $Id: DateTime.java 287 2005-02-22 00:29:02Z sskracic $
* @author Sören Bernstein
* @version $Id: DateTime.java 288 2010-02-20 07:29:00Z ssbernstein $
*/
public class DateTime extends Widget implements BebopConstants {
private OptionGroup m_year;
private OptionGroup m_month;
private TextField m_day;
private TextField m_hour;
private TextField m_minute;
private TextField m_second;
private OptionGroup m_amOrPm;
private static final String ZERO = "0";
private boolean m_showSeconds;
// Inner classes for the fragment widgets
private class YearFragment extends SingleSelect {
private DateTime parent;
public YearFragment(String name, DateTime parent) {
super(name);
this.parent = parent;
}
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
return null;
}
return new ParameterData(getParameterModel(), value);
}
public Object getValue(PageState ps) {
Object value = parent.getFragmentValue(ps, Calendar.YEAR);
if (value == null) {
Calendar currentTime = GregorianCalendar.getInstance();
int currentYear = currentTime.get(Calendar.YEAR);
value = new Integer(currentYear);
}
return value;
}
}
private class MonthFragment extends SingleSelect {
private DateTime parent;
public MonthFragment(String name, DateTime parent) {
super(name);
this.parent = parent;
}
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
return null;
}
return new ParameterData(getParameterModel(), value);
}
public Object getValue(PageState ps) {
return parent.getFragmentValue(ps, Calendar.MONTH);
}
}
private class DayFragment extends TextField {
private DateTime parent;
public DayFragment(String name, DateTime parent) {
super(name);
this.parent = parent;
}
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
return null;
}
return new ParameterData(getParameterModel(), value);
}
public Object getValue(PageState ps) {
return parent.getFragmentValue(ps, Calendar.DATE);
}
}
private class HourFragment extends TextField {
private DateTime parent;
public HourFragment(String name, DateTime parent) {
super(name);
this.parent = parent;
this.addValidationListener(new NumberInRangeValidationListener(1,12));
}
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
return null;
}
return new ParameterData(getParameterModel(), value);
}
public Object getValue(PageState ps) {
return parent.getFragmentValue(ps, Calendar.HOUR);
}
}
private class MinuteFragment extends TextField {
private DateTime parent;
public MinuteFragment(String name, DateTime parent) {
super(name);
this.parent = parent;
this.addValidationListener(new NumberInRangeValidationListener(0,59));
}
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
return null;
}
return new ParameterData(getParameterModel(), value);
}
public Object getValue(PageState ps) {
Integer min = (Integer) parent.getFragmentValue(ps, Calendar.MINUTE);
if (min == null) {
return null;
}
if ( min.intValue() < 10 ) {
return ZERO + min.toString();
} else {
return min.toString();
}
}
}
private class SecondFragment extends TextField {
private DateTime parent;
public SecondFragment(String name, DateTime parent) {
super(name);
this.parent = parent;
this.addValidationListener(new NumberInRangeValidationListener(0,59));
}
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
return null;
}
return new ParameterData(getParameterModel(), value);
}
public Object getValue(PageState ps) {
Integer sec = (Integer) parent.getFragmentValue(ps, Calendar.SECOND);
if (sec == null) {
return null;
}
if ( sec.intValue() < 10 ) {
return ZERO + sec.toString();
} else {
return sec.toString();
}
}
}
private class AmPmFragment extends SingleSelect {
private DateTime parent;
public AmPmFragment(String name, DateTime parent) {
super(name);
this.parent = parent;
}
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
return null;
}
return new ParameterData(getParameterModel(), value);
}
public Object getValue(PageState ps) {
return parent.getFragmentValue(ps, Calendar.AM_PM);
}
}
private Date m_date;
private Time m_time;
/**
* Construct a new DateTime. The model must be a DateTimeParameter
@ -248,69 +51,14 @@ public class DateTime extends Widget implements BebopConstants {
public DateTime(ParameterModel model, boolean showSeconds) {
super(model);
if ( ! (model instanceof DateTimeParameter)) {
if (!(model instanceof DateTimeParameter)) {
throw new IllegalArgumentException(
"The DateTime widget " + model.getName() +
" must be backed by a DateTimeParameter parmeter model");
}
String name = model.getName();
String nameYear = name + ".year";
String nameMonth = name + ".month";
String nameDay = name + ".day";
String nameHour = name + ".hour";
String nameMinute = name + ".minute";
String nameSecond = name + ".second";
String nameAmOrPm = name + ".amOrPm";
DateFormatSymbols dfs = new DateFormatSymbols();
Calendar currentTime = GregorianCalendar.getInstance();
m_year = new YearFragment(nameYear, this);
m_month = new MonthFragment(nameMonth, this);
m_day = new DayFragment(nameDay, this);
m_hour = new HourFragment(nameHour, this);
m_minute = new MinuteFragment(nameMinute, this);
m_showSeconds = showSeconds;
if (m_showSeconds) {
m_second = new SecondFragment(nameSecond, this);
} else {
m_second = null;
}
m_amOrPm = new AmPmFragment(nameAmOrPm, this);
m_day.setMaxLength(2);
m_day.setSize(2);
m_hour.setMaxLength(2);
m_hour.setSize(2);
m_minute.setMaxLength(2);
m_minute.setSize(2);
if (m_showSeconds) {
m_second.setMaxLength(2);
m_second.setSize(2);
}
String [] months = dfs.getMonths();
for (int i=0; i<months.length; i+=1) { // globalize ?
// 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);
setYearRange(currentYear - 1, currentYear + 3);
String [] amPmStrings = dfs.getAmPmStrings();
for (int i=0; i<amPmStrings.length; i+=1) {
//if ( amPmStrings[i].length() > 0 ) {
m_amOrPm.addOption(new Option(String.valueOf(i),amPmStrings[i]));
//}
"The DateTime widget " + model.getName() +
" must be backed by a DateTimeParameter parmeter model");
}
m_date = new Date(model);
m_time = new Time(model, showSeconds);
}
public DateTime(String name) {
@ -318,11 +66,7 @@ public class DateTime extends Widget implements BebopConstants {
}
public void setYearRange(int startYear, int endYear) {
Assert.isUnlocked(this);
m_year.clearOptions();
for (int j= startYear; j<=endYear; j+=1) {
m_year.addOption(new Option(String.valueOf(j)));
}
m_date.setYearRange(startYear, endYear);
}
/**
@ -346,51 +90,39 @@ public class DateTime extends Widget implements BebopConstants {
/** The XML tag for this derived class of Widget.
*/
@Override
protected String getElementTag() {
return BEBOP_DATETIME;
}
@Override
public void generateWidget(PageState ps, Element parent) {
if ( ! isVisible(ps) ) {
if (!isVisible(ps)) {
return;
}
Element date = parent.newChildElement(getElementTag(), BEBOP_XML_NS);
date.addAttribute("name", getParameterModel().getName());
m_month .generateXML(ps, date);
m_day .generateXML(ps, date);
m_year .generateXML(ps, date);
m_hour .generateXML(ps, date);
m_minute.generateXML(ps, date);
if (m_showSeconds) {
m_second.generateXML(ps, date);
Element datetime = parent.newChildElement(getElementTag(), BEBOP_XML_NS);
datetime.addAttribute("name", getParameterModel().getName());
m_date.generateLocalizedWidget(ps, datetime);
m_time.generateLocalizedWidget(ps, datetime);
// If Element could be null insert a extra widget to clear entry
if (!hasValidationListener(new NotNullValidationListener())) {
datetime.newChildElement("NoDateTime");
}
m_amOrPm.generateXML(ps, date);
}
@Override
public void setDisabled() {
m_month.setDisabled();
m_day.setDisabled();
m_year.setDisabled();
m_hour.setDisabled();
m_minute.setDisabled();
if (m_showSeconds) {
m_second.setDisabled();
}
m_amOrPm.setDisabled();
m_date.setDisabled();
m_time.setDisabled();
}
@Override
public void setReadOnly() {
m_month.setReadOnly();
m_day.setReadOnly();
m_year.setReadOnly();
m_hour.setReadOnly();
m_minute.setReadOnly();
if (m_showSeconds) {
m_second.setReadOnly();
}
m_amOrPm.setReadOnly();
m_date.setReadOnly();
m_time.setReadOnly();
}
/**
@ -402,30 +134,10 @@ public class DateTime extends Widget implements BebopConstants {
* @param the <code>Form</code> Object for this Widget.
* @exception IllegalStateException if form already set.
*/
@Override
public void setForm(Form f) {
super .setForm(f);
m_year .setForm(f);
m_month.setForm(f);
m_day .setForm(f);
m_hour.setForm(f);
m_minute.setForm(f);
if (m_showSeconds) {
m_second.setForm(f);
}
m_amOrPm.setForm(f);
}
private Object getFragmentValue(PageState ps, int field) {
Assert.exists(ps, "PageState");
FormData f = getForm().getFormData(ps);
if (f != null) {
java.util.Date value = (java.util.Date)f.get(getName());
if (value != null) {
Calendar c = Calendar.getInstance();
c.setTime(value);
return new Integer(c.get(field));
}
}
return null;
super.setForm(f);
m_date.setForm(f);
m_time.setForm(f);
}
}

View File

@ -21,6 +21,7 @@ package com.arsdigita.bebop.form;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.parameters.NotNullValidationListener;
import com.arsdigita.bebop.parameters.TimeParameter;
import com.arsdigita.bebop.parameters.NumberInRangeValidationListener;
import com.arsdigita.bebop.parameters.ParameterData;
@ -32,16 +33,15 @@ import com.arsdigita.xml.Element;
import java.text.DateFormatSymbols;
import java.util.Calendar;
/**
* A class representing a time field in an HTML form.
*
* @see com.arsdigita.bebop.form.DateTime
* @author Dave Turner
* @version $Id: Time.java 287 2005-02-22 00:29:02Z sskracic $
* @author Sören Bernstein
* @version $Id: Time.java 288 2010-02-20 07:29:00Z sbernstein $
*/
public class Time extends Widget implements BebopConstants
{
public class Time extends Widget implements BebopConstants {
private TextField m_hour;
private TextField m_minute;
@ -50,7 +50,6 @@ public class Time extends Widget implements BebopConstants
private boolean m_showSeconds;
private static final String ZERO = "0";
private class HourFragment extends TextField {
private Time parent;
@ -58,8 +57,10 @@ public class Time extends Widget implements BebopConstants
public HourFragment(String name, Time parent) {
super(name);
this.parent = parent;
this.addValidationListener(new NumberInRangeValidationListener(1,12)); }
this.addValidationListener(new NumberInRangeValidationListener(1, 12));
}
@Override
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
@ -68,8 +69,11 @@ public class Time extends Widget implements BebopConstants
return new ParameterData(getParameterModel(), value);
}
@Override
public Object getValue(PageState ps) {
return parent.getFragmentValue(ps, Calendar.HOUR);
// Depending on locale we need to differ between 12 hour and 24 hout format
// return parent.getFragmentValue(ps, Calendar.HOUR);
return parent.getFragmentValue(ps, Calendar.HOUR_OF_DAY);
}
}
@ -80,8 +84,10 @@ public class Time extends Widget implements BebopConstants
public MinuteFragment(String name, Time parent) {
super(name);
this.parent = parent;
this.addValidationListener(new NumberInRangeValidationListener(0,59)); }
this.addValidationListener(new NumberInRangeValidationListener(0, 59));
}
@Override
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
@ -90,12 +96,13 @@ public class Time extends Widget implements BebopConstants
return new ParameterData(getParameterModel(), value);
}
@Override
public Object getValue(PageState ps) {
Integer min = (Integer) parent.getFragmentValue(ps, Calendar.MINUTE);
if (min == null) {
return null;
}
if ( min.intValue() < 10 ) {
if (min.intValue() < 10) {
return ZERO + min.toString();
} else {
return min.toString();
@ -110,8 +117,10 @@ public class Time extends Widget implements BebopConstants
public SecondFragment(String name, Time parent) {
super(name);
this.parent = parent;
this.addValidationListener(new NumberInRangeValidationListener(0,59)); }
this.addValidationListener(new NumberInRangeValidationListener(0, 59));
}
@Override
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
@ -120,12 +129,13 @@ public class Time extends Widget implements BebopConstants
return new ParameterData(getParameterModel(), value);
}
@Override
public Object getValue(PageState ps) {
Integer sec = (Integer) parent.getFragmentValue(ps, Calendar.SECOND);
if (sec == null) {
return null;
}
if ( sec.intValue() < 10 ) {
if (sec.intValue() < 10) {
return ZERO + sec.toString();
} else {
return sec.toString();
@ -142,6 +152,7 @@ public class Time extends Widget implements BebopConstants
this.parent = parent;
}
@Override
protected ParameterData getParameterData(PageState ps) {
Object value = getValue(ps);
if (value == null) {
@ -150,26 +161,25 @@ public class Time extends Widget implements BebopConstants
return new ParameterData(getParameterModel(), value);
}
@Override
public Object getValue(PageState ps) {
return parent.getFragmentValue(ps, Calendar.AM_PM);
}
}
/** Constructor. */
public Time ( ParameterModel model ) {
public Time(ParameterModel model) {
this(model, false);
}
/** Constructor. */
public Time ( ParameterModel model, boolean showSeconds ) {
public Time(ParameterModel model, boolean showSeconds) {
super(model);
if ( ! (model instanceof TimeParameter)) {
throw new IllegalArgumentException (
"The Time widget " + model.getName() +
" must be backed by a TimeParameter parameter model");
if (!(model instanceof TimeParameter)) {
throw new IllegalArgumentException(
"The Time widget " + model.getName() +
" must be backed by a TimeParameter parameter model");
}
@ -184,7 +194,7 @@ public class Time extends Widget implements BebopConstants
m_hour = new HourFragment(nameHour, this);
m_minute = new MinuteFragment(nameMinute, this);
m_showSeconds = showSeconds;
if ( m_showSeconds ) {
if (m_showSeconds) {
m_second = new SecondFragment(nameSecond, this);
} else {
m_second = null;
@ -200,20 +210,19 @@ public class Time extends Widget implements BebopConstants
m_second.setSize(2);
}
String [] amPmStrings = dfs.getAmPmStrings();
for ( int i = 0 ; i < amPmStrings.length ; i++ ) {
String[] amPmStrings = dfs.getAmPmStrings();
for (int i = 0; i < amPmStrings.length; i++) {
m_amOrPm.addOption(new Option(String.valueOf(i), amPmStrings[i]));
}
}
public Time ( String name ) {
public Time(String name) {
this(new TimeParameter(name));
}
/** Returns a string naming the type of this widget. */
public String getType () {
public String getType() {
return "time";
}
@ -221,54 +230,66 @@ public class Time extends Widget implements BebopConstants
* Sets the <tt>MAXLENGTH</tt> attributes for the <tt>INPUT</tt> tag
* used to render this form element.
*/
public void setMaxLength ( int length ) {
public void setMaxLength(int length) {
setAttribute("MAXLENGTH", String.valueOf(length));
}
public boolean isCompound () {
public boolean isCompound() {
return true;
}
/** The XML tag for this derived class of Widget. */
protected String getElementTag () {
return "bebop:time";
@Override
protected String getElementTag() {
return "BEBOP_TIME";
}
public void generateWidget ( PageState ps, Element parent ) {
@Override
public void generateWidget(PageState ps, Element parent) {
if ( ! isVisible(ps) ) {
if (!isVisible(ps)) {
return;
}
Element time = parent.newChildElement(getElementTag(), BEBOP_XML_NS);
time.addAttribute("name", getParameterModel().getName());
m_hour .generateXML(ps, time);
generateLocalizedWidget(ps, time);
// If Element could be null insert a extra widget to clear entry
if (!hasValidationListener(new NotNullValidationListener())) {
time.newChildElement("NoTime");
}
}
public void generateLocalizedWidget(PageState ps, Element time) {
m_hour.generateXML(ps, time);
m_minute.generateXML(ps, time);
if ( m_showSeconds ) {
if (m_showSeconds) {
m_second.generateXML(ps, time);
}
m_amOrPm.generateXML(ps, time);
}
public void setDisabled () {
@Override
public void setDisabled() {
m_hour.setDisabled();
m_minute.setDisabled();
if ( m_showSeconds ) {
if (m_showSeconds) {
m_second.setDisabled();
}
m_amOrPm.setDisabled();
}
public void setReadOnly () {
@Override
public void setReadOnly() {
m_hour.setReadOnly();
m_minute.setReadOnly();
if ( m_showSeconds ) {
if (m_showSeconds) {
m_second.setReadOnly();
}
m_amOrPm.setReadOnly();
}
/**
* Sets the Form Object for this Widget. This method will throw an
* exception if the _form pointer is already set. To explicity
@ -278,8 +299,9 @@ public class Time extends Widget implements BebopConstants
* @param the <code>Form</code> Object for this Widget.
* @exception IllegalStateException if form already set.
*/
@Override
public void setForm(Form f) {
super .setForm(f);
super.setForm(f);
m_hour.setForm(f);
m_minute.setForm(f);
if (m_showSeconds) {
@ -292,19 +314,17 @@ public class Time extends Widget implements BebopConstants
Assert.exists(ps, "PageState");
FormData f = getForm().getFormData(ps);
if (f != null) {
java.util.Date value = (java.util.Date)f.get(getName());
java.util.Date value = (java.util.Date) f.get(getName());
if (value != null) {
Calendar c = Calendar.getInstance();
c.setTime(value);
int intVal = c.get(field);
if (field == Calendar.HOUR && intVal == 0) {
intVal = 12;
}
int intVal = c.get(field);
if (field == Calendar.HOUR && intVal == 0) {
intVal = 12;
}
return new Integer(intVal);
}
}
return null;
}
}