mercredi 7 août 2013

Les conventions

Aujourd’hui en JAVA j’écris if (toto == null), et on me demande de changer
toto == null par null == toto.

Quand je demande pourquoi on me dis que c'est par ce que c'est historique :
vois tu en C ça pourrais lever une exception.

Je demande comment ça?
Avec les types primitif ça passe mais pas avec les objets

Mais le C est un langage procédural...
Tu peu implémenter toi même l'utilisation des objets



Je ne dois donc pas écrire mon code ainsi car dans un autre langage
si on implémente sois même la gestion des objet, on pourrais avoir
des problème.

d'accord...

lundi 10 juin 2013

Supprimer les "trailing whitespaces" ou les espace a droite du texte.

Python

Ce scrip retire les espace qui traine a droite mais ne toouche pas aux ligne vide, tres patrique pour le flex car l'IDE n'affiche pas les espace.
si on a une ligne de x espace il la remplace par une ligne vide (CRLF) :
import fileinput
import sys

CRLF = "\r\n"

print "Veuillez entrer le chemin du fichier (utiliser des \\ ou /, c'est pareil) :"
path = str(raw_input())
path.replace("\\", "/")
for line in fileinput.FileInput(path, inplace=1):
    if line != CRLF:
        line = line.rstrip()
        print line
fileinput.close()

samedi 11 août 2012

Faire des requettes criteria

Hibernate 3

Criteria c'est quoi?

Criteria permet d'interroger une base de donnée sans faire de SQL a l'interieur d'un programme en JAVA, on fait une liste de criteres et on obtien ensuite une liste de tous les resultat


example


On a le diagramme de classe suivant, on a une gamme dans une famille, dans un produit, dans un contrat d'assurance.



D'un point de vue de la base de donnée on a 4 tables :
  • Une table Gamme
  • Une table Famille qui contient une clé etrangère vers Gamme
  • Une table Produit qui contient une clé etrangère cers Famille
  • une table ContratAssurance qui contient une clé etrangère vers Produit.

donc coté java on travaille avec des objets, voici la methodes qui permet de rechercher un contrat d'assurance en fonction
  • Du nom de Produit auquel il est associé
  • Du nom de Famille du Produit
  • De la Gamme de la famille
  • du montantInitial du contratAssurance

 public List<ContratAssurance> rechercherContratAssurance(Double mi, String nomP, String nomF, String nomG){
 
 //on creer un objet Criteria fait pour la classe ContratAssurance, 
 //on accedera au champ de la table par "ca" ("ca" est un alias)
 Criteria c = HibernateUtil.getSessionFactory().getCurrentSession()
 .createCriteria(ContratAssurance.class, "ca")
 
  //Pour acceder aux sous-objets il faut creer des alias
  c.createAlias("ca.prod", p); 
  c.createAlias("p.family", f);
  c.createAlias("p.gam", g);
  
  //ici on a 4 alias, ca, p, f, g
  //on ajoute les critere de recherche a l'objet Criteria
  c.add(Restriction.eq("ca.montantInitial", mi));
  c.add(Restriction.eq("p.nom", nomP));
  c.add(Restriction.eq("f.nom", nomF));
  c.add(Restriction.eq("g.nom", nomG));
  
  //on recupere les resultat
  return c.List();
 }


Notez qu'au debut l'objet c contient TOUT le contenu de la table ContratAssurance et qu'au fur et a mesure que l'on ajoute des criteres la liste diminue.

vendredi 10 août 2012

Afficher des snippet de code sur Blogger

Technique simple, je vais sur http://hilite.me/ je met mon code dans la boite, je clicque sur highlight et hop!
J'ai du code HTML qui correspond a mon code colorisé.

Recherche predictive avec richfaces sur MVC

JEE, JSF2

Note : les getter et setter n'apparaissent pas car ils sont généré automatiquement (et invisible dans le code) par lombok grace au annotations @Getter et @Setter.

Methode 1 : faire une recherche a base d'objet a multiple propriétées. 

Algo
L'utilisateur a ecrit "s" dans le champ de produit.
Un methode du Bean est appelé pour chercher tous les produits qui commence par "s"
Cette methode retourne une ArrayList d'objet "Produit"
On affiche la designation et le commentaire du produit dans les sugestion.
Seul le nom est envoyé dans le champ de produit.


Etant un MVC il nous faut un Bean qui s'occupe de la logique et une JSP de l'affichage

Le bean

package com.coweb.web.beans.produit;
 
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import com.coweb.produit.model.Produit;
import com.coweb.produit.services.business.delegate.ProduitDelegate;
import lombok.Getter;
import lombok.Setter;
 
@Getter
@Setter
@ManagedBean(name = "rechercherProduit")
@ViewScoped
public class rechercherProduitBean implements Serializable{
 
