2 * PrintableContext.java
5 package net.sf.openrocket.gui.print;
7 import java.util.Iterator;
10 import java.util.TreeMap;
11 import java.util.TreeSet;
14 * Instances of this class are meant to keep track of what the user has selected to be printed.
16 public class PrintableContext implements Comparable<PrintableContext>, Iterable<PrintableContext> {
19 * The stage number. May be null for printables that have no stage meaning.
21 private Set<Integer> stageNumber;
24 * The type of thing to be printed.
26 private OpenRocketPrintable printable;
28 private final Map<OpenRocketPrintable, Set<Integer>> previous = new TreeMap<OpenRocketPrintable, Set<Integer>>();
31 public PrintableContext () {
37 * @param theStageNumber the stage number of the printable; may be null if not applicable
38 * @param thePrintable the type of the thing to be printed
40 * @throws IllegalArgumentException thrown if thePrintable.isStageSpecific
42 private PrintableContext (final Set<Integer> theStageNumber, final OpenRocketPrintable thePrintable)
43 throws IllegalArgumentException {
44 if (thePrintable.isStageSpecific() && theStageNumber == null) {
45 throw new IllegalArgumentException("A stage number must be provided when a printable is stage specific.");
47 stageNumber = theStageNumber;
48 printable = thePrintable;
51 public void add (final Integer theStageNumber, final OpenRocketPrintable thePrintable)
52 throws IllegalArgumentException {
53 Set<Integer> stages = previous.get(thePrintable);
55 stages = new TreeSet<Integer>();
56 previous.put(thePrintable, stages);
58 if (theStageNumber != null) {
59 stages.add(theStageNumber);
64 public Iterator<PrintableContext> iterator () {
65 return new Iterator<PrintableContext>() {
67 Iterator<OpenRocketPrintable> keyIter = previous.keySet().iterator();
70 public boolean hasNext () {
71 return keyIter.hasNext();
75 public PrintableContext next () {
76 final OpenRocketPrintable key = keyIter.next();
77 return new PrintableContext(previous.get(key), key);
81 public void remove () {
88 * Get the stage number, if it's applicable to the printable.
90 * @return the stage number
92 public Set<Integer> getStageNumber () {
99 * @return the printable
101 public OpenRocketPrintable getPrintable () {
106 public int compareTo (final PrintableContext other) {
107 return this.printable.getPrintOrder() - other.printable.getPrintOrder();