/*
* Copyright 2000-2016 Vaadin Ltd.
*
* 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 com.vaadin.client.ui;
import java.util.Date;
import java.util.Map;
import com.google.gwt.core.client.GWT;
import com.vaadin.shared.ui.datefield.DateResolution;
/**
* Represents a date selection component with a text field and a popup date
* selector.
*
* @author Vaadin Ltd
*
*/
public class VPopupCalendar
extends VAbstractPopupCalendar<VDateCalendarPanel, DateResolution> {
public VPopupCalendar() {
super(GWT.create(VDateCalendarPanel.class), DateResolution.YEAR);
}
@Override
protected DateResolution[] doGetResolutions() {
return DateResolution.values();
}
@Override
public String resolutionAsString() {
return getResolutionVariable(getCurrentResolution());
}
@Override
public void setCurrentResolution(DateResolution resolution) {
super.setCurrentResolution(
resolution == null ? DateResolution.YEAR : resolution);
}
public static Date makeDate(Map<DateResolution, Integer> dateValues) {
if (dateValues.get(DateResolution.YEAR) == -1) {
return null;
}
Date date = new Date(2000 - 1900, 0, 1);
int year = dateValues.get(DateResolution.YEAR);
if (year >= 0) {
date.setYear(year - 1900);
}
int month = dateValues.get(DateResolution.MONTH);
if (month >= 0) {
date.setMonth(month - 1);
}
int day = dateValues.get(DateResolution.DAY);
if (day >= 0) {
date.setDate(day);
}
return date;
}
@Override
public boolean isYear(DateResolution resolution) {
return DateResolution.YEAR.equals(resolution);
}
@Override
protected Date getDate(Map<DateResolution, Integer> dateValues) {
return makeDate(dateValues);
}
@Override
protected void updateDateVariables() {
super.updateDateVariables();
// Update variables
// (only the smallest defining resolution needs to be
// immediate)
Date currentDate = getDate();
if (getCurrentResolution().compareTo(DateResolution.MONTH) <= 0) {
getClient().updateVariable(getId(),
getResolutionVariable(DateResolution.MONTH),
currentDate != null ? currentDate.getMonth() + 1 : -1,
getCurrentResolution() == DateResolution.MONTH);
}
if (getCurrentResolution().compareTo(DateResolution.DAY) <= 0) {
getClient().updateVariable(getId(),
getResolutionVariable(DateResolution.DAY),
currentDate != null ? currentDate.getDate() : -1,
getCurrentResolution() == DateResolution.DAY);
}
}
@Override
protected String cleanFormat(String format) {
// Remove unnecessary d & M if resolution is too low
if (getCurrentResolution().compareTo(DateResolution.DAY) > 0) {
format = format.replaceAll("d", "");
}
if (getCurrentResolution().compareTo(DateResolution.MONTH) > 0) {
format = format.replaceAll("M", "");
}
return super.cleanFormat(format);
}
}