EntityManager em = PersistenceManager.getInstance().createEntityManager();
em.getTransaction().begin();
//comprobar que la petición existe
PeticionDao peticionDao = new PeticionDao(em);
Peticion peticion = peticionDao.find(idPeticion);
if (peticion==null)
throw new MueveteException("La petición que estás intentando firmar no existe: " + idPeticion);
//lo hacemos distinto según si es una firma autentificada o no
if (autentificado != null) {
firma = new FirmaAutentificada();
FirmaAutentificada fa = (FirmaAutentificada) firma;
UsuarioDao udao = new UsuarioDao(em);
fa.setUsuario(udao.find(autentificado));
}
else {
firma = new FirmaSinAutentificar();
FirmaSinAutentificar fsa = (FirmaSinAutentificar) firma;
fsa.setNombre(firmaTO.getNombre());
fsa.setApellidos(firmaTO.getApellidos());
fsa.setEmail(firmaTO.getEmail());
}
//atributos comunes
firma.setComentario(firmaTO.getComentario());
firma.setPeticion(peticion);
firma.setPublica(firmaTO.isPublica());
//actualizar campos de relación y otros
peticion.getFirmas().add(firma);
peticion.setFirmasConseguidas(peticion.getFirmasConseguidas()+1);
new FirmaDao(em).create(firma);
em.getTransaction().commit();
em.close();
return firma.getId();
}