1
2
3
4
5
6
7
8
9 package com.eyeq.pivot4j.pentaho.content;
10
11 import java.lang.reflect.Field;
12 import java.util.Map;
13
14 import javax.annotation.PostConstruct;
15
16 import org.pentaho.platform.engine.core.system.PentahoSystem;
17 import org.pentaho.platform.plugin.services.importexport.Converter;
18 import org.pentaho.platform.plugin.services.importexport.DefaultExportHandler;
19 import org.pentaho.platform.plugin.services.importexport.StreamConverter;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 import com.eyeq.pivot4j.pentaho.repository.PentahoReportFile;
24
25
26
27
28
29
30 public class ConverterRegistrationHelper {
31
32 @PostConstruct
33 protected void initialize() {
34 Logger log = LoggerFactory.getLogger(getClass());
35
36 if (log.isInfoEnabled()) {
37 log.info("Trying to register a content converter.");
38 }
39
40 try {
41 DefaultExportHandler handler = PentahoSystem
42 .get(DefaultExportHandler.class);
43
44 Field field = handler.getClass().getDeclaredField("converters");
45 field.setAccessible(true);
46
47 try {
48 @SuppressWarnings("unchecked")
49 Map<String, Converter> converters = (Map<String, Converter>) field
50 .get(handler);
51
52 Converter streamConverter = null;
53
54 for (Converter converter : converters.values()) {
55 if (converter instanceof StreamConverter) {
56 streamConverter = converter;
57 }
58 }
59
60 if (streamConverter != null) {
61 if (log.isInfoEnabled()) {
62 log.info(String
63 .format("Registering converter for extension '%s' : %s",
64 PentahoReportFile.DEFAULT_EXTENSION,
65 streamConverter));
66 }
67
68 converters.put(PentahoReportFile.DEFAULT_EXTENSION,
69 streamConverter);
70 }
71
72 } finally {
73 field.setAccessible(false);
74 }
75 } catch (Exception e) {
76 if (log.isWarnEnabled()) {
77 log.warn(String.format(
78 "Failed to register a converter for extension '%s' : "
79 + e, PentahoReportFile.DEFAULT_EXTENSION), e);
80 }
81 }
82 }
83 }