/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.utils.delegate_models;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.main.ClipsException;
import cli_fmw.main.ContentStateListener;
import java.util.Date;
import org.infotechservice.ICalendar.BadDateException;
import org.infotechservice.ICalendar.DateEditorModelAbstract;
import org.infotechservice.ICalendar.components.ICDateChooser;
/**
*
* @param <T>
* @author petr
*/
abstract public class DelegateDateModel<T extends DelegateLine2> extends DateEditorModelAbstract implements ContentStateListener {
private T delegate;
private Date lastDate = null;
private Date currentDate = null;
private boolean silent = false;
public DelegateDateModel(T delegate, ICDateChooser chooser) {
this.delegate = delegate;
//Надеюсь это работает
delegate.addContentStateListener(this);
chooser.getDateEditor().setModel(this);
}
protected T getDelegate(){
return delegate;
}
@Override
public final Date getDate() {
try {
return getDateImp();
} catch (ClipsException ex) {
ex.printStackTrace();
return null;
}
}
@Override
public final void setDate(Date date) throws BadDateException {
boolean e = true;
silent = true;
try {
lastDate = currentDate;
setDateImp(date);
currentDate = date;
e = false;
} catch (ClipsException ex) {
throw new BadDateException(ex.getMessage());
}finally{
silent = false;
if (e){
currentDate = null;
}
fireDateChanged(lastDate, currentDate);
}
}
abstract protected Date getDateImp() throws ClipsException;
abstract protected void setDateImp(Date date) throws ClipsException;
@Override
public void contentStateChanged() {
if (!silent){
if (lastDate == null && getDate() != null
|| lastDate != null && getDate() == null
|| lastDate != null && getDate() != null && lastDate.getTime() != getDate().getTime()){
fireDateChanged(lastDate, getDate());
}
}
}
}