1
24 package net.sf.jasperreports.engine.fonts;
25
26 import java.util.List;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30
31 import net.sf.jasperreports.engine.DefaultJasperReportsContext;
32 import net.sf.jasperreports.engine.JRRuntimeException;
33 import net.sf.jasperreports.extensions.ExtensionsRegistry;
34
35
38 public class FontExtensionsRegistry implements ExtensionsRegistry
39 {
40
41 private static final Log log = LogFactory.getLog(FontExtensionsRegistry.class);
42
43 private final List<String> fontFamiliesLocations;
44 private List<FontFamily> fontFamilies;
45 private List<FontSet> fontSets;
46
47 public FontExtensionsRegistry(List<String> fontFamiliesLocations)
48 {
49 this.fontFamiliesLocations = fontFamiliesLocations;
50 }
51
52 @Override
53 public <T> List<T> getExtensions(Class<T> extensionType)
54 {
55 if (FontFamily.class.equals(extensionType))
56 {
57 ensureFontExtensions();
58
59 @SuppressWarnings("unchecked")
60 List<T> extensions = (List<T>) fontFamilies;
61 return extensions;
62 }
63
64 if (FontSet.class.equals(extensionType))
65 {
66 ensureFontExtensions();
67
68 @SuppressWarnings("unchecked")
69 List<T> extensions = (List<T>) fontSets;
70 return extensions;
71 }
72
73 return null;
74 }
75
76 protected void ensureFontExtensions()
77 {
78 if ((fontFamilies == null || fontSets == null) && fontFamiliesLocations != null)
79 {
80 SimpleFontExtensionHelper fontExtensionHelper = SimpleFontExtensionHelper.getInstance();
81 DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance();
82
83 FontExtensionsCollector extensionsCollector = new FontExtensionsCollector();
84 for (String location : fontFamiliesLocations)
85 {
86 if (log.isDebugEnabled())
87 {
88 log.debug("Loading font extensions from " + location);
89 }
90
91 try
92 {
93 fontExtensionHelper.loadFontExtensions(context, location, extensionsCollector);
94 }
95 catch (JRRuntimeException e)
96 {
97 log.error("Error loading font extensions from " + location, e);
98
99 }
100 }
101
102 fontFamilies = extensionsCollector.getFontFamilies();
103 fontSets = extensionsCollector.getFontSets();
104 }
105 }
106
107 }
108