1 17 18 19 20 package org.apache.fop.render.afp.modca; 21 22 import java.io.IOException ; 23 import java.io.OutputStream ; 24 import java.io.UnsupportedEncodingException ; 25 import java.util.ArrayList ; 26 27 import org.apache.fop.render.afp.tools.BinaryUtils; 28 29 35 public class MapPageOverlay extends AbstractAFPObject { 36 37 40 private ArrayList _overLays = new ArrayList (); 41 42 45 public MapPageOverlay() { 46 47 } 48 49 55 public void addOverlay(String name) throws MaximumSizeExceededException { 56 57 if (_overLays.size() > 253) { 58 throw new MaximumSizeExceededException(); 59 } 60 61 if (name.length() != 8) { 62 throw new IllegalArgumentException ("The name of overlay " + name 63 + " must be 8 characters"); 64 } 65 66 if (log.isDebugEnabled()) { 67 log.debug("addOverlay():: adding overlay " + name); 68 } 69 70 byte[] data; 71 72 try { 73 74 data = name.getBytes(AFPConstants.EBCIDIC_ENCODING); 75 _overLays.add(data); 76 77 } catch (UnsupportedEncodingException usee) { 78 79 log 80 .error("addOverlay():: UnsupportedEncodingException translating the name " 81 + name); 82 83 } 84 85 } 86 87 92 public void writeDataStream(OutputStream os) 93 throws IOException { 94 95 96 int oLayCount = _overLays.size(); 97 int recordlength = oLayCount * 18; 98 99 byte[] data = new byte[recordlength + 9]; 100 101 data[0] = 0x5A; 102 103 byte[] rl1 = BinaryUtils.convert(recordlength + 8, 2); data[1] = rl1[0]; 108 data[2] = rl1[1]; 109 110 data[3] = (byte) 0xD3; 112 data[4] = (byte) 0xAB; 113 data[5] = (byte) 0xD8; 114 115 data[6] = 0x00; data[7] = 0x00; data[8] = 0x00; 119 int pos = 8; 120 121 byte olayref = 0x00; 123 124 for (int i = 0; i < oLayCount; i++) { 125 126 olayref = (byte) (olayref + 1); 127 128 data[++pos] = 0x00; 129 data[++pos] = 0x12; 131 data[++pos] = 0x0C; data[++pos] = 0x02; 133 data[++pos] = (byte) 0x84; 134 data[++pos] = 0x00; 135 136 byte[] name = (byte[]) _overLays.get(i); 138 139 for (int j = 0; j < name.length; j++) { 140 141 data[++pos] = name[j]; 142 143 } 144 145 data[++pos] = 0x04; data[++pos] = 0x24; 147 data[++pos] = 0x02; 148 149 data[++pos] = olayref; 151 152 } 153 154 os.write(data); 155 156 } 157 158 } | Popular Tags |