Programa Swing com Spring sendo chamado de um programa JSF/RichFaces

11/01/2010

1



 Bom dia galera,

 Alguem pode me ajudar me indicando com posso:

 1o.   Em uma aplicação JSF/RichFaces / String/JPA , rodando na internet eu consiga chamar um programa swing que rodará em um cliente, acessando as mesmas classes utilizadas na web.


 2o.  Nessa aplicação cliente preciso  manter a conexao com o servidor usando spring e jpa e tambem imprimir um documento a partir de uma leitura em um campo jText onde irá enviar diretamente para impressora local os selects efetuados.

 Ou seja, tentei a um tempo atras , imprimir pelo browse sem que o usuario utilizasse o mouse para selecionar a impressora ou algo parecido , imprimir diretamente para impressora atraves dessa consulta.
Funciona até um ponto, o programa seleciona e envia para impressora , so que no Servidor.

 Por isso queria fazer esse mesmo programa local, tentando utilizar as mesmas caracteristicas usadas em meu BeanController onde executo a impressao:

Exemplo do Controller que imprime o relatorio.

/**
 *
 * @author victor
 */
@Controller("etiquetasController")
@Scope("session")
public class EtiquetasController {

    private Pedido pedido;
    private NotaFiscal notaFiscal;
    private Cliente cliente;
    private DataModel model;
    @Resource
    private DaoGenerico<Pedido, Integer> pedidoDao;
    @Resource
    private DaoGenerico<NotaFiscal, Integer> notafiscalDao;
    @Resource
    private DaoGenerico<Cliente, Integer> clienteDao;
    private String fornecimento;
    private Integer num_notafiscal;

    public EtiquetasController() {
    }


    //separa a pesquisa do total encontrado
//possibilitando a utilização também no relatório
    private List<?> todosResultsPesq() {


        Map<String, Object> params = new HashMap<String, Object>();
        params.put("nota", num_notafiscal);

        return clienteDao.listPesqParam(consultaEtiqueta(), params);
    }

    private String consultaEtiqueta() {
        String query = "SELECT p.fornecimento,p.isrisco,u.enderecoEntrega," +
                " u.nomeCli,u.logradouro,u.bairro,u.cidade, u.cep," +
                " p.obs_entrega,n.notafiscal,n.data_cria" +
                " FROM Cliente u " +
                " JOIN u.pedidos p" +
                " JOIN u.notas n " +
                " WHERE n.notafiscal = :nota";

        return query;
    }

    @SuppressWarnings("unchecked")
    public DataModel getEtiquetas() {

        String query = "SELECT p.fornecimento,p.isrisco,u.enderecoEntrega," +
                " u.nomeCli,u.logradouro,u.bairro,u.cidade, u.cep," +
                " p.obs_entrega,n.notafiscal,n.data_cria" +
                " FROM Cliente u " +
                " JOIN u.pedidos p" +
                " JOIN u.notas n " +
                " WHERE n.notafiscal = :nota";

        Map<String, Object> params = new HashMap<String, Object>();
        params.put("nota", num_notafiscal);



        return new ListDataModel(pedidoDao.listPesqParam(query, params));

    }

//converte uma string para Timestamp
    private Timestamp convertTimestamp(String t) throws ParseException, java.text.ParseException {
        // trata nanoseconds "yyyy-mm-dd hh:mm:ss.nanoseconds"
        SimpleDateFormat sdfIn =
                new SimpleDateFormat("yyyy-MM-dd");
        return new Timestamp(sdfIn.parse(t).getTime());
    }

    @SuppressWarnings("unchecked")
    //executa o relatório através do actionListener
    public void executarEtiqueta() throws IOException, java.text.ParseException, ParseException {

        todosResultsPesq();
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

        //pega o caminho do arquivo .jasper da aplicação
        InputStream reportStream = context.getExternalContext().getResourceAsStream("/reporter/etiquetas/EtiquetaEndereco.jasper");

            //envia a resposta com o MIME Type PDF
            response.setContentType("application/pdf");
            /*for�a a abertura de download */
            response.setHeader("Content-disposition",
                   "attachment;filename=relatorio.pdf");

        try {
            ServletOutputStream servletOutputStream = response.getOutputStream();

            //envia o título para o relatório, usando o parâmetro criado
            Map<String, String> parametros = new HashMap<String, String>();
            parametros.put("fornecimento", "xxxx");

            List dados = new ArrayList();

            Map record = null;

            //varre a consulta e separa os objetos

            for (Iterator iterator = todosResultsPesq().iterator();
                    iterator.hasNext();) {

                Object[] o = (Object[]) iterator.next();
                record = new HashMap();
                //coloca em um Map cada um dos campos criados
                //manualmente pelo relatório

                record.put("fornecimento", o[0].toString());
                record.put("isrisco", Boolean.parseBoolean(o[1].toString()));
                record.put("endereco_entrega", o[2].toString());
                record.put("nome_cliente", o[3].toString());
                record.put("endereco", o[4].toString());
                record.put("bairro", o[5].toString());
                record.put("cidade", o[6].toString());
                record.put("cep", o[7].toString());
                record.put("observacao_entrega", o[8].toString());
                record.put("num_notafiscal", Integer.parseInt(o[9].toString()));
                record.put("data_nf", this.convertTimestamp(o[10].toString()));

                //adiciona o List dados
                dados.add(record);


            }


            //cria uma fonte de dados para cole��es
            JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(dados);
         //envia para o navegador o PDF gerado
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parametros, fonteDados);
           
         //   JasperFillManager.fillReportToStream(reportStream, servletOutputStream,record);


         //      JasperPrint print = JasperFillManager.fillReport(reportStream, parametros, fonteDados);

        //        JasperPrintManager.printPage(print, 0, false);


            servletOutputStream.flush();
            servletOutputStream.close();





        } catch (JRException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //evita erro do JSF após completar
            //a geração do relatório
            //avisando o FacesContext que a resposta está completa
            context.responseComplete();

        }

    }

 // getters e setters omitidos
}


 
Responder

Posts

14/01/2010

Dyego Carmo

Para invocar uma aplicação desktop de dentro de uma pagina web utilize o JAva Web Start:

Mais informacoes:

http://www.guj.com.br/content/articles/jws/jws.pdf
Responder