1 17 18 19 20 package org.apache.fop.render.afp.modca; 21 import java.io.IOException ; 22 import java.io.OutputStream ; 23 import java.io.UnsupportedEncodingException ; 24 import java.util.ArrayList ; 25 import java.util.Iterator ; 26 27 28 53 public final class Document extends AbstractNamedAFPObject { 54 55 58 private final static String DEFAULT_NAME = "DOC00001"; 59 60 63 private ArrayList _objects = new ArrayList (); 64 65 68 private boolean _started = false; 69 70 73 private boolean _complete = false; 74 75 78 public Document() { 79 this(DEFAULT_NAME); 80 } 81 82 86 public Document(String name) { 87 88 super(name); 89 90 } 91 92 96 public void addPage(PageObject page) { 97 if (!_objects.contains(page)) { 98 _objects.add(page); 99 } 100 } 101 102 106 public void addPageGroup(PageGroup pageGroup) { 107 _objects.add(pageGroup); 108 } 109 110 113 public void endDocument() { 114 115 _complete = true; 116 117 } 118 119 122 public boolean isComplete() { 123 return _complete; 124 } 125 126 131 public void writeDataStream(OutputStream os) 132 throws IOException { 133 134 if (!_started) { 135 writeStart(os); 136 _started = true; 137 } 138 139 for (Iterator it = _objects.iterator(); it.hasNext(); ) { 140 AbstractAFPObject ao = (AbstractAFPObject)it.next(); 141 if (ao instanceof PageObject && ((PageObject)ao).isComplete() 142 || ao instanceof PageGroup && ((PageGroup)ao).isComplete()) { 143 ao.writeDataStream(os); 144 it.remove(); 145 } else { 146 break; 147 } 148 } 149 150 if (_complete) { 151 writeEnd(os); 152 } 153 154 } 155 156 160 private void writeStart(OutputStream os) 161 throws IOException { 162 163 byte[] data = new byte[17]; 164 165 data[0] = 0x5A; data[1] = 0x00; data[2] = 0x10; data[3] = (byte) 0xD3; data[4] = (byte) 0xA8; data[5] = (byte) 0xA8; data[6] = 0x00; data[7] = 0x00; data[8] = 0x00; 175 for (int i = 0; i < _nameBytes.length; i++) { 176 177 data[9 + i] = _nameBytes[i]; 178 179 } 180 181 os.write(data); 182 183 } 184 185 189 private void writeEnd(OutputStream os) 190 throws IOException { 191 192 byte[] data = new byte[17]; 193 194 data[0] = 0x5A; data[1] = 0x00; data[2] = 0x10; data[3] = (byte) 0xD3; data[4] = (byte) 0xA9; data[5] = (byte) 0xA8; data[6] = 0x00; data[7] = 0x00; data[8] = 0x00; 204 for (int i = 0; i < _nameBytes.length; i++) { 205 206 data[9 + i] = _nameBytes[i]; 207 208 } 209 210 os.write(data); 211 212 } 213 214 } | Popular Tags |