diff --git a/zxing.appspot.com/build.xml b/zxing.appspot.com/build.xml
index 9d3765381..6d17750cf 100644
--- a/zxing.appspot.com/build.xml
+++ b/zxing.appspot.com/build.xml
@@ -60,7 +60,7 @@ limitations under the License.
-
+
@@ -79,7 +79,7 @@ limitations under the License.
-
+
@@ -89,7 +89,7 @@ limitations under the License.
-
+
diff --git a/zxing.appspot.com/pom.xml b/zxing.appspot.com/pom.xml
index aa443716b..d5ca4322f 100644
--- a/zxing.appspot.com/pom.xml
+++ b/zxing.appspot.com/pom.xml
@@ -26,11 +26,7 @@
com.google.gwt
gwt-user
2.5.1
-
-
- com.google.gwt
- gwt-incubator
- 2.0.1
+ provided
@@ -42,6 +38,29 @@
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+
+
+ compile
+
+
+
+
+
+
+
+ run
+
+
+
+
+
+
+
ZXing Appspot-based encoder
GWT-based encoder app hosted at zxing.appspot.com
diff --git a/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/Generator.gwt.xml b/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/Generator.gwt.xml
index 1f4f19df7..e8d55717d 100644
--- a/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/Generator.gwt.xml
+++ b/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/Generator.gwt.xml
@@ -12,7 +12,6 @@
-
diff --git a/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/client/CalendarEventGenerator.java b/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/client/CalendarEventGenerator.java
index 1ea5253ff..3d6be41a4 100644
--- a/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/client/CalendarEventGenerator.java
+++ b/zxing.appspot.com/src/main/java/com/google/zxing/web/generator/client/CalendarEventGenerator.java
@@ -23,12 +23,12 @@ import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
-import com.google.gwt.gen2.picker.client.TimePicker;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Grid;
+import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
@@ -52,12 +52,8 @@ public final class CalendarEventGenerator implements GeneratorSource {
private final CheckBox fullDay = new CheckBox();
private final DatePicker datePicker1 = new DatePicker();
private final DatePicker datePicker2 = new DatePicker();
- private final TimePicker timePicker1 = new TimePicker(new Date(), DateTimeFormat
- .getFormat("a"), DateTimeFormat.getFormat("hh"), DateTimeFormat
- .getFormat("mm"), null);
- private final TimePicker timePicker2 = new TimePicker(new Date(), DateTimeFormat
- .getFormat("a"), DateTimeFormat.getFormat("hh"), DateTimeFormat
- .getFormat("mm"), null);
+ private final TextBox timePicker1 = new TextBox();
+ private final TextBox timePicker2 = new TextBox();
private final CheckBox summerTime = new CheckBox();
private final ListBox timeZones = new ListBox();
private Date timePicker1PreviousDate = null;
@@ -68,25 +64,36 @@ public final class CalendarEventGenerator implements GeneratorSource {
eventName.addStyleName(StylesDefs.INPUT_FIELD_REQUIRED);
eventName.addChangeHandler(handler);
eventName.addKeyPressHandler(keyListener);
- timePicker2.setDateTime(addMilliseconds(timePicker1.getDateTime(), ONE_HOUR));
- timePicker1PreviousDate = timePicker1.getDateTime();
+ setDateToTextBox(timePicker1, new Date());
+ try {
+ setDateToTextBox(timePicker2, addMilliseconds(getDateFromTextBox(timePicker1), ONE_HOUR));
+ timePicker1PreviousDate = getDateFromTextBox(timePicker1);
+ } catch (GeneratorException ge) {
+ throw new IllegalStateException(ge);
+ }
buildTimeZoneList();
timeZones.setSelectedIndex(25);
timeZones.addKeyPressHandler(keyListener);
- timePicker1.addValueChangeHandler(new ValueChangeHandler() {
+ timePicker1.addValueChangeHandler(new ValueChangeHandler() {
@Override
- public void onValueChange(ValueChangeEvent dateValueChangeEvent) {
+ public void onValueChange(ValueChangeEvent valueChangeEvent) {
Date time = timePicker1PreviousDate;
- Date time1 = timePicker1.getDateTime();
- Date time2 = timePicker2.getDateTime();
+ Date time1;
+ Date time2;
+ try {
+ time1 = getDateFromTextBox(timePicker1);
+ time2 = getDateFromTextBox(timePicker2);
+ } catch (GeneratorException e) {
+ return;
+ }
if (time2.after(time)) {
// keep the same time difference if the interval is valid.
long diff = time2.getTime() - time.getTime();
- timePicker2.setDateTime(addMilliseconds(time1, diff));
+ setDateToTextBox(timePicker2, addMilliseconds(time1, diff));
} else {
// otherwise erase the end date and set it to startdate + one hour.
- timePicker2.setDateTime(addMilliseconds(time, ONE_HOUR));
+ setDateToTextBox(timePicker2, addMilliseconds(time1, ONE_HOUR));
}
// no need to call onChange for timePicker1, since it will be called
// for timePicker2 when changes are made.
@@ -94,9 +101,9 @@ public final class CalendarEventGenerator implements GeneratorSource {
timePicker1PreviousDate = time1;
}
});
- timePicker2.addValueChangeHandler(new ValueChangeHandler() {
+ timePicker2.addValueChangeHandler(new ValueChangeHandler() {
@Override
- public void onValueChange(ValueChangeEvent dateValueChangeEvent) {
+ public void onValueChange(ValueChangeEvent valueChangeEvent) {
// Hack to stitch together these old and new APIs
ChangeEvent event = new ChangeEvent() {
@Override
@@ -263,8 +270,8 @@ public final class CalendarEventGenerator implements GeneratorSource {
private String getDateTimeValues() throws GeneratorException {
Date date1 = datePicker1.getValue();
Date date2 = datePicker2.getValue();
- Date time1 = timePicker1.getDateTime();
- Date time2 = timePicker2.getDateTime();
+ Date time1 = getDateFromTextBox(timePicker1);
+ Date time2 = getDateFromTextBox(timePicker2);
if (date1 == null || date2 == null || time1 == null || time2 == null) {
throw new GeneratorException("Start and end dates/times must be set.");
}
@@ -313,6 +320,20 @@ public final class CalendarEventGenerator implements GeneratorSource {
return new Date(time1.getTime() + milliseconds);
}
+ private static Date getDateFromTextBox(HasText textBox) throws GeneratorException {
+ DateTimeFormat extractTime = DateTimeFormat.getFormat("HHmm");
+ try {
+ return extractTime.parseStrict(textBox.getText());
+ } catch (IllegalArgumentException iae) {
+ throw new GeneratorException("Invalid time");
+ }
+ }
+
+ private static void setDateToTextBox(HasText textBox, Date date) {
+ DateTimeFormat extractTime = DateTimeFormat.getFormat("HHmm");
+ textBox.setText(extractTime.format(date));
+ }
+
@Override
public void setFocus() {
eventName.setFocus(true);
diff --git a/zxing.appspot.com/src/war/WEB-INF/appengine-web.xml b/zxing.appspot.com/src/war/WEB-INF/appengine-web.xml
index 9603e96b9..96c7b548f 100644
--- a/zxing.appspot.com/src/war/WEB-INF/appengine-web.xml
+++ b/zxing.appspot.com/src/war/WEB-INF/appengine-web.xml
@@ -1,5 +1,5 @@
zxing
- 7
+ 8
\ No newline at end of file
diff --git a/zxing.appspot.com/src/war/WEB-INF/lib/gwt-incubator.jar b/zxing.appspot.com/src/war/WEB-INF/lib/gwt-incubator.jar
deleted file mode 100644
index 414cd905b..000000000
Binary files a/zxing.appspot.com/src/war/WEB-INF/lib/gwt-incubator.jar and /dev/null differ
diff --git a/zxing.appspot.com/src/war/app.yaml b/zxing.appspot.com/src/war/app.yaml
index db2a4d93c..743c3b731 100644
--- a/zxing.appspot.com/src/war/app.yaml
+++ b/zxing.appspot.com/src/war/app.yaml
@@ -1,7 +1,8 @@
-application: zxing
+application: zxing-hrd
version: 8
-runtime: python
+runtime: python27
api_version: 1
+threadsafe: true
handlers:
- url: /generator