/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.swing.goodies.calendar; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Serializable; import org.beanfabrics.IModelProvider; import org.beanfabrics.Link; import org.beanfabrics.ModelSubscriber; import org.beanfabrics.Path; import org.beanfabrics.View; import org.beanfabrics.event.WeakPropertyChangeListener; import org.beanfabrics.model.IDatePM; /** * @author Michael Karneim */ @SuppressWarnings("serial") public class BnCalendarChooser extends CalendarChooser implements View<IDatePM>, ModelSubscriber { private PropertyChangeListener pcl = new MyWeakPropertyChangeListener(); private class MyWeakPropertyChangeListener implements WeakPropertyChangeListener, Serializable { public void propertyChange(PropertyChangeEvent evt) { refresh(); } }; private final Link link = new Link(this); private IDatePM pModel; public BnCalendarChooser() { } /** {@inheritDoc} */ public IDatePM getPresentationModel() { return this.pModel; } /** {@inheritDoc} */ public void setPresentationModel(IDatePM newModel) { IDatePM oldModel = this.pModel; if (this.pModel != null) { this.pModel.removePropertyChangeListener(pcl); } this.pModel = newModel; if (this.pModel != null) { this.pModel.addPropertyChangeListener(pcl); } this.firePropertyChange("presentationModel", oldModel, newModel); } /** {@inheritDoc} */ public IModelProvider getModelProvider() { return link.getModelProvider(); } /** {@inheritDoc} */ public void setModelProvider(IModelProvider provider) { this.link.setModelProvider(provider); } /** {@inheritDoc} */ public Path getPath() { return link.getPath(); } /** {@inheritDoc} */ public void setPath(Path path) { this.link.setPath(path); } protected void refresh() { if (this.pModel == null) { this.setSelectedDate(null); } else { this.setSelectedDate(this.pModel.getDate()); } } }