View Javadoc

1   /*
2    * ====================================================================
3    * This software is subject to the terms of the Common Public License
4    * Agreement, available at the following URL:
5    *   http://www.opensource.org/licenses/cpl.html .
6    * You must accept the terms of that agreement to use this software.
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   * XXX Temporary workaround for file export problem. Nobody in right mind should
27   * ever have to resort to such a horrible hack to make things work. We really
28   * need more sane method for plugins to register converters.
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  }