#99457 Fixing droppable cursor when moving from project tab. before_vw-license_update_May11
authorpzavadsky@netbeans.org
Fri, 11 May 2007 11:05:50 +0000
changeset 756e161c247e102
parent 755 e31dabddb7fd
child 757 2ad990a7fae8
#99457 Fixing droppable cursor when moving from project tab.
visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DndSupport.java
visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DomProviderImpl.java
visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/FacesDndSupport.java
visualweb.designer/src/org/netbeans/modules/visualweb/api/designer/DomProvider.java
visualweb.designer/src/org/netbeans/modules/visualweb/designer/BasicDropTargetListener.java
visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerPaneDropTarget.java
visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerTransferHandler.java
visualweb.designer/src/org/netbeans/modules/visualweb/designer/WebForm.java
     1.1 --- a/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DndSupport.java	Fri May 11 09:15:29 2007 +0000
     1.2 +++ b/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DndSupport.java	Fri May 11 11:05:50 2007 +0000
     1.3 @@ -31,10 +31,15 @@
     1.4  import java.awt.datatransfer.UnsupportedFlavorException;
     1.5  import java.beans.PropertyChangeEvent;
     1.6  import java.beans.PropertyChangeListener;
     1.7 +import java.io.File;
     1.8  import java.io.IOException;
     1.9  import java.util.ArrayList;
    1.10  import java.util.List;
    1.11 +import java.util.logging.Level;
    1.12 +import java.util.logging.Logger;
    1.13  import javax.swing.JComponent;
    1.14 +import org.netbeans.api.project.FileOwnerQuery;
    1.15 +import org.netbeans.api.project.Project;
    1.16  import org.netbeans.modules.visualweb.api.designer.Designer;
    1.17  import org.netbeans.modules.visualweb.api.designer.DomProvider;
    1.18  import org.netbeans.modules.visualweb.api.designerapi.DesignTimeTransferDataCreator;
    1.19 @@ -44,6 +49,7 @@
    1.20  import org.openide.ErrorManager;
    1.21  import org.openide.filesystems.FileObject;
    1.22  import org.openide.loaders.DataObject;
    1.23 +import org.openide.util.Exceptions;
    1.24  import org.openide.util.Lookup;
    1.25  import org.openide.util.WeakListeners;
    1.26  import org.w3c.dom.Element;
    1.27 @@ -219,8 +225,56 @@
    1.28          
    1.29          // XXX The other hacked transferables.
    1.30          if (rc == String.class/*Linux*/ || rc == List.class/*Windows/Solaris*/) {
    1.31 -            // XXX #6468896 To be able to drop files (images) from the outside world (desktop).
    1.32 -           return DROP_PARENTED;
    1.33 +            if (rc == List.class) {
    1.34 +                // XXX #99457 There needs to be more fine grained decision.
    1.35 +                try {
    1.36 +                    java.util.List list = (java.util.List) t.getTransferData(importFlavor);
    1.37 +                    for (Object element : list) {
    1.38 +                        if (element instanceof File) {
    1.39 +                            File file = (File)element;
    1.40 +                            // XXX Copy also in FacesDndSupport. 
    1.41 +                            if (file.exists()) {
    1.42 +                                String name = file.getName();
    1.43 +                                String extension = name.substring(name.lastIndexOf(".") + 1); // NOI18N
    1.44 +                    //            Project project = facesModel.getProject();
    1.45 +                                Project project = jsfForm.getProject();
    1.46 +
    1.47 +                                // XXX #95601 Skip the file if it is already inside the project.
    1.48 +                                if (FileOwnerQuery.getOwner(file.toURI()) == project) {
    1.49 +                    //                return panel;
    1.50 +                                    return DROP_DENIED;
    1.51 +                                }
    1.52 +
    1.53 +                                //String mime = FileUtil.getMIMEType(extension);
    1.54 +                                // They've only registered gif and jpg so not a big deal
    1.55 +                                if (FacesDndSupport.isImage(extension)) {
    1.56 +                    //                Location location =
    1.57 +                    //                    computePositions(null, DROP_CENTER, null, getDropPoint(), insertPos, true);
    1.58 +                    //                return panel;
    1.59 +                                    return DROP_PARENTED;
    1.60 +                                } else if (FacesDndSupport.isStylesheet(extension)) {
    1.61 +                    //                return panel;
    1.62 +                                    return DROP_PARENTED;
    1.63 +                                }
    1.64 +                                
    1.65 +                                // XXX TODO Also missing how to check whether Importable.PageImportable can do the import.
    1.66 +                            }
    1.67 +                        }
    1.68 +                    }
    1.69 +                }
    1.70 +                catch (UnsupportedFlavorException ex) {
    1.71 +                    log(ex);
    1.72 +                    return DROP_DENIED;
    1.73 +                }
    1.74 +                catch (IOException ex) {
    1.75 +                    log(ex);
    1.76 +                    return DROP_DENIED;
    1.77 +                }
    1.78 +            } else if (rc == String.class) {
    1.79 +                // TODO Also more fine grained decision.
    1.80 +                return DROP_PARENTED;
    1.81 +            }
    1.82 +            return DROP_DENIED;
    1.83          } else if (rc == org.openide.nodes.Node.class) {
    1.84              // XXX #6482097 Reflecting the impl in FacesDnDSupport.
    1.85              // FIXME Later the impl has to be improved and moved over there.
    1.86 @@ -512,8 +566,8 @@
    1.87  
    1.88      }
    1.89  
    1.90 -    boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
    1.91 -        return facesDndSupport.canImport(comp, transferFlavors);
    1.92 +    boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable) {
    1.93 +        return facesDndSupport.canImport(comp, transferFlavors, transferable);
    1.94      }
    1.95  
    1.96      // XXX >>> JsfSupport
    1.97 @@ -628,4 +682,10 @@
    1.98              }
    1.99          }
   1.100      } // End of DnDListener.
   1.101 +    
   1.102 +    
   1.103 +    private static void log(Exception ex) {
   1.104 +        Logger logger = Logger.getLogger(DndSupport.class.getName());
   1.105 +        logger.log(Level.INFO, null, ex);
   1.106 +    }
   1.107  }
     2.1 --- a/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DomProviderImpl.java	Fri May 11 09:15:29 2007 +0000
     2.2 +++ b/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/DomProviderImpl.java	Fri May 11 11:05:50 2007 +0000
     2.3 @@ -176,9 +176,9 @@
     2.4  //        return getDndSupport().getImportFlavor(flavors);
     2.5  //    }
     2.6  
     2.7 -    public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
     2.8 +    public boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable) {
     2.9  //        return getFacesModel().getDnDSupport().canImport(comp, transferFlavors);
    2.10 -        return getDndSupport().canImport(comp, transferFlavors);
    2.11 +        return getDndSupport().canImport(comp, transferFlavors, transferable);
    2.12      }
    2.13  
    2.14  //    public DesignBean[] pasteBeans(Transferable t, DesignBean parent, MarkupPosition pos, Point location, DomProvider.CoordinateTranslator coordinateTranslator) {
     3.1 --- a/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/FacesDndSupport.java	Fri May 11 09:15:29 2007 +0000
     3.2 +++ b/visualweb.designer.jsf/src/org/netbeans/modules/visualweb/designer/jsf/FacesDndSupport.java	Fri May 11 11:05:50 2007 +0000
     3.3 @@ -179,7 +179,7 @@
     3.4       * @param flavors  The data formats available
     3.5       * @return  true if the data can be inserted into the component, false otherwise.
     3.6       */
     3.7 -    public boolean canImport(JComponent comp, DataFlavor[] flavors) {
     3.8 +    public boolean canImport(JComponent comp, DataFlavor[] flavors, Transferable transferable) {
     3.9          // TODO Moving to NB winsys
    3.10          // Ensure that the toolbox, if in auto-hide mode, hides such that
    3.11          // the entire drawing canvas is visible and usable as a drop location
    3.12 @@ -202,7 +202,8 @@
    3.13          //if (!(c.isEditable() && c.isEnabled())) {
    3.14          //    return false;
    3.15          //}
    3.16 -        boolean canImport = getImportFlavor(flavors) != null;
    3.17 +//        boolean canImport = getImportFlavor(flavors) != null;
    3.18 +        boolean canImport = getImportFlavor(flavors, null) != null;
    3.19  
    3.20          return canImport;
    3.21      }
    3.22 @@ -228,6 +229,10 @@
    3.23       * </ol>
    3.24       */
    3.25      public static DataFlavor getImportFlavor(DataFlavor[] flavors) {
    3.26 +        return getImportFlavor(flavors, null);
    3.27 +    }
    3.28 +    
    3.29 +    private static DataFlavor getImportFlavor(DataFlavor[] flavors, Transferable transferable) {
    3.30          DataFlavor plainFlavor = null;
    3.31          DataFlavor refFlavor = null;
    3.32          DataFlavor stringFlavor = null;
     4.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/api/designer/DomProvider.java	Fri May 11 09:15:29 2007 +0000
     4.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/api/designer/DomProvider.java	Fri May 11 11:05:50 2007 +0000
     4.3 @@ -116,7 +116,7 @@
     4.4  
     4.5      // >>> DnD
     4.6  //    public DataFlavor getImportFlavor(DataFlavor[] flavors);
     4.7 -    public boolean canImport(JComponent comp, DataFlavor[] transferFlavors);
     4.8 +    public boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable);
     4.9  //    public DesignBean[] pasteBeans(Transferable t, DesignBean parent, MarkupPosition pos, Point location, CoordinateTranslator coordinateTranslator);
    4.10  //    public Element[] pasteComponents(Transferable t, Element parentComponentRootElement, Point location);
    4.11  //    public void importData(JComponent comp, Transferable t, Object transferData, Dimension dimension, Location location, CoordinateTranslator coordinateTranslator, int dropAction);
     5.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/BasicDropTargetListener.java	Fri May 11 09:15:29 2007 +0000
     5.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/BasicDropTargetListener.java	Fri May 11 11:05:50 2007 +0000
     5.3 @@ -239,7 +239,12 @@
     5.4      public void dragEnter(DropTargetDragEvent e) {
     5.5  	component = getComponent(e);
     5.6  	TransferHandler th = component.getTransferHandler();
     5.7 -	canImport = th.canImport(component, e.getCurrentDataFlavors());
     5.8 +        if (th instanceof DesignerTransferHandler) {
     5.9 +            // XXX #99457 Internal enhanced TransferHandler to provide more fine-grained decision (based on Transferable as well).
    5.10 +            canImport = ((DesignerTransferHandler)th).canImport(component, e.getCurrentDataFlavors(), e.getTransferable());
    5.11 +        } else {
    5.12 +            canImport = th.canImport(component, e.getCurrentDataFlavors());
    5.13 +        }
    5.14  	if (canImport) {
    5.15  	    saveComponentState(component);
    5.16  	    lastPosition = e.getLocation();
     6.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerPaneDropTarget.java	Fri May 11 09:15:29 2007 +0000
     6.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerPaneDropTarget.java	Fri May 11 11:05:50 2007 +0000
     6.3 @@ -163,7 +163,15 @@
     6.4  	    JComponent c = (JComponent)e.getDropTargetContext().getComponent();
     6.5  	    TransferHandler importer = c.getTransferHandler();
     6.6              
     6.7 -            if (importer != null && importer.canImport(c, flavors)) {
     6.8 +//            if (importer != null && importer.canImport(c, flavors)) {
     6.9 +            // XXX #99457 Internally enhanced TransferHandler to use also Transferable to compare.
    6.10 +            boolean canImporterImport;
    6.11 +            if (importer instanceof DesignerTransferHandler) {
    6.12 +                canImporterImport = ((DesignerTransferHandler)importer).canImport(c, flavors, e.getTransferable());
    6.13 +            } else {
    6.14 +                canImporterImport = importer == null ? false : importer.canImport(c, flavors);
    6.15 +            }
    6.16 +            if (canImporterImport) {
    6.17                  canImport = true;
    6.18              } else {
    6.19                  canImport = false;
     7.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerTransferHandler.java	Fri May 11 09:15:29 2007 +0000
     7.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/DesignerTransferHandler.java	Fri May 11 11:05:50 2007 +0000
     7.3 @@ -46,20 +46,24 @@
     7.4  
     7.5  
     7.6      public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
     7.7 -        //the following assert is changed by an if statement
     7.8 -        //assert comp == webform.getPane();
     7.9 -        if(DesignerUtils.DEBUG) {
    7.10 -            DesignerUtils.debugLog(getClass().getName() + ".canImport(JComponent, DataFlavor[])");
    7.11 -        }
    7.12 -        if(comp != webForm.getPane()) {
    7.13 -            throw(new IllegalArgumentException("Wrong component.")); // NOI18N
    7.14 -        }
    7.15 -        if(transferFlavors == null) {
    7.16 -            throw(new IllegalArgumentException("Transferable has not flavors.")); // NOI18N
    7.17 -        }
    7.18 +//        //the following assert is changed by an if statement
    7.19 +//        //assert comp == webform.getPane();
    7.20 +//        if(DesignerUtils.DEBUG) {
    7.21 +//            DesignerUtils.debugLog(getClass().getName() + ".canImport(JComponent, DataFlavor[])");
    7.22 +//        }
    7.23 +//        if(comp != webForm.getPane()) {
    7.24 +//            throw(new IllegalArgumentException("Wrong component.")); // NOI18N
    7.25 +//        }
    7.26 +//        if(transferFlavors == null) {
    7.27 +//            throw(new IllegalArgumentException("Transferable has not flavors.")); // NOI18N
    7.28 +//        }
    7.29  
    7.30          // XXX
    7.31 -        return webForm.canImport(comp, transferFlavors);
    7.32 +        return webForm.canImport(comp, transferFlavors, null);
    7.33 +    }
    7.34 +    
    7.35 +    public boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable) {
    7.36 +        return webForm.canImport(comp, transferFlavors, transferable);
    7.37      }
    7.38  
    7.39      public boolean importData(JComponent comp, Transferable t) {
     8.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/WebForm.java	Fri May 11 09:15:29 2007 +0000
     8.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/WebForm.java	Fri May 11 11:05:50 2007 +0000
     8.3 @@ -1723,8 +1723,8 @@
     8.4  //        return domProvider.getImportFlavor(flavors);
     8.5  //    }
     8.6  
     8.7 -    boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
     8.8 -        return domProvider.canImport(comp, transferFlavors);
     8.9 +    boolean canImport(JComponent comp, DataFlavor[] transferFlavors, Transferable transferable) {
    8.10 +        return domProvider.canImport(comp, transferFlavors, transferable);
    8.11      }
    8.12  
    8.13  //    DesignBean[] pasteBeans(Transferable t, DesignBean parent, MarkupPosition pos, Point location, DomProvider.CoordinateTranslator coordinateTranslator) {