    /** UID genere par eclipse pour la serialization */
    private static final long serialVersionUID = -509330322641879670L;
 
    /**le business deleguate qui donne acces au methodes de l'EJB*/
 ProduitService produitService = new ProduitDelegate();
    /** ce que l'utilisateur a ecris **/
    private String nomProduitEcris;
     
 
    public List<Produit> predireNomProduit(String search) throws Exception{
        return produitService.rechercherProduit(search);
    }
}

La methode
predireNomProduit est appelé a chaque frappe au clavier dans le champ
nomProduitEcris, ce qui a été ecris est passe en parametre au travers de la variable
search.
Ensuite la methode apelle

produitService.rechercherProduit(search) qui elle va interroger la base de données et renvoyer une liste de Produit.

L'affichage sur la page est régénerer en temps reel par le AJAX de richfaces.


Le JSF


            
                
            
            
                
            
  

Donc d'abord parlons des attributs de <rich:autocomplete> :

autocompleteMethod : la methode qui va aller chercher la liste des produit correspondant a ce qui a été ecrit a chaque frappe.
value : l'attribut du bean qui prend ce que le champ de texte retourne.
var : Donne un nom a la liste retourné par l'autocompleteMethod
fetchValue : l'attribut de l'objet selectioné dans la liste de suggestion qui sera envoyé dans le champ.

Ensuite les <rich:column> :

C'est tout simplement le contenu de la recherche predictive, j'aurais pu en mettre juste une avec designation si je ne voulais afficher que ça (dans ce cas la oui, fetchValue est toujours obligatoire, meme si vous ne presentez qu'un attribut en sugestion richfaces ne saura pas quel attribut mettre dans le champ).

Methode 2 : faire une recherche a base de String. 




meme procédé, sauf qu'au lieu d'avoir une liste de Produit, on a une liste de String


Le bean

package com.coweb.web.beans.produit;
 
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import com.coweb.produit.model.Produit;
import com.coweb.produit.services.business.delegate.ProduitDelegate;
import lombok.Getter;
import lombok.Setter;
 
@Getter
@Setter
@ManagedBean(name = "rechercherProduit")
@ViewScoped
public class rechercherProduitBean implements Serializable{
 
    /** UID genere par eclipse pour la serialization */
    private static final long serialVersionUID = -509330322641879670L;
 
    /**le business deleguate qui donne acces au methodes de l'EJB*/
 ProduitService produitService = new ProduitDelegate();
    /** ce que l'utilisateur a ecris **/
    private String nomProduitEcris;
     
 
    public List<String> predireNomProduit(String search) throws Exception{
        return produitService.rechercherProduit(search);
    }
}

Le JSF


            
                
            
  

Et voila!

jeudi 9 août 2012

Trier des ArrayList par ordre alphabetique

Java

Reçament j'ai du implémenter un mécanisme de recherche prédictive, après les accès en base j'avais sois une liste d'objet sois une liste de String, il fallait ensuite les ordonner pour l'affichage.

Les liste sont ici des ArrayList (je ne sais pas si Collections.sort()) fonctionne sur les LinkedList et autre.

Dans le cas des Objet on les ordonne en fonction d'un champ.

Ranger une liste d'objet par ordre alphabetique 


Collections.sort(
  arrayListObjets, 
  new Comparator<monObjet>() 
  {
    public int compare(MonObjet o1, MonObjet o2) 
    {
      return o1.Name.compareTo(o2.Name);
    }
  }
);


Range l'arraylist arrayListObjets par ordre alphabetique en fonction de l'attribut Name des objects MonObjet.
Ici l'ArrayList est bien sur arrayListObjets.

Faire ceci si on ne veut pas que le classement soit case sensitive (ne prenne pas en compte les majuscule).

    return lhs.Name.toLowerCase().compareTo(rhs.Name.toLowerCase());


Ranger une List de String (ArrayList) par ordre alphabetique


    Collections.sort(theList);

Si on veut que ça ne soit pas case sensitive.

    Collections.sort(theList, String.CASE_INSENSITIVE_ORDER);

Ici l'ArrayList est bien sur theList.

mardi 12 juin 2012

Code dump : regex utile

Regex

J'ai toujours besoin d'expression reguliere (regex) dans le devellopement web, voici donc les plus utile :

Nom et prénom Français (accents, tirets, espace et lettre) :

^([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ\s-]{1,30})$

Adresses avec numero de rue :

^([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ0-9\s-]{1,100})$

Code postaux (5 chiffres)

^[0-9]{5}$

Numeros de telephone :

^[0-9]{10}$

Email

^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$

Accepter une regex ou une String vide :

Rajouter |^$ a la regex

Nombre a virgule:

^[0-9]*.?[0-9]+$


http://www.vogella.com/articles/JavaRegularExpressions/article.html