1 51 package org.apache.fop.fo.pagination; 52 53 import org.apache.fop.fo.*; 54 import org.apache.fop.fo.properties.*; 55 import org.apache.fop.apps.FOPException; 56 57 64 public class ConditionalPageMasterReference extends FObj { 65 66 public static class Maker extends FObj.Maker { 67 public FObj make(FObj parent, PropertyList propertyList, 68 String systemId, int line, int column) 69 throws FOPException { 70 return new ConditionalPageMasterReference(parent, propertyList, 71 systemId, line, column); 72 } 73 74 } 75 76 public static FObj.Maker maker() { 77 return new ConditionalPageMasterReference.Maker(); 78 } 79 80 private RepeatablePageMasterAlternatives repeatablePageMasterAlternatives; 81 82 private String masterName; 83 84 private int pagePosition; 85 private int oddOrEven; 86 private int blankOrNotBlank; 87 88 public ConditionalPageMasterReference(FObj parent, PropertyList propertyList, 89 String systemId, int line, int column) 90 throws FOPException { 91 super(parent, propertyList, systemId, line, column); 92 93 if (getProperty("master-reference") != null) { 94 this.masterName = getProperty("master-reference").getString(); 95 } 96 if (parent.getName().equals("fo:repeatable-page-master-alternatives")) { 97 this.repeatablePageMasterAlternatives = 98 (RepeatablePageMasterAlternatives)parent; 99 if (masterName == null) { 100 log.warn("A fo:conditional-page-master-reference does not have a master-reference and so is being ignored"); 101 } else { 102 this.repeatablePageMasterAlternatives.addConditionalPageMasterReference(this); 103 } 104 } else { 105 throw new FOPException("fo:conditional-page-master-reference must be child " 106 + "of fo:repeatable-page-master-alternatives, not " 107 + parent.getName(), systemId, line, column); 108 } 109 this.pagePosition = this.properties.get("page-position").getEnum(); 110 this.oddOrEven = this.properties.get("odd-or-even").getEnum(); 111 this.blankOrNotBlank = this.properties.get("blank-or-not-blank").getEnum(); 112 } 113 114 public String getName() { 115 return "fo:conditional-page-master-reference"; 116 } 117 118 protected boolean isValid(boolean isOddPage, boolean isFirstPage, 119 boolean isEmptyPage) { 120 if( isFirstPage ) { 122 if (pagePosition==PagePosition.REST) { 123 return false; 124 } else if (pagePosition==PagePosition.LAST) { 125 log.warn("conditional-page-master-reference: page-position='last' is not yet implemented (NYI)"); 127 return false; 128 } 129 } else { 130 if (pagePosition==PagePosition.FIRST) { 131 return false; 132 } else if (pagePosition==PagePosition.LAST) { 133 log.warn("conditional-page-master-reference: page-position='last' is not yet implemented (NYI)"); 135 } 137 } 138 139 if (isOddPage) { 141 if (oddOrEven==OddOrEven.EVEN) { 142 return false; 143 } 144 } else { 145 if (oddOrEven==OddOrEven.ODD) { 146 return false; 147 } 148 } 149 150 if (isEmptyPage) { 152 if (blankOrNotBlank==BlankOrNotBlank.NOT_BLANK) { 153 return false; 154 } 155 } else { 156 if (blankOrNotBlank==BlankOrNotBlank.BLANK) { 157 return false; 158 } 159 } 160 161 return true; 162 163 } 164 165 protected int getPagePosition() { 166 return this.pagePosition; 167 } 168 169 protected int getOddOrEven() { 170 return this.oddOrEven; 171 } 172 173 protected int getBlankOrNotBlank() { 174 return this.blankOrNotBlank; 175 } 176 177 public String getMasterName() { 178 return masterName; 179 } 180 } 181 | Popular Tags |