1 51 package org.apache.fop.fo.pagination; 52 53 import org.apache.fop.fo.*; 55 import org.apache.fop.apps.FOPException; 56 57 import java.util.HashMap ; 59 import java.util.Iterator ; 60 61 68 public class LayoutMasterSet extends FObj { 69 70 public static class Maker extends FObj.Maker { 71 public FObj make(FObj parent, PropertyList propertyList, 72 String systemId, int line, int column) 73 throws FOPException { 74 return new LayoutMasterSet(parent, propertyList, 75 systemId, line, column); 76 } 77 } 78 79 public static FObj.Maker maker() { 80 return new LayoutMasterSet.Maker(); 81 } 82 83 private HashMap simplePageMasters; 84 private HashMap pageSequenceMasters; 85 private HashMap allRegions; 86 87 private Root root; 88 89 protected LayoutMasterSet(FObj parent, PropertyList propertyList, 90 String systemId, int line, int column) 91 throws FOPException { 92 super(parent, propertyList, systemId, line, column); 93 94 this.simplePageMasters = new HashMap (); 95 this.pageSequenceMasters = new HashMap (); 96 97 if (parent.getName().equals("fo:root")) { 98 this.root = (Root)parent; 99 root.setLayoutMasterSet(this); 100 } else { 101 throw new FOPException("fo:layout-master-set must be child of fo:root, not " 102 + parent.getName(), systemId, line, column); 103 } 104 allRegions = new HashMap (); 105 106 } 107 108 public String getName() { 109 return "fo:layout-master-set"; 110 } 111 112 protected void addSimplePageMaster(SimplePageMaster simplePageMaster) 113 throws FOPException { 114 if (existsName(simplePageMaster.getMasterName())) 116 throw new FOPException("'master-name' (" 117 + simplePageMaster.getMasterName() 118 + ") must be unique " 119 + "across page-masters and page-sequence-masters", systemId, line, column); 120 this.simplePageMasters.put(simplePageMaster.getMasterName(), 121 simplePageMaster); 122 } 123 124 protected SimplePageMaster getSimplePageMaster(String masterName) { 125 return (SimplePageMaster)this.simplePageMasters.get(masterName); 126 } 127 128 protected void addPageSequenceMaster(String masterName, PageSequenceMaster pageSequenceMaster) 129 throws FOPException { 130 if (existsName(masterName)) 132 throw new FOPException("'master-name' (" + masterName 133 + ") must be unique " 134 + "across page-masters and page-sequence-masters", systemId, line, column); 135 this.pageSequenceMasters.put(masterName, pageSequenceMaster); 136 } 137 138 protected PageSequenceMaster getPageSequenceMaster(String masterName) { 139 return (PageSequenceMaster)this.pageSequenceMasters.get(masterName); 140 } 141 142 private boolean existsName(String masterName) { 143 if (simplePageMasters.containsKey(masterName) 144 || pageSequenceMasters.containsKey(masterName)) 145 return true; 146 else 147 return false; 148 } 149 150 protected void checkRegionNames() throws FOPException { 151 for (Iterator spm = simplePageMasters.values().iterator(); 154 spm.hasNext(); ) { 155 SimplePageMaster simplePageMaster = 156 (SimplePageMaster)spm.next(); 157 HashMap spmRegions = simplePageMaster.getRegions(); 158 for (Iterator e = spmRegions.values().iterator(); 159 e.hasNext(); ) { 160 Region region = (Region)e.next(); 161 if (allRegions.containsKey(region.getRegionName())) { 162 String localClass = 163 (String )allRegions.get(region.getRegionName()); 164 if (!localClass.equals(region.getRegionClass())) { 165 throw new FOPException("Duplicate region-names (" 166 + region.getRegionName() 167 + ") must map " 168 + "to the same region-class (" 169 + localClass + "!=" 170 + region.getRegionClass() 171 + ")", systemId, line, column); 172 } 173 } 174 allRegions.put(region.getRegionName(), 175 region.getRegionClass()); 176 } 177 } 178 } 179 180 184 protected boolean regionNameExists(String regionName) { 185 for (Iterator i = simplePageMasters.values().iterator(); i.hasNext(); ) { 186 if (((SimplePageMaster)i.next()).regionNameExists(regionName)) { 187 return true; 188 } 189 } 190 return false; 191 } 192 193 } 194 | Popular Tags |