Update to python27, HRD in App Engine. Fix compile of GWT project and remove use of deprecated time picker. Add pom target to build GWT app via Ant.

git-svn-id: https://zxing.googlecode.com/svn/trunk@2918 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen@gmail.com 2013-11-24 18:26:56 +00:00
parent aa19cb25af
commit 1a77226030
7 changed files with 71 additions and 31 deletions

View file

@ -60,7 +60,7 @@ limitations under the License.
<jvmarg value="-Xmx256M"/>
<arg value="-strict"/>
<arg line="-war"/>
<arg value="war"/>
<arg value="src/war"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg line="${gwt.args}"/>
<arg value="com.google.zxing.web.generator.Generator"/>
@ -79,7 +79,7 @@ limitations under the License.
<arg value="-startupUrl"/>
<arg value="Generator.html"/>
<arg line="-war"/>
<arg value="war"/>
<arg value="src/war"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg line="${gwt.args}"/>
<arg value="com.google.zxing.web.generator.Generator"/>
@ -89,7 +89,7 @@ limitations under the License.
<target name="build" depends="gwtc" description="Build this project" />
<target name="war" depends="build" description="Create a war file">
<zip destfile="Generator.war" basedir="war"/>
<zip destfile="Generator.war" basedir="src/war"/>
</target>
<target name="clean" description="Cleans this project">

View file

@ -26,11 +26,7 @@
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-incubator</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
@ -42,6 +38,29 @@
<!-- TODO use Maven GWT plugin to actually build this -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<configuration>
<target>
<property name="build.compiler" value="extJavac"/>
<ant target="build"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<name>ZXing Appspot-based encoder</name>
<description>GWT-based encoder app hosted at zxing.appspot.com</description>

View file

@ -12,7 +12,6 @@
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
<!-- Other module inherits -->
<inherits name='com.google.gwt.gen2.picker.Picker'/>
<!-- Specify the app entry point class. -->
<entry-point class='com.google.zxing.web.generator.client.Generator'/>

View file

@ -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<Date>() {
timePicker1.addValueChangeHandler(new ValueChangeHandler<String>() {
@Override
public void onValueChange(ValueChangeEvent<Date> dateValueChangeEvent) {
public void onValueChange(ValueChangeEvent<String> 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<Date>() {
timePicker2.addValueChangeHandler(new ValueChangeHandler<String>() {
@Override
public void onValueChange(ValueChangeEvent<Date> dateValueChangeEvent) {
public void onValueChange(ValueChangeEvent<String> 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);

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>zxing</application>
<version>7</version>
<version>8</version>
</appengine-web-app>

View file

@ -1,7 +1,8 @@
application: zxing
application: zxing-hrd
version: 8
runtime: python
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /generator