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
26package 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 */
57public 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}
134