si scusami... in effetti tutta quella parte lì l'ho volutamente omessa perché pensavo non potesse essere utile.
comunque faccio una serie di controlli che, se danno esito positivo, permettono di salvare correttamente il PO Formazione con i relativi metodi forniti da Hibernate.
guarda per completezza comunque ti incollo tutta la classe:
codice:
package com.fantacalcio.servlet;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.security.Principal;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.fantacalcio.po.*;
import com.fantacalcio.util.FusoOrario;
import com.fantacalcio.util.HibernateUtil;
import com.fantacalcio.util.XmlResponseFactory;
/**
* Servlet implementation class FormazioneServlet
*/
public class FormazioneServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private final int titolari = 11, riserve = 7;
private final int ERROR = 0, OK = 1;
private int status;
private String errorMessage = "";
/**
* @see HttpServlet#HttpServlet()
*/
public FormazioneServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
status = OK;
Session hibernateSession = HibernateUtil.currentSession();
hibernateSession.beginTransaction();
Criteria criteria = hibernateSession.createCriteria(Ruolo.class);
List<Ruolo> listaRuoli = criteria.list();
String[] ruoli = new String[listaRuoli.size()];
Iterator<Ruolo> itRuoli = listaRuoli.iterator();
int cont = 0;
while (itRuoli.hasNext()) {
ruoli[cont] = itRuoli.next().getNome();
cont++;
}
final String P = ruoli[0], D = ruoli[1], C = ruoli[2], A = ruoli[3];
int tot = titolari+riserve;
Formazione formazione = null;
RegistroFormazioni rf = null;
Principal p = request.getUserPrincipal();
if (p != null) {
Fantasquadra fantasquadra = null;
try {
fantasquadra = (Fantasquadra)p.getClass().getMethod("getFantasquadra", null).invoke(p, null);
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
}
criteria = hibernateSession.createCriteria(Giornata.class);
criteria.setProjection(Projections.max("id"));
int idGiornata = (Integer)criteria.uniqueResult();
criteria = hibernateSession.createCriteria(Giornata.class);
criteria.add(Restrictions.eq("id", idGiornata));
Giornata ultimaGiornata = (Giornata)criteria.uniqueResult();
criteria = hibernateSession.createCriteria(Formazione.class);
criteria.add(Restrictions.eq("fantasquadra", fantasquadra));
criteria.add(Restrictions.eq("giornata", ultimaGiornata));
formazione = (Formazione)criteria.uniqueResult();
criteria = hibernateSession.createCriteria(Risultato.class);
criteria.add(Restrictions.eq("formazione", formazione));
GregorianCalendar ora = FusoOrario.trasformaData(new GregorianCalendar());
rf = new RegistroFormazioni();
rf.setFantasquadra(fantasquadra);
rf.setGiornata(ultimaGiornata);
rf.setData(ora);
hibernateSession.save(rf);
if (criteria.uniqueResult() == null) {
GregorianCalendar blocco = ultimaGiornata.getBlocco();
if (ora.before(blocco)) {
if (formazione == null) {
formazione = new Formazione();
formazione.setFantasquadra(fantasquadra);
formazione.setGiornata(ultimaGiornata);
}
String param = request.getParameter("modulo");
if (param != null) {
int modulo = Integer.parseInt(param);
criteria = hibernateSession.createCriteria(Modulo.class);
criteria.add(Restrictions.eq("id", modulo));
Modulo m = (Modulo)criteria.uniqueResult();
if (m != null) {
rf.setModulo(m);
hibernateSession.update(rf);
String tipo = m.getTipo();
int portieri = 1;
int difensori = Integer.parseInt(tipo.substring(0,1));
int centrocampisti = Integer.parseInt(tipo.substring(2,3));
int attaccanti = Integer.parseInt(tipo.substring(4,5));
Giocatore[] giocatori = new Giocatore[tot];
for (int i=0; i<titolari; i++) {
param = request.getParameter("g"+i);
if (param != null) {
int idGiocatore = Integer.parseInt(param);
criteria = hibernateSession.createCriteria(Giocatore.class);
criteria.add(Restrictions.eq("id", idGiocatore));
Giocatore g = (Giocatore)criteria.uniqueResult();
if (g != null) {
giocatori[i] = g;
Ruolo r = g.getRuolo();
String nomeRuolo = r.getNome();
if (nomeRuolo.equals(P))
portieri--;
else if (nomeRuolo.equals(D))
difensori--;
else if (nomeRuolo.equals(C))
centrocampisti--;
else if (nomeRuolo.equals(A))
attaccanti--;
GiocatoreRf gr = new GiocatoreRf();
gr.setGiocatore(g);
gr.setRf(rf);
gr.setPosto(i);
hibernateSession.save(gr);
}
}
else {
status = ERROR;
errorMessage = "Te ne 6 scordato uno (o più)!!";
}
}
int panchinari = riserve;
for (int i=titolari; i<titolari+riserve; i++) {
param = request.getParameter("g"+i);
if (param != null) {
int idGiocatore = Integer.parseInt(param);
criteria = hibernateSession.createCriteria(Giocatore.class);
criteria.add(Restrictions.eq("id", idGiocatore));
Giocatore g = (Giocatore)criteria.uniqueResult();
if (g != null) {
giocatori[i] = g;
panchinari--;
GiocatoreRf gr = new GiocatoreRf();
gr.setGiocatore(g);
gr.setRf(rf);
gr.setPosto(i);
hibernateSession.save(gr);
}
}
}
if (status == OK)
if (portieri < 0) {
status = ERROR;
errorMessage = "Quanti portieri vuoi mettere??";
}
else if (portieri > 0) {
status = ERROR;
errorMessage = "Lo metti ora il portiere che manca o chiamiamo Toro??";
}
else if (difensori < 0) {
status = ERROR;
errorMessage = "Troppi difensori!!";
}
else if (difensori > 0) {
status = ERROR;
errorMessage = "Mancano uno o più difensori!!";
}
else if (centrocampisti < 0) {
status = ERROR;
errorMessage = "Troppi centrocampisti!!";
}
else if (centrocampisti > 0) {
status = ERROR;
errorMessage = "Mancano uno o più centrocampisti!!";
}
else if (attaccanti < 0) {
status = ERROR;
errorMessage = "Troppi attaccanti!!";
}
else if (attaccanti > 0) {
status = ERROR;
errorMessage = "Mancano uno o più attaccanti!!";
}
else if (panchinari < 0) {
status = ERROR;
errorMessage = "Troppe riserve!!";
}
else {
formazione.setModulo(m);
formazione.setUltima_modifica(FusoOrario.trasformaData(new GregorianCalendar()));
hibernateSession.saveOrUpdate(formazione);
for (int i=0; i<tot; i++) {
criteria = hibernateSession.createCriteria(GiocatoreFormazione.class);
criteria.add(Restrictions.eq("id.idFormazione", formazione.getId()));
criteria.add(Restrictions.eq("posto", i));
GiocatoreFormazione gf = (GiocatoreFormazione)criteria.uniqueResult();
if (gf != null)
hibernateSession.delete(gf);
Giocatore g = giocatori[i];
if (g != null) {
gf = new GiocatoreFormazione();
gf.setGiocatore(g);
gf.setFormazione(formazione);
gf.setPosto(i);
hibernateSession.merge(gf);
}
}
}
}
else {
status = ERROR;
errorMessage = "Modulo non valido";
}
}
else {
status = ERROR;
errorMessage = "Non hai scelto il modulo";
}
}
else {
status = ERROR;
errorMessage =
"Troppo tardi per modificare la formazione!"
+ "\nIl limite era alle "
+ blocco.get(Calendar.HOUR_OF_DAY) + ":"
+ (blocco.get(Calendar.MINUTE) < 10 ? "0"+blocco.get(Calendar.MINUTE) : blocco.get(Calendar.MINUTE))
+ " del " + (blocco.get(Calendar.DAY_OF_MONTH) < 10 ? "0"+blocco.get(Calendar.DAY_OF_MONTH) : blocco.get(Calendar.DAY_OF_MONTH)) + "/"
+ (blocco.get(Calendar.MONTH) < 9 ? "0"+(blocco.get(Calendar.MONTH)+1) : (blocco.get(Calendar.MONTH)+1)
);
}
}
else {
status = ERROR;
errorMessage = "Questa formazione fa riferimento alla giornata " + ultimaGiornata.getNumero() + " che � gi� stata disputata, per cui non � pi� possibile modificarla";
}
}
else {
status = ERROR;
errorMessage = "Non sei abilitato ad eseguire questa operazione";
}
try {
Document doc = XmlResponseFactory.getInstance().newXml();
buildXml(doc, request, hibernateSession, rf);
String xmlString = XmlResponseFactory.getInstance().xmlToString(doc);
response.setContentType("text/xml;charset=ISO-8859-1");
response.getOutputStream().println(xmlString);
response.getOutputStream().flush();
response.getOutputStream().close();
}
catch(Exception e)
{
e.printStackTrace();
}
hibernateSession.getTransaction().commit();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
private void buildXml(Document doc, HttpServletRequest request, Session hibernateSession, RegistroFormazioni rf) {
Element root = doc.createElement("response");
doc.appendChild(root);
Element st = doc.createElement("status");
if (status == OK) {
st.setAttribute("Status", Integer.toString(OK));
st.setAttribute("Message", "Formazione modificata correttamente");
rf.setSuccesso(true);
}
else if (status == ERROR) {
st.setAttribute("Status", Integer.toString(ERROR));
st.setAttribute("Message", errorMessage);
rf.setSuccesso(false);
rf.setErrore(errorMessage);
}
hibernateSession.update(rf);
root.appendChild(st);
}
}