001/* PageAttributes.java -- 
002   Copyright (C) 2002, 2005  Free Software Foundation, Inc.
003
004This file is part of GNU Classpath.
005
006GNU Classpath is free software; you can redistribute it and/or modify
007it under the terms of the GNU General Public License as published by
008the Free Software Foundation; either version 2, or (at your option)
009any later version.
010
011GNU Classpath is distributed in the hope that it will be useful, but
012WITHOUT ANY WARRANTY; without even the implied warranty of
013MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014General Public License for more details.
015
016You should have received a copy of the GNU General Public License
017along with GNU Classpath; see the file COPYING.  If not, write to the
018Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
01902110-1301 USA.
020
021Linking this library statically or dynamically with other modules is
022making a combined work based on this library.  Thus, the terms and
023conditions of the GNU General Public License cover the whole
024combination.
025
026As a special exception, the copyright holders of this library give you
027permission to link this library with independent modules to produce an
028executable, regardless of the license terms of these independent
029modules, and to copy and distribute the resulting executable under
030terms of your choice, provided that you also meet, for each linked
031independent module, the terms and conditions of the license of that
032module.  An independent module is a module which is not derived from
033or based on this library.  If you modify this library, you may extend
034this exception to your version of the library, but you are not
035obligated to do so.  If you do not wish to do so, delete this
036exception statement from your version. */
037
038
039package java.awt;
040
041import java.util.Locale;
042
043/**
044 * Missing Documentation
045 *
046 * @author Eric Blake (ebb9@email.byu.edu)
047 * @since 1.3
048 * @status updated to 1.4, but missing documentation
049 */
050public final class PageAttributes implements Cloneable
051{
052  public static final class ColorType extends AttributeValue
053  {
054    private static final String[] NAMES = { "color", "monochrome" };
055    public static final ColorType COLOR = new ColorType(0);
056    public static final ColorType MONOCHROME = new ColorType(1);
057    private ColorType(int value)
058    {
059      super(value, NAMES);
060    }
061  } // class ColorType
062  public static final class MediaType extends AttributeValue
063  {
064    private static final String[] NAMES
065      = { "iso-4a0", "iso-2a0", "iso-a0", "iso-a1", "iso-a2", "iso-a3",
066          "iso-a4", "iso-a5", "iso-a6", "iso-a7", "iso-a8", "iso-a9",
067          "iso-a10", "iso-b0", "iso-b1", "iso-b2", "iso-b3", "iso-b4",
068          "iso-b5", "iso-b6", "iso-b7", "iso-b8", "iso-b9", "iso-b10",
069          "jis-b0", "jis-b1", "jis-b2", "jis-b3", "jis-b4", "jis-b5",
070          "jis-b6", "jis-b7", "jis-b8", "jis-b9", "jis-b10", "iso-c0",
071          "iso-c1", "iso-c2", "iso-c3", "iso-c4", "iso-c5", "iso-c6",
072          "iso-c7", "iso-c8", "iso-c9", "iso-c10", "iso-designated-long",
073          "executive", "folio", "invoice", "ledger", "na-letter", "na-legal",
074          "quarto", "a", "b", "c", "d", "e", "na-10x15-envelope",
075          "na-10x14-envelope", "na-10x13-envelope", "na-9x12-envelope",
076          "na-9x11-envelope", "na-7x9-envelope", "na-6x9-envelope",
077          "na-number-9-envelope", "na-number-10-envelope",
078          "na-number-11-envelope", "na-number-12-envelope",
079          "na-number-14-envelope", "invite-envelope", "italy-envelope",
080          "monarch-envelope", "personal-envelope" };
081    public static final MediaType ISO_4A0 = new MediaType(0);
082    public static final MediaType ISO_2A0 = new MediaType(1);
083    public static final MediaType ISO_A0 = new MediaType(2);
084    public static final MediaType ISO_A1 = new MediaType(3);
085    public static final MediaType ISO_A2 = new MediaType(4);
086    public static final MediaType ISO_A3 = new MediaType(5);
087    public static final MediaType ISO_A4 = new MediaType(6);
088    public static final MediaType ISO_A5 = new MediaType(7);
089    public static final MediaType ISO_A6 = new MediaType(8);
090    public static final MediaType ISO_A7 = new MediaType(9);
091    public static final MediaType ISO_A8 = new MediaType(10);
092    public static final MediaType ISO_A9 = new MediaType(11);
093    public static final MediaType ISO_A10 = new MediaType(12);
094    public static final MediaType ISO_B0 = new MediaType(13);
095    public static final MediaType ISO_B1 = new MediaType(14);
096    public static final MediaType ISO_B2 = new MediaType(15);
097    public static final MediaType ISO_B3 = new MediaType(16);
098    public static final MediaType ISO_B4 = new MediaType(17);
099    public static final MediaType ISO_B5 = new MediaType(18);
100    public static final MediaType ISO_B6 = new MediaType(19);
101    public static final MediaType ISO_B7 = new MediaType(20);
102    public static final MediaType ISO_B8 = new MediaType(21);
103    public static final MediaType ISO_B9 = new MediaType(22);
104    public static final MediaType ISO_B10 = new MediaType(23);
105    public static final MediaType JIS_B0 = new MediaType(24);
106    public static final MediaType JIS_B1 = new MediaType(25);
107    public static final MediaType JIS_B2 = new MediaType(26);
108    public static final MediaType JIS_B3 = new MediaType(27);
109    public static final MediaType JIS_B4 = new MediaType(28);
110    public static final MediaType JIS_B5 = new MediaType(29);
111    public static final MediaType JIS_B6 = new MediaType(30);
112    public static final MediaType JIS_B7 = new MediaType(31);
113    public static final MediaType JIS_B8 = new MediaType(32);
114    public static final MediaType JIS_B9 = new MediaType(33);
115    public static final MediaType JIS_B10 = new MediaType(34);
116    public static final MediaType ISO_C0 = new MediaType(35);
117    public static final MediaType ISO_C1 = new MediaType(36);
118    public static final MediaType ISO_C2 = new MediaType(37);
119    public static final MediaType ISO_C3 = new MediaType(38);
120    public static final MediaType ISO_C4 = new MediaType(39);
121    public static final MediaType ISO_C5 = new MediaType(40);
122    public static final MediaType ISO_C6 = new MediaType(41);
123    public static final MediaType ISO_C7 = new MediaType(42);
124    public static final MediaType ISO_C8 = new MediaType(43);
125    public static final MediaType ISO_C9 = new MediaType(44);
126    public static final MediaType ISO_C10 = new MediaType(45);
127    public static final MediaType ISO_DESIGNATED_LONG = new MediaType(46);
128    public static final MediaType EXECUTIVE = new MediaType(47);
129    public static final MediaType FOLIO = new MediaType(48);
130    public static final MediaType INVOICE = new MediaType(49);
131    public static final MediaType LEDGER = new MediaType(50);
132    public static final MediaType NA_LETTER = new MediaType(51);
133    public static final MediaType NA_LEGAL = new MediaType(52);
134    public static final MediaType QUARTO = new MediaType(53);
135    public static final MediaType A = new MediaType(54);
136    public static final MediaType B = new MediaType(55);
137    public static final MediaType C = new MediaType(56);
138    public static final MediaType D = new MediaType(57);
139    public static final MediaType E = new MediaType(58);
140    public static final MediaType NA_10X15_ENVELOPE = new MediaType(59);
141    public static final MediaType NA_10X14_ENVELOPE = new MediaType(60);
142    public static final MediaType NA_10X13_ENVELOPE = new MediaType(61);
143    public static final MediaType NA_9X12_ENVELOPE = new MediaType(62);
144    public static final MediaType NA_9X11_ENVELOPE = new MediaType(63);
145    public static final MediaType NA_7X9_ENVELOPE = new MediaType(64);
146    public static final MediaType NA_6X9_ENVELOPE = new MediaType(65);
147    public static final MediaType NA_NUMBER_9_ENVELOPE = new MediaType(66);
148    public static final MediaType NA_NUMBER_10_ENVELOPE = new MediaType(67);
149    public static final MediaType NA_NUMBER_11_ENVELOPE = new MediaType(68);
150    public static final MediaType NA_NUMBER_12_ENVELOPE = new MediaType(69);
151    public static final MediaType NA_NUMBER_14_ENVELOPE = new MediaType(70);
152    public static final MediaType INVITE_ENVELOPE = new MediaType(71);
153    public static final MediaType ITALY_ENVELOPE = new MediaType(72);
154    public static final MediaType MONARCH_ENVELOPE = new MediaType(73);
155    public static final MediaType PERSONAL_ENVELOPE = new MediaType(74);
156    public static final MediaType A0 = ISO_A0;
157    public static final MediaType A1 = ISO_A1;
158    public static final MediaType A2 = ISO_A2;
159    public static final MediaType A3 = ISO_A3;
160    public static final MediaType A4 = ISO_A4;
161    public static final MediaType A5 = ISO_A5;
162    public static final MediaType A6 = ISO_A6;
163    public static final MediaType A7 = ISO_A7;
164    public static final MediaType A8 = ISO_A8;
165    public static final MediaType A9 = ISO_A9;
166    public static final MediaType A10 = ISO_A10;
167    public static final MediaType B0 = ISO_B0;
168    public static final MediaType B1 = ISO_B1;
169    public static final MediaType B2 = ISO_B2;
170    public static final MediaType B3 = ISO_B3;
171    public static final MediaType B4 = ISO_B4;
172    public static final MediaType ISO_B4_ENVELOPE = ISO_B4;
173    public static final MediaType B5 = ISO_B5;
174    public static final MediaType ISO_B5_ENVELOPE = ISO_B4;
175    public static final MediaType B6 = ISO_B6;
176    public static final MediaType B7 = ISO_B7;
177    public static final MediaType B8 = ISO_B8;
178    public static final MediaType B9 = ISO_B9;
179    public static final MediaType B10 = ISO_B10;
180    public static final MediaType C0 = ISO_B0;
181    public static final MediaType ISO_C0_ENVELOPE = ISO_C0;
182    public static final MediaType C1 = ISO_C1;
183    public static final MediaType ISO_C1_ENVELOPE = ISO_C1;
184    public static final MediaType C2 = ISO_C2;
185    public static final MediaType ISO_C2_ENVELOPE = ISO_C2;
186    public static final MediaType C3 = ISO_C3;
187    public static final MediaType ISO_C3_ENVELOPE = ISO_C3;
188    public static final MediaType C4 = ISO_C4;
189    public static final MediaType ISO_C4_ENVELOPE = ISO_C4;
190    public static final MediaType C5 = ISO_C5;
191    public static final MediaType ISO_C5_ENVELOPE = ISO_C5;
192    public static final MediaType C6 = ISO_C6;
193    public static final MediaType ISO_C6_ENVELOPE = ISO_C6;
194    public static final MediaType C7 = ISO_C7;
195    public static final MediaType ISO_C7_ENVELOPE = ISO_C7;
196    public static final MediaType C8 = ISO_C8;
197    public static final MediaType ISO_C8_ENVELOPE = ISO_C8;
198    public static final MediaType C9 = ISO_C9;
199    public static final MediaType ISO_C9_ENVELOPE = ISO_C9;
200    public static final MediaType C10 = ISO_C10;
201    public static final MediaType ISO_C10_ENVELOPE = ISO_C10;
202    public static final MediaType ISO_DESIGNATED_LONG_ENVELOPE
203      = ISO_DESIGNATED_LONG;
204    public static final MediaType STATEMENT = INVOICE;
205    public static final MediaType TABLOID = LEDGER;
206    public static final MediaType LETTER = NA_LETTER;
207    public static final MediaType NOTE = NA_LETTER;
208    public static final MediaType LEGAL = NA_LEGAL;
209    public static final MediaType ENV_10X15 = NA_10X15_ENVELOPE;
210    public static final MediaType ENV_10X14 = NA_10X14_ENVELOPE;
211    public static final MediaType ENV_10X13 = NA_10X13_ENVELOPE;
212    public static final MediaType ENV_9X12 = NA_9X12_ENVELOPE;
213    public static final MediaType ENV_9X11 = NA_9X11_ENVELOPE;
214    public static final MediaType ENV_7X9 = NA_7X9_ENVELOPE;
215    public static final MediaType ENV_6X9 = NA_6X9_ENVELOPE;
216    public static final MediaType ENV_9 = NA_NUMBER_9_ENVELOPE;
217    public static final MediaType ENV_10 = NA_NUMBER_10_ENVELOPE;
218    public static final MediaType ENV_11 = NA_NUMBER_11_ENVELOPE;
219    public static final MediaType ENV_12 = NA_NUMBER_12_ENVELOPE;
220    public static final MediaType ENV_14 = NA_NUMBER_14_ENVELOPE;
221    public static final MediaType ENV_INVITE = INVITE_ENVELOPE;
222    public static final MediaType ENV_ITALY = ITALY_ENVELOPE;
223    public static final MediaType ENV_MONARCH = MONARCH_ENVELOPE;
224    public static final MediaType ENV_PERSONAL = PERSONAL_ENVELOPE;
225    public static final MediaType INVITE = INVITE_ENVELOPE;
226    public static final MediaType ITALY = ITALY_ENVELOPE;
227    public static final MediaType MONARCH = MONARCH_ENVELOPE;
228    public static final MediaType PERSONAL = PERSONAL_ENVELOPE;
229    private MediaType(int value)
230    {
231      super(value, NAMES);
232    }
233  } // class MediaType
234  public static final class OrientationRequestedType extends AttributeValue
235  {
236    private static final String[] NAMES = { "portrait", "landscape" };
237    public static final OrientationRequestedType PORTRAIT
238      = new OrientationRequestedType(0);
239    public static final OrientationRequestedType LANDSCAPE
240      = new OrientationRequestedType(1);
241    private OrientationRequestedType(int value)
242    {
243      super(value, NAMES);
244    }
245  } // class OrientationRequestedType
246  public static final class OriginType extends AttributeValue
247  {
248    private static final String[] NAMES = { "physical", "printable" };
249    public static final OriginType PHYSICAL = new OriginType(0);
250    public static final OriginType PRINTABLE = new OriginType(1);
251    private OriginType(int value)
252    {
253      super(value, NAMES);
254    }
255  } // class OriginType
256  public static final class PrintQualityType extends AttributeValue
257  {
258    private static final String[] NAMES = { "high", "normal", "draft" };
259    public static final PrintQualityType HIGH = new PrintQualityType(0);
260    public static final PrintQualityType NORMAL = new PrintQualityType(1);
261    public static final PrintQualityType DRAFT = new PrintQualityType(2);
262    private PrintQualityType(int value)
263    {
264      super(value, NAMES);
265    }
266  } // class PrintQualityType
267
268
269  private ColorType color;
270  private MediaType media;
271  private OrientationRequestedType orientation;
272  private OriginType origin;
273  private PrintQualityType quality;
274  private int resolutionX;
275  private int resolutionY;
276  private int resolutionScale;
277  public PageAttributes()
278  {
279    color = ColorType.MONOCHROME;
280    setMediaToDefault();
281    orientation = OrientationRequestedType.PORTRAIT;
282    origin = OriginType.PHYSICAL;
283    quality = PrintQualityType.NORMAL;
284    setPrinterResolutionToDefault();
285  }
286
287  public PageAttributes(PageAttributes attr)
288  {
289    set(attr);
290  }
291
292  public PageAttributes(ColorType color, MediaType media,
293                        OrientationRequestedType orientation,
294                        OriginType origin, PrintQualityType quality,
295                        int[] resolution)
296  {
297    if (color == null || media == null || orientation == null
298        || origin == null || quality == null)
299      throw new IllegalArgumentException();
300    setPrinterResolution(resolution);
301    this.color = color;
302    this.media = media;
303    this.orientation = orientation;
304    this.origin = origin;
305    this.quality = quality;
306  }
307
308  public Object clone()
309  {
310    return new PageAttributes(this);
311  }
312
313  public void set(PageAttributes attr)
314  {
315    color = attr.color;
316    media = attr.media;
317    orientation = attr.orientation;
318    origin = attr.origin;
319    quality = attr.quality;
320    resolutionX = attr.resolutionX;
321    resolutionY = attr.resolutionY;
322    resolutionScale = attr.resolutionScale;
323  }
324
325  public ColorType getColor()
326  {
327    return color;
328  }
329
330  public void setColor(ColorType color)
331  {
332    if (color == null)
333      throw new IllegalArgumentException();
334    this.color = color;
335  }
336
337  public MediaType getMedia()
338  {
339    return media;
340  }
341
342  public void setMedia(MediaType media)
343  {
344    if (media == null)
345      throw new IllegalArgumentException();
346    this.media = media;
347  }
348
349  public void setMediaToDefault()
350  {
351    String country = Locale.getDefault().getCountry();
352    media = ("US".equals(country) || "CA".equals(country)) ? MediaType.LETTER
353      : MediaType.A4;
354  }
355
356  public OrientationRequestedType getOrientationRequested()
357  {
358    return orientation;
359  }
360
361  public void setOrientationRequested(OrientationRequestedType orientation)
362  {
363    if (orientation == null)
364      throw new IllegalArgumentException();
365    this.orientation = orientation;
366  }
367
368  public void setOrientationRequested(int orientation)
369  {
370    if (orientation == 3)
371      this.orientation = OrientationRequestedType.PORTRAIT;
372    else if (orientation == 4)
373      this.orientation = OrientationRequestedType.LANDSCAPE;
374    else
375      throw new IllegalArgumentException();
376  }
377
378  public void setOrientationRequestedToDefault()
379  {
380    orientation = OrientationRequestedType.PORTRAIT;
381  }
382
383  public OriginType getOrigin()
384  {
385    return origin;
386  }
387
388  public void setOrigin(OriginType origin)
389  {
390    if (origin == null)
391      throw new IllegalArgumentException();
392    this.origin = origin;
393  }
394
395  public PrintQualityType getPrintQuality()
396  {
397    return quality;
398  }
399
400  public void setPrintQuality(PrintQualityType quality)
401  {
402    if (quality == null)
403      throw new IllegalArgumentException();
404    this.quality = quality;
405  }
406
407  public void setPrintQuality(int quality)
408  {
409    if (quality == 3)
410      this.quality = PrintQualityType.DRAFT;
411    else if (quality == 4)
412      this.quality = PrintQualityType.NORMAL;
413    else if (quality == 5)
414      this.quality = PrintQualityType.HIGH;
415    else
416      throw new IllegalArgumentException();
417  }
418
419  public void setPrintQualityToDefault()
420  {
421    quality = PrintQualityType.NORMAL;
422  }
423
424  public int[] getPrinterResolution()
425  {
426    return new int[] { resolutionX, resolutionY, resolutionScale };
427  }
428
429  public void setPrinterResolution(int[] resolution)
430  {
431    if (resolution == null || resolution.length != 3 || resolution[0] <= 0
432        || resolution[1] <= 0 || resolution[2] < 3 || resolution[2] > 4)
433      throw new IllegalArgumentException();
434    resolutionX = resolution[0];
435    resolutionY = resolution[1];
436    resolutionScale = resolution[2];
437  }
438
439  public void setPrinterResolution(int resolution)
440  {
441    if (resolution <= 0)
442      throw new IllegalArgumentException();
443    resolutionX = resolution;
444    resolutionY = resolution;
445    resolutionScale = 3;
446  }
447
448  public void setPrinterResolutionToDefault()
449  {
450    resolutionX = 72;
451    resolutionY = 72;
452    resolutionScale = 3;
453  }
454
455  public boolean equals(Object o)
456  {
457    if (this == o)
458      return true;
459    if (! (o instanceof PageAttributes))
460      return false;
461    PageAttributes pa = (PageAttributes) o;
462    return color == pa.color && media == pa.media
463      && orientation == pa.orientation && origin == pa.origin
464      && quality == pa.quality && resolutionX == pa.resolutionX
465      && resolutionY == pa.resolutionY
466      && resolutionScale == pa.resolutionScale;
467  }
468  public int hashCode()
469  {
470    return (color.value << 31) ^ (media.value << 24)
471      ^ (orientation.value << 23) ^ (origin.value << 22)
472      ^ (quality.value << 20) ^ (resolutionScale << 19)
473      ^ (resolutionY << 10) ^ resolutionX;
474  }
475  public String toString()
476  {
477    return "color=" + color + ",media=" + media + ",orientation-requested="
478      + orientation + ",origin=" + origin + ",print-quality=" + quality
479      + ",printer-resolution=[" + resolutionX + ',' + resolutionY + ','
480      + resolutionScale + ']';
481  }
482} // class PageAttributes