# HG changeset patch # User Ingo Weinzierl # Date 1297245567 0 # Node ID 0e22a19852e74f649e6fcd96e534dd636449e53a # Parent 4e8be5e7855f336e4ee3fa23b6997a103c9c9e31 Removed useless auto generated classes and added first ui elements with i18n support. flys-client/trunk@1306 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/pom.xml --- a/flys-client/pom.xml Tue Feb 08 10:29:49 2011 +0000 +++ b/flys-client/pom.xml Wed Feb 09 09:59:27 2011 +0000 @@ -38,6 +38,11 @@ test + com.smartgwt + smartgwt + 2.4 + + junit junit 4.4 diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/java/de/intevation/flys/client/FLYS.gwt.xml --- a/flys-client/src/main/java/de/intevation/flys/client/FLYS.gwt.xml Tue Feb 08 10:29:49 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/FLYS.gwt.xml Wed Feb 09 09:59:27 2011 +0000 @@ -3,6 +3,12 @@ + + + + + + @@ -19,4 +25,5 @@ + diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java Tue Feb 08 10:29:49 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java Wed Feb 09 09:59:27 2011 +0000 @@ -1,147 +1,39 @@ package de.intevation.flys.client.client; -import de.intevation.flys.client.shared.FieldVerifier; import com.google.gwt.core.client.EntryPoint; -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.KeyCodes; -import com.google.gwt.event.dom.client.KeyUpEvent; -import com.google.gwt.event.dom.client.KeyUpHandler; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; -import com.google.gwt.user.client.ui.TextBox; -import com.google.gwt.user.client.ui.VerticalPanel; + +import com.smartgwt.client.widgets.layout.VLayout; + +import de.intevation.flys.client.client.ui.FLYSView; +import de.intevation.flys.client.client.ui.MainMenu; + /** * Entry point classes define onModuleLoad(). + * + * @author Ingo Weinzierl */ public class FLYS implements EntryPoint { - /** - * The message displayed to the user when the server cannot be reached or - * returns an error. - */ - private static final String SERVER_ERROR = "An error occurred while " - + "attempting to contact the server. Please check your network " - + "connection and try again."; - - /** - * Create a remote service proxy to talk to the server-side Greeting service. - */ - private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class); - - /** - * This is the entry point method. - */ - public void onModuleLoad() { - final Button sendButton = new Button("Send"); - final TextBox nameField = new TextBox(); - nameField.setText("GWT User"); - final Label errorLabel = new Label(); - - // We can add style names to widgets - sendButton.addStyleName("sendButton"); - - // Add the nameField and sendButton to the RootPanel - // Use RootPanel.get() to get the entire body element - RootPanel.get("nameFieldContainer").add(nameField); - RootPanel.get("sendButtonContainer").add(sendButton); - RootPanel.get("errorLabelContainer").add(errorLabel); - - // Focus the cursor on the name field when the app loads - nameField.setFocus(true); - nameField.selectAll(); - - // Create the popup dialog box - final DialogBox dialogBox = new DialogBox(); - dialogBox.setText("Remote Procedure Call"); - dialogBox.setAnimationEnabled(true); - final Button closeButton = new Button("Close"); - // We can set the id of a widget by accessing its Element - closeButton.getElement().setId("closeButton"); - final Label textToServerLabel = new Label(); - final HTML serverResponseLabel = new HTML(); - VerticalPanel dialogVPanel = new VerticalPanel(); - dialogVPanel.addStyleName("dialogVPanel"); - dialogVPanel.add(new HTML("Sending name to the server:")); - dialogVPanel.add(textToServerLabel); - dialogVPanel.add(new HTML("
Server replies:")); - dialogVPanel.add(serverResponseLabel); - dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT); - dialogVPanel.add(closeButton); - dialogBox.setWidget(dialogVPanel); - // Add a handler to close the DialogBox - closeButton.addClickHandler(new ClickHandler() { - public void onClick(ClickEvent event) { - dialogBox.hide(); - sendButton.setEnabled(true); - sendButton.setFocus(true); - } - }); - - // Create a handler for the sendButton and nameField - class MyHandler implements ClickHandler, KeyUpHandler { - /** - * Fired when the user clicks on the sendButton. - */ - public void onClick(ClickEvent event) { - sendNameToServer(); - } - - /** - * Fired when the user types in the nameField. - */ - public void onKeyUp(KeyUpEvent event) { - if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { - sendNameToServer(); - } - } + /** + * This is the entry point method. + */ + public void onModuleLoad() { - /** - * Send the name from the nameField to the server and wait for a response. - */ - private void sendNameToServer() { - // First, we validate the input. - errorLabel.setText(""); - String textToServer = nameField.getText(); - if (!FieldVerifier.isValidName(textToServer)) { - errorLabel.setText("Please enter at least four characters"); - return; - } - - // Then, we send the input to the server. - sendButton.setEnabled(false); - textToServerLabel.setText(textToServer); - serverResponseLabel.setText(""); - greetingService.greetServer(textToServer, new AsyncCallback() { - public void onFailure(Throwable caught) { - // Show the RPC error message to the user - dialogBox.setText("Remote Procedure Call - Failure"); - serverResponseLabel.addStyleName("serverResponseLabelError"); - serverResponseLabel.setHTML(SERVER_ERROR); - dialogBox.center(); - closeButton.setFocus(true); - } + VLayout vertical = new VLayout(); + vertical.setMembersMargin(5); + vertical.setLayoutMargin(1); + vertical.setWidth100(); + vertical.setHeight100(); - public void onSuccess(String result) { - dialogBox.setText("Remote Procedure Call"); - serverResponseLabel.removeStyleName("serverResponseLabelError"); - serverResponseLabel.setHTML(result); - dialogBox.center(); - closeButton.setFocus(true); - } - }); - } + MainMenu menu = new MainMenu(); + FLYSView view = new FLYSView(); + + vertical.addMember(menu); + vertical.addMember(view); + + RootPanel.get("app").add(vertical); } - - // Add a handler to send the name to the server - MyHandler handler = new MyHandler(); - sendButton.addClickHandler(handler); - nameField.addKeyUpHandler(handler); - } } +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/java/de/intevation/flys/client/client/FLYSMessages.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSMessages.java Wed Feb 09 09:59:27 2011 +0000 @@ -0,0 +1,17 @@ +package de.intevation.flys.client.client; + +import com.google.gwt.i18n.client.Messages; + + +/** + * @author Ingo Weinzierl + */ +public interface FLYSMessages extends Messages { + + @DefaultMessage("FLYS-3.0") + String title(); + + @DefaultMessage("Hello '{0}'") + String greeting(String user); +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/java/de/intevation/flys/client/client/FLYSMessages_de.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSMessages_de.properties Wed Feb 09 09:59:27 2011 +0000 @@ -0,0 +1,2 @@ +title = FLYS-3.0 +greeting = Hallo ''{0}'' diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/java/de/intevation/flys/client/client/FLYSMessages_en.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSMessages_en.properties Wed Feb 09 09:59:27 2011 +0000 @@ -0,0 +1,2 @@ +title = FLYS-3.0 +greeting = Hello ''{0}'' diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/java/de/intevation/flys/client/client/ui/FLYSView.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/FLYSView.java Wed Feb 09 09:59:27 2011 +0000 @@ -0,0 +1,27 @@ +package de.intevation.flys.client.client.ui; + +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.Label; + + +/** + * @author Ingo Weinzierl + */ +public class FLYSView extends Canvas { + + public FLYSView() { + init(); + } + + + protected void init() { + setWidth("100%"); + setHeight("*"); + + setBorder("1px solid #808080"); + setBackgroundColor("#C3D9FF"); + + addChild(new Label("Hello Content!")); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/java/de/intevation/flys/client/client/ui/MainMenu.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/MainMenu.java Wed Feb 09 09:59:27 2011 +0000 @@ -0,0 +1,38 @@ +package de.intevation.flys.client.client.ui; + +import com.google.gwt.core.client.GWT; + +import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.layout.HLayout; + +import de.intevation.flys.client.client.FLYSMessages; + + +/** + * @author Ingo Weinzierl + */ +public class MainMenu extends HLayout { + + /** The interface that provides i18n messages. */ + private FLYSMessages messages = GWT.create(FLYSMessages.class); + + /** + * The default constructor for creating a new MainMenu. + */ + public MainMenu() { + init(); + } + + + protected void init() { + setWidth("100%"); + setHeight("50"); + + setBorder("1px solid #808080"); + setBackgroundColor("#C3D9FF"); + + addMember(new Label(messages.title())); + addMember(new Label(messages.greeting("GAST"))); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/java/de/intevation/flys/client/server/GreetingServiceImpl.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/GreetingServiceImpl.java Tue Feb 08 10:29:49 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -package de.intevation.flys.client.server; - -import de.intevation.flys.client.client.GreetingService; -import de.intevation.flys.client.shared.FieldVerifier; -import com.google.gwt.user.server.rpc.RemoteServiceServlet; - -/** - * The server side implementation of the RPC service. - */ -@SuppressWarnings("serial") -public class GreetingServiceImpl extends RemoteServiceServlet implements - GreetingService { - - public String greetServer(String input) throws IllegalArgumentException { - // Verify that the input is valid. - if (!FieldVerifier.isValidName(input)) { - // If the input is not valid, throw an IllegalArgumentException back to - // the client. - throw new IllegalArgumentException( - "Name must be at least 4 characters long"); - } - - String serverInfo = getServletContext().getServerInfo(); - String userAgent = getThreadLocalRequest().getHeader("User-Agent"); - - // Escape data from the client to avoid cross-site script vulnerabilities. - input = escapeHtml(input); - userAgent = escapeHtml(userAgent); - - return "Hello, " + input + "!

