summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2004-04-26 21:08:21 +0000
committerMichael Koch <konqueror@gmx.de>2004-04-26 21:08:21 +0000
commit8079c364f70a3ae009707ac31901008ec3cdc4a8 (patch)
treeabe857d68fa68bff85f32313697ea4334da30a6a
parentb7834c5c01d169e1fbd2d635e7a8279b63f75c29 (diff)
downloadclasspath-8079c364f70a3ae009707ac31901008ec3cdc4a8.tar.gz
2004-04-26 Michael Koch <konqueror@gmx.de>
* javax/print/CancelablePrintJob.java, javax/print/Doc.java, javax/print/DocFlavor.java, javax/print/DocPrintJob.java, javax/print/FlavorException.java, javax/print/PrintException.java, javax/print/PrintService.java, javax/print/ServiceUIFactory.java: New files. * javax/print/Makefile.am (EXTRA_DIST): Added all new files.
-rw-r--r--ChangeLog12
-rw-r--r--javax/print/CancelablePrintJob.java52
-rw-r--r--javax/print/Doc.java87
-rw-r--r--javax/print/DocFlavor.java151
-rw-r--r--javax/print/DocPrintJob.java104
-rw-r--r--javax/print/FlavorException.java52
-rw-r--r--javax/print/Makefile.am11
-rw-r--r--javax/print/PrintException.java84
-rw-r--r--javax/print/PrintService.java226
-rw-r--r--javax/print/ServiceUIFactory.java89
10 files changed, 868 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 094ad57a6..ee6e33c25 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2004-04-26 Michael Koch <konqueror@gmx.de>
+ * javax/print/CancelablePrintJob.java,
+ javax/print/Doc.java,
+ javax/print/DocFlavor.java,
+ javax/print/DocPrintJob.java,
+ javax/print/FlavorException.java,
+ javax/print/PrintException.java,
+ javax/print/PrintService.java,
+ javax/print/ServiceUIFactory.java: New files.
+ * javax/print/Makefile.am (EXTRA_DIST): Added all new files.
+
+2004-04-26 Michael Koch <konqueror@gmx.de>
+
* java/io/File.java: Moved all native methods to the new class
VMFile and removed the "Internal" suffix.
* vm/reference/java/io/VMFile.java: New file.
diff --git a/javax/print/CancelablePrintJob.java b/javax/print/CancelablePrintJob.java
new file mode 100644
index 000000000..329103e47
--- /dev/null
+++ b/javax/print/CancelablePrintJob.java
@@ -0,0 +1,52 @@
+/* CancelablePrintJob.java --
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+/**
+ * @author Michael Koch (konqueror@gmx.de)
+ */
+public interface CancelablePrintJob extends DocPrintJob
+{
+ /**
+ * Cancel print job.
+ *
+ * @exception PrintException if an error occured
+ */
+ void cancel() throws PrintException;
+}
diff --git a/javax/print/Doc.java b/javax/print/Doc.java
new file mode 100644
index 000000000..3b5968409
--- /dev/null
+++ b/javax/print/Doc.java
@@ -0,0 +1,87 @@
+/* Doc.java --
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+import java.io.InputStream;
+import java.io.Reader;
+import javax.print.attribute.DocAttributeSet;
+
+/**
+ * @author Michael Koch (konqueror@gmx.de)
+ */
+public interface Doc
+{
+ /**
+ * Returns a set of attributes applying to this document.
+ *
+ * @return the attributes
+ */
+ DocAttributeSet getAttributes();
+
+ /**
+ * Returns the flavor in which this document will provide its print data.
+ *
+ * @return the document flavor for printing
+ */
+ DocFlavor getDocFlavor();
+
+ /**
+ * Returns the print data of this document represented in a format that supports
+ * the document flavor.
+ *
+ * @return the print data
+ */
+ Object getPrintData();
+
+ /**
+ * Returns a <code>Reader</code> object for extracting character print data
+ * from this document.
+ *
+ * @return the <code>Reader</code> object
+ */
+ Reader getReaderForText();
+
+ /**
+ * Returns an <code>InputStream</code> object for extracting byte print data
+ * from this document.
+ *
+ * @return the <code>InputStream</code> object
+ */
+ InputStream getStreamForBytes();
+} \ No newline at end of file
diff --git a/javax/print/DocFlavor.java b/javax/print/DocFlavor.java
new file mode 100644
index 000000000..c8414badd
--- /dev/null
+++ b/javax/print/DocFlavor.java
@@ -0,0 +1,151 @@
+/* Doc.java --
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * @author Michael Koch (konqueror@gmx.de)
+ */
+public class DocFlavor implements Cloneable, Serializable
+{
+ public static final String hostEncoding = "US-ASCII";
+
+ private String mediaSubtype;
+ private String mediaType;
+ private String className;
+ private HashMap params = new HashMap();
+
+ public DocFlavor(String mimeType, String className)
+ {
+ if (mimeType == null || className == null)
+ throw new NullPointerException();
+
+ parseMimeType(mimeType);
+ this.className = className;
+ }
+
+ private void parseMimeType(String mimeType)
+ {
+ // FIXME: This method is know to be not completely correct, but it works for now.
+
+ int pos = mimeType.indexOf(';');
+
+ if (pos != -1)
+ {
+ String tmp = mimeType.substring(pos + 2);
+ mimeType = mimeType.substring(0, pos);
+ pos = tmp.indexOf('=');
+ params.put(tmp.substring(0, pos), tmp.substring(pos + 1));
+ }
+
+ pos = mimeType.indexOf('/');
+
+ if (pos == -1)
+ throw new IllegalArgumentException();
+
+ mediaType = mimeType.substring(0, pos);
+ mediaSubtype = mimeType.substring(pos + 1);
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (! (obj instanceof DocFlavor))
+ return false;
+
+ DocFlavor tmp = (DocFlavor) obj;
+
+ return (getMimeType().equals(tmp.getMimeType())
+ && getRepresentationClassName().equals(tmp.getRepresentationClassName()));
+ }
+
+ public String getMediaSubtype()
+ {
+ return mediaSubtype;
+ }
+
+ public String getMediaType()
+ {
+ return mediaType;
+ }
+
+ public String getMimeType()
+ {
+ // FIXME: Check if this algorithm is correct.
+
+ String mimeType = getMediaType() + "/" + getMediaSubtype();
+ Iterator it = params.entrySet().iterator();
+
+ while (it.hasNext())
+ {
+ Map.Entry entry = (Map.Entry) it.next();
+ mimeType += "; " + entry.getKey() + "=\"" + entry.getValue() + "\"";
+ }
+
+ return mimeType;
+ }
+
+ public String getParameter(String paramName)
+ {
+ if (paramName == null)
+ throw new NullPointerException();
+
+ return (String) params.get(paramName);
+ }
+
+ public String getRepresentationClassName()
+ {
+ return className;
+ }
+
+ public int hashCode()
+ {
+ return ((mediaType.hashCode()
+ * mediaSubtype.hashCode()
+ * className.hashCode()) ^ params.hashCode());
+ }
+
+ public String toString()
+ {
+ return getMimeType();
+ }
+}
diff --git a/javax/print/DocPrintJob.java b/javax/print/DocPrintJob.java
new file mode 100644
index 000000000..db4ba8447
--- /dev/null
+++ b/javax/print/DocPrintJob.java
@@ -0,0 +1,104 @@
+/* DocPrintJob.java --
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+import javax.print.attribute.PrintJobAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.event.PrintJobAttributeListener;
+import javax.print.event.PrintJobListener;
+
+/**
+ * @author Michael Koch (konqueror@gmx.de)
+ */
+public interface DocPrintJob
+{
+ /**
+ * Registers a listener for changes in the specified attributes.
+ *
+ * @param listener the listener to add
+ * @param attributes the attributes to observe
+ */
+ void addPrintJobAttributeListener(PrintJobAttributeListener listener,
+ PrintJobAttributeSet attributes);
+
+ /**
+ * Registers a listener for events occuring during this print job.
+ *
+ * @param listener the listener to add
+ */
+ void addPrintJobListener(PrintJobListener listener);
+
+ /**
+ * Returns the print job's attributes.
+ *
+ * @return the attributes of this print job
+ */
+ PrintJobAttributeSet getAttributes();
+
+ /**
+ * Returns the <code>PrintService</code> object this print job is bound to.
+ *
+ * @return the print service
+ */
+ PrintService getPrintService();
+
+ /**
+ * Prints a document with the specified print job attributes.
+ *
+ * @param doc the document to print
+ * @param attributes the attributes to use
+ *
+ * @throws PrintException if an error occurs
+ */
+ void print(Doc doc, PrintRequestAttributeSet attributes) throws PrintException;
+
+ /**
+ * De-registers an attribute listener.
+ *
+ * @param listener the listener to remove
+ */
+ void removePrintJobAttributeListener(PrintJobAttributeListener listener);
+
+ /**
+ * De-registers a print job listener.
+ *
+ * @param listener the listener to remove
+ */
+ void removePrintJobListener(PrintJobListener listener);
+} \ No newline at end of file
diff --git a/javax/print/FlavorException.java b/javax/print/FlavorException.java
new file mode 100644
index 000000000..b60f1c4ec
--- /dev/null
+++ b/javax/print/FlavorException.java
@@ -0,0 +1,52 @@
+/* FlavorException.java --
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+/**
+ * @author Michael Koch (konqueror@gmx.de)
+ */
+public interface FlavorException
+{
+ /**
+ * Returns the unsupported document flavors.
+ *
+ * @return the unsupported document flavors
+ */
+ DocFlavor[] getUnsupportedFlavors();
+} \ No newline at end of file
diff --git a/javax/print/Makefile.am b/javax/print/Makefile.am
index 0df8e6f43..07fc2ecc9 100644
--- a/javax/print/Makefile.am
+++ b/javax/print/Makefile.am
@@ -1,3 +1,14 @@
## Input file for automake to generate the Makefile.in used by configure
SUBDIRS = attribute
+
+EXTRA_DIST =
+CancelablePrintJob.java \
+Doc.java \
+DocFlavor.java \
+DonPrintJob.java \
+FlavorException.java \
+PrintException.java \
+PrintService.java \
+ServiceUIFactory.java
+
diff --git a/javax/print/PrintException.java b/javax/print/PrintException.java
new file mode 100644
index 000000000..e4626379d
--- /dev/null
+++ b/javax/print/PrintException.java
@@ -0,0 +1,84 @@
+/* PrintException.java --
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+/**
+ * @author Michael Koch (konqueror@gmx.de)
+ */
+public class PrintException extends Exception
+{
+ /**
+ * Construct a print exception.
+ */
+ public PrintException()
+ {
+ super();
+ }
+
+ /**
+ * Construct a print exception.
+ *
+ * @param e chained exception
+ */
+ public PrintException(Exception e)
+ {
+ super(e);
+ }
+
+ /**
+ * Construct a print exception.
+ *
+ * @param s detailed message, or null for no message
+ */
+ public PrintException(String s)
+ {
+ super(s);
+ }
+
+ /**
+ * Construct a print exception.
+ *
+ * @param s detailed message, or null for no message
+ * @param e chained exception
+ */
+ public PrintException(String s, Exception e)
+ {
+ super(s, e);
+ }
+} \ No newline at end of file
diff --git a/javax/print/PrintService.java b/javax/print/PrintService.java
new file mode 100644
index 000000000..de113681b
--- /dev/null
+++ b/javax/print/PrintService.java
@@ -0,0 +1,226 @@
+/* PrintService.java --
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.AttributeSet;
+import javax.print.attribute.PrintServiceAttribute;
+import javax.print.attribute.PrintServiceAttributeSet;
+import javax.print.event.PrintServiceAttributeListener;
+
+/**
+ * @author Michael Koch (konqueror@gmx.de)
+ */
+public interface PrintService
+{
+ /**
+ * Returns a new print job capable to handle all supported document flavors.
+ *
+ * @return the new print job
+ */
+ DocPrintJob createPrintJob();
+
+ /**
+ * Determines if two services refer to the same underlying service.
+ *
+ * @param obj the service to check against
+ *
+ * @return <code>true</code> if both services refer to the sam underlying
+ * service, <code>false</code> otherwise
+ */
+ boolean equals(Object obj);
+
+ /**
+ * Returns the value of a single specified attribute.
+ *
+ * @param category the category of a <code>PrintServiceAttribute</code>
+ *
+ * @return the value of the attribute
+ *
+ * @throws NullPointerException if category is null
+ * @throws IllegalArgumentException if category is not a class that
+ * implements <code>PrintServiceAttribute</code>
+ */
+ PrintServiceAttribute getAttribute(Class category);
+
+ /**
+ * Returns all attributes of this printer service
+ *
+ * @return all attributes of this print service
+ */
+ PrintServiceAttributeSet getAttributes();
+
+ /**
+ * Returns the service's default value for a given attribute.
+ *
+ * @param category the category of the attribute
+ *
+ * @return the default value
+ *
+ * @throws NullPointerException if <code>category</code> is null
+ * @throws IllegalArgumentException if <code>category</code> is a class
+ * not implementing <code>Attribute</code>
+ */
+ Object getDefaultAttributeValue(Class category);
+
+ /**
+ * Returns the name of this print service.
+ *
+ * @return the name
+ */
+ String getName();
+
+ /**
+ * Returns a factory for UI components.
+ *
+ * @return the factory
+ */
+ ServiceUIFactory getServiceUIFactory();
+
+ /**
+ * Returns all supported attribute categories.
+ *
+ * @return an array of all supported attribute categories
+ */
+ Class[] getSupportedAttributeCategories();
+
+ /**
+ * Returns all supported attribute values a client can use when setting up
+ * a print job with this service.
+ *
+ * @param category the attribute category to test
+ * @param flavor the document flavor to use, or null
+ * @param attributes set of printing attributes for a supposed job, or null
+ *
+ * @return object indicating supported values for <code>category</code>,
+ * or null if this print service doesnt support specifying doc-level or
+ * job-level attribute in a print request.
+ *
+ * @throws NullPointerException if <code>category</code> is null
+ * @throws IllegalArgumentException if <code>category</code> is a class not
+ * implementing <code>Attribute</code>, or if <code>flavor</code> is not
+ * supported
+ */
+ Object getSupportedAttributeValues(Class category, DocFlavor flavor, AttributeSet attributes);
+
+ /**
+ * Returns an array of all supproted document flavors.
+ *
+ * @return the supported document flavors
+ */
+ DocFlavor[] getSupportedDocFlavors();
+
+ /**
+ * Returns all attributes that are unsupported for a print request in the
+ * context of a particular document flavor.
+ *
+ * @param flavor document flavor to test, or null
+ * @param attributes set of printing attributes for a supposed job
+ *
+ * @return null if this <code>PrintService</code> supports the print request
+ * specification, else the unsupported attributes
+ *
+ * @throws IllegalArgumentException if <code>flavor</code> is unsupported
+ */
+ AttributeSet getUnsupportedAttributes(DocFlavor flavor, AttributeSet attributes);
+
+ /**
+ * Returns a hashcode for this printer service.
+ *
+ * @return the hashcode
+ */
+ int hashCode();
+
+ /**
+ * Determines a given attribute category is supported or not.
+ *
+ * @param category the category to check
+ *
+ * @return <code>true</code> if <code>category</code> is supported,
+ * <code>false</code> otherwise
+ *
+ * @throws NullPointerException if <code>category</code> is null
+ * @throws IllegalArgumentException if <code>category</code> is a class not
+ * implementing <code>Attribute</code>.
+ */
+ boolean isAttributeCategorySupported(Class category);
+
+ /**
+ * Determines a given attribute value is supported when creating a print job
+ * for this print service.
+ *
+ * @param attrval the attribute value to check
+ * @param flavor the document flavor to use, or null
+ * @param attributes set of printing attributes to use, or null
+ *
+ * @return <code>true</code> if the attribute value is supported,
+ * <code>false</code> otherwise
+ *
+ * @throws NullPointerException if <code>attrval</code> is null
+ * @throws IllegalArgumentException if <code>flavor</code> is not supported
+ * by this print service
+ */
+ boolean isAttributeValueSupported(Attribute attrval, DocFlavor flavor, AttributeSet attributes);
+
+ /**
+ * Determines a given document flavor is supported or not.
+ *
+ * @param flavor the document flavor to check
+ *
+ * @return <code>true</code> if <code>flavor</code> is supported,
+ * <code>false</code> otherwise
+ *
+ * @throws NullPointerException if <code>flavor</code> is null
+ */
+ boolean isDocFlavorSupported(DocFlavor flavor);
+
+ /**
+ * Registers a print service attribute listener to this print service.
+ *
+ * @param listener the listener to add
+ */
+ void addPrintServiceAttributeListener(PrintServiceAttributeListener listener);
+
+ /**
+ * De-registers a print service attribute listener from this print service.
+ *
+ * @param listener the listener to remove
+ */
+ void removePrintServiceAttributeListener(PrintServiceAttributeListener listener);
+}
diff --git a/javax/print/ServiceUIFactory.java b/javax/print/ServiceUIFactory.java
new file mode 100644
index 000000000..641a14ad8
--- /dev/null
+++ b/javax/print/ServiceUIFactory.java
@@ -0,0 +1,89 @@
+/* ServiceUIFactory.java --
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+/**
+ * @author Michael Koch
+ */
+public abstract class ServiceUIFactory
+{
+ public static int ABOUT_UIROLE = 1;
+ public static int ADMIN_UIROLE = 2;
+ public static int MAIN_UIROLE = 3;
+ public static int RESERVED_UIROLE = 99;
+
+ public static String DIALOG_UIROLE = "java.awt.Dialog";
+ public static String JCOMPONENT_UIROLE = "javax.swing.JComponent";
+ public static String JDIALOG_UIROLE = "javax.swing.JDialog";
+ public static String PANEL_UIROLE = "java.awt.Panel";
+
+ /**
+ * Constructs a <code>ServiceUIFactory</code> object.
+ */
+ public ServiceUIFactory()
+ {
+ // Do nothing here.
+ }
+
+ /**
+ * Returns an UI object which may be cast to the requested UI type.
+ *
+ * @param role the role requested. Must be one of the standard roles
+ * or a private role supported by this factory
+ * @param ui type in which the role is requested
+ *
+ * @return the UI role or null of this role is not supported by this factory
+ *
+ * @throws IllegalArgumentException if <code>role</code> is neither one of
+ * the standard ones nor a private one supported by this factory
+ */
+ public abstract Object getUI(int role, String ui);
+
+ /**
+ * Returns the UI types supported by this factory for an UI role.
+ *
+ * @param role the role to be looked up
+ *
+ * @return an array of UI types
+ *
+ * @throws IllegalArgumentException if <code>role</code> is neither one of
+ * the standard ones nor a private one supported by this factory
+ */
+ public abstract String[] getUIClassNamesForRole(int role);
+} \ No newline at end of file