Primeiro commit

Interfaces DaoRepository bastante semelhantes. O que poderia ter sido feito

Criei a classe Repository utilizando generics:

package br.com.quanta.procontratos.repositorio;

import java.util.List;

public interface Repository<T> {
 void salvar(T object);
List<T> pegarTodos();
T pegaPorId(Object object); // Pode ser uma String em Contrato ou um Long
em Fornecedor
void deletar(T object);
}

e implementei os DAO's da seguinte forma:

package br.com.quanta.procontratos.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.caelum.vraptor.ioc.Component;
import br.com.quanta.procontratos.modelo.Contrato;
import br.com.quanta.procontratos.repositorio.Repository;

@Component
public class ContratoDao implements Repository<Contrato> {

private final Session session;
 public ContratoDao(Session session) {
this.session = session;
}
 @Override
public void salvar(Contrato contrato) {
 session.merge(contrato);
 }

@SuppressWarnings("unchecked")
@Override
public List<Contrato> pegarTodos() {
ArrayList<Contrato> contratos = new ArrayList<>();
Query query = session.createQuery("from Contrato");
contratos = (ArrayList<Contrato>) query.list();
return contratos;
}

@Override
public void deletar(Contrato contrato) {
Contrato contratoTransient = pegaPorId((contrato).getNumero());
session.delete(contratoTransient);
}
 public Contrato pegaPorId(Object numero) {
Contrato contrato = (Contrato) session.get(Contrato.class, (String) numero);
return contrato;
}

}

package br.com.quanta.procontratos.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.caelum.vraptor.ioc.Component;
import br.com.quanta.procontratos.modelo.Fornecedor;
import br.com.quanta.procontratos.repositorio.Repository;

@Component
public class FornecedorDao implements Repository<Fornecedor> {

private final Session session;
 public FornecedorDao(Session session) {
this.session = session;
}
 @Override
public void salvar(Fornecedor fornecedor) {
session.merge(fornecedor);
}

@SuppressWarnings("unchecked")
@Override
public List<Fornecedor> pegarTodos() {
ArrayList<Fornecedor> fornecedores = new ArrayList<>();
Query query = session.createQuery("from Fornecedor");
fornecedores = (ArrayList<Fornecedor>) query.list();
return fornecedores;
}

@Override
public Fornecedor pegaPorId(Object id) {
Fornecedor fornecedor = (Fornecedor) session.get(Fornecedor.class, (Long)
id);
return fornecedor;
}

@Override
public void deletar(Fornecedor fornecedor) {
Fornecedor fornecedorTransient = pegaPorId(fornecedor.getId());
session.delete(fornecedorTransient);
}

}




Em 18 de junho de 2014 23:28, George Matos <georgemattos@gmail.com>
escreveu:

> Como fazer para usar uma única tela tanto para criação como para edição?
>
> Alterações feitas:
>
> ContratoController.java
>
> 1. Remoção do método:
>
> public void formNovoContrato() {
>  }
>
> -
> validator.onErrorUsePageOf(ContratoController.class).formEditarContrato();
>
> +
> validator.onErrorUsePageOf(ContratoController.class).formEditarContrato(request);
>
> 2. Remoção do arquivo formNovoContrato.jsp
>
> 3. Edição do arquivo formEditarContrato.jsp
>
> - <td><input type="text" name="contrato.numero" value="${contrato.numero}"
> class="form-control" ng-required="true">readonly="readonly"></td>
>
> + <td><input type="text" name="contrato.numero" value="${contrato.numero}"
> class="form-control" ng-required="true" <c:if test="${contrato.numero !=
> null}">readonly="readonly"</c:if>></td>
>
> 4. Edição do arquivo nav.jsp
>
> - <li><a href="<c:url value="/contrato/formNovoContrato" />">Novo</a></li>
>
> + <li><a href="<c:url value="/contrato/formEditarContrato"
> />">Novo</a></li>
>
>
> 2014-06-18 10:13 GMT-03:00 Paulo Benety <notifications@github.com>:
>
> In src/main/webapp/WEB-INF/jsp/contrato/formNovoContrato.jsp:
>>
>> > +<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
>> > +    pageEncoding="ISO-8859-1"%>
>> > +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
>> > +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f" %>
>> > +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
>> > +<html ng-app="Procontrato">
>> > +<head>
>> > +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
>> > +<link rel="stylesheet" href="<c:url value="/css/bootstrap.min.css" />">
>> > +<title>Novo Contrato</title>
>> > +</head>
>> > +<body ng-controller="ProcontratoController">
>> > +	
>> > +	<%@ include file="/template/nav.jsp" %>
>> > +	
>> > +	<form action="<c:url value="/contrato/contratoSalvar" />" method="post">
>>
>> Como fazer para usar uma única tela tanto para criação como para edição?
>>
>> —
>> Reply to this email directly or view it on GitHub
>> <https://github.com/chucre/projeto_george_matos_java_junior/pull/1/files#r13913553>
>> .
>>
>
>