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 org.apache.fop.render.afp.fonts.AFPFont; 26 27 40 public final class ActiveEnvironmentGroup extends AbstractNamedAFPObject { 41 42 45 private static final String DEFAULT_NAME = "AEG00001"; 46 47 50 private ArrayList _mapCodedFonts = new ArrayList (); 51 52 55 private ObjectAreaDescriptor _objectAreaDescriptor = null; 56 57 60 private ObjectAreaPosition _objectAreaPosition = null; 61 62 65 private PresentationTextDescriptor _presentationTextDataDescriptor = null; 66 67 70 private PageDescriptor _pageDescriptor = null; 71 72 75 private ArrayList _mapPageOverlays = new ArrayList (); 76 77 82 public ActiveEnvironmentGroup(int width, int height) { 83 84 this(DEFAULT_NAME, width, height); 85 86 } 87 88 95 public ActiveEnvironmentGroup(String name, int width, int height) { 96 97 super(name); 98 99 _pageDescriptor = new PageDescriptor(width, height); 101 102 _objectAreaDescriptor = new ObjectAreaDescriptor(width, height); 104 105 _presentationTextDataDescriptor = 107 new PresentationTextDescriptor(width, height); 108 109 } 110 111 117 public void setPosition(int x, int y, int rotation) { 118 119 _objectAreaPosition = new ObjectAreaPosition(x, y, rotation); 121 122 } 123 124 129 public PageDescriptor getPageDescriptor() { 130 131 return _pageDescriptor; 132 133 } 134 135 140 public PresentationTextDescriptor getPresentationTextDataDescriptor() { 141 142 return _presentationTextDataDescriptor; 143 144 } 145 146 151 public void writeDataStream(OutputStream os) 152 throws IOException { 153 154 writeStart(os); 155 156 writeObjectList(_mapCodedFonts, os); 157 158 writeObjectList(_mapPageOverlays, os); 159 160 _pageDescriptor.writeDataStream(os); 161 162 if (_objectAreaDescriptor != null && _objectAreaPosition != null) { 163 _objectAreaDescriptor.writeDataStream(os); 164 _objectAreaPosition.writeDataStream(os); 165 } 166 167 _presentationTextDataDescriptor.writeDataStream(os); 168 169 writeEnd(os); 170 171 } 172 173 177 private void writeStart(OutputStream os) 178 throws IOException { 179 180 byte[] data = new byte[17]; 181 182 data[0] = 0x5A; data[1] = 0x00; data[2] = 0x10; data[3] = (byte) 0xD3; data[4] = (byte) 0xA8; data[5] = (byte) 0xC9; data[6] = 0x00; data[7] = 0x00; data[8] = 0x00; 192 for (int i = 0; i < _nameBytes.length; i++) { 193 194 data[9 + i] = _nameBytes[i]; 195 196 } 197 198 os.write(data); 199 200 } 201 202 206 private void writeEnd(OutputStream os) 207 throws IOException { 208 209 byte[] data = new byte[17]; 210 211 data[0] = 0x5A; data[1] = 0x00; data[2] = 0x10; data[3] = (byte) 0xD3; data[4] = (byte) 0xA9; data[5] = (byte) 0xC9; data[6] = 0x00; data[7] = 0x00; data[8] = 0x00; 221 for (int i = 0; i < _nameBytes.length; i++) { 222 223 data[9 + i] = _nameBytes[i]; 224 225 } 226 227 os.write(data); 228 229 } 230 231 238 public void createFont( 239 byte fontReference, 240 AFPFont font, 241 int size, 242 int orientation) { 243 244 MapCodedFont mcf = getCurrentMapCodedFont(); 245 246 if (mcf == null) { 247 mcf = new MapCodedFont(); 248 _mapCodedFonts.add(mcf); 249 } 250 251 try { 252 253 mcf.addFont( 254 fontReference, 255 font, 256 size, 257 orientation); 258 259 } catch (MaximumSizeExceededException msee) { 260 261 mcf = new MapCodedFont(); 262 _mapCodedFonts.add(mcf); 263 264 try { 265 266 mcf.addFont( 267 fontReference, 268 font, 269 size, 270 orientation); 271 272 } catch (MaximumSizeExceededException ex) { 273 274 log.error("createFont():: resulted in a MaximumSizeExceededException"); 276 277 } 278 279 } 280 281 } 282 283 288 public void createOverlay(String name) { 289 290 MapPageOverlay mpo = getCurrentMapPageOverlay(); 291 292 if (mpo == null) { 293 mpo = new MapPageOverlay(); 294 _mapPageOverlays.add(mpo); 295 } 296 297 try { 298 299 mpo.addOverlay(name); 300 301 } catch (MaximumSizeExceededException msee) { 302 mpo = new MapPageOverlay(); 303 _mapPageOverlays.add(mpo); 304 try { 305 mpo.addOverlay(name); 306 } catch (MaximumSizeExceededException ex) { 307 log.error("createOverlay():: resulted in a MaximumSizeExceededException"); 309 } 310 } 311 } 312 313 318 private MapCodedFont getCurrentMapCodedFont() { 319 320 int size = _mapCodedFonts.size(); 321 if (size > 0) { 322 return (MapCodedFont) _mapCodedFonts.get(_mapCodedFonts.size() - 1); 323 } else { 324 return null; 325 } 326 327 } 328 329 334 private MapPageOverlay getCurrentMapPageOverlay() { 335 336 int size = _mapPageOverlays.size(); 337 if (size > 0) { 338 return (MapPageOverlay) _mapPageOverlays.get( 339 _mapPageOverlays.size() - 1); 340 } else { 341 return null; 342 } 343 344 } 345 346 } | Popular Tags |