]> source.dussan.org Git - vaadin-framework.git/commitdiff
criterion map now generated from annotations from server side counterpart
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 17 Feb 2010 09:10:43 +0000 (09:10 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 17 Feb 2010 09:10:43 +0000 (09:10 +0000)
svn changeset:11350/svn branch:6.3_dd

33 files changed:
src/com/vaadin/event/dd/acceptCriteria/AcceptAll.java
src/com/vaadin/event/dd/acceptCriteria/AcceptCriterion.java
src/com/vaadin/event/dd/acceptCriteria/And.java
src/com/vaadin/event/dd/acceptCriteria/ClientCriterion.java [new file with mode: 0644]
src/com/vaadin/event/dd/acceptCriteria/ComponentFilter.java
src/com/vaadin/event/dd/acceptCriteria/IsDatabound.java
src/com/vaadin/event/dd/acceptCriteria/Not.java
src/com/vaadin/event/dd/acceptCriteria/Or.java
src/com/vaadin/event/dd/acceptCriteria/OverTreeNode.java
src/com/vaadin/event/dd/acceptCriteria/ServerSideCriterion.java
src/com/vaadin/terminal/gwt/client/ui/dd/AcceptAll.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/And.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/ComponentCriteria.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/HasItemId.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/LazyInitItemIdentifiers.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/Not.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/Or.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/OverTreeNode.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/ServerAccept.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/ServerCriterion.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/VAbstractDropHandler.java
src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VComponentFilter.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VDataBound.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VOverTreeNode.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/widgetsetutils/AcceptCriterionGenerator.java
src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java
src/com/vaadin/ui/Tree.java

index 4424447d97df5619252b2428d761b64879466519..93a28a4d99934ecfec0a39a1686da6b9f487c212 100644 (file)
@@ -4,7 +4,9 @@
 package com.vaadin.event.dd.acceptCriteria;
 
 import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.terminal.gwt.client.ui.dd.VAcceptAll;
 
+@ClientCriterion(VAcceptAll.class)
 public final class AcceptAll extends ClientSideCriterion {
 
     private static AcceptCriterion singleton = new AcceptAll();
index 24b0d9f2b88f2b9514f29a26d0f908a0c62d3341..1029e51baa57a38b85e1d3d7f69a2f344ea7135e 100644 (file)
@@ -3,13 +3,15 @@
  */
 package com.vaadin.event.dd.acceptCriteria;
 
+import java.io.Serializable;
+
 import com.vaadin.event.Transferable;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.event.dd.DropHandler;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 
-public interface AcceptCriterion {
+public interface AcceptCriterion extends Serializable {
 
     /**
      * Criterion that can be used create policy to accept/discard dragged
index 29a4a6aa2e3ca1f5fa109892c8ca63351bfb153e..91144771f99ef6af8bf6980e4e4dbfba9db1f42f 100644 (file)
@@ -11,6 +11,7 @@ import com.vaadin.terminal.PaintTarget;
  * TODO consider replacing this with Union
  * 
  */
+@ClientCriterion(com.vaadin.terminal.gwt.client.ui.dd.VAnd.class)
 public class And extends ClientSideCriterion {
     /**
      * 
diff --git a/src/com/vaadin/event/dd/acceptCriteria/ClientCriterion.java b/src/com/vaadin/event/dd/acceptCriteria/ClientCriterion.java
new file mode 100644 (file)
index 0000000..ebc58bc
--- /dev/null
@@ -0,0 +1,22 @@
+package com.vaadin.event.dd.acceptCriteria;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriteria;
+
+/**
+ * TODO
+ * 
+ * @since 6.2
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface ClientCriterion {
+    /**
+     * @return the client side counterpart for the annotated criterion
+     */
+    Class<? extends VAcceptCriteria> value();
+}
index 85b0a953e310a5ca5199e47dac587c6b59e85622..fc0ffd2c532c1e93d615a95021d07a509d5790a5 100644 (file)
@@ -7,8 +7,10 @@ import com.vaadin.event.ComponentTransferable;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.gwt.client.ui.dd.VComponentFilter;
 import com.vaadin.ui.Component;
 
+@ClientCriterion(VComponentFilter.class)
 public class ComponentFilter extends ClientSideCriterion {
     private Component[] component;
 
index 4b40296e3b7e4907e7f02bfd8a6fb970b437a1e4..10ac493bf393bd947f8ebe15a9ab7d683702e480 100644 (file)
@@ -5,7 +5,9 @@ package com.vaadin.event.dd.acceptCriteria;
 
 import com.vaadin.event.DataBoundTransferable;
 import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.terminal.gwt.client.ui.dd.VDataBound;
 
+@ClientCriterion(VDataBound.class)
 public final class IsDatabound extends ClientSideCriterion {
     private static IsDatabound singleton = new IsDatabound();
 
index 58d1aed5dfd8368f2f086814532da4afff42d480..d11df81d55849dbc56ee533865e36e744e6bad04 100644 (file)
@@ -4,7 +4,9 @@
 package com.vaadin.event.dd.acceptCriteria;
 
 import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.terminal.gwt.client.ui.dd.VNot;
 
+@ClientCriterion(VNot.class)
 public class Not extends ClientSideCriterion {
 
     private AcceptCriterion acceptCriterion;
index 59f4de90f228b7167a4ff33c90f2aaa2cc512e44..60b7152338e33986ca616463d2e688cfc6d71992 100644 (file)
@@ -6,11 +6,13 @@ package com.vaadin.event.dd.acceptCriteria;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.gwt.client.ui.dd.VOr;
 
 /**
  * TODO consider replacing this with intersection
  * 
  */
+@ClientCriterion(VOr.class)
 public class Or extends ClientSideCriterion {
     /**
      * 
index 80321ef9634aab3e0d9f1f9942ec8da262c377be..9eeed0b61716ae567b988ee7f3a60a2fac03259d 100644 (file)
@@ -4,6 +4,7 @@
 package com.vaadin.event.dd.acceptCriteria;
 
 import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.terminal.gwt.client.ui.dd.VOverTreeNode;
 import com.vaadin.ui.Tree;
 import com.vaadin.ui.Tree.Location;
 import com.vaadin.ui.Tree.TreeDropDetails;
@@ -14,6 +15,7 @@ import com.vaadin.ui.Tree.TreeDropDetails;
  * TODO relocate close to {@link Tree} as this is tree specifif
  * 
  */
+@ClientCriterion(VOverTreeNode.class)
 public class OverTreeNode extends ClientSideCriterion {
 
     private static final long serialVersionUID = 1L;
index 36a25346cacb365d66f3e0f07e7b669bcef1f01f..382af292379e3ba703dda9a49f56192882c98440 100644 (file)
@@ -4,7 +4,9 @@ import java.io.Serializable;
 
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.gwt.client.ui.dd.VServerAccept;
 
+@ClientCriterion(VServerAccept.class)
 public abstract class ServerSideCriterion implements Serializable,
         AcceptCriterion {
 
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/AcceptAll.java b/src/com/vaadin/terminal/gwt/client/ui/dd/AcceptAll.java
deleted file mode 100644 (file)
index 8600fe9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.event.dd.acceptCriteria.AcceptAll")
-final class AcceptAll implements VAcceptCriteria {
-    public void accept(VDragEvent drag, UIDL configuration,
-            VAcceptCallback callback) {
-        callback.accepted(drag);
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/And.java b/src/com/vaadin/terminal/gwt/client/ui/dd/And.java
deleted file mode 100644 (file)
index 42a341d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.event.dd.acceptCriteria.And")
-final class And implements VAcceptCriteria {
-    private boolean b1;
-    private boolean b2;
-    private VAcceptCriteria crit1;
-    private VAcceptCriteria crit2;
-
-    public void accept(VDragEvent drag, UIDL configuration,
-            VAcceptCallback callback) {
-        if (crit1 == null) {
-            crit1 = getCriteria(drag, configuration, 0);
-            crit2 = getCriteria(drag, configuration, 1);
-            if (crit1 == null || crit2 == null) {
-                ApplicationConnection.getConsole().log(
-                        "And criteria didn't found a chidl criteria");
-                return;
-            }
-        }
-
-        b1 = false;
-        b2 = false;
-
-        VAcceptCallback accept1cb = new VAcceptCallback() {
-            public void accepted(VDragEvent event) {
-                b1 = true;
-            }
-        };
-        VAcceptCallback accept2cb = new VAcceptCallback() {
-            public void accepted(VDragEvent event) {
-                b2 = true;
-            }
-        };
-
-        crit1.accept(drag, configuration.getChildUIDL(0), accept1cb);
-        crit2.accept(drag, configuration.getChildUIDL(1), accept2cb);
-        if (b1 && b2) {
-            callback.accepted(drag);
-        }
-    }
-
-    private VAcceptCriteria getCriteria(VDragEvent drag, UIDL configuration,
-            int i) {
-        UIDL childUIDL = configuration.getChildUIDL(i);
-        return VAcceptCriterion.get(childUIDL.getStringAttribute("name"));
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return false; // TODO enforce on server side
-    }
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/ComponentCriteria.java b/src/com/vaadin/terminal/gwt/client/ui/dd/ComponentCriteria.java
deleted file mode 100644 (file)
index ae12936..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.Paintable;
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.event.dd.acceptCriteria.ComponentFilter")
-final class ComponentCriteria implements VAcceptCriteria {
-    public void accept(VDragEvent drag, UIDL configuration,
-            VAcceptCallback callback) {
-        try {
-            Paintable component = drag.getTransferable().getDragSource();
-            int c = configuration.getIntAttribute("c");
-            for (int i = 0; i < c; i++) {
-                String requiredPid = configuration
-                        .getStringAttribute("component" + i);
-                Paintable paintable = VDragAndDropManager.get()
-                        .getCurrentDropHandler().getApplicationConnection()
-                        .getPaintable(requiredPid);
-                if (paintable == component) {
-                    callback.accepted(drag);
-                }
-            }
-        } catch (Exception e) {
-        }
-        return;
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/HasItemId.java b/src/com/vaadin/terminal/gwt/client/ui/dd/HasItemId.java
deleted file mode 100644 (file)
index 30716b4..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.event.dd.acceptCriteria.IsDatabound")
-final class HasItemId implements VAcceptCriteria {
-    public void accept(VDragEvent drag, UIDL configuration,
-            VAcceptCallback callback) {
-        if (drag.getTransferable().getData("itemId") != null) {
-            callback.accepted(drag);
-        }
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/LazyInitItemIdentifiers.java b/src/com/vaadin/terminal/gwt/client/ui/dd/LazyInitItemIdentifiers.java
deleted file mode 100644 (file)
index b1fed80..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import java.util.HashSet;
-
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.ui.Tree.TreeDropCriterion")
-final class LazyInitItemIdentifiers implements VAcceptCriteria {
-    private boolean loaded = false;
-    private HashSet<String> hashSet;
-    private VDragEvent lastDragEvent;
-
-    public void accept(final VDragEvent drag, UIDL configuration,
-            final VAcceptCallback callback) {
-        if (lastDragEvent == null || lastDragEvent != drag) {
-            loaded = false;
-            lastDragEvent = drag;
-        }
-        if (loaded) {
-            Object object = drag.getDropDetails().get("itemIdOver");
-            if (hashSet.contains(object)) {
-                callback.accepted(drag);
-            }
-        } else {
-
-            VDragEventServerCallback acceptCallback = new VDragEventServerCallback() {
-
-                public void handleResponse(boolean accepted, UIDL response) {
-                    hashSet = new HashSet<String>();
-                    String[] stringArrayAttribute = response
-                            .getStringArrayAttribute("allowedIds");
-                    for (int i = 0; i < stringArrayAttribute.length; i++) {
-                        hashSet.add(stringArrayAttribute[i]);
-                    }
-                    loaded = true;
-                    if (accepted) {
-                        callback.accepted(drag);
-                    }
-                }
-            };
-
-            VDragAndDropManager.get().visitServer(acceptCallback);
-        }
-
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return loaded;
-    }
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/Not.java b/src/com/vaadin/terminal/gwt/client/ui/dd/Not.java
deleted file mode 100644 (file)
index 3b5915c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.event.dd.acceptCriteria.Or")
-final class Not implements VAcceptCriteria {
-    private boolean b1;
-    private VAcceptCriteria crit1;
-
-    public void accept(VDragEvent drag, UIDL configuration,
-            VAcceptCallback callback) {
-        if (crit1 == null) {
-            crit1 = getCriteria(drag, configuration, 0);
-            if (crit1 == null) {
-                ApplicationConnection.getConsole().log(
-                        "Not criteria didn't found a child criteria");
-                return;
-            }
-        }
-
-        b1 = false;
-
-        VAcceptCallback accept1cb = new VAcceptCallback() {
-            public void accepted(VDragEvent event) {
-                b1 = true;
-            }
-        };
-
-        crit1.accept(drag, configuration.getChildUIDL(0), accept1cb);
-        if (!b1) {
-            callback.accepted(drag);
-        }
-    }
-
-    private VAcceptCriteria getCriteria(VDragEvent drag, UIDL configuration,
-            int i) {
-        UIDL childUIDL = configuration.getChildUIDL(i);
-        return VAcceptCriterion.get(childUIDL.getStringAttribute("name"));
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return false; // TODO enforce on server side
-    }
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/Or.java b/src/com/vaadin/terminal/gwt/client/ui/dd/Or.java
deleted file mode 100644 (file)
index ea79edc..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.event.dd.acceptCriteria.Or")
-final class Or implements VAcceptCriteria {
-    private boolean b1;
-    private boolean b2;
-    private VAcceptCriteria crit1;
-    private VAcceptCriteria crit2;
-
-    public void accept(VDragEvent drag, UIDL configuration,
-            VAcceptCallback callback) {
-        if (crit1 == null) {
-            crit1 = getCriteria(drag, configuration, 0);
-            crit2 = getCriteria(drag, configuration, 1);
-            if (crit1 == null || crit2 == null) {
-                ApplicationConnection.getConsole().log(
-                        "Or criteria didn't found a chidl criteria");
-                return;
-            }
-        }
-
-        b1 = false;
-        b2 = false;
-
-        VAcceptCallback accept1cb = new VAcceptCallback() {
-            public void accepted(VDragEvent event) {
-                b1 = true;
-            }
-        };
-        VAcceptCallback accept2cb = new VAcceptCallback() {
-            public void accepted(VDragEvent event) {
-                b2 = true;
-            }
-        };
-
-        crit1.accept(drag, configuration.getChildUIDL(0), accept1cb);
-        crit2.accept(drag, configuration.getChildUIDL(1), accept2cb);
-        if (b1 || b2) {
-            callback.accepted(drag);
-        }
-    }
-
-    private VAcceptCriteria getCriteria(VDragEvent drag, UIDL configuration,
-            int i) {
-        UIDL childUIDL = configuration.getChildUIDL(i);
-        return VAcceptCriterion.get(childUIDL.getStringAttribute("name"));
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return false; // TODO enforce on server side
-    }
-
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/OverTreeNode.java b/src/com/vaadin/terminal/gwt/client/ui/dd/OverTreeNode.java
deleted file mode 100644 (file)
index 4948a31..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.event.dd.acceptCriteria.OverTreeNode")
-final class OverTreeNode implements VAcceptCriteria {
-    public void accept(VDragEvent drag, UIDL configuration,
-            VAcceptCallback callback) {
-        Boolean containsKey = (Boolean) drag.getDropDetails().get(
-                "itemIdOverIsNode");
-        if (containsKey != null && containsKey.booleanValue()) {
-            callback.accepted(drag);
-            return;
-        }
-        return;
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/ServerAccept.java b/src/com/vaadin/terminal/gwt/client/ui/dd/ServerAccept.java
deleted file mode 100644 (file)
index 4cacfc1..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.UIDL;
-
-@ServerCriterion("com.vaadin.event.dd.acceptCriteria.ServerSideCriterion")
-final class ServerAccept implements VAcceptCriteria {
-    public void accept(final VDragEvent drag, UIDL configuration,
-            final VAcceptCallback callback) {
-
-        VDragEventServerCallback acceptCallback = new VDragEventServerCallback() {
-            public void handleResponse(boolean accepted, UIDL response) {
-                if (accepted) {
-                    callback.accepted(drag);
-                }
-            }
-        };
-        VDragAndDropManager.get().visitServer(acceptCallback);
-    }
-
-    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/ServerCriterion.java b/src/com/vaadin/terminal/gwt/client/ui/dd/ServerCriterion.java
deleted file mode 100644 (file)
index 3aca021..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface ServerCriterion {
-    /**
-     * Class type would be nice but annotating should come from different
-     * direction to cope with gwt compiler.
-     * 
-     * @return
-     */
-    String value();
-}
index aaf90f899dadc6e64635ff08c56acb784b8716a2..2bf363d1ff2b84c92ee69b5f35b0a39359281738 100644 (file)
@@ -12,7 +12,7 @@ import com.vaadin.terminal.gwt.client.UIDL;
 public abstract class VAbstractDropHandler implements VDropHandler {
 
     private UIDL criterioUIDL;
-    private VAcceptCriteria acceptCriteria = new AcceptAll();
+    private VAcceptCriteria acceptCriteria = new VAcceptAll();
 
     /**
      * Implementor/user of {@link VAbstractDropHandler} must pass the UIDL
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java
new file mode 100644 (file)
index 0000000..2a5f993
--- /dev/null
@@ -0,0 +1,17 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VAcceptAll implements VAcceptCriteria {
+    public void accept(VDragEvent drag, UIDL configuration,
+            VAcceptCallback callback) {
+        callback.accepted(drag);
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java
new file mode 100644 (file)
index 0000000..42b77e2
--- /dev/null
@@ -0,0 +1,57 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VAnd implements VAcceptCriteria {
+    private boolean b1;
+    private boolean b2;
+    private VAcceptCriteria crit1;
+    private VAcceptCriteria crit2;
+
+    public void accept(VDragEvent drag, UIDL configuration,
+            VAcceptCallback callback) {
+        if (crit1 == null) {
+            crit1 = getCriteria(drag, configuration, 0);
+            crit2 = getCriteria(drag, configuration, 1);
+            if (crit1 == null || crit2 == null) {
+                ApplicationConnection.getConsole().log(
+                        "And criteria didn't found a chidl criteria");
+                return;
+            }
+        }
+
+        b1 = false;
+        b2 = false;
+
+        VAcceptCallback accept1cb = new VAcceptCallback() {
+            public void accepted(VDragEvent event) {
+                b1 = true;
+            }
+        };
+        VAcceptCallback accept2cb = new VAcceptCallback() {
+            public void accepted(VDragEvent event) {
+                b2 = true;
+            }
+        };
+
+        crit1.accept(drag, configuration.getChildUIDL(0), accept1cb);
+        crit2.accept(drag, configuration.getChildUIDL(1), accept2cb);
+        if (b1 && b2) {
+            callback.accepted(drag);
+        }
+    }
+
+    private VAcceptCriteria getCriteria(VDragEvent drag, UIDL configuration,
+            int i) {
+        UIDL childUIDL = configuration.getChildUIDL(i);
+        return VAcceptCriterion.get(childUIDL.getStringAttribute("name"));
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return false; // TODO enforce on server side
+    }
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VComponentFilter.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VComponentFilter.java
new file mode 100644 (file)
index 0000000..ce84d7a
--- /dev/null
@@ -0,0 +1,33 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.Paintable;
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VComponentFilter implements VAcceptCriteria {
+    public void accept(VDragEvent drag, UIDL configuration,
+            VAcceptCallback callback) {
+        try {
+            Paintable component = drag.getTransferable().getDragSource();
+            int c = configuration.getIntAttribute("c");
+            for (int i = 0; i < c; i++) {
+                String requiredPid = configuration
+                        .getStringAttribute("component" + i);
+                Paintable paintable = VDragAndDropManager.get()
+                        .getCurrentDropHandler().getApplicationConnection()
+                        .getPaintable(requiredPid);
+                if (paintable == component) {
+                    callback.accepted(drag);
+                }
+            }
+        } catch (Exception e) {
+        }
+        return;
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VDataBound.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VDataBound.java
new file mode 100644 (file)
index 0000000..a5cfda3
--- /dev/null
@@ -0,0 +1,19 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VDataBound implements VAcceptCriteria {
+    public void accept(VDragEvent drag, UIDL configuration,
+            VAcceptCallback callback) {
+        if (drag.getTransferable().getData("itemId") != null) {
+            callback.accepted(drag);
+        }
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java
new file mode 100644 (file)
index 0000000..689ed0e
--- /dev/null
@@ -0,0 +1,57 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import java.util.HashSet;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+/**
+ * 
+ * @deprecated example class testing custom behavior
+ */
+@Deprecated
+final public class VLazyInitItemIdentifiers implements VAcceptCriteria {
+    private boolean loaded = false;
+    private HashSet<String> hashSet;
+    private VDragEvent lastDragEvent;
+
+    public void accept(final VDragEvent drag, UIDL configuration,
+            final VAcceptCallback callback) {
+        if (lastDragEvent == null || lastDragEvent != drag) {
+            loaded = false;
+            lastDragEvent = drag;
+        }
+        if (loaded) {
+            Object object = drag.getDropDetails().get("itemIdOver");
+            if (hashSet.contains(object)) {
+                callback.accepted(drag);
+            }
+        } else {
+
+            VDragEventServerCallback acceptCallback = new VDragEventServerCallback() {
+
+                public void handleResponse(boolean accepted, UIDL response) {
+                    hashSet = new HashSet<String>();
+                    String[] stringArrayAttribute = response
+                            .getStringArrayAttribute("allowedIds");
+                    for (int i = 0; i < stringArrayAttribute.length; i++) {
+                        hashSet.add(stringArrayAttribute[i]);
+                    }
+                    loaded = true;
+                    if (accepted) {
+                        callback.accepted(drag);
+                    }
+                }
+            };
+
+            VDragAndDropManager.get().visitServer(acceptCallback);
+        }
+
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return loaded;
+    }
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java
new file mode 100644 (file)
index 0000000..8ce753e
--- /dev/null
@@ -0,0 +1,47 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VNot implements VAcceptCriteria {
+    private boolean b1;
+    private VAcceptCriteria crit1;
+
+    public void accept(VDragEvent drag, UIDL configuration,
+            VAcceptCallback callback) {
+        if (crit1 == null) {
+            crit1 = getCriteria(drag, configuration, 0);
+            if (crit1 == null) {
+                ApplicationConnection.getConsole().log(
+                        "Not criteria didn't found a child criteria");
+                return;
+            }
+        }
+
+        b1 = false;
+
+        VAcceptCallback accept1cb = new VAcceptCallback() {
+            public void accepted(VDragEvent event) {
+                b1 = true;
+            }
+        };
+
+        crit1.accept(drag, configuration.getChildUIDL(0), accept1cb);
+        if (!b1) {
+            callback.accepted(drag);
+        }
+    }
+
+    private VAcceptCriteria getCriteria(VDragEvent drag, UIDL configuration,
+            int i) {
+        UIDL childUIDL = configuration.getChildUIDL(i);
+        return VAcceptCriterion.get(childUIDL.getStringAttribute("name"));
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return false; // TODO enforce on server side
+    }
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java
new file mode 100644 (file)
index 0000000..324dc08
--- /dev/null
@@ -0,0 +1,58 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VOr implements VAcceptCriteria {
+    private boolean b1;
+    private boolean b2;
+    private VAcceptCriteria crit1;
+    private VAcceptCriteria crit2;
+
+    public void accept(VDragEvent drag, UIDL configuration,
+            VAcceptCallback callback) {
+        if (crit1 == null) {
+            crit1 = getCriteria(drag, configuration, 0);
+            crit2 = getCriteria(drag, configuration, 1);
+            if (crit1 == null || crit2 == null) {
+                ApplicationConnection.getConsole().log(
+                        "Or criteria didn't found a chidl criteria");
+                return;
+            }
+        }
+
+        b1 = false;
+        b2 = false;
+
+        VAcceptCallback accept1cb = new VAcceptCallback() {
+            public void accepted(VDragEvent event) {
+                b1 = true;
+            }
+        };
+        VAcceptCallback accept2cb = new VAcceptCallback() {
+            public void accepted(VDragEvent event) {
+                b2 = true;
+            }
+        };
+
+        crit1.accept(drag, configuration.getChildUIDL(0), accept1cb);
+        crit2.accept(drag, configuration.getChildUIDL(1), accept2cb);
+        if (b1 || b2) {
+            callback.accepted(drag);
+        }
+    }
+
+    private VAcceptCriteria getCriteria(VDragEvent drag, UIDL configuration,
+            int i) {
+        UIDL childUIDL = configuration.getChildUIDL(i);
+        return VAcceptCriterion.get(childUIDL.getStringAttribute("name"));
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return false; // TODO enforce on server side
+    }
+
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VOverTreeNode.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VOverTreeNode.java
new file mode 100644 (file)
index 0000000..ebdc6bf
--- /dev/null
@@ -0,0 +1,23 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VOverTreeNode implements VAcceptCriteria {
+    public void accept(VDragEvent drag, UIDL configuration,
+            VAcceptCallback callback) {
+        Boolean containsKey = (Boolean) drag.getDropDetails().get(
+                "itemIdOverIsNode");
+        if (containsKey != null && containsKey.booleanValue()) {
+            callback.accepted(drag);
+            return;
+        }
+        return;
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java
new file mode 100644 (file)
index 0000000..238b0c8
--- /dev/null
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package com.vaadin.terminal.gwt.client.ui.dd;
+
+import com.vaadin.terminal.gwt.client.UIDL;
+
+final public class VServerAccept implements VAcceptCriteria {
+    public void accept(final VDragEvent drag, UIDL configuration,
+            final VAcceptCallback callback) {
+
+        VDragEventServerCallback acceptCallback = new VDragEventServerCallback() {
+            public void handleResponse(boolean accepted, UIDL response) {
+                if (accepted) {
+                    callback.accepted(drag);
+                }
+            }
+        };
+        VDragAndDropManager.get().visitServer(acceptCallback);
+    }
+
+    public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
+        return true;
+    }
+}
\ No newline at end of file
index b0dca0da207c61dfc5e4e8b7c6f334e914dab9b9..91c50f046b5ad9c8bdbe3911cb0c97b9710c5f81 100644 (file)
@@ -3,7 +3,6 @@ package com.vaadin.terminal.gwt.widgetsetutils;
 import java.io.PrintWriter;
 import java.util.Collection;
 import java.util.Date;
-import java.util.LinkedList;
 
 import com.google.gwt.core.ext.Generator;
 import com.google.gwt.core.ext.GeneratorContext;
@@ -14,7 +13,9 @@ import com.google.gwt.core.ext.typeinfo.JClassType;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
 import com.google.gwt.user.rebind.SourceWriter;
-import com.vaadin.terminal.gwt.client.ui.dd.ServerCriterion;
+import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptCriteria.ClientCriterion;
+import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriteria;
 import com.vaadin.ui.ClientWidget;
 
 /**
@@ -89,27 +90,6 @@ public class AcceptCriterionGenerator extends Generator {
 
     }
 
-    private Collection<JClassType> getAvailableCriteria(GeneratorContext context) {
-
-        Collection<JClassType> crits = new LinkedList<JClassType>();
-
-        JClassType[] types = context.getTypeOracle().getTypes();
-        for (int i = 0; i < types.length; i++) {
-            JClassType jClassType = types[i];
-            JClassType[] implementedInterfaces = jClassType
-                    .getImplementedInterfaces();
-            for (int j = 0; j < implementedInterfaces.length; j++) {
-                String qualifiedSourceName = implementedInterfaces[j]
-                        .getQualifiedSourceName();
-                if (qualifiedSourceName
-                        .equals("com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriteria")) {
-                    crits.add(jClassType);
-                }
-            }
-        }
-        return crits;
-    }
-
     private void generateInstantiatorMethod(SourceWriter sourceWriter,
             GeneratorContext context, TreeLogger logger) {
 
@@ -118,30 +98,21 @@ public class AcceptCriterionGenerator extends Generator {
 
         sourceWriter.println("name = name.intern();");
 
-        Collection<JClassType> paintablesHavingWidgetAnnotation = getAvailableCriteria(context);
-
-        for (JClassType jClassType : paintablesHavingWidgetAnnotation) {
-            ServerCriterion annotation = jClassType
-                    .getAnnotation(ServerCriterion.class);
-            if (annotation == null) {
-                // throw new RuntimeException(
-                // "No server side implementation defined for "
-                // + jClassType.getName());
-                continue;
-            } else {
-                System.out.print("Printing for instantiation rule for "
-                        + annotation.value());
-            }
-            String serversideclass = annotation.value();
+        Collection<Class<? extends AcceptCriterion>> clientSideVerifiableCriterion = ClassPathExplorer
+                .getCriterion();
 
+        for (Class<? extends AcceptCriterion> class1 : clientSideVerifiableCriterion) {
+            String canonicalName = class1.getCanonicalName();
+            Class<? extends VAcceptCriteria> clientClass = class1
+                    .getAnnotation(ClientCriterion.class).value();
             sourceWriter.print("if (\"");
-            sourceWriter.print(serversideclass);
+            sourceWriter.print(canonicalName);
             sourceWriter.print("\" == name) return GWT.create(");
-            sourceWriter.print(jClassType.getName());
+            sourceWriter.print(clientClass.getCanonicalName());
             sourceWriter.println(".class );");
             sourceWriter.print("else ");
-
         }
+
         sourceWriter.println("return null;");
         sourceWriter.outdent();
         sourceWriter.println("}");
index 912cfa37a387d7d7f68bfcd51f63dbf0ca4be670..b3c670ba81dbbadf848c2eff15fadcbb198d744f 100644 (file)
@@ -27,6 +27,8 @@ import java.util.jar.Manifest;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
+import com.vaadin.event.dd.acceptCriteria.ClientCriterion;
 import com.vaadin.terminal.Paintable;
 import com.vaadin.ui.ClientWidget;
 
@@ -83,6 +85,15 @@ public class ClassPathExplorer {
 
     }
 
+    public static Collection<Class<? extends AcceptCriterion>> getCriterion() {
+        if (acceptCriterion.isEmpty()) {
+            // accept criterion are searched as a side effect, normally after
+            // paintable detection
+            getPaintablesHavingWidgetAnnotation();
+        }
+        return acceptCriterion;
+    }
+
     /**
      * Finds available widgetset names.
      * 
@@ -385,6 +396,8 @@ public class ClassPathExplorer {
         }
     });
 
+    private static Set<Class<? extends AcceptCriterion>> acceptCriterion = new HashSet<Class<? extends AcceptCriterion>>();
+
     private static void tryToAdd(final String fullclassName,
             Collection<Class<? extends Paintable>> paintables) {
         try {
@@ -401,7 +414,10 @@ public class ClassPathExplorer {
             if (c.getAnnotation(ClientWidget.class) != null) {
                 paintables.add((Class<? extends Paintable>) c);
                 // System.out.println("Found paintable " + fullclassName);
+            } else if (c.getAnnotation(ClientCriterion.class) != null) {
+                acceptCriterion.add((Class<? extends AcceptCriterion>) c);
             }
+
         } catch (ClassNotFoundException e) {
             // e.printStackTrace();
         } catch (LinkageError e) {
index 3bb1e6f696446abefd24cf4326091ea9be467afb..ab8eae84195085de4b6fc16b32eb801cb6aea273 100644 (file)
@@ -33,6 +33,7 @@ import com.vaadin.event.dd.DragSource;
 import com.vaadin.event.dd.DropHandler;
 import com.vaadin.event.dd.DropTarget;
 import com.vaadin.event.dd.TargetDetailsImpl;
+import com.vaadin.event.dd.acceptCriteria.ClientCriterion;
 import com.vaadin.event.dd.acceptCriteria.ServerSideCriterion;
 import com.vaadin.terminal.KeyMapper;
 import com.vaadin.terminal.PaintException;
@@ -40,6 +41,7 @@ import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.ui.VTree;
+import com.vaadin.terminal.gwt.client.ui.dd.VLazyInitItemIdentifiers;
 
 /**
  * Tree component. A Tree can be used to select an item (or multiple items) from
@@ -1218,6 +1220,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
      * <p>
      * See client side counterpart
      */
+    @ClientCriterion(VLazyInitItemIdentifiers.class)
     public static abstract class TreeDropCriterion extends ServerSideCriterion {
 
         private Tree tree;