]> source.dussan.org Git - gwtquery.git/commitdiff
Revert method f to return an object and avoid eclipse warnings. Accept either dom...
authorManolo Carrasco <manolo@apache.org>
Fri, 15 Apr 2011 06:59:58 +0000 (06:59 +0000)
committerManolo Carrasco <manolo@apache.org>
Fri, 15 Apr 2011 06:59:58 +0000 (06:59 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/Function.java
gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java
gwtquery-core/src/main/java/com/google/gwt/query/client/LazyGQuery.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java

index 95d35ccf8b0e246b2cd43c00b3ab08edd968cced..b32e4ccbc8ff64dff10b6b3437caa8b637b2cbf9 100644 (file)
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.query.client;
 
-import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.Widget;
 
@@ -26,37 +26,69 @@ public abstract class Function {
   
   /**
    * Override this for methods which invoke a cancel action.
+   * 
+   * @param e takes a com.google.gwt.user.client.Element.
+   * 
    */
   public void cancel(Element e) {
   }
 
+  /**
+   * Override this for methods which invoke a cancel action.
+   * 
+   * @param e takes a com.google.gwt.dom.client.Element.
+   * 
+   */
+  public void cancel(com.google.gwt.dom.client.Element e) {
+    cancel((Element)e);
+  }
+
   /**
    * Override this to define a function which does not need any parameter.
    */
   public void f() {
-    throw new RuntimeException("You have to override the adequate method to handle this action, or you have to override 'public void f()' to avoid this error");
+    throw new RuntimeException("You have to override the adequate method to handle " +
+               "this action, or you have to override 'public void f()' to avoid this error");
   }
 
   /**
    * Override this for GQuery methods which loop over matched elements and
    * invoke a callback on each element.
+   * 
+   * @param e takes a com.google.gwt.user.client.Element.
+   * 
    */
-  public <W> W f(Element e, int i) {
+  public Object f(Element e, int i) {
     Widget w = GQuery.getAssociatedWidget(e);
     if (w != null){
       f(w, i);
     } else {
-      f((com.google.gwt.user.client.Element)e);
+      f(e);
     }
     return null;
   }
 
+  /**
+   * Override this for GQuery methods which loop over matched elements and
+   * invoke a callback on each element.
+   * 
+   * @param e takes a com.google.gwt.dom.client.Element.
+   * 
+   */
+  public Object f(com.google.gwt.dom.client.Element e, int i) {
+    return f(e.<Element>cast(), i); 
+  }
+
   /**
    * Override this for GQuery methods which loop over matched widgets and
    * invoke a callback on each widget.
+   * 
+   *  NOTE: If your query has non-widget elements you might need to override 
+   * 'public void f()' or 'public void f(Element e)' to handle these elements and
+   *  avoid a runtime exception. 
    */
-  public <W> W f(Widget w, int i) {
-    f(w.getElement());
+  public Object f(Widget w, int i) {
+    f(w);
     return null;
   }
   
@@ -72,7 +104,7 @@ public abstract class Function {
    * Override this method for bound event handlers.
    */
   public boolean f(Event e) {
-    f((com.google.gwt.user.client.Element)e.getCurrentEventTarget().cast());
+    f((Element)e.getCurrentEventTarget().cast());
     return true;
   }
   
@@ -80,7 +112,7 @@ public abstract class Function {
    * Override this for GQuery methods which take a callback and do not expect a
    * return value.
    * 
-   * @param e takes a com.google.gwt.dom.client.Element
+   * @param e takes a com.google.gwt.user.client.Element
    */
   public void f(Element e) {
     Widget w = GQuery.getAssociatedWidget(e);
@@ -95,9 +127,9 @@ public abstract class Function {
    * Override this for GQuery methods which take a callback and do not expect a
    * return value.
    * 
-   * @param e takes a com.google.gwt.user.client.Element
+   * @param e takes a com.google.gwt.dom.client.Element
    */
-  public void f(com.google.gwt.user.client.Element e) {
+  public void f(com.google.gwt.dom.client.Element e) {
    f((Element)e);
   }
   
@@ -105,11 +137,12 @@ public abstract class Function {
    * Override this for GQuery methods which take a callback, but do not expect a
    * return value, apply to a single widget.
    * 
-   * NOTE: If your query is returning non-widget elements you might need to override 
+   *  NOTE: If your query has non-widget elements you might need to override 
    * 'public void f()' or 'public void f(Element e)' to handle these elements and
-   * avoid a runtime exception. 
+   *  avoid a runtime exception. 
    */
   public void f(Widget w){
+    // Do not call f(e) here to avoid loop
     f();
   }
 
index be82dd73a3039f1d790af26175b16223ce663793..6e6ee04a32eec28e0ffb3f413d71b2586fa8841a 100644 (file)
@@ -1989,6 +1989,20 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
     return this;\r
   }\r
 \r
+  /**\r
+   * Get the id of the first matched element.\r
+   */\r
+  public String id() {\r
+    return attr("id");\r
+  }\r
+\r
+  /**\r
+   * Set the id of the first matched element.\r
+   */\r
+  public GQuery id(String id) {\r
+    return eq(0).attr("id", id);\r
+  }\r
+\r
   /**\r
    * Find the index of the specified Element.\r
    */\r
@@ -2302,11 +2316,13 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
   /**\r
    * Pass each element in the current matched set through a function, producing\r
    * a new array containing the return values.\r
+   * When the call to the function returns a null it is not added to the array.\r
    */\r
   public <W> List<W> map(Function f) {\r
     ArrayList<W> ret = new ArrayList<W>();\r
     for (int i = 0; i < elements().length; i++) {\r
-      W o = f.<W>f(elements()[i], i);\r
+      @SuppressWarnings("unchecked")\r
+      W o = (W)f.f(elements()[i], i);\r
       if (o != null) {\r
         ret.add(o);\r
       }\r
index fc7e5d7bb2740ebcf026522c796d248dae8a3b6f..2dfdd9584841a3f1ffece05dad47acb702c6b018 100644 (file)
@@ -1062,6 +1062,16 @@ public interface LazyGQuery<T> extends LazyBase<T>{
    */
   LazyGQuery<T> html(String html);
 
+  /**
+   * Get the id of the first matched element.
+   */
+  String id();
+
+  /**
+   * Set the id of the first matched element.
+   */
+  LazyGQuery<T> id(String id);
+
   /**
    * Find the index of the specified Element.
    */
@@ -1314,6 +1324,7 @@ public interface LazyGQuery<T> extends LazyBase<T>{
   /**
    * Pass each element in the current matched set through a function, producing
    * a new array containing the return values.
+   * When the call to the function returns a null it is not added to the array.
    */
   <W> List<W> map(Function f);
 
index 865554155e33bf6add357d22d7c4439fea8ba6fc..b44a839450ffca110906b35bacfab25c872e47ef 100644 (file)
@@ -19,6 +19,9 @@ import static com.google.gwt.query.client.GQuery.$;
 import static com.google.gwt.query.client.GQuery.$$;
 import static com.google.gwt.query.client.GQuery.document;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import junit.framework.Assert;
@@ -1266,5 +1269,41 @@ public class GQueryCoreTest extends GWTTestCase {
     assertNull(close.get("#unknown"));
     
   }
+  
+  public void testMap() {
+    String html = "<div class='d' id='6'></div><span class='s' id='5'></span><p class='p' id='4'></p><em class='d' id='3'></em><b class='s' id='2'></b><i class='p' id='1'></i><strong></strong>";
+    $(e).html(html);
+    
+    GQuery c = $(e).children();
+    assertEquals(8, c.size());
+    
+    // A list of lists containing tag,class,id, remove elements without id
+    List<List<String>> m = $(e).children().map(new Function() {
+      @SuppressWarnings("unchecked")
+      public List<String> f(Element e, int i) {
+        // map does not add to the list null elements
+        if ($(e).attr("id").isEmpty() || $(e).attr("class").isEmpty()) {
+          return null;
+        }
+        List<String> attrs = new ArrayList<String>();
+        attrs.add(e.getTagName());
+        attrs.add($(e).attr("class"));
+        attrs.add($(e).attr("id"));
+        return attrs;
+      }
+    });
+    assertEquals(6, m.size());
+    
+    // Sort the list by id
+    assertEquals("div", m.get(0).get(0).toLowerCase());
+    assertEquals("i", m.get(5).get(0).toLowerCase());
+    Collections.sort(m, new Comparator<List<String>>() {
+      public int compare(List<String> o1, List<String> o2) {
+        return o1.get(2).compareTo(o2.get(2));
+      }
+    });
+    assertEquals("div", m.get(5).get(0).toLowerCase());
+    assertEquals("i", m.get(0).get(0).toLowerCase());
+  }
  
 }