class TimeFrameEditor implements FunctionParameterEditor {

    public void init(TimeFrame tf, Command onChangeCommand) {
        this.onChangeCommand = onChangeCommand;
        this.timeFrame = tf != null ? tf : TimeFrame.parse("begin[year] till end[year]");

        this.fromEditor = beanManager.lookupBean(TimeInstantEditor.class).newInstance();
        this.fromEditor.init(timeFrame.getFrom(), new Command() {
            public void execute() {
                fromEditor.getTimeInstant().setFirstMonthOfYear(getFirstMonthOfYear());
                timeFrame.setFrom(fromEditor.getTimeInstant());
                changeFirstMonthAvailability();
                fireChanges();
            }
        });
        this.toEditor = beanManager.lookupBean(TimeInstantEditor.class).newInstance();
        this.toEditor.init(timeFrame.getTo(), new Command() {
            public void execute() {
                toEditor.getTimeInstant().setFirstMonthOfYear(getFirstMonthOfYear());
                timeFrame.setTo(toEditor.getTimeInstant());
                changeFirstMonthAvailability();
                fireChanges();
            }
        });

        view.init(this);
        initFirstMonthSelector();
        changeFirstMonthAvailability();
    }

    @Inject public  TimeFrameEditor(View view, SyncBeanManager beanManager);

}