001 /*
002 * Copyright 2000 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package javax.print;
027
028 /**
029 * Services may optionally provide UIs which allow different styles
030 * of interaction in different roles.
031 * One role may be end-user browsing and setting of print options.
032 * Another role may be administering the print service.
033 * <p>
034 * Although the Print Service API does not presently provide standardised
035 * support for administering a print service, monitoring of the print
036 * service is possible and a UI may provide for private update mechanisms.
037 * <p>
038 * The basic design intent is to allow applications to lazily locate and
039 * initialize services only when needed without any API dependencies
040 * except in an environment in which they are used.
041 * <p>
042 * Swing UIs are preferred as they provide a more consistent L&F and
043 * can support accessibility APIs.
044 * <p>
045 * Example usage:
046 * <pre>
047 * ServiceUIFactory factory = printService.getServiceUIFactory();
048 * if (factory != null) {
049 * JComponent swingui = (JComponent)factory.getUI(
050 * ServiceUIFactory.MAIN_UIROLE,
051 * ServiceUIFactory.JCOMPONENT_UI);
052 * if (swingui != null) {
053 * tabbedpane.add("Custom UI", swingui);
054 * }
055 * }
056 * </pre>
057 */
058
059 public abstract class ServiceUIFactory {
060
061 /**
062 * Denotes a UI implemented as a Swing component.
063 * The value of the String is the fully qualified classname :
064 * "javax.swing.JComponent".
065 */
066 public static final String JCOMPONENT_UI = "javax.swing.JComponent";
067
068 /**
069 * Denotes a UI implemented as an AWT panel.
070 * The value of the String is the fully qualified classname :
071 * "java.awt.Panel"
072 */
073 public static final String PANEL_UI = "java.awt.Panel";
074
075 /**
076 * Denotes a UI implemented as an AWT dialog.
077 * The value of the String is the fully qualified classname :
078 * "java.awt.Dialog"
079 */
080 public static final String DIALOG_UI = "java.awt.Dialog";
081
082 /**
083 * Denotes a UI implemented as a Swing dialog.
084 * The value of the String is the fully qualified classname :
085 * "javax.swing.JDialog"
086 */
087 public static final String JDIALOG_UI = "javax.swing.JDialog";
088
089 /**
090 * Denotes a UI which performs an informative "About" role.
091 */
092 public static final int ABOUT_UIROLE = 1;
093
094 /**
095 * Denotes a UI which performs an administrative role.
096 */
097 public static final int ADMIN_UIROLE = 2;
098
099 /**
100 * Denotes a UI which performs the normal end user role.
101 */
102 public static final int MAIN_UIROLE = 3;
103
104 /**
105 * Not a valid role but role id's greater than this may be used
106 * for private roles supported by a service. Knowledge of the
107 * function performed by this role is required to make proper use
108 * of it.
109 */
110 public static final int RESERVED_UIROLE = 99;
111
112 /**
113 * Get a UI object which may be cast to the requested UI type
114 * by the application and used in its user interface.
115 * <P>
116 * @param role requested. Must be one of the standard roles or
117 * a private role supported by this factory.
118 * @param ui type in which the role is requested.
119 * @return the UI role or null if the requested UI role is not available
120 * from this factory
121 * @throws IllegalArgumentException if the role or ui is neither
122 * one of the standard ones, nor a private one
123 * supported by the factory.
124 */
125 public abstract Object getUI(int role, String ui);
126
127 /**
128 * Given a UI role obtained from this factory obtain the UI
129 * types available from this factory which implement this role.
130 * The returned Strings should refer to the static variables defined
131 * in this class so that applications can use equality of reference
132 * ("==").
133 * @param role to be looked up.
134 * @return the UI types supported by this class for the specified role,
135 * null if no UIs are available for the role.
136 * @throws IllegalArgumentException is the role is a non-standard
137 * role not supported by this factory.
138 */
139 public abstract String[] getUIClassNamesForRole(int role);
140
141 }
|