use of net.sf.jasperreports.engine.design.JasperDesign in project midpoint by Evolveum.
the class ReportTypeUtil method loadJasperReport.
public static JasperReport loadJasperReport(ReportType reportType) throws SchemaException {
if (reportType.getTemplate() == null) {
throw new IllegalStateException("Could not create report. No jasper template defined.");
}
try {
// byte[] reportTemplate = Base64.decodeBase64(reportType.getTemplate());
//
// InputStream inputStreamJRXML = new ByteArrayInputStream(reportTemplate);
//JRXmlLoader.load(inputStreamJRXML);
JasperDesign jasperDesign = loadJasperDesign(reportType.getTemplate());
if (reportType.getTemplateStyle() != null) {
JRDesignReportTemplate templateStyle = new JRDesignReportTemplate(new JRDesignExpression("$P{" + PARAMETER_TEMPLATE_STYLES + "}"));
jasperDesign.addTemplate(templateStyle);
JRDesignParameter parameter = new JRDesignParameter();
parameter.setName(PARAMETER_TEMPLATE_STYLES);
parameter.setValueClass(JRTemplate.class);
parameter.setForPrompting(false);
jasperDesign.addParameter(parameter);
}
// if (StringUtils.isNotEmpty(finalQuery)){
JRDesignParameter parameter = new JRDesignParameter();
parameter.setName("finalQuery");
parameter.setValueClass(Object.class);
parameter.setForPrompting(false);
jasperDesign.addParameter(parameter);
// }
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
return jasperReport;
} catch (JRException ex) {
// LOGGER.error("Couldn't create jasper report design {}", ex.getMessage());
throw new SchemaException(ex.getMessage(), ex.getCause());
}
}
use of net.sf.jasperreports.engine.design.JasperDesign in project midpoint by Evolveum.
the class JasperReportDto method getTemplate.
public byte[] getTemplate() {
try {
// design.remadgetFields().
design.getFieldsList().clear();
design.getParametersList().clear();
design.getFieldsMap().clear();
design.getParametersMap().clear();
for (JasperReportFieldDto field : fields) {
if (field.isEmpty()) {
continue;
}
JRDesignField f = new JRDesignField();
f.setValueClassName(field.getTypeAsString());
f.setValueClass(Class.forName(field.getTypeAsString()));
f.setName(field.getName());
design.addField(f);
}
for (JasperReportParameterDto param : parameters) {
if (param.isEmpty()) {
continue;
}
JRDesignParameter p = new JRDesignParameter();
p.setValueClassName(param.getTypeAsString());
p.setValueClass(Class.forName(param.getTypeAsString()));
p.setName(param.getName());
p.setForPrompting(param.isForPrompting());
p.setDescription(param.getDescription());
p.setNestedTypeName(param.getNestedTypeAsString());
p.setNestedType(param.getNestedType());
p.getPropertiesMap().setBaseProperties(param.getJRProperties());
// p.getPropertiesMap().setProperty(propName, value);
design.addParameter(p);
}
JasperDesign oldDesign = ReportTypeUtil.loadJasperDesign(jasperReportXml);
oldDesign.getParametersList().clear();
oldDesign.getParametersList().addAll(design.getParametersList());
oldDesign.getFieldsList().clear();
oldDesign.getFieldsList().addAll(design.getFieldsList());
JRDesignQuery q = new JRDesignQuery();
q.setLanguage("mql");
q.setText(query);
oldDesign.setQuery(q);
String reportAsString = JRXmlWriter.writeReport(oldDesign, "UTF-8");
return Base64.encodeBase64(reportAsString.getBytes("UTF-8"));
} catch (JRException | ClassNotFoundException | SchemaException | UnsupportedEncodingException ex) {
throw new IllegalStateException(ex.getMessage(), ex.getCause());
}
}
use of net.sf.jasperreports.engine.design.JasperDesign in project midpoint by Evolveum.
the class TestReport method f.
@Test
public void f() throws Exception {
OperationResult initResult = new OperationResult("generate report");
JasperDesign jd = JRXmlLoader.load(new File("src/test/resources/reports/report-users-ds.jrxml"));
JasperReport jr = JasperCompileManager.compileReport(jd);
Task task = taskManager.createTaskInstance();
Map<String, Object> params = new HashMap<String, Object>();
// params.put(MidPointQueryExecutorFactory.PARAMETER_MIDPOINT_CONNECTION, modelService);
// params.put(MidPointQueryExecutorFactory.PARAMETER_PRISM_CONTEXT, prismContext);
// params.put(MidPointQueryExecutorFactory.PARAMETER_TASK_MANAGER, taskManager);
// params.put(MidPointQueryExecutorFactory.PARAMETER_EXPRESSION_FACTORY, expressionFactory);
params.put("userName", new PolyString("administrator"));
reportTaskHandler.run(task);
// byte[] reportTemplatebase64 = "".getBytes();
// byte[] reportTemplate = Base64.decodeBase64("UEdwaGMzQmxjbEpsY0c5eWRDQU5DaUFnSUNBSkNYaHRiRzV6UFNKb2RIUndPaTh2YW1GemNHVnljbVZ3YjNKMGN5NXpiM1Z5WTJWbWIzSm5aUzV1WlhRdmFtRnpjR1Z5Y21Wd2IzSjBjeUlnRFFvSkNRbDRiV3h1Y3pwNGMyazlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURFdldFMU1VMk5vWlcxaExXbHVjM1JoYm1ObElpQU5DZ2tKQ1hoemFUcHpZMmhsYldGTWIyTmhkR2x2YmowaWFIUjBjRG92TDJwaGMzQmxjbkpsY0c5eWRITXVjMjkxY21ObFptOXlaMlV1Ym1WMEwycGhjM0JsY25KbGNHOXlkSE1nYUhSMGNEb3ZMMnBoYzNCbGNuSmxjRzl5ZEhNdWMyOTFjbU5sWm05eVoyVXVibVYwTDNoelpDOXFZWE53WlhKeVpYQnZjblF1ZUhOa0lpQU5DZ2tKQ1c1aGJXVTlJbkpsY0c5eWRGVnpaWEpCWTJOdmRXNTBjeUlnRFFvSkNRbGpiMngxYlc1RGIzVnVkRDBpTWlJZ0RRb0pDUWx3WVdkbFYybGtkR2c5SWpFNE1DSWdEUW9KQ1Fsd1lXZGxTR1ZwWjJoMFBTSXhPQ0lnRFFvSkNRbDNhR1Z1VG05RVlYUmhWSGx3WlQwaVFXeHNVMlZqZEdsdmJuTk9iMFJsZEdGcGJDSWdEUW9KQ1FsamIyeDFiVzVYYVdSMGFEMGlPRGtpSUEwS0NRa0pZMjlzZFcxdVUzQmhZMmx1WnowaU1TSWdEUW9KQ1Fsc1pXWjBUV0Z5WjJsdVBTSXdJaUFOQ2drSkNYSnBaMmgwVFdGeVoybHVQU0l3SWlBTkNna0pDWFJ2Y0UxaGNtZHBiajBpTUNJZ0RRb0pDUWxpYjNSMGIyMU5ZWEpuYVc0OUlqQWlJQTBLQ1FrSmRYVnBaRDBpTmpkbE5EWTFZelV0TkRabFlTMDBNR1F5TFdKbFlUQXRORFk1WXpaalpqTTRPVE0zSWo0TkNna0pDVHh3Y205d1pYSjBlU0J1WVcxbFBTSnVaWFF1YzJZdWFtRnpjR1Z5Y21Wd2IzSjBjeTVoZDNRdWFXZHViM0psTG0xcGMzTnBibWN1Wm05dWRDSWdkbUZzZFdVOUluUnlkV1VpTHo0TkNna0pDVHh3Y205d1pYSjBlU0J1WVcxbFBTSnVaWFF1YzJZdWFtRnpjR1Z5Y21Wd2IzSjBjeTVsZUhCdmNuUXVjR1JtTG1admNtTmxMbXhwYm1WaWNtVmhheTV3YjJ4cFkza2lJSFpoYkhWbFBTSjBjblZsSWk4K0RRb0pDUWs4YzNSNWJHVWdabTl1ZEU1aGJXVTlJa1JsYW1GV2RTQlRZVzV6SWlCbWIyNTBVMmw2WlQwaU1UQWlJR2hCYkdsbmJqMGlUR1ZtZENJZ2FYTkVaV1poZFd4MFBTSjBjblZsSWlCcGMxQmtaa1Z0WW1Wa1pHVmtQU0owY25WbElpQU5DZ2tKQ1FrZ0lDQnVZVzFsUFNKQ1lYTmxJaUJ3WkdaRmJtTnZaR2x1WnowaVNXUmxiblJwZEhrdFNDSWdjR1JtUm05dWRFNWhiV1U5SWtSbGFtRldkVk5oYm5NdWRIUm1JaUIyUVd4cFoyNDlJazFwWkdSc1pTSStEUW9KQ1FrOEwzTjBlV3hsUGcwS0NRa0pQSE4wZVd4bElHbHpRbTlzWkQwaVptRnNjMlVpSUdselJHVm1ZWFZzZEQwaVptRnNjMlVpSUc1aGJXVTlJa1JsZEdGcGJDSWdjM1I1YkdVOUlrSmhjMlVpTHo0TkNna0pDVHh3WVhKaGJXVjBaWElnYm1GdFpUMGlkWE5sY2s5cFpDSWdZMnhoYzNNOUltcGhkbUV1YkdGdVp5NVRkSEpwYm1jaUx6NE5DZ2tKQ1R4d1lYSmhiV1YwWlhJZ2JtRnRaVDBpYUhGc1VYVmxjbmxCWTJOdmRXNTBjeUlnWTJ4aGMzTTlJbXBoZG1FdWJHRnVaeTVUZEhKcGJtY2lMejROQ2drSkNUeHhkV1Z5ZVZOMGNtbHVaeUJzWVc1bmRXRm5aVDBpYUhGc0lqNDhJVnREUkVGVVFWc2tVQ0Y3YUhGc1VYVmxjbmxCWTJOdmRXNTBjMzFkWFQ0OEwzRjFaWEo1VTNSeWFXNW5QZzBLQ1FrSlBHWnBaV3hrSUc1aGJXVTlJbUZqWTI5MWJuUk9ZVzFsSWlCamJHRnpjejBpYW1GMllTNXNZVzVuTGxOMGNtbHVaeUl2UGcwS0NRa0pQR1pwWld4a0lHNWhiV1U5SW5KbGMyOTFjbU5sVG1GdFpTSWdZMnhoYzNNOUltcGhkbUV1YkdGdVp5NVRkSEpwYm1jaUx6NE5DZ2tKQ1R4a1pYUmhhV3crRFFvSkNRa0pQR0poYm1RZ2FHVnBaMmgwUFNJeE9DSWdjM0JzYVhSVWVYQmxQU0pUZEhKbGRHTm9JajROQ2drSkNRa0pQR1p5WVcxbFBnMEtDUWtKQ1FrSlBISmxjRzl5ZEVWc1pXMWxiblFnZFhWcFpEMGlNMlU0Wm1Sa05tUXRZVFptWmkwME5EQTNMVGxoTVdVdE5XUTJZalEzTURZek1EQmhJaUJ3YjNOcGRHbHZibFI1Y0dVOUlrWnNiMkYwSWlCemRIbHNaVDBpUkdWMFlXbHNJaUJ0YjJSbFBTSlBjR0Z4ZFdVaUlIZzlJakFpSUhrOUlqRWlJSGRwWkhSb1BTSXhPREFpSUdobGFXZG9kRDBpTVRjaUx6NE5DZ2tKQ1FrSkNUeHNhVzVsUGcwS0NRa0pDUWtKQ1R4eVpYQnZjblJGYkdWdFpXNTBJSFYxYVdROUlqUTNaamt4T0RBeExXTm1OV1l0TkdKbFpDMWlNVGxqTFdOaE16a3pNV05pWmprNFpDSWdjRzl6YVhScGIyNVVlWEJsUFNKR2FYaFNaV3hoZEdsMlpWUnZWRzl3SWlCNFBTSXdJaUI1UFNJd0lpQjNhV1IwYUQwaU1UZ3dJaUJvWldsbmFIUTlJakVpSUdadmNtVmpiMnh2Y2owaUl6TXpNek16TXlJK0RRb0pDUWtKQ1FrSkNUeHdjbWx1ZEZkb1pXNUZlSEJ5WlhOemFXOXVQandoVzBORVFWUkJXMjVsZHlCcVlYWmhMbXhoYm1jdVFtOXZiR1ZoYmlnb2FXNTBLU1JXZTFKRlVFOVNWRjlEVDFWT1ZIMHVhVzUwVm1Gc2RXVW9LU0U5TVNsZFhUNDhMM0J5YVc1MFYyaGxia1Y0Y0hKbGMzTnBiMjQrRFFvSkNRa0pDUWtKUEM5eVpYQnZjblJGYkdWdFpXNTBQZzBLQ1FrSkNRa0pDVHhuY21Gd2FHbGpSV3hsYldWdWRENE5DZ2tKQ1FrSkNRa0pQSEJsYmlCc2FXNWxWMmxrZEdnOUlqQXVOU0lnYkdsdVpVTnZiRzl5UFNJak9UazVPVGs1SWk4K0RRb0pDUWtKQ1FrSlBDOW5jbUZ3YUdsalJXeGxiV1Z1ZEQ0TkNna0pDUWtKQ1R3dmJHbHVaVDROQ2drSkNRa0pDVHgwWlhoMFJtbGxiR1FnYVhOVGRISmxkR05vVjJsMGFFOTJaWEptYkc5M1BTSjBjblZsSWo0TkNna0pDUWtKQ1FrOGNtVndiM0owUld4bGJXVnVkQ0IxZFdsa1BTSmxZbUZsWmpFMlpDMHlPVEF6TFRRd01qa3RPV0UyWWkxa05HUXlORFExTlRoaFpUa2lJSEJ2YzJsMGFXOXVWSGx3WlQwaVJteHZZWFFpSUhOMGNtVjBZMmhVZVhCbFBTSlNaV3hoZEdsMlpWUnZWR0ZzYkdWemRFOWlhbVZqZENJZ2MzUjViR1U5SWtSbGRHRnBiQ0lnZUQwaU1DSWdlVDBpTWlJZ2QybGtkR2c5SWpFNE1DSWdhR1ZwWjJoMFBTSXhNeUl2UGcwS0NRa0pDUWtKQ1R4MFpYaDBSV3hsYldWdWRDQjJaWEowYVdOaGJFRnNhV2R1YldWdWREMGlUV2xrWkd4bElpOCtJQTBLQ1FrSkNRa0pDVHgwWlhoMFJtbGxiR1JGZUhCeVpYTnphVzl1UGp3aFcwTkVRVlJCV3lSR2UzSmxjMjkxY21ObFRtRnRaWDBySUNJNklDSWdLeUFrUm50aFkyTnZkVzUwVG1GdFpYMWRYVDQ4TDNSbGVIUkdhV1ZzWkVWNGNISmxjM05wYjI0K0RRb0pDUWtKQ1FrOEwzUmxlSFJHYVdWc1pENE5DZ2tKQ1FrSlBDOW1jbUZ0WlQ0TkNna0pDUWs4TDJKaGJtUStEUW9KQ1FrOEwyUmxkR0ZwYkQ0TkNna0pQQzlxWVhOd1pYSlNaWEJ2Y25RKw==".getBytes());
//
// byte[] decoded = Base64.decodeBase64(reportTemplate);
// String s = new String(decoded);
// System.out.println(s);
File f = new File("src/test/resources/reports/reportAccounts.txt");
// DataOutputStream fos = new DataOutputStream(new FileOutputStream(f));
// fos.writeUTF(s);
// fos.close();
JasperPrint jasperPrint = JasperFillManager.fillReport(jr, params);
f = new File("src/test/resources/reports/report5.pdf");
JasperExportManager.exportReportToPdfFile(jasperPrint, f.getAbsolutePath());
// System.out.println("output: " + output);
// jr.
// jr.getQuery().getLanguage();
// jr.getQuery().getText();
}
use of net.sf.jasperreports.engine.design.JasperDesign in project midpoint by Evolveum.
the class ReportManagerImpl method invoke.
/**
* Transforms change:
* 1/ ReportOutputType DELETE to MODIFY some attribute to mark it for deletion.
* 2/ ReportType ADD and MODIFY should compute jasper design and styles if necessary
*
* @param context
* @param task
* @param result
* @return
* @throws UnsupportedEncodingException
*/
@Override
public HookOperationMode invoke(@NotNull ModelContext context, @NotNull Task task, @NotNull OperationResult parentResult) {
ModelState state = context.getState();
if (state != ModelState.FINAL) {
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("report manager called in state = " + state + ", exiting.");
}
return HookOperationMode.FOREGROUND;
} else {
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("report manager called in state = " + state + ", proceeding.");
}
}
boolean relatesToReport = false;
boolean isDeletion = false;
PrismObject<?> object = null;
for (Object o : context.getProjectionContexts()) {
boolean deletion = false;
object = ((ModelElementContext<?>) o).getObjectNew();
if (object == null) {
deletion = true;
object = ((ModelElementContext<?>) o).getObjectOld();
}
if (object == null) {
LOGGER.warn("Probably invalid projection context: both old and new objects are null");
} else if (object.getCompileTimeClass().isAssignableFrom(ReportType.class)) {
relatesToReport = true;
isDeletion = deletion;
}
}
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("change relates to report: " + relatesToReport + ", is deletion: " + isDeletion);
}
if (!relatesToReport) {
LOGGER.trace("invoke() EXITING: Changes not related to report");
return HookOperationMode.FOREGROUND;
}
if (isDeletion) {
LOGGER.trace("invoke() EXITING because operation is DELETION");
return HookOperationMode.FOREGROUND;
}
OperationResult result = parentResult.createSubresult(CLASS_NAME_WITH_DOT + "invoke");
try {
ReportType reportType = (ReportType) object.asObjectable();
JasperDesign jasperDesign = null;
if (reportType.getTemplate() == null) {
String message = "Report template must not be null";
LOGGER.error(message);
result.recordFatalError(message, new SystemException());
} else // {
// PrismSchema reportSchema = null;
// PrismContainer<ReportConfigurationType> parameterConfiguration = null;
// try
// {
// reportSchema = ReportUtils.getParametersSchema(reportType, prismContext);
// parameterConfiguration = ReportUtils.getParametersContainer(reportType, reportSchema);
//
// } catch (Exception ex){
// String message = "Cannot create parameter configuration: " + ex.getMessage();
// LOGGER.error(message);
// result.recordFatalError(message, ex);
// }
//
// jasperDesign = ReportUtils.createJasperDesign(reportType, parameterConfiguration, reportSchema) ;
// LOGGER.trace("create jasper design : {}", jasperDesign);
// }
{
byte[] reportTemplateBase64 = reportType.getTemplate();
byte[] reportTemplate = Base64.decodeBase64(reportTemplateBase64);
InputStream inputStreamJRXML = new ByteArrayInputStream(reportTemplate);
jasperDesign = JRXmlLoader.load(inputStreamJRXML);
LOGGER.trace("load jasper design : {}", jasperDesign);
}
// Compile template
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
LOGGER.trace("compile jasper design, create jasper report : {}", jasperReport);
//result.computeStatus();
result.recordSuccessIfUnknown();
} catch (JRException ex) {
String message = "Cannot load or compile jasper report: " + ex.getMessage();
LOGGER.error(message);
result.recordFatalError(message, ex);
}
return HookOperationMode.FOREGROUND;
}
use of net.sf.jasperreports.engine.design.JasperDesign in project midpoint by Evolveum.
the class ReportTypeUtil method loadJasperDesign.
public static JasperDesign loadJasperDesign(byte[] template) throws SchemaException {
try {
byte[] reportTemplate = Base64.decodeBase64(template);
InputStream inputStreamJRXML = new ByteArrayInputStream(reportTemplate);
JasperDesign jasperDesign = JRXmlLoader.load(inputStreamJRXML);
// LOGGER.trace("load jasper design : {}", jasperDesign);
return jasperDesign;
} catch (JRException ex) {
throw new SchemaException(ex.getMessage(), ex.getCause());
}
}
Aggregations