Skip to content

Commit 38bce4c

Browse files
dmitry.radchukiText-CI
authored andcommitted
Replaced reflection instances creation with functional interfaces
DEVSIX-5739 Autoported commit. Original commit hash: [440992d37]
1 parent a7d4c58 commit 38bce4c

File tree

6 files changed

+134
-157
lines changed

6 files changed

+134
-157
lines changed

itext.tests/itext.svg.tests/itext/svg/renderers/factories/DefaultRendererMapperTest.cs

Lines changed: 0 additions & 64 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using iText.Test;
2+
3+
namespace iText.Svg.Renderers.Factories {
4+
public class DefaultSvgNodeRendererMapperTest : ExtendedITextTest {
5+
private DefaultSvgNodeRendererMapper mapper = new DefaultSvgNodeRendererMapper();
6+
7+
[NUnit.Framework.Test]
8+
public virtual void MapperNotEmptyTest() {
9+
bool result = mapper.GetMapping().IsEmpty();
10+
NUnit.Framework.Assert.IsFalse(result);
11+
}
12+
13+
[NUnit.Framework.Test]
14+
public virtual void IgnoredTagsNotEmptyTest() {
15+
bool result = mapper.GetIgnoredTags().IsEmpty();
16+
NUnit.Framework.Assert.IsFalse(result);
17+
}
18+
}
19+
}

