< prev index next >
src/java.desktop/macosx/classes/sun/lwawt/macosx/CDataTransferer.java
Print this page
*** 34,43 ****
--- 34,44 ----
import java.net.URL;
import java.nio.charset.Charset;
import java.text.Normalizer;
import java.text.Normalizer.Form;
import java.util.*;
+ import java.util.regex.*;
import java.awt.datatransfer.*;
import sun.awt.datatransfer.*;
public class CDataTransferer extends DataTransferer {
*** 127,142 ****
@Override
public Object translateBytes(byte[] bytes, DataFlavor flavor,
long format, Transferable transferable) throws IOException {
if (format == CF_URL && URL.class.equals(flavor.getRepresentationClass())) {
! String[] strings = dragQueryFile(bytes);
! if(strings == null || strings.length == 0) {
! return null;
}
! return new URL(strings[0]);
! } else if(isUriListFlavor(flavor)) {
// dragQueryFile works fine with files and url,
// it parses and extracts values from property list.
// maxosx always returns property list for
// CF_URL and CF_FILE
String[] strings = dragQueryFile(bytes);
--- 128,152 ----
@Override
public Object translateBytes(byte[] bytes, DataFlavor flavor,
long format, Transferable transferable) throws IOException {
if (format == CF_URL && URL.class.equals(flavor.getRepresentationClass())) {
! String charset = Charset.defaultCharset().name();
! if (transferable != null && transferable.isDataFlavorSupported(javaTextEncodingFlavor)) {
! try {
! charset = new String((byte[]) transferable.getTransferData(javaTextEncodingFlavor), "UTF-8");
! } catch (UnsupportedFlavorException cannotHappen) {
! }
! }
!
! String xml = new String(bytes, charset);
! // macosx pasteboard returns a property list that consists of one URL
! // let's extract it.
! return new URL(extractURL(xml));
}
!
! if(isUriListFlavor(flavor) && format == CF_FILE) {
// dragQueryFile works fine with files and url,
// it parses and extracts values from property list.
// maxosx always returns property list for
// CF_URL and CF_FILE
String[] strings = dragQueryFile(bytes);
*** 154,163 ****
--- 164,183 ----
}
return super.translateBytes(bytes, flavor, format, transferable);
}
+ private String extractURL(String xml) {
+ Pattern urlExtractorPattern = Pattern.compile("<string>(.*)</string>");
+ Matcher matcher = urlExtractorPattern.matcher(xml);
+ if (matcher.find()) {
+ return matcher.group(1);
+ } else {
+ return null;
+ }
+ }
+
@Override
protected synchronized Long getFormatForNativeAsLong(String str) {
Long format = predefinedClipboardNameMap.get(str);
if (format == null) {
< prev index next >