litesoft
@ 804
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.util.template; import java.io.*; import java.util.*; import org.litesoft.core.typeutils.*; import org.litesoft.util.*; public class RepeatingTC extends AbstractTC implements TCsub { private String mReplacementKey; private Object[] mSubstituteFroms; private Reader mTemplate; public RepeatingTC( String pReplacementKey, Object[] pSubstituteFroms, Reader pTemplate, Collection<TCsub> pSubstitutions ) { super( pSubstitutions ); mReplacementKey = Utils.assertNotNullNotEmpty( "ReplacementKey", pReplacementKey ); mSubstituteFroms = pSubstituteFroms; Objects.assertNotNull( "Template", mTemplate = pTemplate ); } public RepeatingTC( String pReplacementKey, Object[] pSubstituteFroms, Reader pTemplate, TCsub... pSubstitutions ) { this( pReplacementKey, pSubstituteFroms, pTemplate, makeSet( pSubstitutions ) ); } public RepeatingTC( String pReplacementKey, Object[] pSubstituteFroms, String pTemplate, Collection<TCsub> pSubstitutions ) { this( pReplacementKey, pSubstituteFroms, new StringReader( pTemplate ), pSubstitutions ); } public RepeatingTC( String pReplacementKey, Object[] pSubstituteFroms, String pTemplate, TCsub... pSubstitutions ) { this( pReplacementKey, pSubstituteFroms, pTemplate, makeSet( pSubstitutions ) ); } @Override public String getReplacementKey() { return mReplacementKey; } @Override public void replace( Writer pWriter, String pReplaceNotFoundsWith, Object pReplaceFrom ) throws IOException { String zText = loadText(); for ( Object zSubstituteFrom : mSubstituteFroms ) { pWriter.write( processSubstitutionsFrom( zText, pWriter, pReplaceNotFoundsWith, zSubstituteFrom ) ); } } private String loadText() throws IOException { char[] zChars = new char[4096]; int zCntRead = mTemplate.read( zChars ); if ( zCntRead < 4096 ) { return (zCntRead <= 0) ? "" : new String( zChars, 0, zCntRead ); } StringBuilder zSB = new StringBuilder( 9999 ); do { zSB.append( zChars, 0, zCntRead ); } while ( 4096 == (zCntRead = mTemplate.read( zChars )) ); if ( zCntRead > 0 ) { zSB.append( zChars, 0, zCntRead ); } return zSB.toString(); } } |