Created
May 17, 2011 04:55
-
-
Save gastaldi/975973 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.jboss.seam.reports.jasperreports.qualifiers.test; | |
import java.io.ByteArrayInputStream; | |
import java.io.ByteArrayOutputStream; | |
import java.io.InputStream; | |
import java.lang.annotation.Annotation; | |
import java.util.HashMap; | |
import java.util.HashSet; | |
import java.util.Map; | |
import java.util.Set; | |
import javax.enterprise.inject.Produces; | |
import javax.enterprise.inject.spi.BeanManager; | |
import javax.enterprise.inject.spi.InjectionPoint; | |
import javax.inject.Inject; | |
import net.sf.jasperreports.engine.data.JRXlsDataSource; | |
import org.jboss.arquillian.api.Deployment; | |
import org.jboss.arquillian.junit.Arquillian; | |
import org.jboss.seam.reports.Report; | |
import org.jboss.seam.reports.ReportDataSource; | |
import org.jboss.seam.reports.ReportInstance; | |
import org.jboss.seam.reports.ReportLoader; | |
import org.jboss.seam.reports.ReportRenderer; | |
import org.jboss.seam.reports.annotations.frameworks.JasperReports; | |
import org.jboss.seam.reports.annotations.output.PDF; | |
import org.jboss.seam.reports.jasperreports.JasperSeamReportDataSource; | |
import org.jboss.seam.reports.jasperreports.JasperSeamReportLoader; | |
import org.jboss.seam.solder.resourceLoader.Resource; | |
import org.jboss.seam.solder.resourceLoader.ResourceLoaderManager; | |
import org.jboss.shrinkwrap.api.ArchivePaths; | |
import org.jboss.shrinkwrap.api.ShrinkWrap; | |
import org.jboss.shrinkwrap.api.asset.EmptyAsset; | |
import org.jboss.shrinkwrap.api.spec.JavaArchive; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import de.oio.jpdfunit.DocumentTester; | |
@RunWith(Arquillian.class) | |
public class JasperReportsQualifierTest { | |
@Inject | |
@SalesReport | |
Report salesReport; | |
@Inject | |
@Resource("XlsDataSource.data.xls") | |
InputStream dataSource; | |
@Inject | |
@JasperReports | |
ReportRenderer pdfRenderer; | |
@Deployment | |
public static JavaArchive createArchive() { | |
return ShrinkWrap.create(JavaArchive.class) | |
.addPackages(true, "org.jboss.seam.solder") | |
.addPackages(true, "org.jboss.seam.reports") | |
.addPackages(true, "org.jboss.seam.reports.annotations") | |
.addPackages(true, "org.jboss.seam.reports.jasperreports") | |
.addClass(JasperSeamReportLoader.class) | |
.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml")); | |
} | |
@Test | |
public void testReportLifecycle() throws Exception { | |
Map<String, Object> params = new HashMap<String, Object>(); | |
// Preparing parameters | |
params.put("ReportTitle", "Address Report"); | |
params.put("DataFile", "XlsDataSource.data.xls - XLS data source"); | |
Set<String> states = new HashSet<String>(); | |
states.add("Active"); | |
states.add("Trial"); | |
params.put("IncludedStates", states); | |
ReportInstance reportInstance = salesReport.fill(getDataSource(), params); | |
ByteArrayOutputStream os = new ByteArrayOutputStream(); // OutputStream | |
// Render output as the desired content | |
pdfRenderer.render(reportInstance, os); | |
DocumentTester tester = new DocumentTester(new ByteArrayInputStream(os.toByteArray())); | |
try { | |
tester.assertPageCountEquals(2); | |
} finally { | |
tester.close(); | |
} | |
} | |
@Produces | |
@SalesReport | |
Report produceSalesReport(@JasperReports ReportLoader loader, BeanManager beanManager, ResourceLoaderManager resourceLoader, InjectionPoint ip) { | |
System.out.println("Produces Sales report"); | |
Set<Annotation> qualifiers = ip.getQualifiers(); | |
Report report = null; | |
for (Annotation an : qualifiers) { | |
Class<? extends Annotation> annotationType = an.annotationType(); | |
if (annotationType.isAnnotationPresent(Resource.class)) { | |
report = loader.compile(resourceLoader.getResourceAsStream(annotationType.getAnnotation( | |
Resource.class).value())); | |
} | |
} | |
return report; | |
} | |
private ReportDataSource getDataSource() throws Exception { | |
JRXlsDataSource ds; | |
String[] columnNames = new String[] { "city", "id", "name", "address", "state" }; | |
int[] columnIndexes = new int[] { 0, 2, 3, 4, 5 }; | |
ds = new JRXlsDataSource(dataSource); | |
ds.setColumnNames(columnNames, columnIndexes); | |
return new JasperSeamReportDataSource(ds); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment