1 /* 2 * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.awt.X11; 27 28 import java.util.ArrayList; 29 import java.util.Collections; 30 import java.util.Iterator; 31 import java.util.List; 32 33 /** 34 * This class is a registry for the supported drag and drop protocols. 35 * 36 * @since 1.5 37 */ 38 final class XDragAndDropProtocols { 39 private final static List<XDragSourceProtocol> dragProtocols; 40 private final static List<XDropTargetProtocol> dropProtocols; 41 42 public static final String XDnD = "XDnD"; 43 public static final String MotifDnD = "MotifDnD"; 44 45 static { 46 // Singleton listener for all drag source protocols. 47 XDragSourceProtocolListener dragSourceProtocolListener = 48 XDragSourceContextPeer.getXDragSourceProtocolListener(); 49 // Singleton listener for all drop target protocols. 50 XDropTargetProtocolListener dropTargetProtocolListener = 51 XDropTargetContextPeer.getXDropTargetProtocolListener(); 52 53 List<XDragSourceProtocol> tDragSourceProtocols = new ArrayList<>(); 54 XDragSourceProtocol xdndDragSourceProtocol = 55 XDnDDragSourceProtocol.createInstance(dragSourceProtocolListener); 56 tDragSourceProtocols.add(xdndDragSourceProtocol); 57 XDragSourceProtocol motifdndDragSourceProtocol = 58 MotifDnDDragSourceProtocol.createInstance(dragSourceProtocolListener); 59 tDragSourceProtocols.add(motifdndDragSourceProtocol); 60 61 List<XDropTargetProtocol> tDropTargetProtocols = new ArrayList<>(); 62 XDropTargetProtocol xdndDropTargetProtocol = 63 XDnDDropTargetProtocol.createInstance(dropTargetProtocolListener); 64 tDropTargetProtocols.add(xdndDropTargetProtocol); 65 XDropTargetProtocol motifdndDropTargetProtocol = 66 MotifDnDDropTargetProtocol.createInstance(dropTargetProtocolListener); 67 tDropTargetProtocols.add(motifdndDropTargetProtocol); 68 69 dragProtocols = Collections.unmodifiableList(tDragSourceProtocols); 70 dropProtocols = Collections.unmodifiableList(tDropTargetProtocols); 71 } 72 73 static Iterator<XDragSourceProtocol> getDragSourceProtocols() { 74 return dragProtocols.iterator(); 75 } 76 77 static Iterator<XDropTargetProtocol> getDropTargetProtocols() { 78 return dropProtocols.iterator(); 79 } 80 81 /* 82 * Returns a XDragSourceProtocol whose name equals to the specified string 83 * or null if no such protocol is registered. 84 */ 85 public static XDragSourceProtocol getDragSourceProtocol(String name) { 86 // Protocol name cannot be null. 87 if (name == null) { 88 return null; 89 } 90 91 Iterator<XDragSourceProtocol> dragProtocols = 92 XDragAndDropProtocols.getDragSourceProtocols(); 93 while (dragProtocols.hasNext()) { 94 XDragSourceProtocol dragProtocol = dragProtocols.next(); 95 if (dragProtocol.getProtocolName().equals(name)) { 96 return dragProtocol; 97 } 98 } 99 100 return null; 101 } 102 103 /* 104 * Returns a XDropTargetProtocol which name equals to the specified string 105 * or null if no such protocol is registered. 106 */ 107 public static XDropTargetProtocol getDropTargetProtocol(String name) { 108 // Protocol name cannot be null. 109 if (name == null) { 110 return null; 111 } 112 113 Iterator<XDropTargetProtocol> dropProtocols = 114 XDragAndDropProtocols.getDropTargetProtocols(); 115 while (dropProtocols.hasNext()) { 116 XDropTargetProtocol dropProtocol = dropProtocols.next(); 117 if (dropProtocol.getProtocolName().equals(name)) { 118 return dropProtocol; 119 } 120 } 121 122 return null; 123 } 124 }