Atualmente estou tentando usar o jasper para me ajudar a criar relatórios. Eu tenho as informações e dados que eu quero exibidos neste método:
private void writeToFile(final List sceneLoadModel) throws Exception { final BufferedWriter bw = new BufferedWriter(new FileWriter("/Uma/nft/result.psv")); for (final ScenarioLoadModel slm : sceneLoadModel) { bw.write(slm.getScenarioId() + PSP + slm.getScenarioId() + PSP + slm.getScenarioConfig().getName() + PSP + slm.getLoad() + PSP + "" + EOL); if (!slm.getScenarios().isEmpty()) { final int tempCount = slm.getScenarios().get(0).getTemplates().size(); final int sceneCount = slm.getScenarios().size(); for (int tempIdx = 0; tempIdx < tempCount; tempIdx++) { String id = null; int pass = 0; int fail = 0; final Map metricMap = new HashMap(); final DefaultStatisticalCategoryDataset dataset = new DefaultStatisticalCategoryDataset(); for (int sceneIdx = 0; sceneIdx < sceneCount; sceneIdx++) { final Template temp = slm.getScenarios().get(sceneIdx).getTemplates().get(tempIdx); if (temp.isError()) { fail++; } else { pass++; } if (sceneIdx == 0) { id = temp.getId(); } final MetricGroupModel mgm = slm.getScenarios().get(sceneIdx).getMetricGroupModel().get(tempIdx); if (mgm != null) { for (final MetricModel mm : mgm.getMetricModel()) { for (final MetricValue mv : mm.getMetricValue()) { dataset.add(mv.getValue(), new BigDecimal(0.0), mv.getType(), id); } } } } final TemplateConfig tc = TemplateManager.getTemplateConfig(id); bw.write(slm.getScenarioId() + PSP); bw.write(id + PSP + tc.getName() + PSP + 1 + PSP + pass + "/" + fail); for (final Object row : dataset.getRowKeys()) { final Number mean = dataset.getValue((String) row, id); bw.write(PSP + row + PSP + mean); } bw.write(EOL); } } } bw.close(); }
Pelo que entendi, eu criei Beans e coloquei todos eles em uma fábrica de feijão, para criar meu object que estará pronto para ser passado para o iReport.
Como posso colocar toda essa informação em um bean? Eu essencialmente quero que o bean inclua o cenário / caso de teste e se ele passou ou não. (Isso é para automação de testes)
Eu tentei ler o seu código para fazer um melhor palpite em quais colunas você quer, mas sem contexto, eu não tenho idéia. Todo o bean é um pojo, com campos privados e getters e setters públicos.
Supondo que não haja agrupamento e, essencialmente, cada ScenarioLoadModel
corresponderá a uma linha no relatório, você acabaria com um bean como este:
public class ScenariaResults { private String id; private String name; private String load; private int passCount; private int failCount; public ScenariaResults(String id, String name, String load, int passCount, int failCount) { super(); this.id = id; this.name = name; this.load = load; this.passCount = passCount; this.failCount = failCount; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLoad() { return load; } public void setLoad(String load) { this.load = load; } public int getPassCount() { return passCount; } public void setPassCount(int passCount) { this.passCount = passCount; } public int getFailCount() { return failCount; } public void setFailCount(int failCount) { this.failCount = failCount; } @Override public String toString() { return "ScenariaResults [id=" + id + ", name=" + name + ", load=" + load + ", passCount=" + passCount + ", failCount=" + failCount + "]"; } }
Então, basicamente, no código que você tem acima, você cria instâncias de ScenarioResults
e as adiciona a uma lista. Depois de ter a lista, tudo o que você precisa fazer é criar um JRDataSource:
List dataBeanList = ...call your method to get the list of results //create the datasource JRDataSource dataSource = new JRBeanCollectionDataSource(dataBeanList);
Agora, ao projetar o relatório no iReport, pode ser um pouco complicado conseguir que os campos sejam importados automaticamente. Basicamente, primeiro inclua seu projeto com o bean no caminho de class no iReports (poderia apenas apontá-lo para a pasta bin ou jar file`): Ferramentas -> opções -> guia classpath. Agora siga estas etapas para adicionar os campos.
JavaBean Datasource
. ScenarioResults
) Read attributes
Add Selected Field(s)
. OK
Agora, se você quiser testar como o relatório se parece com os dados, e não apenas com uma fonte de dados vazia, é aí que a Fábrica entra. É apenas para testes durante o uso do iReport. Você precisa criar uma class que essencialmente irá criar um dataset fictícios para você. Deve ser algo como:
import java.util.ArrayList; import java.util.List; public class ScenarioResultsFactory { public static List createBeanCollection() { List list = new ArrayList (); list.add(new ScenarioResults("1", "test", "load", 10, 5)); //add as many as you want return list; } }
Agora você precisa criar uma fonte de dados apontando para ela no iReport.
New
JavaBeans set datasource
. Clique em Next
. ScenarioResultsFactory
. com
você deve ter com.ScenarioResultsFactory
aqui. createBeanCollection
se ainda não estiver lá. Use field description
. Clique em Test
para se certificar de que funcionou. Save
.