1 28 29 package com.idaremedia.antx.print; 30 31 import java.io.File ; 32 import java.util.Collection ; 33 import java.util.Collections ; 34 import java.util.Iterator ; 35 import java.util.Vector ; 36 37 import org.apache.tools.ant.BuildException; 38 import org.apache.tools.ant.DirectoryScanner; 39 import org.apache.tools.ant.types.FileSet; 40 import org.apache.tools.ant.types.Reference; 41 import org.apache.tools.ant.util.FileUtils; 42 43 import com.idaremedia.antx.AntX; 44 import com.idaremedia.antx.AssertableDataType; 45 import com.idaremedia.antx.FixtureComponent; 46 import com.idaremedia.antx.apis.AntLibFriendly; 47 import com.idaremedia.antx.parameters.FreeFormEnabled; 48 import com.idaremedia.antx.parameters.RecoveryEnabled; 49 50 93 94 public class PrinterRegistry extends AssertableDataType 95 implements Cloneable , FixtureComponent, FreeFormEnabled, AntLibFriendly, RecoveryEnabled 96 { 97 100 public PrinterRegistry() 101 { 102 super(AntX.print); 103 m_registry = new Vector (10,7); 104 } 105 106 107 110 PrinterRegistry(boolean locked) 111 { 112 super(AntX.print); 113 if (locked) { 114 m_registry = Collections.EMPTY_LIST; 115 } else { 116 m_registry = new Vector (10,7); 117 } 118 } 119 120 121 126 public Object clone() 127 { 128 if (isReference()) { 129 return getRegistryRef().clone(); 130 } 131 try { 132 PrinterRegistry copy = (PrinterRegistry)super.clone(); 133 if (m_registry!=Collections.EMPTY_LIST) { 134 Vector mappings = (Vector )((Vector )m_registry).clone(); 135 for (int i=0,n=mappings.size();i<n;i++) { 136 mappings.set(i, ((PrinterMapping)mappings.get(i)).clone()); 137 } 138 copy.m_registry = mappings; 139 } 140 return copy; 141 } catch(CloneNotSupportedException clnx) { 142 throw new Error (uistrs().get(AntX.CLONE_BROKEN_MSGID)); 143 } 144 } 145 146 147 151 public void setId(String id) 152 { 153 m_Id= id; 154 } 155 156 157 160 public final String getId() 161 { 162 if (m_Id!=null) { 163 return m_Id; 164 } 165 if (isReference()) { 166 return getRegistryRef().getId(); 167 } 168 return super.getId(); 169 } 170 171 172 179 public void setHaltIfError(boolean b) 180 { 181 if (isReference()) { 182 throw tooManyAttributes(); 183 } 184 m_haltIfError = b; 185 } 186 187 188 193 public boolean isHaltIfError() 194 { 195 if (isReference()) { 196 return getRegistryRef().isHaltIfError(); 197 } 198 return m_haltIfError; 199 } 200 201 202 212 public void addConfiguredFileSet(FileSet fs) 213 { 214 require_(fs!=null,"addFileset- nonzro fileset"); 215 if (isReference()) { 216 throw tooManyAttributes(); 217 } 218 219 DirectoryScanner dirscan = fs.getDirectoryScanner(getProject()); 220 String [] files = dirscan.getIncludedFiles(); 221 222 if (files.length>0) { 223 FileUtils fileUtils = FileUtils.getFileUtils(); 224 File wrt = dirscan.getBasedir(); 225 int Nadded=0; 226 for (int i=0;i<files.length;i++) { 227 File rf= fileUtils.resolveFile(wrt,files[i]); 228 try { 229 PrinterMapping pm = new PrinterMapping(); 230 pm.setProjectFile(rf); 231 m_registry.add(pm); 232 Nadded++; 233 } catch(BuildException bX) { 234 if (isHaltIfError()) { 235 throw bX; 236 } 237 } 238 } 240 if (Nadded>0) { 241 edited("addFileSet"); 242 } 243 fileUtils= null; 244 } 245 246 dirscan= null; 247 } 248 249 250 256 public final void setFileSetId(Reference r) 257 { 258 require_(r!=null,"setFileset- nonzro ref"); 259 if (isReference()) { 260 throw tooManyAttributes(); 261 } 262 FileSet fs = new FileSet(); 263 fs.setProject(getProject()); 264 fs.setRefid(r); 265 addConfiguredFileSet(fs); 266 } 267 268 269 270 276 public void addConfiguredPrinter(PrinterMapping pm) 277 { 278 require_(pm!=null,"addMapin- nonzro"); 279 if (isReference()) { 280 throw tooManyAttributes(); 281 } 282 m_registry.add(pm); 283 edited("addPrinter"); 284 } 285 286 287 288 296 public final void addConfigured(PrinterMapping pm) 297 { 298 addConfiguredPrinter(pm); 299 } 300 301 302 307 public void addConfiguredDefaultPrinter(AnyPrinter ap) 308 { 309 require_(ap!=null,"addDfltPrntr- nonzro prntr"); 310 if (isReference()) { 311 throw tooManyAttributes(); 312 } 313 m_defaultPrinter = ap; 314 edited("addDefaultPrinter"); 315 } 316 317 318 326 public final void addConfigured(AnyPrinter ap) 327 { 328 addConfiguredDefaultPrinter(ap); 329 } 330 331 332 336 public DisplayStrategy getDefaultPrinter() 337 { 338 if (isReference()) { 339 return getRegistryRef().getDefaultPrinter(); 340 } 341 return m_defaultPrinter; 342 } 343 344 345 350 public PrinterMapping findMappingFor(Object instance) 351 { 352 if (isReference()) { 353 return getRegistryRef().findMappingFor(instance); 354 } 355 if (instance!=null) { 356 synchronized(m_registry) { if (!m_registry.isEmpty()) { 358 Iterator itr= m_registry.iterator(); 359 while (itr.hasNext()) { 360 PrinterMapping pm = (PrinterMapping)itr.next(); 361 if (pm.isMatch(instance)) { 362 return pm; 363 } 364 } 365 itr=null; 366 } 367 } } 369 return null; 370 } 371 372 373 378 public final DisplayStrategy getPrinterForNoNull(Object instance) 379 { 380 PrinterMapping pm = findMappingFor(instance); 381 return (pm!=null) ? pm.getPrinter() : getDefaultPrinter(); 382 } 383 384 385 388 protected final PrinterRegistry getRegistryRef() 389 { 390 return (PrinterRegistry)getCheckedRef(PrinterRegistry.class,"printer-registry"); 391 } 392 393 394 private String m_Id; 395 private Collection m_registry; private AnyPrinter m_defaultPrinter = new AnyPrinter(); 397 private boolean m_haltIfError = true; } 399 400 401 | Popular Tags |