]> source.dussan.org Git - vaadin-framework.git/commitdiff
DD related javadocs, cleanup, small refactoring
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 17 Mar 2010 11:30:46 +0000 (11:30 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 17 Mar 2010 11:30:46 +0000 (11:30 +0000)
svn changeset:11927/svn branch:6.3

src/com/vaadin/event/dd/acceptCriteria/ContainsDataFlavor.java
src/com/vaadin/event/dd/acceptCriteria/DropTargetDetailEquals.java
src/com/vaadin/event/dd/acceptCriteria/IsDataBound.java
src/com/vaadin/event/dd/acceptCriteria/IsSameSourceAndTarget.java
src/com/vaadin/event/dd/acceptCriteria/Not.java
src/com/vaadin/event/dd/acceptCriteria/Or.java
src/com/vaadin/terminal/gwt/client/ui/dd/VDataBound.java [deleted file]
src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java
tests/src/com/vaadin/tests/dd/DDTest6.java

index 1a17b69b698b9ed62a85b495cde057a3075f45a3..93530791d659d4c5539de47fd8936645997b9da8 100644 (file)
@@ -6,27 +6,30 @@
  */
 package com.vaadin.event.dd.acceptCriteria;
 
+import com.vaadin.event.Transferable;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.gwt.client.ui.dd.VContainsDataFlavor;
 
 /**
- * TODO Javadoc!
+ * A Criterion that checks whether {@link Transferable} contains given data
+ * flavor. The developer might for example accept the incoming data only if it
+ * contains "Url" or "Text".
  * 
  * @since 6.3
- * 
  */
 @ClientCriterion(VContainsDataFlavor.class)
-public final class ContainsDataFlavor extends ClientSideCriterion {
+public class ContainsDataFlavor extends ClientSideCriterion {
 
     private String dataFlavorId;
 
     /**
-     * TODO should support basic UIDL data types
+     * Constructs a new instance of {@link ContainsDataFlavor}.
      * 
      * @param dataFlawor
-     * @param value
+     *            the type of data that will be checked from
+     *            {@link Transferable}
      */
     public ContainsDataFlavor(String dataFlawor) {
         dataFlavorId = dataFlawor;
@@ -42,4 +45,10 @@ public final class ContainsDataFlavor extends ClientSideCriterion {
         return dragEvent.getTransferable().getDataFlavors().contains(
                 dataFlavorId);
     }
+
+    @Override
+    protected String getIdentifier() {
+        // extending classes use client side implementation from this class
+        return ContainsDataFlavor.class.getCanonicalName();
+    }
 }
\ No newline at end of file
index 134d928e912ccc2a62cbfaba28a73a74bbe9dde5..b97f0159bbdf8ab5b155f18ce76be58f698f07b3 100644 (file)
@@ -7,16 +7,19 @@
 package com.vaadin.event.dd.acceptCriteria;
 
 import com.vaadin.event.dd.DragAndDropEvent;
+import com.vaadin.event.dd.DropTargetDetails;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.gwt.client.ui.dd.VDropDetailEquals;
 
 /**
- * Criteria for checking if drop target details contain the specific property
- * with the specific value.
+ * Criterion for checking if drop target details contains the specific property
+ * with the specific value. Currently only String values are supported.
  * 
  * @since 6.3
  * 
+ *        TODO add support for other basic data types that we support in UIDL.
+ * 
  */
 @ClientCriterion(VDropDetailEquals.class)
 public final class DropTargetDetailEquals extends ClientSideCriterion {
@@ -25,13 +28,17 @@ public final class DropTargetDetailEquals extends ClientSideCriterion {
     private String value;
 
     /**
-     * TODO should support basic UIDL data types
+     * Constructs a criterion which ensures that the value there is a value in
+     * {@link DropTargetDetails} that equals the reference value.
      * 
-     * @param propertyName
+     * @param dataFlavor
+     *            the type of data to be checked
      * @param value
+     *            the reference value to which the drop target detail will be
+     *            compared
      */
-    public DropTargetDetailEquals(String propertyName, String value) {
-        this.propertyName = propertyName;
+    public DropTargetDetailEquals(String dataFlavor, String value) {
+        propertyName = dataFlavor;
         this.value = value;
     }
 
index c492f3c2596b49bb3cac6d34e94b038d18dcfa75..c8050f94bf73ffc2fffb60b656427bcdb033159d 100644 (file)
@@ -6,27 +6,38 @@
  */
 package com.vaadin.event.dd.acceptCriteria;
 
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
 import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Transferable;
 import com.vaadin.event.dd.DragAndDropEvent;
-import com.vaadin.terminal.gwt.client.ui.dd.VDataBound;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Tree;
 
 /**
- * TODO Javadoc
+ * A simple accept criterion which ensures that {@link Transferable} contains an
+ * {@link Item} identifiers. In other words the criterion check that drag is
+ * coming from a {@link Container} like {@link Tree} or {@link Table}. TODO
+ * Javadoc
+ * <p>
+ * Note! class is singleton, use {@link #get()} method to get the instance.
  * 
  * @since 6.3
  * 
  */
-@ClientCriterion(VDataBound.class)
-public final class IsDataBound extends ClientSideCriterion {
+public final class IsDataBound extends ContainsDataFlavor {
+    private static final long serialVersionUID = 1952366107184656946L;
     private static IsDataBound singleton = new IsDataBound();
 
     private IsDataBound() {
+        super("itemId");
     }
 
     public static IsDataBound get() {
         return singleton;
     }
 
+    @Override
     public boolean accepts(DragAndDropEvent dragEvent) {
         if (dragEvent.getTransferable() instanceof DataBoundTransferable) {
             return ((DataBoundTransferable) dragEvent.getTransferable())
index 5f4d3db1160a1d3e3e515925ca1543e6611f7300..1c14506d38edccdfa6b13cb817f65af39960d98e 100644 (file)
@@ -6,14 +6,22 @@
  */
 package com.vaadin.event.dd.acceptCriteria;
 
+import com.vaadin.event.Transferable;
 import com.vaadin.event.TransferableImpl;
 import com.vaadin.event.dd.DragAndDropEvent;
 import com.vaadin.event.dd.DropTarget;
 import com.vaadin.terminal.gwt.client.ui.dd.VSourceIsSameAsTarget;
 import com.vaadin.ui.Component;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Tree;
 
 /**
- * TODO Javadoc
+ * 
+ * A criterion that ensures the drag source is the same as drop target. Eg.
+ * {@link Tree} or {@link Table} could support only re-ordering of items, but no
+ * {@link Transferable}s coming outside.
+ * <p>
+ * Note! Class is singleton, use {@link #get()} method to get the instance.
  * 
  * @since 6.3
  * 
@@ -21,7 +29,8 @@ import com.vaadin.ui.Component;
 @ClientCriterion(VSourceIsSameAsTarget.class)
 public class IsSameSourceAndTarget extends ClientSideCriterion {
 
-    private static IsSameSourceAndTarget instance;
+    private static final long serialVersionUID = -451399314705532584L;
+    private static IsSameSourceAndTarget instance = new IsSameSourceAndTarget();
 
     private IsSameSourceAndTarget() {
     }
@@ -33,14 +42,10 @@ public class IsSameSourceAndTarget extends ClientSideCriterion {
             DropTarget target = dragEvent.getDropTargetDetails().getTarget();
             return sourceComponent == target;
         }
-
         return false;
     }
 
-    public static IsSameSourceAndTarget get() {
-        if (instance == null) {
-            instance = new IsSameSourceAndTarget();
-        }
+    public static synchronized IsSameSourceAndTarget get() {
         return instance;
     }
 
index eaddce79b8d46d93bb3cd5e52e6239ce67087817..e4828cd83b8500d5799ad28d375a7be936fa1d23 100644 (file)
@@ -12,7 +12,7 @@ import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.gwt.client.ui.dd.VNot;
 
 /**
- * TODO Javadoc
+ * Criterion that wraps another criterion and inverts its return value.
  * 
  * @since 6.3
  * 
@@ -20,6 +20,7 @@ import com.vaadin.terminal.gwt.client.ui.dd.VNot;
 @ClientCriterion(VNot.class)
 public class Not extends ClientSideCriterion {
 
+    private static final long serialVersionUID = 1131422338558613244L;
     private AcceptCriterion acceptCriterion;
 
     public Not(ClientSideCriterion acceptCriterion) {
index 45a795e2cd68b348c26c7198d2c54bdaebbfb0ac..26cb90b18efadff691e876d29bb5e0e3677f82f9 100644 (file)
@@ -12,7 +12,7 @@ import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.gwt.client.ui.dd.VOr;
 
 /**
- * TODO Javadoc
+ * A compound criterion that returns true if any of criteria returns true.
  * 
  * @since 6.3
  * 
@@ -23,23 +23,27 @@ public class Or extends ClientSideCriterion {
      * 
      */
     private static final long serialVersionUID = 1L;
-    private AcceptCriterion f1;
-    private AcceptCriterion f2;
+    private AcceptCriterion criteria[];
 
-    public Or(ClientSideCriterion f1, ClientSideCriterion f2) {
-        this.f1 = f1;
-        this.f2 = f2;
+    public Or(ClientSideCriterion... criteria) {
+        this.criteria = criteria;
     }
 
     @Override
     public void paintContent(PaintTarget target) throws PaintException {
         super.paintContent(target);
-        f1.paint(target);
-        f2.paint(target);
+        for (AcceptCriterion crit : criteria) {
+            crit.paint(target);
+        }
     }
 
     public boolean accepts(DragAndDropEvent dragEvent) {
-        return f1.accepts(dragEvent) || f2.accepts(dragEvent);
+        for (AcceptCriterion crit : criteria) {
+            if (crit.accepts(dragEvent)) {
+                return true;
+            }
+        }
+        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
deleted file mode 100644 (file)
index e7db3e0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-@ITMillApache2LicenseForJavaFiles@
- */
-/**
- * 
- */
-package com.vaadin.terminal.gwt.client.ui.dd;
-
-import com.vaadin.terminal.gwt.client.UIDL;
-
-final public class VDataBound extends VAcceptCriterion {
-
-    @Override
-    public boolean validates(VDragEvent drag, UIDL configuration) {
-        return drag.getTransferable().getData("itemId") != null;
-    }
-}
\ No newline at end of file
index 4f4fbe60a85fe0d29d478312c52fa00186e4225c..b069f23ab35b091fafdf64746daf40079b7c5233 100644 (file)
@@ -6,51 +6,27 @@
  */
 package com.vaadin.terminal.gwt.client.ui.dd;
 
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
 
 /**
- * TODO implementation could now be simplified/optimized
  * 
  */
-final public class VOr extends VAcceptCriterion {
-    private boolean b1;
-    private boolean b2;
-    private VAcceptCriterion crit1;
-    private VAcceptCriterion crit2;
+final public class VOr extends VAcceptCriterion implements VAcceptCallback {
+    private boolean accepted;
 
     @Override
     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");
+        int childCount = configuration.getChildCount();
+        accepted = false;
+        for (int i = 0; i < childCount; i++) {
+            VAcceptCriterion crit = getCriteria(drag, configuration, i);
+            crit.accept(drag, configuration.getChildUIDL(i), this);
+            if (accepted == true) {
+                callback.accepted(drag);
                 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 VAcceptCriterion getCriteria(VDragEvent drag, UIDL configuration,
@@ -69,4 +45,8 @@ final public class VOr extends VAcceptCriterion {
         return false; // not used here
     }
 
+    public void accepted(VDragEvent event) {
+        accepted = true;
+    }
+
 }
\ No newline at end of file
index 1150d8f0dec88806ccb6094946d0739edb0ed44a..ea3859c66497593c73e8c5be7ca13f93386718b5 100644 (file)
@@ -25,6 +25,7 @@ import com.vaadin.event.dd.acceptCriteria.AcceptAll;
 import com.vaadin.event.dd.acceptCriteria.AcceptCriterion;
 import com.vaadin.event.dd.acceptCriteria.IsSameSourceAndTarget;
 import com.vaadin.event.dd.acceptCriteria.Not;
+import com.vaadin.terminal.ApplicationResource;
 import com.vaadin.terminal.Resource;
 import com.vaadin.terminal.StreamResource;
 import com.vaadin.terminal.ThemeResource;
@@ -39,6 +40,7 @@ import com.vaadin.ui.DragAndDropWrapper;
 import com.vaadin.ui.Embedded;
 import com.vaadin.ui.Label;
 import com.vaadin.ui.SplitPanel;
+import com.vaadin.ui.Table;
 import com.vaadin.ui.Tree;
 import com.vaadin.ui.Window;
 import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
@@ -252,11 +254,37 @@ public class DDTest6 extends TestBase {
 
     private void openFile(File file) {
         // ATM supports only images.
+        if (file.getType().equals("image/png")) {
+            Embedded embedded = new Embedded(file.getName(), file.getResource());
+            Window w = new Window(file.getName());
+            w.addComponent(embedded);
+            w.getContent().setSizeUndefined();
+            getMainWindow().addWindow(w);
+        } else if (file.getType().equals("text/csv")) {
+            showSpreadsheet(file);
+        }
+    }
 
-        Embedded embedded = new Embedded(file.getName(), file.getResource());
+    private void showSpreadsheet(File file) {
+        ApplicationResource resource = (ApplicationResource) file.getResource();
+        String string = new String(file.bas.toByteArray());
+        String[] rows = string.split("\n");
+        String[] cols = rows[0].split(",");
+        Table table = new Table();
+        for (String string2 : cols) {
+            String col = string2.replaceAll("\"", ""); // remove surrounding ""
+            table.addContainerProperty(string2, String.class, "");
+        }
+        for (int i = 1; i < rows.length; i++) {
+            String[] split = rows[i].split(",");
+            table.addItem(split, "" + i);
+        }
         Window w = new Window(file.getName());
-        w.addComponent(embedded);
+        w.getContent().setSizeUndefined();
+        table.setEditable(true);
+        w.addComponent(table);
         getMainWindow().addWindow(w);
+        // TODO saving would be nice demo
 
     }
 
@@ -385,6 +413,10 @@ public class DDTest6 extends TestBase {
 
                         File file = new File(fileName, bas);
                         file.setType(html5File.getType());
+                        // FF don't know csv
+                        if (fileName.endsWith(".csv")) {
+                            file.setType("text/csv");
+                        }
                         DDTest6.get().fs1.addBean(file);
                         DDTest6.get().tree1.setChildrenAllowed(file, false);
                         DDTest6.get().setParent(file, folder);
@@ -426,13 +458,26 @@ public class DDTest6 extends TestBase {
                             get().tree1.setValue(file);
                         } else {
                             String type = file.getType();
-                            if (type != null && type.equals("image/png")) {
+                            if (canDisplay(type)) {
                                 DDTest6.get().openFile(file);
                             }
                         }
                     }
 
                 }
+
+                String[] knownTypes = new String[] { "image/png", "text/csv" };
+
+                private boolean canDisplay(String type) {
+                    if (type != null) {
+                        for (String t : knownTypes) {
+                            if (t.equals(type)) {
+                                return true;
+                            }
+                        }
+                    }
+                    return false;
+                }
             });
 
             if (file instanceof Folder) {