Skip to content

Commit 945c4b0

Browse files
committed
refactored TagWorkers and CssAppliers
DEVSIX-1055
1 parent 4f99ef7 commit 945c4b0

File tree

7 files changed

+48
-261
lines changed

7 files changed

+48
-261
lines changed

src/main/java/com/itextpdf/html2pdf/attach/ITagWorkerFactory.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,7 @@ public interface ITagWorkerFactory {
5252
/**
5353
* Look up a TagProcessor for the given tag and returns an instance constructed with passed parameters.
5454
*/
55-
ITagWorker getTagWorkerInstance(IElementNode tag, ProcessorContext context) ;
56-
57-
void registerTagWorker(String tag, Class<?> tagWorkerClass);
58-
59-
void registerTagWorker(String tag, String display, Class<?> tagWorkerClass);
55+
ITagWorker getTagWorker(IElementNode tag, ProcessorContext context) ;
6056

6157
}
6258

src/main/java/com/itextpdf/html2pdf/attach/impl/DefaultHtmlProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ private void visit(INode node) {
234234
return;
235235
}
236236

237-
ITagWorker tagWorker = context.getTagWorkerFactory().getTagWorkerInstance(element, context);
237+
ITagWorker tagWorker = context.getTagWorkerFactory().getTagWorker(element, context);
238238
if (tagWorker == null) {
239239
if (!ignoredTags.contains(element.name())) {
240240
logger.error(MessageFormat.format(LogMessageConstant.NO_WORKER_FOUND_FOR_TAG, (element).name()));

src/main/java/com/itextpdf/html2pdf/attach/impl/DefaultTagWorkerFactory.java

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -55,43 +55,36 @@ This file is part of the iText (R) project.
5555
public class DefaultTagWorkerFactory implements ITagWorkerFactory {
5656

5757
private TagProcessorMapping defaultMapping;
58-
private TagProcessorMapping userMapping;
5958

6059
public DefaultTagWorkerFactory() {
61-
defaultMapping = DefaultTagWorkerMapping.getDefaultTagWorkerMapping();
62-
userMapping = new TagProcessorMapping();
60+
this.defaultMapping = DefaultTagWorkerMapping.getDefaultTagWorkerMapping();
6361
}
6462

6563
@Override
66-
public ITagWorker getTagWorkerInstance(IElementNode tag, ProcessorContext context) throws TagWorkerInitializationException {
67-
Class<?> tagWorkerClass = getTagWorkerClass(userMapping, tag);
68-
if (tagWorkerClass == null) {
69-
tagWorkerClass = getTagWorkerClass(defaultMapping, tag);
70-
}
71-
if (tagWorkerClass == null) {
72-
return null;
64+
public final ITagWorker getTagWorker(IElementNode tag, ProcessorContext context) {
65+
ITagWorker tagWorker = getCustomTagWorker(tag, context);
66+
67+
if ( tagWorker == null ) {
68+
Class<?> tagWorkerClass = getTagWorkerClass(this.defaultMapping, tag);
69+
70+
if (tagWorkerClass == null) {
71+
return null;
72+
}
73+
74+
// Use reflection to create an instance
75+
try {
76+
Constructor ctor = tagWorkerClass.getDeclaredConstructor(new Class<?>[]{IElementNode.class, ProcessorContext.class});
77+
ITagWorker res = (ITagWorker) ctor.newInstance(new Object[]{tag, context});
78+
return res;
79+
} catch (Exception e) {
80+
throw new TagWorkerInitializationException(TagWorkerInitializationException.REFLECTION_IN_TAG_WORKER_FACTORY_IMPLEMENTATION_FAILED, tagWorkerClass.getName(), tag.name());
81+
}
7382
}
74-
// Use reflection to create an instance
75-
try {
76-
Constructor ctor = tagWorkerClass.getDeclaredConstructor(new Class<?>[]{IElementNode.class, ProcessorContext.class});
77-
ITagWorker res = (ITagWorker) ctor.newInstance(new Object[]{tag, context});
78-
return res;
79-
} catch (Exception e) {
80-
throw new TagWorkerInitializationException(TagWorkerInitializationException.REFLECTION_IN_TAG_WORKER_FACTORY_IMPLEMENTATION_FAILED, tagWorkerClass.getName(), tag.name());
81-
}
82-
}
8383

84-
@Override
85-
public void registerTagWorker(String tag, Class<?> tagWorkerClass) {
86-
userMapping.putMapping(tag, tagWorkerClass);
84+
return tagWorker;
8785
}
8886

89-
@Override
90-
public void registerTagWorker(String tag, String display, Class<?> tagWorkerClass) {
91-
userMapping.putMapping(tag, display, tagWorkerClass);
92-
}
93-
94-
private static Class<?> getTagWorkerClass(TagProcessorMapping mapping, IElementNode tag) {
87+
private Class<?> getTagWorkerClass(TagProcessorMapping mapping, IElementNode tag) {
9588
Class<?> tagWorkerClass = null;
9689
String display = tag.getStyles() != null ? tag.getStyles().get(CssConstants.DISPLAY) : null;
9790
if (display != null) {
@@ -103,4 +96,14 @@ private static Class<?> getTagWorkerClass(TagProcessorMapping mapping, IElementN
10396
return tagWorkerClass;
10497
}
10598

99+
/**
100+
* This is a hook method. Users wanting to provide a custom mapping or introduce their own ITagWorkers should implement this method.
101+
*
102+
* @param tag
103+
* @param context
104+
* @return
105+
*/
106+
public ITagWorker getCustomTagWorker(IElementNode tag, ProcessorContext context) {
107+
return null;
108+
}
106109
}

src/main/java/com/itextpdf/html2pdf/css/apply/ICssApplierFactory.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,4 @@ public interface ICssApplierFactory {
4848

4949
ICssApplier getCssApplier(IElementNode tag);
5050

51-
void registerCssApplier(String tag, Class<?> applierToUse);
52-
53-
void registerCssApplier(String tag, String display, Class<?> applierToUse);
54-
5551
}

src/main/java/com/itextpdf/html2pdf/css/apply/impl/DefaultCssApplierFactory.java

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -52,38 +52,31 @@ This file is part of the iText (R) project.
5252
public class DefaultCssApplierFactory implements ICssApplierFactory {
5353

5454
private TagProcessorMapping defaultMapping;
55-
private TagProcessorMapping userMapping;
5655

5756
public DefaultCssApplierFactory() {
5857
defaultMapping = DefaultTagCssApplierMapping.getDefaultCssApplierMapping();
59-
userMapping = new TagProcessorMapping();
6058
}
6159

6260
@Override
63-
public ICssApplier getCssApplier(IElementNode tag) {
64-
Class<?> cssApplierClass = getCssApplierClass(userMapping, tag);
65-
if (cssApplierClass == null) {
66-
cssApplierClass = getCssApplierClass(defaultMapping, tag);
67-
}
68-
if (cssApplierClass == null) {
69-
return null;
70-
}
71-
// Use reflection to create an instance
72-
try {
73-
return (ICssApplier) cssApplierClass.newInstance();
74-
} catch (Exception e) {
75-
throw new CssApplierInitializationException(CssApplierInitializationException.ReflectionFailed, cssApplierClass.getName(), tag.name());
61+
public final ICssApplier getCssApplier(IElementNode tag) {
62+
ICssApplier cssApplier = getCustomCssApplier(tag);
63+
64+
if (cssApplier == null) {
65+
Class<?> cssApplierClass = getCssApplierClass(defaultMapping, tag);
66+
if ( cssApplierClass != null ) {
67+
try {
68+
return (ICssApplier) cssApplierClass.newInstance();
69+
} catch (Exception e) {
70+
throw new CssApplierInitializationException(CssApplierInitializationException.ReflectionFailed, cssApplierClass.getName(), tag.name());
71+
}
72+
}
7673
}
77-
}
7874

79-
@Override
80-
public void registerCssApplier(String tag, Class<?> classToRegister) {
81-
userMapping.putMapping(tag, classToRegister);
75+
return cssApplier;
8276
}
8377

84-
@Override
85-
public void registerCssApplier(String tag, String display, Class<?> applierToUse) {
86-
userMapping.putMapping(tag, display, applierToUse);
78+
public ICssApplier getCustomCssApplier(IElementNode tag) {
79+
return null;
8780
}
8881

8982
private static Class<?> getCssApplierClass(TagProcessorMapping mapping, IElementNode tag) {

src/test/java/com/itextpdf/html2pdf/DefaultTagWorkerFactoryTest.java

Lines changed: 0 additions & 105 deletions
This file was deleted.

src/test/java/com/itextpdf/html2pdf/css/DefaultCssApplierFactoryTest.java

Lines changed: 0 additions & 96 deletions
This file was deleted.

0 commit comments

Comments
 (0)