jdk/test/java/awt/datatransfer/ClipboardInterVMTest/ClipboardInterVMTest.java
author goetz
Tue, 14 Jun 2016 10:44:59 +0200
changeset 39056 d99e63b6d962
parent 32427 c22b7e41adf3
permissions -rw-r--r--
8159690: [TESTBUG] Mark headful tests with @key headful. Reviewed-by: simonis, alexsch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29885
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     1
/*
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     2
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     4
 *
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     7
 * published by the Free Software Foundation.
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     8
 *
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    13
 * accompanied this code).
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    14
 *
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    18
 *
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    21
 * questions.
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    22
 */
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    23
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    24
/*
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    25
  @test
39056
d99e63b6d962 8159690: [TESTBUG] Mark headful tests with @key headful.
goetz
parents: 32427
diff changeset
    26
  @key headful
29885
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    27
  @bug 8071668
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    28
  @summary Check whether clipboard see changes from external process after taking ownership
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    29
  @author Anton Nashatyrev: area=datatransfer
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    30
  @library /lib/testlibrary
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    31
  @build jdk.testlibrary.Utils
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    32
  @run main ClipboardInterVMTest
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    33
*/
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    34
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    35
import jdk.testlibrary.Utils;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    36
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    37
import java.awt.*;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    38
import java.awt.datatransfer.*;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    39
import java.io.BufferedReader;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    40
import java.io.File;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    41
import java.io.IOException;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    42
import java.io.Reader;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    43
import java.util.ArrayList;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    44
import java.util.Arrays;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    45
import java.util.List;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    46
import java.util.concurrent.CountDownLatch;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    47
import java.util.concurrent.TimeUnit;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    48
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    49
public class ClipboardInterVMTest {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    50
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    51
    static CountDownLatch lostOwnershipMonitor = new CountDownLatch(1);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    52
    static CountDownLatch flavorChangedMonitor = new CountDownLatch(1);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    53
    static Process process;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    54
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    55
    public static void main(String[] args) throws Throwable {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    56
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    57
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    58
        if (args.length > 0) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    59
            System.out.println("Changing clip...");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    60
            clip.setContents(new StringSelection("pong"), null);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    61
            System.out.println("done");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    62
            // keeping this process running for a while since on Mac the clipboard
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    63
            // will be invalidated via NSApplicationDidBecomeActiveNotification
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    64
            // callback in the main process after this child process finishes
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    65
            Thread.sleep(60 * 1000);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    66
            return;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    67
        };
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    68
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    69
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    70
        clip.setContents(new CustomSelection(), new ClipboardOwner() {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    71
            @Override
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    72
            public void lostOwnership(Clipboard clipboard, Transferable contents) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    73
                System.out.println("ClipboardInterVMTest.lostOwnership");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    74
                lostOwnershipMonitor.countDown();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    75
            }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    76
        });
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    77
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    78
        clip.addFlavorListener(new FlavorListener() {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    79
            @Override
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    80
            public void flavorsChanged(FlavorEvent e) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    81
                System.out.println("ClipboardInterVMTest.flavorsChanged");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    82
                flavorChangedMonitor.countDown();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    83
            }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    84
        });
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    85
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    86
        System.out.println("Starting external clipborad modifier...");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    87
        new Thread(() -> runTest(ClipboardInterVMTest.class.getCanonicalName(), "pong")).start();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    88
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    89
        String content = "";
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    90
        long startTime = System.currentTimeMillis();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    91
        while (System.currentTimeMillis() - startTime < 30 * 1000) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    92
            Transferable c = clip.getContents(null);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    93
            if (c.isDataFlavorSupported(DataFlavor.plainTextFlavor)) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    94
                Reader reader = DataFlavor.plainTextFlavor.getReaderForText(c);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    95
                content = new BufferedReader(reader).readLine();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    96
                System.out.println(content);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    97
                if (content.equals("pong")) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    98
                    break;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
    99
                }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   100
            }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   101
            Thread.sleep(200);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   102
        }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   103
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   104
        if (!lostOwnershipMonitor.await(10, TimeUnit.SECONDS)) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   105
            throw new RuntimeException("No LostOwnership event received.");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   106
        };
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   107
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   108
        if (!flavorChangedMonitor.await(10, TimeUnit.SECONDS)) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   109
            throw new RuntimeException("No LostOwnership event received.");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   110
        };
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   111
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   112
        if (!content.equals("pong")) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   113
            throw new RuntimeException("Content was not passed.");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   114
        }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   115
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   116
        process.destroy();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   117
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   118
        System.out.println("Passed.");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   119
    }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   120
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   121
    private static void runTest(String main, String... args)  {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   122
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   123
        try {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   124
            List<String> opts = new ArrayList<>();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   125
            opts.add(getJavaExe());
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   126
            opts.addAll(Arrays.asList(Utils.getTestJavaOpts()));
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   127
            opts.add("-cp");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   128
            opts.add(System.getProperty("test.class.path", System.getProperty("java.class.path")));
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   129
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   130
            opts.add(main);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   131
            opts.addAll(Arrays.asList(args));
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   132
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   133
            ProcessBuilder pb = new ProcessBuilder(opts.toArray(new String[0]));
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   134
            process = pb.start();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   135
        } catch (Throwable throwable) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   136
            throw new RuntimeException(throwable);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   137
        }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   138
    }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   139
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   140
    private static String getJavaExe() throws IOException {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   141
        File p  = new File(System.getProperty("java.home"), "bin");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   142
        File j = new File(p, "java");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   143
        if (!j.canRead()) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   144
            j = new File(p, "java.exe");
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   145
        }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   146
        if (!j.canRead()) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   147
            throw new RuntimeException("Can't find java executable in " + p);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   148
        }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   149
        return j.getCanonicalPath();
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   150
    }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   151
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   152
    static class CustomSelection implements Transferable {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   153
        private static final DataFlavor[] flavors = { DataFlavor.allHtmlFlavor };
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   154
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   155
        public DataFlavor[] getTransferDataFlavors() {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   156
            return flavors;
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   157
        }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   158
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   159
        public boolean isDataFlavorSupported(DataFlavor flavor) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   160
            return flavors[0].equals(flavor);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   161
        }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   162
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   163
        public Object getTransferData(DataFlavor flavor)
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   164
                throws UnsupportedFlavorException, java.io.IOException {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   165
            if (isDataFlavorSupported(flavor)) {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   166
                return "ping";
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   167
            } else {
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   168
                throw new UnsupportedFlavorException(flavor);
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   169
            }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   170
        }
6eb60fac3383 8071668: [macosx] Clipboard does not work with 3rd parties Clipboard Managers
anashaty
parents:
diff changeset
   171
    }
32427
c22b7e41adf3 8134984: Text files should end in exactly one newline
martin
parents: 29885
diff changeset
   172
}