]> source.dussan.org Git - vaadin-framework.git/blob
eff62219adde776a2adc0ed4c38575c6f380c572
[vaadin-framework.git] /
1 /*
2  * Copyright 2000-2021 Vaadin Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 package com.vaadin.v7.client.ui.datefield;
17
18 import java.util.Date;
19 import java.util.logging.Level;
20 import java.util.logging.Logger;
21
22 import com.vaadin.client.ApplicationConnection;
23 import com.vaadin.client.LocaleNotLoadedException;
24 import com.vaadin.client.Paintable;
25 import com.vaadin.client.UIDL;
26 import com.vaadin.v7.client.ui.AbstractFieldConnector;
27 import com.vaadin.v7.client.ui.VDateField;
28 import com.vaadin.v7.shared.ui.datefield.DateFieldConstants;
29 import com.vaadin.v7.shared.ui.datefield.Resolution;
30
31 public class AbstractDateFieldConnector extends AbstractFieldConnector
32         implements Paintable {
33
34     @Override
35     public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
36         if (!isRealUpdate(uidl)) {
37             return;
38         }
39
40         // Save details
41         getWidget().client = client;
42         getWidget().paintableId = uidl.getId();
43         getWidget().immediate = getState().immediate;
44
45         getWidget().setReadonly(isReadOnly());
46         getWidget().setEnabled(isEnabled());
47
48         if (uidl.hasAttribute("locale")) {
49             final String locale = uidl.getStringAttribute("locale");
50             try {
51                 getWidget().dts.setLocale(locale);
52                 getWidget().setCurrentLocale(locale);
53             } catch (final LocaleNotLoadedException e) {
54                 getWidget().setCurrentLocale(getWidget().dts.getLocale());
55                 getLogger().severe("Tried to use an unloaded locale \"" + locale
56                         + "\". Using default locale ("
57                         + getWidget().getCurrentLocale() + ").");
58                 getLogger().log(Level.SEVERE,
59                         e.getMessage() == null ? "" : e.getMessage(), e);
60             }
61         }
62
63         // We show week numbers only if the week starts with Monday, as ISO 8601
64         // specifies
65         getWidget().setShowISOWeekNumbers(
66                 uidl.getBooleanAttribute(DateFieldConstants.ATTR_WEEK_NUMBERS)
67                         && getWidget().dts.getFirstDayOfWeek() == 1);
68
69         Resolution newResolution;
70         if (uidl.hasVariable("sec")) {
71             newResolution = Resolution.SECOND;
72         } else if (uidl.hasVariable("min")) {
73             newResolution = Resolution.MINUTE;
74         } else if (uidl.hasVariable("hour")) {
75             newResolution = Resolution.HOUR;
76         } else if (uidl.hasVariable("day")) {
77             newResolution = Resolution.DAY;
78         } else if (uidl.hasVariable("month")) {
79             newResolution = Resolution.MONTH;
80         } else {
81             newResolution = Resolution.YEAR;
82         }
83
84         // Remove old stylename that indicates current resolution
85         setWidgetStyleName(
86                 getWidget().getStylePrimaryName() + "-" + VDateField
87                         .resolutionToString(getWidget().getCurrentResolution()),
88                 false);
89
90         getWidget().setCurrentResolution(newResolution);
91
92         // Add stylename that indicates current resolution
93         setWidgetStyleName(
94                 getWidget().getStylePrimaryName() + "-" + VDateField
95                         .resolutionToString(getWidget().getCurrentResolution()),
96                 true);
97
98         final Resolution resolution = getWidget().getCurrentResolution();
99         final int year = uidl.getIntVariable("year");
100         final int month = (resolution.getCalendarField() >= Resolution.MONTH
101                 .getCalendarField()) ? uidl.getIntVariable("month") : -1;
102         final int day = (resolution.getCalendarField() >= Resolution.DAY
103                 .getCalendarField()) ? uidl.getIntVariable("day") : -1;
104         final int hour = (resolution.getCalendarField() >= Resolution.HOUR
105                 .getCalendarField()) ? uidl.getIntVariable("hour") : 0;
106         final int min = (resolution.getCalendarField() >= Resolution.MINUTE
107                 .getCalendarField()) ? uidl.getIntVariable("min") : 0;
108         final int sec = (resolution.getCalendarField() >= Resolution.SECOND
109                 .getCalendarField()) ? uidl.getIntVariable("sec") : 0;
110
111         // Construct new date for this datefield (only if not null)
112         if (year > -1) {
113             getWidget().setCurrentDate(new Date((long) VDateField.getTime(year,
114                     month, day, hour, min, sec, 0)));
115         } else {
116             getWidget().setCurrentDate(null);
117         }
118     }
119
120     @Override
121     public VDateField getWidget() {
122         return (VDateField) super.getWidget();
123     }
124
125     private static Logger getLogger() {
126         return Logger.getLogger(AbstractDateFieldConnector.class.getName());
127     }
128 }