]> source.dussan.org Git - vaadin-framework.git/commitdiff
Added drafting classes for locale handling.
authorJouni Koivuviita <jouni.koivuviita@itmill.com>
Tue, 19 Jun 2007 11:39:21 +0000 (11:39 +0000)
committerJouni Koivuviita <jouni.koivuviita@itmill.com>
Tue, 19 Jun 2007 11:39:21 +0000 (11:39 +0000)
Changed most component classnames to public.
Added a new method hasVariable to UIDL class.
Client now uses POST for requests and has some drafting methods for locale loading.

svn changeset:1767/svn branch:trunk

16 files changed:
src/com/itmill/toolkit/terminal/gwt/client/Client.java
src/com/itmill/toolkit/terminal/gwt/client/DateTimeService.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java
src/com/itmill/toolkit/terminal/gwt/client/LocaleService.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/UIDL.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IButton.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IDateField.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/ui/ILabel.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IOptionGroup.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IOptionGroupBase.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IPanel.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ISelect.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITextField.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITree.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java

index 1cc34dad2eecbf7b365b5f62d52521f57e71c577..f623c12727e73bd220ac1faaa5c5edc9545c2e80 100755 (executable)
@@ -82,7 +82,7 @@ public class Client implements EntryPoint {
 
        private void makeUidlRequest(String requestData) {
                console.log("Making UIDL Request with params: " + requestData);
-               rb = new RequestBuilder(RequestBuilder.GET, appUri
+               rb = new RequestBuilder(RequestBuilder.POST, appUri
                                + "/UIDL/?requestId=" + (Math.random()) + "&" + requestData);
                try {
                        rb.sendRequest(requestData, new RequestCallback() {
@@ -353,4 +353,30 @@ public class Client implements EntryPoint {
                return (String) resourcesMap.get(name);
        }
 
+       public JSONObject getLocale(String locale) {
+               // TODO should perform synchronous call to server to fetch 
+               // locale specific strings
+               // (GWT only supports synchrounous requests from v. 1.4)
+               console.log("Loading a new locale: " + locale);
+               rb = new RequestBuilder(RequestBuilder.POST, appUri
+                               + "/locale/?requestId=" + (Math.random()) + "&" + locale);
+               /*try {
+                       rb.sendRequest(locale, new RequestCallback() {
+                               public void onError(Request request, Throwable exception) {
+                                       console.error("Got error");
+                               }
+
+                               public void onResponseReceived(Request request,
+                                               Response response) {
+                                       handleReceivedJSONMessage(response);
+                               }
+
+                       });
+
+               } catch (RequestException e) {
+                       console.error(e.getMessage());
+               }*/
+               // TODO
+               return null;
+       }
 }
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/DateTimeService.java b/src/com/itmill/toolkit/terminal/gwt/client/DateTimeService.java
new file mode 100644 (file)
index 0000000..05d2d15
--- /dev/null
@@ -0,0 +1,44 @@
+package com.itmill.toolkit.terminal.gwt.client;\r
+\r
+/**\r
+ * This class provides date/time parsing services to all components.\r
+ * \r
+ * @author Jouni Koivuviita\r
+ *\r
+ */\r
+public class DateTimeService {\r
+       \r
+       private LocaleService localeService;\r
+       \r
+       private String currentLocale;\r
+       \r
+       public DateTimeService(Client client) {\r
+               localeService = new LocaleService(client);\r
+       }\r
+       \r
+       public DateTimeService(Client client, String locale) {\r
+               this(client);\r
+               setLocale(locale);\r
+       }\r
+       \r
+       public void setLocale(String locale) {\r
+               currentLocale = locale;\r
+       }\r
+       \r
+       public String getLocale() {\r
+               return currentLocale;\r
+       }\r
+       \r
+       public String getMonth(int month) throws Exception {\r
+               if(currentLocale != null)\r
+                       return localeService.getMonthNames(currentLocale)[month];\r
+               else throw new Exception("No locale specified.");\r
+       }\r
+       \r
+       public String getShortMonth(int month) throws Exception {\r
+               if(currentLocale != null)\r
+                       return localeService.getShortMonthNames(currentLocale)[month];\r
+               else throw new Exception("No locale specified.");\r
+       }\r
+\r
+}\r
index 8c7d224be04b35046fb2216d327d0daf0785715c..b967b76654f7ea812bfa20b1f3cf7441db27399e 100644 (file)
@@ -6,6 +6,7 @@ import com.itmill.toolkit.terminal.gwt.client.ui.IButton;
 import com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox;
 import com.itmill.toolkit.terminal.gwt.client.ui.IComponent;
 import com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout;
+import com.itmill.toolkit.terminal.gwt.client.ui.IDateField;
 import com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded;
 import com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout;
 import com.itmill.toolkit.terminal.gwt.client.ui.IHorizontalLayout;
@@ -75,6 +76,8 @@ public class DefaultWidgetFactory implements WidgetFactory {
                }
                if ("table".equals(tag))
                        return new ITable();
+               if("datefield".equals(tag))
+                       return new IDateField();
 
                return new IUnknownComponent();
        }
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/LocaleService.java b/src/com/itmill/toolkit/terminal/gwt/client/LocaleService.java
new file mode 100644 (file)
index 0000000..3d369dd
--- /dev/null
@@ -0,0 +1,81 @@
+package com.itmill.toolkit.terminal.gwt.client;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import com.google.gwt.json.client.JSONObject;\r
+\r
+/**\r
+ * Date / time etc. localisation service for all widgets.\r
+ * Should cache all loaded locales as JSON strings.\r
+ * \r
+ * @author Jouni Koivuviita\r
+ *\r
+ */\r
+public class LocaleService {\r
+       \r
+       private Client client;\r
+       \r
+       private Map cache = new HashMap();\r
+       \r
+       public LocaleService(Client client){\r
+               this.client = client;\r
+       }\r
+       \r
+       private void loadLocale(String locale) {\r
+               JSONObject resp = client.getLocale(locale);\r
+               cache.put(locale, resp);\r
+       }\r
+       \r
+       public String[] getMonthNames(String locale) {\r
+               // TODO\r
+               //if(cache.containsKey(locale))\r
+               //else loadLocale(locale);\r
+               String[] temp = new String[12];\r
+               temp[0] = "tammi"; temp[1] = "helmi"; temp[2] = "maalis"; temp[3] = "huhti";\r
+               temp[4] = "touko"; temp[5] = "kesä"; temp[6] = "heinä"; temp[7] = "elo";\r
+               temp[8] = "syys"; temp[9] = "loka"; temp[10] = "marras"; temp[11] = "joulu";\r
+               return temp;\r
+       }\r
+       \r
+       public String[] getShortMonthNames(String locale) {\r
+               // TODO\r
+               //if(cache.containsKey(locale))\r
+               //else loadLocale(locale);\r
+               String[] temp = new String[12];\r
+               temp[0] = "tam"; temp[1] = "hel"; temp[2] = "maa"; temp[3] = "huh";\r
+               temp[4] = "tou"; temp[5] = "kes"; temp[6] = "hei"; temp[7] = "elo";\r
+               temp[8] = "syy"; temp[9] = "lok"; temp[10] = "mar"; temp[11] = "jou";\r
+               return temp;\r
+       }\r
+       \r
+       public String[] getDayNames(String locale) {\r
+               // TODO\r
+               //if(cache.containsKey(locale))\r
+               //else loadLocale(locale);\r
+               String[] temp = new String[7];\r
+               temp[1] = "maanatai"; temp[2] = "tiistai"; temp[3] = "keskiviikko";\r
+               temp[4] = "torstai"; temp[5] = "perjantai"; temp[6] = "lauantai";\r
+               temp[0] = "sunnuntai";\r
+               return temp;\r
+       }\r
+       \r
+       public String[] getShortDayNames(String locale) {\r
+               // TODO\r
+               //if(cache.containsKey(locale))\r
+               //else loadLocale(locale);\r
+               String[] temp = new String[7];\r
+               temp[1] = "ma"; temp[2] = "ti"; temp[3] = "ke";\r
+               temp[4] = "to"; temp[5] = "pe"; temp[6] = "la";\r
+               temp[0] = "su";\r
+               return temp;\r
+       }\r
+       \r
+       public int getFirstDayOfWeek(String locale) {\r
+               // TODO\r
+               //if(cache.containsKey(locale))\r
+               //else loadLocale(locale);\r
+               return 1;\r
+       }\r
+\r
+}\r
index 43abb38ff72d7c9fb496f69f9fc6491eb34bb616..d4789e7e1b42a31d84a70a7e56cc07576b130bdf 100644 (file)
@@ -265,6 +265,14 @@ public class UIDL {
                        throw new IllegalArgumentException("No variables defined in tag.");
                return v;
        }
+       
+       public boolean hasVariable(String name) {
+               Object v = null;
+               try {
+                       v = getVariableHash().get(name);
+               } catch(IllegalArgumentException e) {}
+               return v != null;
+       }
 
        public String getStringVariable(String name) {
                JSONString t = (JSONString) getVariableHash().get(name);
index 7868f9e63c4394c4ede416ca23c36baa8dfe460e..a4626a3bf87ad37626c3d99397f596696dbd3679 100644 (file)
@@ -9,7 +9,7 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;
 
 public class IButton extends Button implements Paintable {
        
-       private static final String CLASSNAME = "i-button";
+       public static final String CLASSNAME = "i-button";
 
        String id;
 
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IDateField.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IDateField.java
new file mode 100644 (file)
index 0000000..802853e
--- /dev/null
@@ -0,0 +1,126 @@
+package com.itmill.toolkit.terminal.gwt.client.ui;\r
+\r
+import java.util.Date;\r
+\r
+import com.google.gwt.user.client.ui.ChangeListener;\r
+import com.google.gwt.user.client.ui.Composite;\r
+import com.google.gwt.user.client.ui.FlowPanel;\r
+import com.google.gwt.user.client.ui.ListBox;\r
+import com.google.gwt.user.client.ui.Widget;\r
+import com.itmill.toolkit.terminal.gwt.client.Client;\r
+import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
+import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
+\r
+public class IDateField extends Composite implements Paintable, ChangeListener {\r
+       \r
+       \r
+       /*\r
+        * This implementation is old already.\r
+        * We should use the DateTimeService class (which is a draft) to get \r
+        * locale specific strings and use them to build the datefield \r
+        * and its different styles (with inheritance of course).\r
+        * \r
+        * Drafting usage patterns:\r
+        * \r
+        * DateTimeService dts = new DateTimeService(client, "fi_FI");\r
+        * String month = dts.getMonth(0); // Returns "January"\r
+        * String day = dts.getDay(19); // Returns e.g. "sunday"\r
+        * String dateformat = dts.getDateFormat(); // Returns something like MM_/_DD_/_YYYY\r
+        * String timeformat = dts.getTimeFormat(); // Returns something like HH_:_MM\r
+        * String date = dts.parseDate(new Date()); // Returns e.g. 6/19/2007 14:32\r
+        * String date = dts.parseFullDate(new Date()); // Returns e.g. Tuesday 6th June 2007 14:32\r
+        */\r
+       \r
+       \r
+       public static final String CLASSNAME = "i-datefield";\r
+       \r
+       String id;\r
+       \r
+       Client client;\r
+       \r
+       private boolean immediate;\r
+       \r
+       private FlowPanel container;\r
+       \r
+       private ListBox year;\r
+       \r
+       private static int RESOLUTION_YEAR = 0;\r
+       private static int RESOLUTION_MONTH = 1;\r
+       private static int RESOLUTION_DAY = 2;\r
+       private static int RESOLUTION_HOUR = 3;\r
+       private static int RESOLUTION_MIN = 4;\r
+       private static int RESOLUTION_SEC = 5;\r
+       private static int RESOLUTION_MSEC = 6;\r
+\r
+       private int currentResolution = RESOLUTION_YEAR;\r
+       \r
+       public IDateField() {\r
+               container = new FlowPanel();\r
+               initWidget(container);\r
+       }\r
+       \r
+       public void updateFromUIDL(UIDL uidl, Client client) {\r
+               // Ensure correct implementation and let layout manage caption\r
+               if (client.updateComponent(this, uidl, true))\r
+                       return;\r
+\r
+               // Save details\r
+               this.client = client;\r
+               id = uidl.getId();\r
+               immediate = uidl.getBooleanAttribute("immediate");\r
+               \r
+               int newResolution = RESOLUTION_YEAR;\r
+               if(uidl.hasAttribute("month"))\r
+                       newResolution = RESOLUTION_MONTH;\r
+               if(uidl.hasAttribute("day"))\r
+                       newResolution = RESOLUTION_DAY;\r
+               if(uidl.hasAttribute("hour"))\r
+                       newResolution = RESOLUTION_HOUR;\r
+               if(uidl.hasAttribute("min"))\r
+                       newResolution = RESOLUTION_MIN;\r
+               if(uidl.hasAttribute("sec"))\r
+                       newResolution = RESOLUTION_SEC;\r
+               if(uidl.hasAttribute("msec"))\r
+                       newResolution = RESOLUTION_MSEC;\r
+               \r
+               if(currentResolution > newResolution)\r
+                       container.clear();\r
+               \r
+               if(uidl.hasVariable("year")) {\r
+                       int selectedYear = uidl.getIntVariable("year");\r
+                       int y = container.getWidgetIndex(year);\r
+                       if(y > -1) {\r
+                               year = (ListBox) container.getWidget(y);\r
+                               // Deselect old value\r
+                               year.setItemSelected(year.getSelectedIndex(), false);\r
+                               // and select new\r
+                               for(int i=0; i < year.getItemCount(); i++)\r
+                                       if(year.getValue(i).equals(""+selectedYear)) {\r
+                                               year.setSelectedIndex(i);\r
+                                               break;\r
+                                       }\r
+                       } else {\r
+                               year = new ListBox();\r
+                               year.setStyleName(ISelect.CLASSNAME);\r
+                               int today = 1900 + (new Date()).getYear();\r
+                               for(int i=1970; i<today+400; i++) {\r
+                                       year.addItem(""+i, ""+i);\r
+                                       if(i == selectedYear)\r
+                                               year.setSelectedIndex(year.getItemCount()-1);\r
+                               }\r
+                               year.addChangeListener(this);\r
+                               container.add(year);\r
+                       }\r
+               }\r
+               \r
+               \r
+               currentResolution = newResolution;\r
+       }\r
+\r
+       public void onChange(Widget sender) {\r
+               if(sender == year && client != null)\r
+                       client.updateVariable(id, "year", year.getValue(year.getSelectedIndex()), immediate);\r
+               \r
+       }\r
+\r
+}\r
index c81c94cb2dd1fdb4486cdc4a88e8f8813fa901cd..187d8e01d651c7fb7914db0c136b38bf6f1c958b 100644 (file)
@@ -1,14 +1,17 @@
 package com.itmill.toolkit.terminal.gwt.client.ui;
 
 import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.Label;
 import com.itmill.toolkit.terminal.gwt.client.Client;
 import com.itmill.toolkit.terminal.gwt.client.Paintable;
 import com.itmill.toolkit.terminal.gwt.client.UIDL;
 
 public class ILabel extends HTML implements Paintable {
+       
+       public static final String CLASSNAME = "i-label";
 
        public void updateFromUIDL(UIDL uidl, Client client) {
+               
+               setStyleName(CLASSNAME);
 
                if (client.updateComponent(this, uidl, true))
                        return;
index 64d59a6d41215918fb7046de17ac6a05c1fea6bf..fed7295edf602cf302a00bcb84b8054166a5a38e 100644 (file)
@@ -12,7 +12,7 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;
 \r
 public class IOptionGroup extends IOptionGroupBase {\r
        \r
-       private static final String CLASSNAME = "i-select-optiongroup";\r
+       public static final String CLASSNAME = "i-select-optiongroup";\r
        \r
        private Panel panel;\r
        \r
index dad379e166033aa77b4df80c63bb1116cd9c6f91..854c45ad484c6b2480a73b6c9b2c57291f87b9f8 100644 (file)
@@ -15,7 +15,7 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;
 \r
 abstract class IOptionGroupBase extends Composite implements Paintable, ClickListener, ChangeListener, KeyboardListener {\r
        \r
-       static final String CLASSNAME_OPTION = "i-select-option";\r
+       public static final String CLASSNAME_OPTION = "i-select-option";\r
 \r
        Client client;\r
        \r
index 1207676b2a37c90f9d4335b06834a300d049db73..02e495a322fffee551095f5d37e7937b753ee84e 100644 (file)
@@ -9,7 +9,7 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;
 
 public class IPanel extends FlowPanel implements Paintable {
        
-       private static final String CLASSNAME = "i-panel";
+       public static final String CLASSNAME = "i-panel";
        
        Client client;
        
index 4e8228a6e22d45da8fd38d21854450152e46f822..6076305bb5131ad7fd7daf09156d2e25128770c1 100644 (file)
@@ -9,7 +9,7 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;
 
 public class ISelect extends IOptionGroupBase {
        
-       private static final String CLASSNAME = "i-select";
+       public static final String CLASSNAME = "i-select";
        
        private static final int VISIBLE_COUNT = 10;
        
index 7a941a943d005430a95a97fbfb10bd2d72b82b35..c85a2b4a797f3e381710d03cc1f1d1266c1f8584 100644 (file)
@@ -4,7 +4,6 @@ import java.util.ArrayList;
 import java.util.Iterator;
 
 import com.google.gwt.user.client.ui.DeckPanel;
-import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.SourcesTabEvents;
 import com.google.gwt.user.client.ui.TabBar;
@@ -17,7 +16,7 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;
 
 public class ITabsheet extends TabPanel implements Paintable {
        
-       private static final String CLASSNAME = "i-tabsheet";
+       public static final String CLASSNAME = "i-tabsheet";
 
        String id;
 
index abdab4a21d6c432d31c10ea7f21d839213f34d6c..e621e3af0dbaff56b1d1c0d2d722cd76dcdaf84d 100644 (file)
@@ -22,12 +22,12 @@ public class ITextField extends TextBoxBase implements
        /**
         * The input node CSS classname.
         */
-       private static final String CLASSNAME = "i-textfield";
+       public static final String CLASSNAME = "i-textfield";
        
        /**
         * This CSS classname is added to the input node on hover.
         */
-       private static final String CLASSNAME_FOCUS = "i-textfield-focus";
+       public static final String CLASSNAME_FOCUS = "i-textfield-focus";
 
        protected String id;
 
index 36878d9525a4551611ee79162f35576ba381631f..ff05bbb0ea100131df6f9900a62466c978965798 100644 (file)
@@ -13,7 +13,7 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;
 
 public class ITree extends Tree implements Paintable {
        
-       private static final String CLASSNAME = "i-tree";
+       public static final String CLASSNAME = "i-tree";
 
        Set selectedIds = new HashSet();
        Client client;
index 5b774a11ea2cc262a4aab5e4da12948bebe9dc36..b7cf50e86c23ff1cc33288e08144dc1fc9f7d4fe 100644 (file)
@@ -1,6 +1,5 @@
 package com.itmill.toolkit.terminal.gwt.client.ui;
 
-import com.google.gwt.user.client.ui.FlowPanel;
 import com.itmill.toolkit.terminal.gwt.client.Client;
 import com.itmill.toolkit.terminal.gwt.client.Paintable;
 import com.itmill.toolkit.terminal.gwt.client.UIDL;