1 /* 2 * Copyright (c) 2000, 2017, 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 javax.print; 27 28 /** 29 * Services may optionally provide UIs which allow different styles of 30 * interaction in different roles. One role may be end-user browsing and setting 31 * of print options. Another role may be administering the print service. 32 * <p> 33 * Although the Print Service API does not presently provide standardised 34 * support for administering a print service, monitoring of the print service is 35 * possible and a UI may provide for private update mechanisms. 36 * <p> 37 * The basic design intent is to allow applications to lazily locate and 38 * initialize services only when needed without any API dependencies except in 39 * an environment in which they are used. 40 * <p> 41 * Swing UIs are preferred as they provide a more consistent {@literal L&F} and 42 * can support accessibility APIs. 43 * <p> 44 * Example usage: 45 * <pre> 46 * ServiceUIFactory factory = printService.getServiceUIFactory(); 47 * if (factory != null) { 48 * JComponent swingui = (JComponent)factory.getUI( 49 * ServiceUIFactory.MAIN_UIROLE, 50 * ServiceUIFactory.JCOMPONENT_UI); 51 * if (swingui != null) { 52 * tabbedpane.add("Custom UI", swingui); 53 * } 54 * } 55 * </pre> 56 */ 57 public abstract class ServiceUIFactory { 58 59 /** 60 * Denotes a UI implemented as a Swing component. The value of the string is 61 * the fully qualified classname : "javax.swing.JComponent". 62 */ 63 public static final String JCOMPONENT_UI = "javax.swing.JComponent"; 64 65 /** 66 * Denotes a UI implemented as an AWT panel. The value of the string is the 67 * fully qualified classname : "java.awt.Panel" 68 */ 69 public static final String PANEL_UI = "java.awt.Panel"; 70 71 /** 72 * Denotes a UI implemented as an AWT dialog. The value of the string is the 73 * fully qualified classname : "java.awt.Dialog" 74 */ 75 public static final String DIALOG_UI = "java.awt.Dialog"; 76 77 /** 78 * Denotes a UI implemented as a Swing dialog. The value of the string is 79 * the fully qualified classname : "javax.swing.JDialog" 80 */ 81 public static final String JDIALOG_UI = "javax.swing.JDialog"; 82 83 /** 84 * Denotes a UI which performs an informative "About" role. 85 */ 86 public static final int ABOUT_UIROLE = 1; 87 88 /** 89 * Denotes a UI which performs an administrative role. 90 */ 91 public static final int ADMIN_UIROLE = 2; 92 93 /** 94 * Denotes a UI which performs the normal end user role. 95 */ 96 public static final int MAIN_UIROLE = 3; 97 98 /** 99 * Not a valid role but role id's greater than this may be used for private 100 * roles supported by a service. Knowledge of the function performed by this 101 * role is required to make proper use of it. 102 */ 103 public static final int RESERVED_UIROLE = 99; 104 105 /** 106 * Get a UI object which may be cast to the requested UI type by the 107 * application and used in its user interface. 108 * 109 * @param role requested. Must be one of the standard roles or a private 110 * role supported by this factory. 111 * @param ui type in which the role is requested 112 * @return the UI role or {@code null} if the requested UI role is not 113 * available from this factory 114 * @throws IllegalArgumentException if the role or ui is neither one of the 115 * standard ones, nor a private one supported by the factory 116 */ 117 public abstract Object getUI(int role, String ui) ; 118 119 /** 120 * Given a UI role obtained from this factory obtain the UI types available 121 * from this factory which implement this role. The returned {@code Strings} 122 * should refer to the static variables defined in this class so that 123 * applications can use equality of reference ("=="). 124 * 125 * @param role to be looked up 126 * @return the UI types supported by this class for the specified role, 127 * {@code null} if no UIs are available for the role 128 * @throws IllegalArgumentException is the role is a non-standard role not 129 * supported by this factory 130 */ 131 public abstract String[] getUIClassNamesForRole(int role) ; 132 133 }