< 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 >