itext/itext.svg/itext/svg/exceptions/SvgExceptionMessageConstant.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ public sealed class SvgExceptionMessageConstant {
5555
public const String COULD_NOT_DETERMINE_MIDDLE_POINT_OF_ELLIPTICAL_ARC = "Could not determine the middle "
5656
+ "point of the ellipse traced by this elliptical arc";
5757

58-
public const String COULD_NOT_INSTANTIATE = "Could not instantiate Renderer for tag {0}";
59-
6058
public const String CURVE_TO_EXPECTS_FOLLOWING_PARAMETERS_GOT_0 = "(x1 y1 x2 y2 x y)+ parameters are " + "expected for curves. Got: {0}";
6159

6260
public const String DRAW_NO_DRAW = "The renderer cannot be drawn.";

itext/itext.svg/itext/svg/renderers/factories/DefaultSvgNodeRendererFactory.cs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@ namespace iText.Svg.Renderers.Factories {
5959
/// used by default by the entry points defined by this project.
6060
/// </summary>
6161
public class DefaultSvgNodeRendererFactory : ISvgNodeRendererFactory {
62-
private IDictionary<String, Type> rendererMap = new Dictionary<String, Type>();
62+
private readonly IDictionary<String, DefaultSvgNodeRendererMapper.ISvgNodeRendererCreator> rendererMap = new
63+
Dictionary<String, DefaultSvgNodeRendererMapper.ISvgNodeRendererCreator>();
6364

64-
private ICollection<String> ignoredTags = new HashSet<String>();
65+
private readonly ICollection<String> ignoredTags = new HashSet<String>();
6566

6667
/// <summary>
6768
/// Default constructor with default
@@ -79,19 +80,13 @@ public virtual ISvgNodeRenderer CreateSvgNodeRendererForTag(IElementNode tag, IS
7980
if (tag == null) {
8081
throw new SvgProcessingException(SvgExceptionMessageConstant.TAG_PARAMETER_NULL);
8182
}
82-
try {
83-
Type clazz = rendererMap.Get(tag.Name());
84-
if (clazz == null) {
85-
ILogger logger = ITextLogManager.GetLogger(this.GetType());
86-
logger.LogWarning(MessageFormatUtil.Format(SvgLogMessageConstant.UNMAPPED_TAG, tag.Name()));
87-
return null;
88-
}
89-
result = (ISvgNodeRenderer)System.Activator.CreateInstance(rendererMap.Get(tag.Name()));
90-
}
91-
catch (MissingMethodException ex) {
92-
throw new SvgProcessingException(SvgExceptionMessageConstant.COULD_NOT_INSTANTIATE, ex).SetMessageParams(tag
93-
.Name());
83+
DefaultSvgNodeRendererMapper.ISvgNodeRendererCreator svgNodeRendererCreator = rendererMap.Get(tag.Name());
84+
if (svgNodeRendererCreator == null) {
85+
ILogger logger = ITextLogManager.GetLogger(this.GetType());
86+
logger.LogWarning(MessageFormatUtil.Format(SvgLogMessageConstant.UNMAPPED_TAG, tag.Name()));
87+
return null;
9488
}
89+
result = svgNodeRendererCreator();
9590
// DefsSvgNodeRenderer should not have parental relationship with any renderer, it only serves as a storage
9691
if (parent != null && !(result is INoDrawSvgNodeRenderer) && !(parent is DefsSvgNodeRenderer)) {
9792
result.SetParent(parent);

itext/itext.svg/itext/svg/renderers/factories/DefaultSvgNodeRendererMapper.cs

Lines changed: 105 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ source product.
4242
*/
4343
using System;
4444
using System.Collections.Generic;
45+
using iText.Commons.Utils;
4546
using iText.Svg;
47+
using iText.Svg.Renderers;
4648
using iText.Svg.Renderers.Impl;
4749

4850
namespace iText.Svg.Renderers.Factories {
@@ -51,90 +53,117 @@ namespace iText.Svg.Renderers.Factories {
5153
/// tags as defined in the SVG Specification.
5254
/// </summary>
5355
internal class DefaultSvgNodeRendererMapper {
56+
private static readonly String CLIP_PATH_LC = SvgConstants.Tags.CLIP_PATH.ToLowerInvariant();
57+
58+
private static readonly String LINEAR_GRADIENT_LC = SvgConstants.Tags.LINEAR_GRADIENT.ToLowerInvariant();
59+
60+
private static readonly String TEXT_LEAF_LC = SvgConstants.Tags.TEXT_LEAF.ToLowerInvariant();
61+
62+
/// <summary>
63+
/// Creates a new
64+
/// <see cref="DefaultSvgNodeRendererMapper"/>
65+
/// instance.
66+
/// </summary>
5467
internal DefaultSvgNodeRendererMapper() {
5568
}
5669

57-
internal virtual IDictionary<String, Type> GetMapping() {
58-
IDictionary<String, Type> result = new Dictionary<String, Type>();
59-
result.Put(SvgConstants.Tags.CIRCLE, typeof(CircleSvgNodeRenderer));
60-
result.Put(SvgConstants.Tags.CLIP_PATH, typeof(ClipPathSvgNodeRenderer));
61-
result.Put(SvgConstants.Tags.DEFS, typeof(DefsSvgNodeRenderer));
62-
result.Put(SvgConstants.Tags.ELLIPSE, typeof(EllipseSvgNodeRenderer));
63-
result.Put(SvgConstants.Tags.G, typeof(GroupSvgNodeRenderer));
64-
result.Put(SvgConstants.Tags.IMAGE, typeof(ImageSvgNodeRenderer));
65-
result.Put(SvgConstants.Tags.LINE, typeof(LineSvgNodeRenderer));
66-
result.Put(SvgConstants.Tags.LINEAR_GRADIENT, typeof(LinearGradientSvgNodeRenderer));
67-
result.Put(SvgConstants.Tags.MARKER, typeof(MarkerSvgNodeRenderer));
68-
result.Put(SvgConstants.Tags.PATTERN, typeof(PatternSvgNodeRenderer));
69-
result.Put(SvgConstants.Tags.PATH, typeof(PathSvgNodeRenderer));
70-
result.Put(SvgConstants.Tags.POLYGON, typeof(PolygonSvgNodeRenderer));
71-
result.Put(SvgConstants.Tags.POLYLINE, typeof(PolylineSvgNodeRenderer));
72-
result.Put(SvgConstants.Tags.RECT, typeof(RectangleSvgNodeRenderer));
73-
result.Put(SvgConstants.Tags.STOP, typeof(StopSvgNodeRenderer));
74-
result.Put(SvgConstants.Tags.SVG, typeof(SvgTagSvgNodeRenderer));
75-
result.Put(SvgConstants.Tags.SYMBOL, typeof(SymbolSvgNodeRenderer));
76-
result.Put(SvgConstants.Tags.TEXT, typeof(TextSvgBranchRenderer));
77-
result.Put(SvgConstants.Tags.TSPAN, typeof(TextSvgTSpanBranchRenderer));
78-
result.Put(SvgConstants.Tags.USE, typeof(UseSvgNodeRenderer));
79-
result.Put(SvgConstants.Tags.TEXT_LEAF, typeof(TextLeafSvgNodeRenderer));
70+
private static readonly IDictionary<String, DefaultSvgNodeRendererMapper.ISvgNodeRendererCreator> mapping;
71+
72+
private static readonly ICollection<String> ignored;
73+
74+
static DefaultSvgNodeRendererMapper() {
75+
IDictionary<String, DefaultSvgNodeRendererMapper.ISvgNodeRendererCreator> result = new Dictionary<String,
76+
DefaultSvgNodeRendererMapper.ISvgNodeRendererCreator>();
77+
result.Put(SvgConstants.Tags.CIRCLE, () => new CircleSvgNodeRenderer());
78+
result.Put(SvgConstants.Tags.CLIP_PATH, () => new ClipPathSvgNodeRenderer());
79+
result.Put(SvgConstants.Tags.DEFS, () => new DefsSvgNodeRenderer());
80+
result.Put(SvgConstants.Tags.ELLIPSE, () => new EllipseSvgNodeRenderer());
81+
result.Put(SvgConstants.Tags.G, () => new GroupSvgNodeRenderer());
82+
result.Put(SvgConstants.Tags.IMAGE, () => new ImageSvgNodeRenderer());
83+
result.Put(SvgConstants.Tags.LINE, () => new LineSvgNodeRenderer());
84+
result.Put(SvgConstants.Tags.LINEAR_GRADIENT, () => new LinearGradientSvgNodeRenderer());
85+
result.Put(SvgConstants.Tags.MARKER, () => new MarkerSvgNodeRenderer());
86+
result.Put(SvgConstants.Tags.PATTERN, () => new PatternSvgNodeRenderer());
87+
result.Put(SvgConstants.Tags.PATH, () => new PathSvgNodeRenderer());
88+
result.Put(SvgConstants.Tags.POLYGON, () => new PolygonSvgNodeRenderer());
89+
result.Put(SvgConstants.Tags.POLYLINE, () => new PolylineSvgNodeRenderer());
90+
result.Put(SvgConstants.Tags.RECT, () => new RectangleSvgNodeRenderer());
91+
result.Put(SvgConstants.Tags.STOP, () => new StopSvgNodeRenderer());
92+
result.Put(SvgConstants.Tags.SVG, () => new SvgTagSvgNodeRenderer());
93+
result.Put(SvgConstants.Tags.SYMBOL, () => new SymbolSvgNodeRenderer());
94+
result.Put(SvgConstants.Tags.TEXT, () => new TextSvgBranchRenderer());
95+
result.Put(SvgConstants.Tags.TSPAN, () => new TextSvgTSpanBranchRenderer());
96+
result.Put(SvgConstants.Tags.USE, () => new UseSvgNodeRenderer());
97+
result.Put(SvgConstants.Tags.TEXT_LEAF, () => new TextLeafSvgNodeRenderer());
8098
// TODO: DEVSIX-3923 remove normalization (.toLowerCase)
81-
result.Put(SvgConstants.Tags.CLIP_PATH.ToLowerInvariant(), typeof(ClipPathSvgNodeRenderer));
82-
result.Put(SvgConstants.Tags.LINEAR_GRADIENT.ToLowerInvariant(), typeof(LinearGradientSvgNodeRenderer));
83-
result.Put(SvgConstants.Tags.TEXT_LEAF.ToLowerInvariant(), typeof(TextLeafSvgNodeRenderer));
84-
return result;
99+
result.Put(CLIP_PATH_LC, () => new ClipPathSvgNodeRenderer());
100+
result.Put(LINEAR_GRADIENT_LC, () => new LinearGradientSvgNodeRenderer());
101+
result.Put(TEXT_LEAF_LC, () => new TextLeafSvgNodeRenderer());
102+
mapping = JavaCollectionsUtil.UnmodifiableMap(result);
103+
// Not supported tags as of yet
104+
ICollection<String> ignoredTags = new HashSet<String>();
105+
ignoredTags.Add(SvgConstants.Tags.A);
106+
ignoredTags.Add(SvgConstants.Tags.ALT_GLYPH);
107+
ignoredTags.Add(SvgConstants.Tags.ALT_GLYPH_DEF);
108+
ignoredTags.Add(SvgConstants.Tags.ALT_GLYPH_ITEM);
109+
ignoredTags.Add(SvgConstants.Tags.COLOR_PROFILE);
110+
ignoredTags.Add(SvgConstants.Tags.DESC);
111+
ignoredTags.Add(SvgConstants.Tags.FE_BLEND);
112+
ignoredTags.Add(SvgConstants.Tags.FE_COLOR_MATRIX);
113+
ignoredTags.Add(SvgConstants.Tags.FE_COMPONENT_TRANSFER);
114+
ignoredTags.Add(SvgConstants.Tags.FE_COMPOSITE);
115+
ignoredTags.Add(SvgConstants.Tags.FE_COMVOLVE_MATRIX);
116+
ignoredTags.Add(SvgConstants.Tags.FE_DIFFUSE_LIGHTING);
117+
ignoredTags.Add(SvgConstants.Tags.FE_DISPLACEMENT_MAP);
118+
ignoredTags.Add(SvgConstants.Tags.FE_DISTANT_LIGHT);
119+
ignoredTags.Add(SvgConstants.Tags.FE_FLOOD);
120+
ignoredTags.Add(SvgConstants.Tags.FE_FUNC_A);
121+
ignoredTags.Add(SvgConstants.Tags.FE_FUNC_B);
122+
ignoredTags.Add(SvgConstants.Tags.FE_FUNC_G);
123+
ignoredTags.Add(SvgConstants.Tags.FE_FUNC_R);
124+
ignoredTags.Add(SvgConstants.Tags.FE_GAUSSIAN_BLUR);
125+
ignoredTags.Add(SvgConstants.Tags.FE_IMAGE);
126+
ignoredTags.Add(SvgConstants.Tags.FE_MERGE);
127+
ignoredTags.Add(SvgConstants.Tags.FE_MERGE_NODE);
128+
ignoredTags.Add(SvgConstants.Tags.FE_MORPHOLOGY);
129+
ignoredTags.Add(SvgConstants.Tags.FE_OFFSET);
130+
ignoredTags.Add(SvgConstants.Tags.FE_POINT_LIGHT);
131+
ignoredTags.Add(SvgConstants.Tags.FE_SPECULAR_LIGHTING);
132+
ignoredTags.Add(SvgConstants.Tags.FE_SPOTLIGHT);
133+
ignoredTags.Add(SvgConstants.Tags.FE_TILE);
134+
ignoredTags.Add(SvgConstants.Tags.FE_TURBULENCE);
135+
ignoredTags.Add(SvgConstants.Tags.FILTER);
136+
ignoredTags.Add(SvgConstants.Tags.FONT);
137+
ignoredTags.Add(SvgConstants.Tags.FONT_FACE);
138+
ignoredTags.Add(SvgConstants.Tags.FONT_FACE_FORMAT);
139+
ignoredTags.Add(SvgConstants.Tags.FONT_FACE_NAME);
140+
ignoredTags.Add(SvgConstants.Tags.FONT_FACE_SRC);
141+
ignoredTags.Add(SvgConstants.Tags.FONT_FACE_URI);
142+
ignoredTags.Add(SvgConstants.Tags.FOREIGN_OBJECT);
143+
ignoredTags.Add(SvgConstants.Tags.GLYPH);
144+
ignoredTags.Add(SvgConstants.Tags.GLYPH_REF);
145+
ignoredTags.Add(SvgConstants.Tags.HKERN);
146+
ignoredTags.Add(SvgConstants.Tags.MASK);
147+
ignoredTags.Add(SvgConstants.Tags.METADATA);
148+
ignoredTags.Add(SvgConstants.Tags.MISSING_GLYPH);
149+
ignoredTags.Add(SvgConstants.Tags.RADIAL_GRADIENT);
150+
ignoredTags.Add(SvgConstants.Tags.STYLE);
151+
ignoredTags.Add(SvgConstants.Tags.TITLE);
152+
ignored = JavaCollectionsUtil.UnmodifiableCollection(ignoredTags);
153+
}
154+
155+
/// <summary>Gets the default SVG tags mapping.</summary>
156+
/// <returns>the default SVG tags mapping</returns>
157+
internal virtual IDictionary<String, DefaultSvgNodeRendererMapper.ISvgNodeRendererCreator> GetMapping() {
158+
return mapping;
85159
}
86160

161+
/// <summary>Gets the default ignored SVG tags.</summary>
162+
/// <returns>default ignored SVG tags</returns>
87163
internal virtual ICollection<String> GetIgnoredTags() {
88-
ICollection<String> ignored = new HashSet<String>();
89-
// Not supported tags as of yet
90-
ignored.Add(SvgConstants.Tags.A);
91-
ignored.Add(SvgConstants.Tags.ALT_GLYPH);
92-
ignored.Add(SvgConstants.Tags.ALT_GLYPH_DEF);
93-
ignored.Add(SvgConstants.Tags.ALT_GLYPH_ITEM);
94-
ignored.Add(SvgConstants.Tags.COLOR_PROFILE);
95-
ignored.Add(SvgConstants.Tags.DESC);
96-
ignored.Add(SvgConstants.Tags.FE_BLEND);
97-
ignored.Add(SvgConstants.Tags.FE_COLOR_MATRIX);
98-
ignored.Add(SvgConstants.Tags.FE_COMPONENT_TRANSFER);
99-
ignored.Add(SvgConstants.Tags.FE_COMPOSITE);
100-
ignored.Add(SvgConstants.Tags.FE_COMVOLVE_MATRIX);
101-
ignored.Add(SvgConstants.Tags.FE_DIFFUSE_LIGHTING);
102-
ignored.Add(SvgConstants.Tags.FE_DISPLACEMENT_MAP);
103-
ignored.Add(SvgConstants.Tags.FE_DISTANT_LIGHT);
104-
ignored.Add(SvgConstants.Tags.FE_FLOOD);
105-
ignored.Add(SvgConstants.Tags.FE_FUNC_A);
106-
ignored.Add(SvgConstants.Tags.FE_FUNC_B);
107-
ignored.Add(SvgConstants.Tags.FE_FUNC_G);
108-
ignored.Add(SvgConstants.Tags.FE_FUNC_R);
109-
ignored.Add(SvgConstants.Tags.FE_GAUSSIAN_BLUR);
110-
ignored.Add(SvgConstants.Tags.FE_IMAGE);
111-
ignored.Add(SvgConstants.Tags.FE_MERGE);
112-
ignored.Add(SvgConstants.Tags.FE_MERGE_NODE);
113-
ignored.Add(SvgConstants.Tags.FE_MORPHOLOGY);
114-
ignored.Add(SvgConstants.Tags.FE_OFFSET);
115-
ignored.Add(SvgConstants.Tags.FE_POINT_LIGHT);
116-
ignored.Add(SvgConstants.Tags.FE_SPECULAR_LIGHTING);
117-
ignored.Add(SvgConstants.Tags.FE_SPOTLIGHT);
118-
ignored.Add(SvgConstants.Tags.FE_TILE);
119-
ignored.Add(SvgConstants.Tags.FE_TURBULENCE);
120-
ignored.Add(SvgConstants.Tags.FILTER);
121-
ignored.Add(SvgConstants.Tags.FONT);
122-
ignored.Add(SvgConstants.Tags.FONT_FACE);
123-
ignored.Add(SvgConstants.Tags.FONT_FACE_FORMAT);
124-
ignored.Add(SvgConstants.Tags.FONT_FACE_NAME);
125-
ignored.Add(SvgConstants.Tags.FONT_FACE_SRC);
126-
ignored.Add(SvgConstants.Tags.FONT_FACE_URI);
127-
ignored.Add(SvgConstants.Tags.FOREIGN_OBJECT);
128-
ignored.Add(SvgConstants.Tags.GLYPH);
129-
ignored.Add(SvgConstants.Tags.GLYPH_REF);
130-
ignored.Add(SvgConstants.Tags.HKERN);
131-
ignored.Add(SvgConstants.Tags.MASK);
132-
ignored.Add(SvgConstants.Tags.METADATA);
133-
ignored.Add(SvgConstants.Tags.MISSING_GLYPH);
134-
ignored.Add(SvgConstants.Tags.RADIAL_GRADIENT);
135-
ignored.Add(SvgConstants.Tags.STYLE);
136-
ignored.Add(SvgConstants.Tags.TITLE);
137164
return ignored;
138165
}
166+
167+
internal delegate ISvgNodeRenderer ISvgNodeRendererCreator();
139168
}
140169
}

port-hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
aa0c6fe4f5e93ba1090dbb92b94ebea86f021c38
1+
440992d373de21bcd8ca30b9643146d5d1ae34bc

0 commit comments

Comments
 (0)