package au.com.vaadinutils.jasper; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import net.sf.jasperreports.engine.JRPrintHyperlink; import net.sf.jasperreports.engine.export.JRHyperlinkProducer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class CustomJRHyperlinkProducer implements JRHyperlinkProducer { Logger logger = LogManager.getLogger(); @Override public String getHyperlink(JRPrintHyperlink hyperlink) { String ref = hyperlink.getHyperlinkReference(); if (ref == null) return ref; try { Map<String, String> query_pairs = new LinkedHashMap<String, String>(); String query = ref; if (query.contains("?")) { query = query.substring(query.indexOf("?")+1); } String[] pairs = query.split("&"); for (String pair : pairs) { int idx = pair.indexOf("="); if (idx >= 0) { query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); } } Map<String, String> reportDetails = new HashMap<String, String>(); String reportName = query_pairs.get("ReportName"); String title = query_pairs.get("ReportTitle"); reportDetails.put("ReportFileName", reportName); reportDetails.put("ReportTitle", title); Map<String, String> paramMap = new HashMap<String, String>(); for (String key : query_pairs.keySet()) { if (key.startsWith("ReportParameter")) { paramMap.put(key, query_pairs.get(key)); } } Gson gson = new Gson(); String paramMapJson = gson.toJson(paramMap, new TypeToken<Map<String, String>>() { }.getType()); String reportDetailsMapJson = gson.toJson(reportDetails, new TypeToken<Map<String, String>>() { }.getType()); // + reportDetailsMapJson + "," + paramMapJson + ")"; return ("javascript:window.parent.au.com.noojee.reportDrillDown(" + reportDetailsMapJson + "," + paramMapJson + ")").replace("\"", "'"); // window.parent.au.com.noojee.reportDrillDown( // { // 'reportFileName': // 'CallDetailsPerTeamAgentPerHour_CallDetails.jasper', // 'reportTitle': 'Call Details Per Team Agent Per Hour' // }, // { // 'ReportParameterStartDate'='$P{StartDate}', // 'ReportParameterEndDate'='$P{EndDate}', // 'ReportParameterExtension'='$F{loginid}', // 'ReportParameterTeamId'='$P{TeamId}', // 'ReportParameterHour'='$F{Day}.toString()' // } // // ); } catch (UnsupportedEncodingException e) { logger.error(e,e); } return "javascript:alert('Test')"; } }