/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.guvnor.client.modeldriven.ui;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.drools.guvnor.client.common.DirtyableComposite;
import org.drools.guvnor.client.common.ValueChanged;
import org.drools.guvnor.client.explorer.Preferences;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
/**
*
* @author Toni Rikkola
*
*/
abstract class DatePicker extends DirtyableComposite {
protected DatePickerPopUp datePickerPopUp;
protected Panel panel = new HorizontalPanel();
protected TextBox textWidget = new TextBox();
// Format that the text box uses.
protected String visualFormat = "";
// Format that the system uses.
protected final static String defaultFormat = Preferences.getStringPref( "drools.dateformat" );
protected DateTimeFormat visualFormatFormatter = null;
protected List<ValueChanged> valueChangeds = new ArrayList<ValueChanged>();
protected void solveVisualFormat(String visualFormat) {
if ( visualFormat == null || visualFormat.equals( "default" ) || visualFormat.equals( "" ) ) {
visualFormat = defaultFormat;
}
this.visualFormat = visualFormat;
}
public String getVisualFormat() {
return this.visualFormat;
}
public String getDateString() {
String t = textWidget.getText();
Date date = this.visualFormatFormatter.parse( t );
DateTimeFormat formatter = DateTimeFormat.getFormat( defaultFormat );
return formatter.format( date );
}
/**
* Set the date from the dropdowns
* @return
*/
protected Date fillDate() {
Date date = visualFormatFormatter.parse( textWidget.getText() );
// years
date.setYear( Integer.parseInt( datePickerPopUp.years.getItemText( datePickerPopUp.years.getSelectedIndex() ) ) - 1900 );
// months
date.setMonth( datePickerPopUp.months.getSelectedIndex() );
// days
date.setDate( datePickerPopUp.dates.getSelectedIndex() + 1 );
if ( datePickerPopUp.showTime ) {
// hours
date.setHours( datePickerPopUp.hours.getSelectedIndex() );
// minutes
date.setMinutes( datePickerPopUp.minutes.getSelectedIndex() );
}
return date;
}
public Date getDate() throws IllegalArgumentException {
if ( textWidget.getText() == null || "".equals( textWidget.getText() ) ) {
return null;
} else {
return this.visualFormatFormatter.parse( textWidget.getText().trim() );
}
}
protected void valueChanged() {
for ( ValueChanged changed : valueChangeds ) {
changed.valueChanged( getDateString() );
}
}
public void addValueChanged(ValueChanged listener) {
valueChangeds.add( listener );
}
public void removeValueChanged(ValueChanged listener) {
valueChangeds.remove( listener );
}
}