|
1 /* |
|
2 * Copyright 2004-2009 Sun Microsystems, Inc. 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. |
|
8 * |
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
|
13 * accompanied this code). |
|
14 * |
|
15 * You should have received a copy of the GNU General Public License version |
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
18 * |
|
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
|
20 * CA 95054 USA or visit www.sun.com if you need additional information or |
|
21 * have any questions. |
|
22 */ |
|
23 |
|
24 |
|
25 /** |
|
26 * @test |
|
27 * @bug 4910388 4871089 4998624 |
|
28 * @summary Confirm that |
|
29 * 1. After choosing Reverse Landscape in the system default print |
|
30 * Print Service (2nd in the list), it |
|
31 * will reset to portrait in "Test Printer" |
|
32 * 2. Print To File button is not cleared when switching between the |
|
33 * 2nd service (system default printer) and Test Printer. |
|
34 * 3. Make sure "Postscript" printer is the default and make sure the |
|
35 * "print to file" button is disabled. File Dialog should not be |
|
36 * shown after pressing print button. |
|
37 * |
|
38 * @run main/manual ServiceDialogTest |
|
39 */ |
|
40 import java.awt.*; |
|
41 import javax.print.*; |
|
42 import javax.print.attribute.standard.*; |
|
43 import javax.print.attribute.*; |
|
44 import javax.print.event.*; |
|
45 import java.io.*; |
|
46 import java.util.Locale; |
|
47 |
|
48 public class ServiceDialogTest { |
|
49 /** |
|
50 * Constructor |
|
51 */ |
|
52 public ServiceDialogTest() { |
|
53 super(); |
|
54 } |
|
55 /** |
|
56 * Starts the application. |
|
57 */ |
|
58 public static void main(java.lang.String[] args) { |
|
59 ServiceDialogTest pd = new ServiceDialogTest(); |
|
60 PrintService services[] = new PrintService[3]; |
|
61 services[1] = PrintServiceLookup.lookupDefaultPrintService(); |
|
62 |
|
63 FileOutputStream fos = null; |
|
64 File f = null; |
|
65 String mType = "application/postscript"; |
|
66 DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG; |
|
67 try { |
|
68 f = new File("streamexample.ps"); |
|
69 fos = new FileOutputStream(f); |
|
70 StreamPrintServiceFactory[] factories = StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor, mType); |
|
71 if (factories.length > 0) { |
|
72 services[0] = factories[0].getPrintService(fos); |
|
73 } else { |
|
74 throw new RuntimeException("No StreamPrintService available which would support "+flavor"); |
|
75 } |
|
76 |
|
77 services[2] = new TestPrintService("Test Printer"); |
|
78 |
|
79 //System.out.println("is "+flavor+" supported? "+services[0].isDocFlavorSupported(flavor)); |
|
80 //System.out.println("is Orientation supported? "+services[0].isAttributeCategorySupported(OrientationRequested.class)); |
|
81 //System.out.println("is REVERSE PORTRAIT supported ? "+services[0].isAttributeValueSupported(OrientationRequested.REVERSE_PORTRAIT, flavor, null)); |
|
82 |
|
83 HashPrintRequestAttributeSet prSet = new HashPrintRequestAttributeSet(); |
|
84 prSet.add(new Destination(new File("./dest.prn").toURI())); |
|
85 PrintService selService = ServiceUI.printDialog(null, 200, 200, services, services[0], flavor, prSet); |
|
86 Attribute attr[] = prSet.toArray(); |
|
87 for (int x = 0; x < attr.length; x ++) { |
|
88 System.out.println(attr[x]); |
|
89 } |
|
90 |
|
91 //DocPrintJob pj = service.createPrintJob(); |
|
92 //PrintDocument prDoc = new PrintDocument(); |
|
93 //pj.print(prDoc, null); |
|
94 |
|
95 } catch (Exception e) { |
|
96 e.printStackTrace(); |
|
97 } |
|
98 } |
|
99 } |
|
100 |
|
101 |
|
102 class TestPrintService implements PrintService |
|
103 { |
|
104 |
|
105 private static DocFlavor textByteFlavor = null; |
|
106 private static final DocFlavor supportedDocFlavors[] = (new DocFlavor[] { |
|
107 javax.print.DocFlavor.INPUT_STREAM.JPEG |
|
108 }); |
|
109 |
|
110 private static final Class serviceAttrCats[] = (new Class[] { |
|
111 javax.print.attribute.standard.PrinterName.class |
|
112 }); |
|
113 |
|
114 private static final Class otherAttrCats[] = (new Class [] { |
|
115 javax.print.attribute.standard.Copies.class, |
|
116 javax.print.attribute.standard.OrientationRequested.class, |
|
117 javax.print.attribute.standard.Destination.class, |
|
118 }); |
|
119 |
|
120 private String printer = null; |
|
121 |
|
122 public TestPrintService() { |
|
123 } |
|
124 |
|
125 public TestPrintService(String printerName) { |
|
126 if (printerName == null) { |
|
127 throw new IllegalArgumentException("null printer name"); |
|
128 } else { |
|
129 printer = printerName; |
|
130 } |
|
131 } |
|
132 |
|
133 public String getName() |
|
134 { |
|
135 return printer; |
|
136 } |
|
137 |
|
138 |
|
139 public DocPrintJob createPrintJob() |
|
140 { |
|
141 return null; |
|
142 } |
|
143 |
|
144 public PrintServiceAttributeSet getUpdatedAttributes() |
|
145 { |
|
146 return null; |
|
147 } |
|
148 |
|
149 |
|
150 public void addPrintServiceAttributeListener(PrintServiceAttributeListener printserviceattributelistener) |
|
151 { |
|
152 } |
|
153 |
|
154 public void removePrintServiceAttributeListener(PrintServiceAttributeListener printserviceattributelistener) |
|
155 { |
|
156 } |
|
157 |
|
158 public PrintServiceAttribute getAttribute(Class category) |
|
159 { |
|
160 return null; |
|
161 } |
|
162 |
|
163 public PrintServiceAttributeSet getAttributes() |
|
164 { |
|
165 HashPrintServiceAttributeSet aSet = new HashPrintServiceAttributeSet(); |
|
166 return aSet; |
|
167 } |
|
168 |
|
169 public DocFlavor[] getSupportedDocFlavors() |
|
170 { |
|
171 int i = supportedDocFlavors.length; |
|
172 DocFlavor adocflavor[] = new DocFlavor[i]; |
|
173 System.arraycopy(supportedDocFlavors, 0, adocflavor, 0, i); |
|
174 return adocflavor; |
|
175 } |
|
176 |
|
177 public boolean isDocFlavorSupported(DocFlavor docflavor) |
|
178 { |
|
179 for (int i = 0; i < supportedDocFlavors.length; i++) { |
|
180 if (docflavor.equals(supportedDocFlavors[i])) { |
|
181 return true; |
|
182 } |
|
183 } |
|
184 return false; |
|
185 } |
|
186 |
|
187 public Class[] getSupportedAttributeCategories() |
|
188 { |
|
189 int i = otherAttrCats.length; |
|
190 Class aclass[] = new Class[i]; |
|
191 System.arraycopy(otherAttrCats, 0, aclass, 0, otherAttrCats.length); |
|
192 return aclass; |
|
193 } |
|
194 |
|
195 public boolean isAttributeCategorySupported(Class category) |
|
196 { |
|
197 if (category == null) { |
|
198 throw new NullPointerException("null category"); |
|
199 } |
|
200 |
|
201 for (int i = 0; i < otherAttrCats.length; i++) { |
|
202 if (category == otherAttrCats[i]) { |
|
203 return true; |
|
204 } |
|
205 } |
|
206 return false; |
|
207 } |
|
208 |
|
209 public boolean isAttributeValueSupported(Attribute attrval, DocFlavor flavor, AttributeSet attributes) { |
|
210 |
|
211 if (attrval == OrientationRequested.PORTRAIT) |
|
212 return true; |
|
213 else if (attrval == OrientationRequested.LANDSCAPE) |
|
214 return true; |
|
215 else |
|
216 return false; |
|
217 } |
|
218 |
|
219 public Object getDefaultAttributeValue(Class category) |
|
220 { |
|
221 if (category == null) { |
|
222 throw new NullPointerException("null category"); |
|
223 } |
|
224 if (category == javax.print.attribute.standard.Copies.class) |
|
225 return new Copies(1); |
|
226 |
|
227 if (category == javax.print.attribute.standard.OrientationRequested.class) |
|
228 return OrientationRequested.PORTRAIT; |
|
229 |
|
230 return null; |
|
231 } |
|
232 |
|
233 public Object getSupportedAttributeValues(Class category, DocFlavor docflavor, AttributeSet attributeset) |
|
234 { |
|
235 if (category == null) { |
|
236 throw new NullPointerException("null category"); |
|
237 } |
|
238 |
|
239 if (docflavor != null) { |
|
240 if (!isDocFlavorSupported(docflavor)) { |
|
241 throw new IllegalArgumentException(docflavor + " is an unsupported flavor"); |
|
242 } |
|
243 } |
|
244 if (!isAttributeCategorySupported(category)) { |
|
245 return null; |
|
246 } |
|
247 if (category == javax.print.attribute.standard.Copies.class ) { |
|
248 return new CopiesSupported(1, 5); |
|
249 } |
|
250 if (category == javax.print.attribute.standard.OrientationRequested.class ) { |
|
251 OrientationRequested req[] = { OrientationRequested.PORTRAIT, OrientationRequested.LANDSCAPE }; |
|
252 return req; |
|
253 } |
|
254 |
|
255 return null; |
|
256 } |
|
257 |
|
258 public AttributeSet getUnsupportedAttributes(DocFlavor docflavor, AttributeSet attributeset) { |
|
259 |
|
260 if (docflavor != null && !isDocFlavorSupported(docflavor)) { |
|
261 throw new IllegalArgumentException("flavor " + docflavor + "is not supported"); |
|
262 } |
|
263 if (attributeset == null) { |
|
264 return null; |
|
265 } |
|
266 |
|
267 HashAttributeSet hashattributeset = new HashAttributeSet(); |
|
268 Attribute attributearray[] = attributeset.toArray(); |
|
269 for (int i = 0; i < attributearray.length; i++) { |
|
270 try { |
|
271 Attribute attribute = attributearray[i]; |
|
272 if (!isAttributeCategorySupported(attribute.getCategory())) { |
|
273 hashattributeset.add(attribute); |
|
274 } else { |
|
275 if (!isAttributeValueSupported(attribute, docflavor, attributeset)) { |
|
276 hashattributeset.add(attribute); |
|
277 } |
|
278 } |
|
279 } |
|
280 catch (ClassCastException classcastexception) { |
|
281 |
|
282 } |
|
283 } |
|
284 |
|
285 if (hashattributeset.isEmpty()) { |
|
286 return null; |
|
287 } |
|
288 return hashattributeset; |
|
289 } |
|
290 |
|
291 public ServiceUIFactory getServiceUIFactory() { |
|
292 return null; |
|
293 } |
|
294 |
|
295 public String toString() { |
|
296 return "Printer : " + getName(); |
|
297 } |
|
298 |
|
299 public boolean equals(Object obj) { |
|
300 return obj == this || (obj instanceof TestPrintService) && ((TestPrintService)obj).getName().equals(getName()); |
|
301 } |
|
302 |
|
303 public int hashCode() { |
|
304 return getClass().hashCode() + getName().hashCode(); |
|
305 } |
|
306 |
|
307 } |