I am running " + serverInfo - + ".

It looks like you are using:
" + userAgent; - } - - /** - * Escape an html string. Escaping data received from the client helps to - * prevent cross-site script vulnerabilities. - * - * @param html the html string to escape - * @return the escaped string - */ - private String escapeHtml(String html) { - if (html == null) { - return null; - } - return html.replaceAll("&", "&").replaceAll("<", "<").replaceAll( - ">", ">"); - } -} diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/webapp/FLYS.html --- a/flys-client/src/main/webapp/FLYS.html Tue Feb 08 10:29:49 2011 +0000 +++ b/flys-client/src/main/webapp/FLYS.html Wed Feb 09 09:59:27 2011 +0000 @@ -9,6 +9,8 @@ + + @@ -27,37 +29,24 @@ - - - - - - + + + + + + - - - - - - -

Web Application Starter Project

+ + - - - - - - - - - - - -
Please enter your name:
- + + + +
+ diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/main/webapp/WEB-INF/web.xml --- a/flys-client/src/main/webapp/WEB-INF/web.xml Tue Feb 08 10:29:49 2011 +0000 +++ b/flys-client/src/main/webapp/WEB-INF/web.xml Wed Feb 09 09:59:27 2011 +0000 @@ -6,6 +6,7 @@ + + FLYS.html diff -r 4e8be5e7855f -r 0e22a19852e7 flys-client/src/test/java/de/intevation/flys/client/client/FLYSTest.java --- a/flys-client/src/test/java/de/intevation/flys/client/client/FLYSTest.java Tue Feb 08 10:29:49 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -package de.intevation.flys.client.client; - -import de.intevation.flys.client.shared.FieldVerifier; -import com.google.gwt.core.client.GWT; -import com.google.gwt.junit.client.GWTTestCase; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.rpc.ServiceDefTarget; - -/** - * GWT JUnit tests must extend GWTTestCase. - */ -public class FLYSTest extends GWTTestCase { - - /** - * Must refer to a valid module that sources this class. - */ - public String getModuleName() { - return "de.intevation.flys.client.FLYSJUnit"; - } - - /** - * Tests the FieldVerifier. - */ - public void testFieldVerifier() { - assertFalse(FieldVerifier.isValidName(null)); - assertFalse(FieldVerifier.isValidName("")); - assertFalse(FieldVerifier.isValidName("a")); - assertFalse(FieldVerifier.isValidName("ab")); - assertFalse(FieldVerifier.isValidName("abc")); - assertTrue(FieldVerifier.isValidName("abcd")); - } - - /** - * This test will send a request to the server using the greetServer method in - * GreetingService and verify the response. - */ - public void testGreetingService() { - // Create the service that we will test. - GreetingServiceAsync greetingService = GWT.create(GreetingService.class); - ServiceDefTarget target = (ServiceDefTarget) greetingService; - target.setServiceEntryPoint(GWT.getModuleBaseURL() + "flys/greet"); - - // Since RPC calls are asynchronous, we will need to wait for a response - // after this test method returns. This line tells the test runner to wait - // up to 10 seconds before timing out. - delayTestFinish(10000); - - // Send a request to the server. - greetingService.greetServer("GWT User", new AsyncCallback() { - public void onFailure(Throwable caught) { - // The request resulted in an unexpected error. - fail("Request failure: " + caught.getMessage()); - } - - public void onSuccess(String result) { - // Verify that the response is correct. - assertTrue(result.startsWith("Hello, GWT User!")); - - // Now that we have received a response, we need to tell the test runner - // that the test is complete. You must call finishTest() after an - // asynchronous test finishes successfully, or the test will time out. - finishTest(); - } - }); - } - - -}