@@ -41,10 +41,8 @@ source product.
41414242*/
4343using System ;
44- using System . Reflection ;
4544using iText . Html2pdf . Attach ;
4645using iText . Html2pdf . Css ;
47- using iText . Html2pdf . Exceptions ;
4846using iText . Html2pdf . Util ;
4947using iText . StyledXmlParser . Node ;
5048
@@ -58,11 +56,11 @@ public class DefaultTagWorkerFactory : ITagWorkerFactory {
5856 ( ) ;
5957
6058 /// <summary>The default mapping.</summary>
61- private readonly TagProcessorMapping defaultMapping ;
59+ private readonly TagProcessorMapping < DefaultTagWorkerMapping . ITagWorkerCreator > defaultMapping ;
6260
6361 /// <summary>Instantiates a new default tag worker factory.</summary>
6462 public DefaultTagWorkerFactory ( ) {
65- this . defaultMapping = DefaultTagWorkerMapping . GetDefaultTagWorkerMapping ( ) ;
63+ this . defaultMapping = new DefaultTagWorkerMapping ( ) . GetDefaultTagWorkerMapping ( ) ;
6664 }
6765
6866 /// <summary>
@@ -81,43 +79,34 @@ public static ITagWorkerFactory GetInstance() {
8179 public ITagWorker GetTagWorker ( IElementNode tag , ProcessorContext context ) {
8280 ITagWorker tagWorker = GetCustomTagWorker ( tag , context ) ;
8381 if ( tagWorker == null ) {
84- Type tagWorkerClass = GetTagWorkerClass ( this . defaultMapping , tag ) ;
85- if ( tagWorkerClass == null ) {
82+ DefaultTagWorkerMapping . ITagWorkerCreator tagWorkerCreator = GetTagWorkerCreator ( this . defaultMapping , tag ) ;
83+ if ( tagWorkerCreator == null ) {
8684 return null ;
8785 }
88- // Use reflection to create an instance
89- try {
90- ConstructorInfo ctor = tagWorkerClass . GetConstructor ( new Type [ ] { typeof ( IElementNode ) , typeof ( ProcessorContext
91- ) } ) ;
92- ITagWorker res = ( ITagWorker ) ctor . Invoke ( new Object [ ] { tag , context } ) ;
93- return res ;
94- }
95- catch ( Exception e ) {
96- throw new TagWorkerInitializationException ( TagWorkerInitializationException . REFLECTION_IN_TAG_WORKER_FACTORY_IMPLEMENTATION_FAILED
97- , tagWorkerClass . FullName , tag . Name ( ) , e ) ;
98- }
86+ return tagWorkerCreator ( tag , context ) ;
9987 }
10088 return tagWorker ;
10189 }
10290
103- internal virtual TagProcessorMapping GetDefaultMapping ( ) {
91+ internal virtual TagProcessorMapping < DefaultTagWorkerMapping . ITagWorkerCreator > GetDefaultMapping ( ) {
10492 return defaultMapping ;
10593 }
10694
107- /// <summary>Gets the tag worker class for a specific element node.</summary>
95+ /// <summary>Gets the tag worker creator for a specific element node.</summary>
10896 /// <param name="mapping">the mapping</param>
10997 /// <param name="tag">the element node</param>
110- /// <returns>the tag worker class</returns>
111- private Type GetTagWorkerClass ( TagProcessorMapping mapping , IElementNode tag ) {
112- Type tagWorkerClass = null ;
98+ /// <returns>the tag worker class creator</returns>
99+ private static DefaultTagWorkerMapping . ITagWorkerCreator GetTagWorkerCreator ( TagProcessorMapping < DefaultTagWorkerMapping . ITagWorkerCreator
100+ > mapping , IElementNode tag ) {
101+ DefaultTagWorkerMapping . ITagWorkerCreator tagWorkerCreator = null ;
113102 String display = tag . GetStyles ( ) != null ? tag . GetStyles ( ) . Get ( CssConstants . DISPLAY ) : null ;
114103 if ( display != null ) {
115- tagWorkerClass = mapping . GetMapping ( tag . Name ( ) , display ) ;
104+ tagWorkerCreator = ( DefaultTagWorkerMapping . ITagWorkerCreator ) mapping . GetMapping ( tag . Name ( ) , display ) ;
116105 }
117- if ( tagWorkerClass == null ) {
118- tagWorkerClass = mapping . GetMapping ( tag . Name ( ) ) ;
106+ if ( tagWorkerCreator == null ) {
107+ tagWorkerCreator = ( DefaultTagWorkerMapping . ITagWorkerCreator ) mapping . GetMapping ( tag . Name ( ) ) ;
119108 }
120- return tagWorkerClass ;
109+ return tagWorkerCreator ;
121110 }
122111
123112 /// <summary>This is a hook method.</summary>
0 commit comments