/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Protocole;
import Bean.Jdbc_MySQL;
import Mails.Messages;
import Mails.Middle;
import java.beans.Beans;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
public class FOAMP {
public static String LOGIN = "LOGIN";
public static String LOGIN_OUI = "LOGIN_OUI";
public static String LOGIN_NON = "LOGIN_NON";
public static String BACTFUN = "BACTFUN";
public static String BACTFUN_OUI = "BACTFUN_OUI";
public static String BACTFUN_NON = "BACTFUN_NON";
public static String ACKACTFUN = "ACKACTFUN";
public static String ACKACTFUN_OUI = "ACKACTFUN_OUI";
public static String ACKACTFUN_NON = "ACKACTFUN_NON";
public static String BTREKFUN = "BTREKFUN";
public static String BTREKFUN_OUI = "BTREKFUN_OUI";
public static String BTREKFUN_NON = "BTREKFUN_NON";
public static String ERROR = "ERROR";
PacketCom messageFromClient(Object objet) {
PacketCom packet = (PacketCom) objet;
PacketCom messageToClient = traiterPacketServerSide(packet);
return messageToClient;
}
PacketCom messageFromServer(Object objet) {
PacketCom packet = (PacketCom) objet;
PacketCom message = traiterPacketClientSide(packet);
return message;
}
private PacketCom traiterPacketServerSide(PacketCom packet) {
String type = packet.getType();
System.out.println("type reçu: " + type);
Object contenu = packet.getObjet();
System.out.println("Reçu: " + type);
if (type.equals(FOAMP.LOGIN)) {
String[] infos = (String[]) contenu;
String login = infos[0];
String password = infos[1];
if (gestionLogin(login, password)) {
PacketCom packetRetour = new PacketCom(FOAMP.LOGIN_OUI, "LOGIN_OUI");
return packetRetour;
}else{
return new PacketCom(FOAMP.LOGIN_NON, "LOGIN_NON");
}
} else if (type.equals(FOAMP.BACTFUN)) {
String[] chaine = (String[])contenu;
String activite = chaine[0];
String date = chaine[1];
String client = chaine[2];
PacketCom packetRetour = actionBactFun(activite, date, client);
return packetRetour;
} else if (type.equals(FOAMP.ACKACTFUN)) {
String[] chaine = (String[])contenu;
String activite = chaine[0];
String date = chaine[1];
String client = chaine[2];
PacketCom packetRetour = actionAckActFun(activite, date, client);
return packetRetour;
} else if (type.equals(FOAMP.BTREKFUN)) {
String[] chaine = (String[])contenu;
String activite = chaine[0];
String session = chaine[1];
String client = chaine[2];
PacketCom packetRetour = actionBtrekFun(activite, session, client);
return packetRetour;
}else{
return new PacketCom(FOAMP.ERROR, "ERROR");
}
}
private PacketCom traiterPacketClientSide(PacketCom packet) {
String type = packet.getType();
Object contenu = packet.getObjet();
System.out.println("Reçu: " + type);
if (type.equals(FOAMP.LOGIN_OUI)) {
return packet;
}else if (type.equals(FOAMP.LOGIN_NON)) {
return packet;
}else if (type.equals(FOAMP.BACTFUN_OUI)) {
return packet;
}else if (type.equals(FOAMP.BACTFUN_NON)) {
return packet;
}else if (type.equals(FOAMP.ACKACTFUN_OUI)) {
return packet;
}else if (type.equals(FOAMP.ACKACTFUN_NON)) {
return packet;
}else if (type.equals(FOAMP.BTREKFUN_OUI)) {
return packet;
}else if (type.equals(FOAMP.BTREKFUN_NON)) {
return packet;
}else {
PacketCom packetReponse = new PacketCom(FOAMP.ERROR, "ERROR");
return packetReponse;
}
}
private boolean gestionLogin(String login, String password) {
String loginFound = null;
boolean found = false;
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "SELECT login FROM gestionnaires where login = '" + login + "' AND password = '" + password + "'";
Object tuples = dbsql.select(request);
loginFound = dbsql.extract(tuples, 1, "login");
if(loginFound != null){
found = true;
}
dbsql.endExtract();
dbsql.Disconnect();
} catch (Exception ex) {
Logger.getLogger(FOAMP.class.getName()).log(Level.SEVERE, null, ex);
}
return found;
}
private PacketCom actionBactFun(String activite, String date, String client) {
int idActivite = getIdActivite(activite);
if(idActivite == -1){
return new PacketCom(FOAMP.BACTFUN_NON, "Activité inconnue");
}
String[] split = client.split(" ");
String nom = split[0];
String prenom = split[1];
int idClient = getIdClient(nom, prenom);
if(idClient == -1){
return new PacketCom(FOAMP.BACTFUN_NON, "Client inconnu");
}
int prix = getPrix(idActivite);
if(prix == -1){
return new PacketCom(FOAMP.BACTFUN_NON, "Activité sans prix");
}
boolean ok = insertInscription(idActivite, idClient, date);
if(ok){
String[] chaine = {date, String.valueOf(prix)};
return new PacketCom(FOAMP.BACTFUN_OUI, (Object)chaine);
}else{
return new PacketCom(FOAMP.BACTFUN_NON, "Inscription déja présente à cette date pour ce client pour cette activitée");
}
}
private PacketCom actionAckActFun(String activite, String date, String client) {
int idActivite = getIdActivite(activite);
if(idActivite == -1){
return new PacketCom(FOAMP.ACKACTFUN_NON, "Activité inconnue");
}
String[] split = client.split(" ");
String nom = split[0];
String prenom = split[1];
int idClient = getIdClient(nom, prenom);
if(idClient == -1){
return new PacketCom(FOAMP.ACKACTFUN_NON, "Client inconnu");
}
int numInscription = getNumInscription(idActivite, idClient, date);
if(numInscription == -1){
return new PacketCom(FOAMP.ACKACTFUN_NON, "Aucunes inscriptions à cette date pour ce client pour cette activitée");
}
boolean ok = validerInscription(idActivite, idClient, date);
if(ok){
Messages msg = new Messages();
String mail = getMail(nom, prenom);
String sujet = "Recapitulatif";
msg.setSujet(sujet);
msg.setTo(mail);
String messageTexte = "nom: " + nom + "\nprenom: " + prenom + "\nnumero inscription: " + numInscription;
msg.setMessage(messageTexte);
Middle.sendMessage(msg);
return new PacketCom(FOAMP.ACKACTFUN_OUI, (Object)numInscription);
}else{
return new PacketCom(FOAMP.ACKACTFUN_NON, "Aucunes inscriptions à cette date pour ce client pour cette activitée");
}
}
private PacketCom actionBtrekFun(String activite, String session, String client) {
int idActivite = getIdActivite(activite);
if(idActivite == -1){
return new PacketCom(FOAMP.ACKACTFUN_NON, "Activité inconnue");
}
String[] split = client.split(" ");
String nom = split[0];
String prenom = split[1];
int idClient = getIdClient(nom, prenom);
if(idClient == -1){
return new PacketCom(FOAMP.ACKACTFUN_NON, "Client inconnu");
}
String date = generateDate(session);
boolean ok = insertInscription(idActivite, idClient, date);
if(ok){
int numInscription = getNumInscription(idActivite, idClient, date);
if(numInscription == -1){
return new PacketCom(FOAMP.ACKACTFUN_NON, "Aucunes inscriptions à cette date pour ce client pour cette activitée");
}
return new PacketCom(FOAMP.ACKACTFUN_OUI, (Object)numInscription);
}else{
return new PacketCom(FOAMP.ACKACTFUN_NON, "Aucunes inscriptions à cette date pour ce client pour cette activitée");
}
}
private int getIdActivite(String activite) {
int idActivite = -1;
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "SELECT id FROM activites where type = '" + activite + "'";
Object tuples = dbsql.select(request);
String resultat = null;
resultat = dbsql.extract(tuples, 1, "id");
if(resultat != null){
idActivite = Integer.parseInt(resultat);
}
dbsql.endExtract();
dbsql.Disconnect();
} catch (Exception ex) {
Logger.getLogger(FOAMP.class.getName()).log(Level.SEVERE, null, ex);
}
return idActivite;
}
private int getIdClient(String nom, String prenom) {
int idClient = -1;
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "SELECT id FROM voyageurs where nom = '" + nom + "' AND prenom = '" + prenom + "'";
Object tuples = dbsql.select(request);
String resultat = null;
resultat = dbsql.extract(tuples, 1, "id");
if(resultat != null){
idClient = Integer.parseInt(resultat);
}
dbsql.endExtract();
dbsql.Disconnect();
} catch (Exception ex) {
Logger.getLogger(FOAMP.class.getName()).log(Level.SEVERE, null, ex);
}
return idClient;
}
private boolean insertInscription(int idActivite, int idClient, String date) {
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "INSERT INTO inscriptions(idActivite, idVoyageur, date, valider) VALUES('"+idActivite+"', '"+idClient+"', '"+date+"', '0')";
dbsql.update(request);
dbsql.Disconnect();
return true;
} catch (Exception ex) {
Logger.getLogger(FOAMP.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
private int getPrix(int idActivite) {
int prix = -1;
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "SELECT prix_htva FROM activites where id = '" + idActivite + "'";
Object tuples = dbsql.select(request);
String resultat = null;
resultat = dbsql.extract(tuples, 1, "prix_htva");
if(resultat != null){
prix = Integer.parseInt(resultat);
}
dbsql.endExtract();
dbsql.Disconnect();
} catch (Exception ex) {
Logger.getLogger(FOAMP.class.getName()).log(Level.SEVERE, null, ex);
}
return prix;
}
private boolean validerInscription(int idActivite, int idClient, String date) {
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "UPDATE inscriptions SET valider = 1 where idActivite = '"+idActivite+"' AND idVoyageur = '"+idClient+"' AND date = '"+date+"'";
dbsql.update(request);
dbsql.Disconnect();
return true;
} catch (Exception ex) {
Logger.getLogger(FOAMP.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
private int getNumInscription(int idActivite, int idClient, String date) {
int numInscription = -1;
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "SELECT idInscription from inscriptions where idActivite = '"+idActivite+"' AND idVoyageur = '"+idClient+"' AND date = '"+date+"'";
Object tuples = dbsql.select(request);
String resultat = null;
resultat = dbsql.extract(tuples, 1, "idInscription");
if(resultat != null){
numInscription = Integer.parseInt(resultat);
}
dbsql.endExtract();
dbsql.Disconnect();
} catch (Exception ex) {
Logger.getLogger(FOAMP.class.getName()).log(Level.SEVERE, null, ex);
}
return numInscription;
}
private String generateDate(String session) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String dateGenerated = sdf.format(date);
String[] split = dateGenerated.split("/");
int a = Integer.parseInt(split[0]);
int b = Integer.parseInt(session);
if(b <= a){
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
gc.add(Calendar.MONTH, 1);
date = gc.getTime();
dateGenerated = sdf.format(date);
split = dateGenerated.split("/");
}
String dateRetour = session + "/" + split[1] + "/" + split[2];
if(Integer.parseInt(session) < 10){
dateRetour = "0" + dateRetour;
}
return dateRetour;
}
private String getMail(String nom, String prenom) {
String mail = null;
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "SELECT email as mail from voyageurs where nom='"+nom+"' and prenom='"+prenom+"'";
Object tuples = dbsql.select(request);
mail = dbsql.extract(tuples, 1, "mail");
dbsql.endExtract();
dbsql.Disconnect();
} catch (Exception ex) {
Logger.getLogger(FOAMP.class.getName()).log(Level.SEVERE, null, ex);
}
return mail;
}
}