quinta-feira, 29 de março de 2007

Design Factory I - Editando datasource

Como falei anteriormente, vou postar agora o método de designFactory, onde será alterado algumas particularidades do relatório.

Esse metodo recebe um IReportRunnable e o abre para que seja possivel alterar o dataSource e dataSet, mas podem ser alteradas outras propriedades, ficando para o desenvolvedor decidir sobre o que deve ser mudado.


/**
* Monta a estrutura para o relatorio, criando o data source
*e se necessario o data set
* @param design a ser alterado
*/
private void designFactory(IReportRunnable design) {
FacesContext fc = FacesContext.getCurrentInstance();
ValueBinding vbUser =
fc.getApplication().createValueBinding("#{usuario}");
//Busca o usuario na sessao
Usuario user = (Usuario) vbUser.getValue(fc);

//Busca a url da base no arquivo de propriedades
String base = new ResourceManager().getProperties().
getString(ResourceManager.JDBC_URL).toString();

ReportDesignHandle report =
(ReportDesignHandle) design.getDesignHandle();
ElementFactory designFactory =
report.getElementFactory();


buildDataSource(designFactory, report,
user.getApelpess(),user.getSenhaweb(), base);

// Montar DataSet dinamicamente!
// Esta parte sera melhor descrita em um post posterior
if (ObjRel.getConsulta() != null) {
buildDataSet(ObjRel.getRelatorio().getCodirela(),
ObjRel.getConsulta(), designFactory, report);
}
}

/**
* Monta o data source com o usuario da sessao e base na
* qual ira conectar
* @param designFactory
* @param designHandle
* @param usuario nome do usuario para conectar ao banco
* @param senha senha para conectar ao banco
* @param base url de onde esta a base de dados
*/
void buildDataSource(ElementFactory designFactory,
ReportDesignHandle designHandle, String usuario,
String senha, String base) {
try {
OdaDataSourceHandle dsHandle =
designFactory.newOdaDataSource(
"Data Source",
"org.eclipse.birt.report.data.oda.jdbc");

dsHandle.setProperty("odaDriverClass",
"org.firebirdsql.jdbc.FBDriver");
dsHandle.setProperty("odaURL", base);
dsHandle.setProperty("odaUser", usuario);
dsHandle.setProperty("odaPassword", senha);
dsHandle.setName("Data Source");
designHandle.getDataSources().drop(0);
designHandle.getDataSources().add(dsHandle);
} catch (SemanticException e) {
e.printStackTrace();
}
}

Nenhum comentário: