<AWT Dev> 4899516: Transferable has no DataFlavors when dragging from Gnome window to Swing
Alla Redko
Alla.Redko at Sun.COM
Thu Jun 5 02:36:15 PDT 2008
Hi Damjan,
Please find some comments on javadoc.
Note: the <code> tag is considered outdated, use the {@code} notation
instead.
1.
+ *
+ * You should generally use javaURIListFlavor instead of this.
*/
I'd suggest:
+ *
+ * Use the {@code javaURIListFlavor} class instead.
*/
2.
+ /**
+ * To transfer a list of files and/or URIs to/from Java (and
+ * the underlying platform) a <code>DataFlavor</code> of this
+ * type/subtype and representation class of
+ * <code>java.util.List</code> is used. Each element of this
+ * list is required/guaranteed to be of type
+ * <code>java.net.URI</code>.
+ * <p>
+ * You should use this flavor instead of javaFileListFlavor,
+ * because some platforms provide only URI lists, not file
+ * lists. On these platforms, if and only if all URIs are
+ * files for the transfer in question, you can use/get
+ * javaFileListFlavor in addition to this flavor, for
+ * backward compatibility.
+ *
+ * @since 1.7
+ */
I'd rephrase:
+ /**
+ * A {@code DataFlavor} of this type (subtype) and representation
+ * class of the {@code java.util.List} class are used to transfer a list of files
+ * or URIs to Java and the underlying platform. Each element of this
+ * list is required to be of the {@code java.net.URI} type.
+ * <p>
+ * Use this flavor instead of {@code javaFileListFlavor},
+ * because some platforms support only URI lists, not file
+ * lists. On these platforms you may use {@code javaFileListFlavor} as well
+ * to provide backward compatibility.
+ *
+ * @since 1.7
+ */
3.
+ /**
+ * Returns true if the <code>DataFlavor</code> specified represents
+ * a list of URI objects.
+ * @return true is the <code>DataFlavor</code> specified represents
+ * a List of File objects
+ */
My corrections:
+ /**
+ * Returns {@code true} if the specified {@code DataFlavor} represents
+ * a list of URI objects.
+ * @return {@code true} if the specified {@code DataFlavor} represents
+ * a {@code List} of {@code File} objects
+ */
4.
/**
+ * Determines whether the DataFlavor corresponding to the specified long
+ * format is DataFlavor.javaURIListFlavor.
+ */
Minor corrections:
/**
+ * Determines whether the {@code DataFlavor} corresponding to the specified long
+ * format is {@code DataFlavor.javaURIListFlavor}.
+ */
5.
+ /**
+ * Translate a transferable to a URI list. The default implementation
+ * provides a text/uri-list MIME type in the target encoding.
+ */
Minor corrections:
+ /**
+ * Translates a transferable object to a URI list. The default implementation
+ * provides a text/uri-list MIME type in the target encoding.
+ */
6.
+ /**
+ * Decode URIs from either a byte array or a stream.
+ */
A minor correction:
+ /**
+ * Decodes URIs from either a byte array or a stream.
+ */
Best regards,
Alla
Denis S. Fokin wrote:
> Hi Damjan,
>
> I have some thoughts (sorry for the delay).
>
> At first, I like your prototype. Thank you for your efforts.
>
> So some ideas and notes are bellow.
>
> 1.
> The first idea is we should not return an empty List<Files> list. The
> better approach would be if we do not publish javaFileListFlavor data
> flavor. In that case we have to analyze content of the URI list and
> decide whether we can provide all URIs as files. If we cannot, user on
> target must not receive javaFileListFlavor data flavor at all. Only
> javaURIListFlavor.
>
> 2.
> Some consideration about JavaDoc
>
> ******** DataFlavor.java ***********
>
> + /**
> + * To transfer a list of files and/or URIs to/from Java (and
> + * the underlying platform) a <code>DataFlavor</code> of this
> + * type/subtype and representation class of
> + * <code>java.util.List</code> is used. Each element of this
> + * list is required/guaranteed to be of type
> + * <code>java.net.URI</code>.
> + * <p>
> + * You should use this flavor instead of javaFileListFlavor,
> + * because some platforms provide only URI lists, not file
> + * lists. On these platforms, if and only if all URIs are
> + * files for the transfer in question, you can use/get
> + * javaFileListFlavor in addition to this flavor, for
> + * backward compatibility.
>
> I think that there is no need to mention javaFileListFlavor here in case
> if we are going provide javaURIListFlavor on Windows platform.
>
> 3.
>
> **** DataTransferer.java ***************
>
> - private String getBestCharsetForTextFormat(Long lFormat,
> + protected String getBestCharsetForTextFormat(Long lFormat,
>
> I do not think that changing access level is a good idea here. It is
> needed only in single subclass so may be it would be better redesign
> this approach.
>
> Thank you,
> Denis.
>
> Damjan Jovanovic wrote:
>
>> On Mon, Oct 1, 2007 at 7:53 PM, Denis S. Fokin <Denis.Fokin at sun.com> wrote:
>>
>>
>>> Hi Damjan,
>>>
>>>
>>>
>>>> Ok I'm sorry for arguing so much. Less talk more code :-).
>>>>
>>>>
>>> >
>>> > This weekend I started writing code for URIListFlavor, but I quickly
>>> > realized another problem. If you deprecate javaFileListFlavor and use
>>> > URIListFlavor, the problem still exists in the opposite direction:
>>> > when Java is the drag source and a native application the drop target,
>>> > on non-XDnD implementations you still have to do lossy conversion from
>>> > URIs to Files and somehow disregard non-local-file URIs, and possibly
>>> > provide the native application with an empty file list.
>>> >
>>> > Any ideas?
>>> >
>>> >
>>> Currently, AWT supports OLE Drag & Drop protocol on Windows platform,
>>> XDnD and Motif Drag & Drop protocols on UNIX-like platforms.
>>>
>>> In case if some application asks our java source about available
>>> formats, we will provide javaFileListFlavor only if among our data files
>>> are presented.
>>>
>>> On the basis of a value returned by uri.getScheme() method we could
>>> understand whether we should provide javaFileListFlavor for native
>>> application.
>>>
>>> In this case we will not publish native flavors for file list (e.g.
>>> HDROP on windows).
>>>
>>> I suppose, the same scenario should works for java intra-jvm transfer.
>>>
>>> To summarize, as far as we have all information on drag source we can
>>> publish only data flavors which we really have.
>>>
>>> But I could miss out something, so give me know where the problems arise.
>>>
>>> Thank you,
>>> Denis.
>>>
>>>
>>>
>> Hi again
>>
>> I've made a patch that works for me (attached). It adds a
>> java.awt.datatransfer.DataFlavor.javaURIListFlavor of MIME type
>> application/x-java-uri-list;class=java.util.List, and does full
>> bidirectional conversion between file lists and URI lists. That is,
>> file lists are promoted to URI lists, and URI lists are lossily
>> converted to file lists.
>>
>> If you drag a file list from native into Java, the application sees
>> both a URI list and a file list. If you drag in a URI list it sees a
>> URI list, and if all URIs are files also a non-empty file list,
>> otherwise just an empty file list. If a Java drag source provides a
>> file list to native then native sees both a URI list (where
>> implemented on native) and a file list, and where Java provides a URI
>> list native sees the URI list (where implemented) and the subset of
>> files taken from those URIs that are local files (javaFileListFlavor
>> already uses similar logic: it just ignores non-String non-File
>> entries).
>>
>> What happens when native doesn't support URI lists and a Java drag
>> source provides it? Currently if native doesn't support a URI list
>> format, you won't be able to do inter-JVM and Java->native URI list
>> transfers, only the local files in those URIs will go through and be
>> seen as a file list by the other side. Out of Windows, X11, and Motif,
>> in my patch currently only X11 supports them :-(. I haven't been able
>> to find proper URI list support in Windows, most of the fancy shell
>> clipboard types that can transfer URLs and such, seem to only transfer
>> 1 item instead of a list.
>>
>> Otherwise I've tested dragging files between Java and Gnome's
>> Nautilus, in both directions. It works well :-).
>>
>> Thoughts? Suggestions?
>>
>> Bye
>> Damjan
>>
>>
>
>
--
Alla Redko
Technical Writer
Sun Microsystems, Inc.
Sun Internal: x33361
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20080605/4405848a/attachment.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Alla_Redko.vcf
Type: text/x-vcard
Size: 135 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20080605/4405848a/Alla_Redko.vcf
More information about the awt-dev
mailing list