MboSet = Java.type("psdi.mbo.MboSet"); SqlFormat = Java.type("psdi.mbo.SqlFormat"); MXServer = Java.type("psdi.server.MXServer"); Element = Java.type("org.jdom.Element"); Namespace = Java.type("org.jdom.Namespace"); SAXBuilder = Java.type("org.jdom.input.SAXBuilder"); Format = Java.type("org.jdom.output.Format"); XMLOutputter = Java.type("org.jdom.output.XMLOutputter"); XPath = Java.type("org.jdom.xpath.XPath"); System = Java.type("java.lang.System"); StringReader = Java.type("java.io.StringReader"); StringWriter = Java.type("java.io.StringWriter"); var alignLeft = ['description']; var ns = Namespace.getNamespace("r", "http://www.eclipse.org/birt/2005/design"); main(); function main() { var reportDesignSet; var reportDesign; try { if (__isWebRequest()) { reportDesignSet = getReportDesignMboSet() if (reportDesignSet) { if (!reportDesignSet.isEmpty()) { reportDesign = reportDesignSet.moveFirst(); } else { var reportName = request.getQueryParam("reportName"); responseBody = JSON.stringify({ "status": "error", "message": "The report name provided " + reportName + " provided with the query parameter 'reportName' is was not found." }); return; } } else { responseBody = JSON.stringify({ "status": "error", "message": "The query parameter 'reportName' is required, when invoking from a web request." }); return; } } else { if (typeof mbo !== 'undefined') { if (!mbo.toBeDeleted()) { if (mbo.isBasedOn("REPORT")) { reportDesign = mbo.getMboSet("REPORT_DESIGN").moveFirst(); } else if (mbo.isBasedOn("REPORTDESIGN")) { reportDesign = mbo; } } } } // if we got a report design then go ahead and process it if (reportDesign && __isAdhocReport(reportDesign)) { var reportXML = reportDesign.getString("DESIGN"); var builder = new SAXBuilder(); var document = builder.build(new StringReader(reportXML)); var xpath = XPath.newInstance("report/r:body/r:table/r:detail/r:row/r:cell/r:data/r:property[@name='resultSetColumn']"); xpath.addNamespace(ns); var columns = xpath.selectNodes(document); columns.forEach(function (element) { if (alignLeft.indexOf(element.getText()) > -1) { var cell = element.getParent().getParent(); if (!cellHasAlign(cell)) { var alignmentProperty = new Element("property", Namespace.getNamespace("http://www.eclipse.org/birt/2005/design")).setAttribute("name", "textAlign").setText("left"); cell.addContent(0, alignmentProperty); } } }) var writer = new StringWriter(); new XMLOutputter(Format.getPrettyFormat()).output(document, writer); reportDesign.setValue("DESIGN", writer.toString()); if (reportDesignSet) { reportDesignSet.save(); } if (__isWebRequest()) { responseBody = JSON.stringify({ "status": "success" }); } } } finally { __close(reportDesignSet); } } function cellHasAlign(cell) { var result = false; if (cell && cell.getName() == 'cell') { var properties = cell.getChildren("property", ns); properties.forEach(function (property) { if (result) { return; } else { if (property.getAttributeValue("name") == "textAlign") { result = true; return; } } }) } return result; } function getReportDesignMboSet() { if (__isWebRequest) { var reportName = request.getQueryParam("reportName"); if (reportName) { var reportDesignSet; reportDesignSet = MXServer.getMXServer().getMboSet("REPORTDESIGN", userInfo); var sqlf = new SqlFormat("reportname = :1"); sqlf.setObject(1, "REPORTDESIGN", "REPORTNAME", reportName); reportDesignSet.setWhere(sqlf.format()); return reportDesignSet; } else { return null; } } else { return null; } } function __isAdhocReport(report) { if (report) { return !report.getMboSet("$reportadhoc", "REPORTADHOC", "reportname=:reportname").isEmpty(); } else { return false; } } function __close(mboSet) { if (mboSet) { try { mboSet.close(); mboSet.cleanup(); } catch (ignore) { } } } function __isWebRequest() { return typeof request !== 'undefined'; } var scriptConfig = { "autoscript": "ADHOC.REPORT.FIXALIGN", "description": "Fix field alignments on ad-hoc reports.", "version": "", "active": true, "logLevel": "ERROR", "scriptLaunchPoints": [ { "launchPointName": "ADHOC.REPORT.FIXALIGN", "launchPointType": "OBJECT", "active": true, "description": "Fix field alignments on ad-hoc reports.", "objectName": "REPORT", "save": true, "add": true, "update": true, "delete": false, "beforeSave": true } ] };