summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <teemusa@vaadin.com>2015-03-24 10:08:58 +0200
committerVaadin Code Review <review@vaadin.com>2015-03-26 13:33:23 +0000
commitbacb87d5e42d6b52bf59f2f6781cca9b3cdc903a (patch)
treee5c5564dcabd5b10aa3052d97bf8a3dfdfafd365
parentb826bb17ee3349bbaa4ac67526315427a716a62d (diff)
downloadvaadin-framework-bacb87d5e42d6b52bf59f2f6781cca9b3cdc903a.tar.gz
vaadin-framework-bacb87d5e42d6b52bf59f2f6781cca9b3cdc903a.zip
Fix Calendar declarative support (#16595)
Change-Id: Ib9a33d6d0fe48e63e5043a84a47375f123eccb58
-rw-r--r--server/src/com/vaadin/ui/Calendar.java71
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/calendar/CalendarDeclarativeTest.java61
2 files changed, 130 insertions, 2 deletions
diff --git a/server/src/com/vaadin/ui/Calendar.java b/server/src/com/vaadin/ui/Calendar.java
index 48c024026e..acddbe308b 100644
--- a/server/src/com/vaadin/ui/Calendar.java
+++ b/server/src/com/vaadin/ui/Calendar.java
@@ -22,6 +22,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Date;
import java.util.EventListener;
import java.util.GregorianCalendar;
@@ -37,6 +38,9 @@ import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.jsoup.nodes.Attributes;
+import org.jsoup.nodes.Element;
+
import com.vaadin.data.Container;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.event.Action;
@@ -84,6 +88,8 @@ import com.vaadin.ui.components.calendar.handler.BasicEventMoveHandler;
import com.vaadin.ui.components.calendar.handler.BasicEventResizeHandler;
import com.vaadin.ui.components.calendar.handler.BasicForwardHandler;
import com.vaadin.ui.components.calendar.handler.BasicWeekClickHandler;
+import com.vaadin.ui.declarative.DesignAttributeHandler;
+import com.vaadin.ui.declarative.DesignContext;
/**
* <p>
@@ -334,6 +340,10 @@ public class Calendar extends AbstractComponent implements
*/
public Date getStartDate() {
if (startDate == null) {
+ currentCalendar.set(java.util.Calendar.MILLISECOND, 0);
+ currentCalendar.set(java.util.Calendar.SECOND, 0);
+ currentCalendar.set(java.util.Calendar.MINUTE, 0);
+ currentCalendar.set(java.util.Calendar.HOUR_OF_DAY, 0);
currentCalendar.set(java.util.Calendar.DAY_OF_WEEK,
currentCalendar.getFirstDayOfWeek());
return currentCalendar.getTime();
@@ -363,6 +373,10 @@ public class Calendar extends AbstractComponent implements
*/
public Date getEndDate() {
if (endDate == null) {
+ currentCalendar.set(java.util.Calendar.MILLISECOND, 0);
+ currentCalendar.set(java.util.Calendar.SECOND, 59);
+ currentCalendar.set(java.util.Calendar.MINUTE, 59);
+ currentCalendar.set(java.util.Calendar.HOUR_OF_DAY, 23);
currentCalendar.set(java.util.Calendar.DAY_OF_WEEK,
currentCalendar.getFirstDayOfWeek() + 6);
return currentCalendar.getTime();
@@ -655,8 +669,14 @@ public class Calendar extends AbstractComponent implements
*/
public TimeFormat getTimeFormat() {
if (currentTimeFormat == null) {
- SimpleDateFormat f = (SimpleDateFormat) SimpleDateFormat
- .getTimeInstance(SimpleDateFormat.SHORT, getLocale());
+ SimpleDateFormat f;
+ if (getLocale() == null) {
+ f = (SimpleDateFormat) SimpleDateFormat
+ .getTimeInstance(SimpleDateFormat.SHORT);
+ } else {
+ f = (SimpleDateFormat) SimpleDateFormat.getTimeInstance(
+ SimpleDateFormat.SHORT, getLocale());
+ }
String p = f.toPattern();
if (p.indexOf("HH") != -1 || p.indexOf("H") != -1) {
return TimeFormat.Format24H;
@@ -1925,4 +1945,51 @@ public class Calendar extends AbstractComponent implements
return getState(false).eventCaptionAsHtml;
}
+ @Override
+ public void readDesign(Element design, DesignContext designContext) {
+ super.readDesign(design, designContext);
+
+ Attributes attr = design.attributes();
+ if (design.hasAttr("time-format")) {
+ setTimeFormat(TimeFormat.valueOf("Format"
+ + design.attr("time-format").toUpperCase()));
+ }
+
+ if (design.hasAttr("start-date")) {
+ setStartDate(DesignAttributeHandler.readAttribute("start-date",
+ attr, Date.class));
+ }
+ if (design.hasAttr("end-date")) {
+ setEndDate(DesignAttributeHandler.readAttribute("end-date", attr,
+ Date.class));
+ }
+ };
+
+ @Override
+ public void writeDesign(Element design, DesignContext designContext) {
+ super.writeDesign(design, designContext);
+
+ if (currentTimeFormat != null) {
+ design.attr("time-format",
+ (currentTimeFormat == TimeFormat.Format12H ? "12h" : "24h"));
+ }
+ if (startDate != null) {
+ design.attr("start-date", df_date.format(getStartDate()));
+ }
+ if (endDate != null) {
+ design.attr("end-date", df_date.format(getEndDate()));
+ }
+ if (!getTimeZone().equals(TimeZone.getDefault())) {
+ design.attr("time-zone", getTimeZone().getID());
+ }
+ }
+
+ @Override
+ protected Collection<String> getCustomAttributes() {
+ Collection<String> customAttributes = super.getCustomAttributes();
+ customAttributes.add("time-format");
+ customAttributes.add("start-date");
+ customAttributes.add("end-date");
+ return customAttributes;
+ }
}
diff --git a/server/tests/src/com/vaadin/tests/server/component/calendar/CalendarDeclarativeTest.java b/server/tests/src/com/vaadin/tests/server/component/calendar/CalendarDeclarativeTest.java
new file mode 100644
index 0000000000..d866878fc7
--- /dev/null
+++ b/server/tests/src/com/vaadin/tests/server/component/calendar/CalendarDeclarativeTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2000-2014 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.tests.server.component.calendar;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.TimeZone;
+
+import org.junit.Test;
+
+import com.vaadin.tests.design.DeclarativeTestBase;
+import com.vaadin.ui.Calendar;
+import com.vaadin.ui.Calendar.TimeFormat;
+
+public class CalendarDeclarativeTest extends DeclarativeTestBase<Calendar> {
+
+ @Test
+ public void testEmpty() {
+ verifyDeclarativeDesign("<v-calendar></v-calendar>", new Calendar());
+ }
+
+ @Test
+ public void testCalendarAllFeatures() throws ParseException {
+ String design = "<v-calendar start-date='2014-11-17' end-date='2014-11-23' "
+ + "first-visible-day-of-week=2 last-visible-day-of-week=5 "
+ + "time-zone='EST' time-format='12h' first-visible-hour-of-day=8 "
+ + "last-visible-hour-of-day=18 weekly-caption-format='mmm MM/dd' />";
+
+ DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ Calendar calendar = new Calendar();
+ calendar.setStartDate(format.parse("2014-11-17"));
+ calendar.setEndDate(format.parse("2014-11-23"));
+ calendar.setFirstVisibleDayOfWeek(2);
+ calendar.setLastVisibleDayOfWeek(5);
+ calendar.setTimeZone(TimeZone.getTimeZone("EST"));
+ calendar.setTimeFormat(TimeFormat.Format12H);
+ calendar.setFirstVisibleHourOfDay(8);
+ calendar.setLastVisibleHourOfDay(18);
+ calendar.setWeeklyCaptionFormat("mmm MM/dd");
+ verifyDeclarativeDesign(design, calendar);
+ }
+
+ protected void verifyDeclarativeDesign(String design, Calendar expected) {
+ testRead(design, expected);
+ testWrite(design, expected);
+ }
+}