Rev 172 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;import java.util.Iterator;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.ListeReferentielCommune;import org.tela_botanica.client.modeles.ListeReferentielNom;import org.tela_botanica.client.modeles.Observation;import org.tela_botanica.client.modeles.ReferentielCommune;import org.tela_botanica.client.modeles.ReferentielNom;import org.tela_botanica.client.observation.ObservationMediateur;import com.google.gwt.user.client.Window;import com.gwtext.client.core.EventCallback;import com.gwtext.client.core.EventObject;import com.gwtext.client.core.ListenerConfig;import com.gwtext.client.core.Position;import com.gwtext.client.data.ArrayReader;import com.gwtext.client.data.FieldDef;import com.gwtext.client.data.MemoryProxy;import com.gwtext.client.data.RecordDef;import com.gwtext.client.data.SimpleStore;import com.gwtext.client.data.Store;import com.gwtext.client.data.StringFieldDef;import com.gwtext.client.widgets.BoxComponent;import com.gwtext.client.widgets.Button;import com.gwtext.client.widgets.Component;import com.gwtext.client.widgets.Container;import com.gwtext.client.widgets.Panel;import com.gwtext.client.widgets.Toolbar;import com.gwtext.client.widgets.event.BoxComponentListener;import com.gwtext.client.widgets.event.BoxComponentListenerAdapter;import com.gwtext.client.widgets.event.ButtonListenerAdapter;import com.gwtext.client.widgets.event.ContainerListenerAdapter;import com.gwtext.client.widgets.form.ComboBox;import com.gwtext.client.widgets.form.DateField;import com.gwtext.client.widgets.form.FormPanel;import com.gwtext.client.widgets.form.TextArea;import com.gwtext.client.widgets.form.TextField;import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;import com.gwtext.client.widgets.layout.ColumnLayout;import com.gwtext.client.widgets.layout.ColumnLayoutData;import com.gwtext.client.widgets.layout.FormLayout;import com.gwtext.client.data.Record;/*** Panneau contenant les infos, les métadonnées et l'arbre des mots clés, il implémente l'interface rafraichissable* @author aurelien**/public class FormulaireSaisieObservationVue extends Panel implements Rafraichissable {/*** Le médiateur associé à la vue*/private ObservationMediateur observationMediateur = null;private DateField date = null;private TextField lieudit = null;private TextField station = null;private TextField milieu = null;private TextField comment = null;private ComboBox commune = null;private String departement = null;private ComboBox espece = null;private String numeroNom = null;private String numeroOrdre = null;// Pour remise a zero partielle lors d'une validationprivate enum Champs {DATE, LIEUDIT, STATION, MILIEU, COMMENT, COMMUNE, ESPECE, TOUT};private String formatDate = null ;private Button boutonOK = new Button("Créer");private Button boutonAnnuler = new Button("Réinitialiser");private boolean selectionCommune=false;private boolean selectionEspece=false;private boolean modification = false ;private Toolbar bt = null ;private final int KEY_ALT = 18;private final int KEY_BACKSPACE = 8;private final int KEY_CTRL = 17;private final int KEY_DELETE = 46;private final int KEY_DOWN = 40;private final int KEY_END = 35;private final int KEY_ENTER = 13;private final int KEY_ESCAPE = 27;private final int KEY_HOME = 36;private final int KEY_LEFT = 37;private final int KEY_PAGEDOWN = 34;private final int KEY_PAGEUP = 33;private final int KEY_RIGHT = 39;private final int KEY_SHIFT = 16;private final int KEY_TAB = 9;private final int KEY_UP = 38;private int tailleChamps = 350 ;/*** Combobox permettant de selectionner le mode* modification ou bien création*/private ComboBox selecteurMode = new ComboBox();Store storeMode = null ;/*** Booleen d'instanciation*/boolean estInstancie = false ;/*** Constructeur sans argument (privé car ne doit pas être utilisé)*/@SuppressWarnings("unused")private FormulaireSaisieObservationVue(){super() ;}/*** Constructeur avec argument* @param im*/public FormulaireSaisieObservationVue(ObservationMediateur obs){// on associe le médiateurobservationMediateur = obs ;setHeader(true);FormPanel panneauFormulaire = new FormPanel(Position.RIGHT);panneauFormulaire.setBorder(false);// Panneau intermediaire qui contient deux colonnes de formulairePanel panneauIntermediaire = new Panel();panneauIntermediaire.setLayout(new ColumnLayout());panneauIntermediaire.setBorder(false);//create first panel and add fields to itPanel panneauPremierColonne = new Panel();panneauPremierColonne.setLayout(new FormLayout());panneauPremierColonne.setBorder(false);//create second panel and add fields to itPanel panneauSecondeColonne = new Panel();panneauSecondeColonne.setLayout(new FormLayout());panneauSecondeColonne.setBorder(false);this.setPaddings(5) ;commune=new ComboBox("Commune","commune",tailleChamps );final String resultTplCommune = "<div class=\"search-item-commune\">{commune}</div>";commune.setTpl(resultTplCommune);commune.setMode(ComboBox.REMOTE);// commune.setPageSize(10); // Ne fonctionne pascommune.setItemSelector("div.search-item-commune");commune.setTypeAhead(true);commune.setLoadingText("Recherche...");commune.setHideTrigger(true);commune.setTabIndex(1);panneauPremierColonne.add(commune);station = new TextField("Station", "station", tailleChamps);station.setAllowBlank(true);station.setTabIndex(3);panneauPremierColonne.add(station);date = new DateField("Date", "date", 100);date.setAllowBlank(true);formatDate = "d/m/Y";date.setFormat(formatDate) ;date.setTabIndex(5);panneauPremierColonne.add(date);espece=new ComboBox("Espèce","nom",tailleChamps );final String resultTplEspece = "<div class=\"search-item-espece\">{nom}</div>";espece.setTpl(resultTplEspece);espece.setMode(ComboBox.REMOTE);// commune.setPageSize(10); // Ne fonctionne pasespece.setItemSelector("div.search-item-espece");espece.setTypeAhead(true);espece.setLoadingText("Recherche...");espece.setHideTrigger(true);espece.setTabIndex(6);panneauPremierColonne.add(espece);lieudit = new TextField("Lieu-dit", "lieudit", tailleChamps);lieudit.setAllowBlank(true);lieudit.setTabIndex(2);panneauSecondeColonne.add(lieudit);milieu = new TextField("Milieu", "milieu", tailleChamps);milieu.setAllowBlank(true);milieu.setTabIndex(4);panneauSecondeColonne.add(milieu);comment = new TextArea("Notes", "comment");comment.setAllowBlank(true);comment.setHeight(50);comment.setWidth(tailleChamps);comment.setTabIndex(7);panneauSecondeColonne.add(comment);panneauIntermediaire.add(panneauPremierColonne, new ColumnLayoutData(.5));panneauIntermediaire.add(panneauSecondeColonne, new ColumnLayoutData(.5));panneauFormulaire.add(panneauIntermediaire);Object[][] mode = {{"création",false} , {"modification", true} };storeMode = new SimpleStore(new String[] { "nom_mode", "mode" },mode);storeMode.load();selecteurMode.setStore(storeMode);selecteurMode.setDisplayField("nom_mode") ;selecteurMode.setLabel("mode ") ;selecteurMode.setForceSelection(true) ;selecteurMode.setValue("création") ;selecteurMode.setEditable(false) ;selecteurMode.setCls("x-selec-crea") ;bt = new Toolbar() ;bt.addSpacer() ;bt.addText("Mode de saisie ") ;bt.addField(selecteurMode) ;boutonOK.setTabIndex(8);boutonAnnuler.setTabIndex(9);panneauFormulaire.addButton(boutonOK);panneauFormulaire.addButton(boutonAnnuler);selecteurMode.addListener(new ComboBoxListenerAdapter() {public void onSelect(ComboBox comboBox, Record record, int index) {// et on met la valeur à jour dans la comboboxcomboBox.setValue(record.getAsString("nom_mode"));setModification(record.getAsString("mode")) ;}});this.add(panneauFormulaire) ;this.setTopToolbar(bt) ;this.setAutoScroll(true);//this.setAutoHeight(true);// on ajoute les listenersajouterListeners() ;}private void ajouterListeners(){// Listener completion communnecommune.addListener(new ComboBoxListenerAdapter() {public void onSelect(ComboBox comboBox, Record record, int index) {commune.setValue(record.getAsString("commune"));departement=record.getAsString("departement");selectionCommune=true;}});ListenerConfig listenerConfigCommune=new ListenerConfig();listenerConfigCommune.setDelay(10);listenerConfigCommune.setStopPropagation(false);listenerConfigCommune.setStopEvent(false);commune.addKeyPressListener(new EventCallback() {public void execute(EventObject e) {switch(e.getKey()) {case KEY_ALT:case KEY_CTRL:case KEY_DOWN:case KEY_END:case KEY_ESCAPE:case KEY_HOME:case KEY_LEFT:case KEY_PAGEDOWN:case KEY_PAGEUP:case KEY_RIGHT:case KEY_SHIFT:case KEY_TAB:case KEY_UP:break;case KEY_ENTER:if (selectionCommune) {selectionCommune=false;}else {validerSaisie(Champs.COMMUNE);// lancer mise a jour}break;default:departement="";obtenirListeReferentielCommune();break;}}}, listenerConfigCommune);date.addKeyPressListener(new EventCallback() {public void execute(EventObject e) {// TODO Auto-generated method stubswitch(e.getKey()) {case KEY_ENTER:validerSaisie(Champs.DATE);break;default:}}});station.addKeyPressListener(new EventCallback() {public void execute(EventObject e) {// TODO Auto-generated method stubswitch(e.getKey()) {case KEY_ENTER:validerSaisie(Champs.STATION);break;default:}}});// Listener completion especeespece.addListener(new ComboBoxListenerAdapter() {public void onSelect(ComboBox comboBox, Record record, int index) {espece.setValue(record.getAsString("nom"));numeroNom=record.getAsString("numeroNom");selectionEspece=true;observationMediateur.obtenirImageInformationExternes(numeroNom);}});ListenerConfig listenerConfigEspece=new ListenerConfig();listenerConfigEspece.setDelay(10);listenerConfigEspece.setStopPropagation(false);listenerConfigEspece.setStopEvent(false);espece.addKeyPressListener(new EventCallback() {public void execute(EventObject e) {switch(e.getKey()) {case KEY_ALT:case KEY_CTRL:case KEY_DOWN:case KEY_END:case KEY_ESCAPE:case KEY_HOME:case KEY_LEFT:case KEY_PAGEDOWN:case KEY_PAGEUP:case KEY_RIGHT:case KEY_SHIFT:case KEY_TAB:case KEY_UP:break;case KEY_ENTER:if(selectionEspece) {selectionEspece=false;}else {validerSaisie(Champs.ESPECE);}break;default:numeroNom="";obtenirListeReferentielNom();break;}}}, listenerConfigEspece);lieudit.addKeyPressListener(new EventCallback() {public void execute(EventObject e) {// TODO Auto-generated method stubswitch(e.getKey()) {case KEY_ENTER:validerSaisie(Champs.LIEUDIT);break;default:}}});milieu.addKeyPressListener(new EventCallback() {public void execute(EventObject e) {// TODO Auto-generated method stubswitch(e.getKey()) {case KEY_ENTER:validerSaisie(Champs.MILIEU);break;default:}}});/*comment.addKeyPressListener(new EventCallback() {public void execute(EventObject e) {// TODO Auto-generated method stubswitch(e.getKey()) {case KEY_ENTER:validerSaisie(Champs.COMMENT);break;default:}}});*/boutonOK.addListener(new ButtonListenerAdapter() {public void onClick(Button button, EventObject e) {if(modification) {modifierObservation() ;}else {ajouterObservation();}}});boutonAnnuler.addListener(new ButtonListenerAdapter() {public void onClick(Button button, EventObject e) {if(modification){supprimerObservation() ;}else{raz();}}});this.addListener(new ContainerListenerAdapter() {public void onAfterLayout(Container self) {ajusterTailleChamps();commune.focus();}});this.addListener(new BoxComponentListenerAdapter() {public void onResize(BoxComponent component, int adjWidth, int adjHeight, int rawWidth, int rawHeight) {ajusterTailleChamps();}});}/*** Validation de la saisie*/private void validerSaisie(Champs champs) {if(modification) {modifierObservation() ;}else {ajouterObservation();raz(champs);}}/*** Desactive visuellement ce panneau*/public void desactiverPanneau(){this.setDisabled(true) ;}/*** Active visuellement ce panneau*/public void activerPanneau(){this.setDisabled(false) ;}public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {// si l'on a reçu une liste du referentiel commune (completion referentiel commune)if(nouvelleDonnees instanceof ListeReferentielCommune){ListeReferentielCommune data = (ListeReferentielCommune) nouvelleDonnees ;Object[][] communeData = new Object[data.size()][2];int i = 0 ;// on la parse et on récupère les informations quiç nous interessentfor (Iterator it = data.keySet().iterator(); it.hasNext();){ReferentielCommune ref=(ReferentielCommune) data.get(it.next());communeData[i][0]= ref.getCommune();communeData[i][1]= ref.getDepartement();i++ ;}// creation du storeFieldDef defCommune = new StringFieldDef("commune");FieldDef defDepartement = new StringFieldDef("departement");FieldDef[] defTab = { defCommune, defDepartement};RecordDef rd = new RecordDef(defTab);final MemoryProxy dataProxy = new MemoryProxy(communeData);final ArrayReader reader = new ArrayReader(rd);Store store=new Store(dataProxy,reader);store.load() ;commune.setStore(store);}// si l'on a reçu une liste du référentiel nom (complétion referentiel nom)if(nouvelleDonnees instanceof ListeReferentielNom){ListeReferentielNom data = (ListeReferentielNom) nouvelleDonnees ;Object[][] nomData = new Object[data.size()][2];int i = 0 ;// on la parse et on récupère les informations quiç nous interessentfor (Iterator it = data.keySet().iterator(); it.hasNext();){ReferentielNom ref=(ReferentielNom) data.get(it.next());nomData[i][0]= ref.getNom();nomData[i][1]= ref.getNumeroNom();i++ ;}// creation du storeFieldDef defNom = new StringFieldDef("nom");FieldDef defNumeroNom = new StringFieldDef("numeroNom");FieldDef[] defTab = { defNom, defNumeroNom};RecordDef rd = new RecordDef(defTab);final MemoryProxy dataProxy = new MemoryProxy(nomData);final ArrayReader reader = new ArrayReader(rd);Store store=new Store(dataProxy,reader);store.load() ;espece.setStore(store);}// On recoit une observation dont on veut afficher le detailif(nouvelleDonnees instanceof Observation){Observation obs = (Observation)nouvelleDonnees ;afficherDetailsObservation(obs) ;}// Sur Mise à jour ou suppression d'une suppression ?if(nouvelleDonnees instanceof String){String str = (String)nouvelleDonnees ;observationMediateur.obtenirNombreObservation() ;}if(nouvelleDonnees instanceof String[]) {String[] anumNom = (String[])nouvelleDonnees ;numeroNom = anumNom[1];espece.setValue(anumNom[0]);setModification("false");}}public void obtenirListeReferentielCommune() {String com=commune.getText().replaceAll(" ","/");com=com.replaceAll("%","");observationMediateur.obtenirListeReferentielCommune(this,com);}public void obtenirListeReferentielNom() {String esp=espece.getText().replaceAll(" ","/");esp=esp.replaceAll("%","");observationMediateur.obtenirListeReferentielNom(this,esp);}public void ajouterObservation() {if(departement.equals("000null") || departement.equals("")) {String[] depCom = commune.getText().split(" ");if(depCom.length > 1) {String dep = depCom[1].replace('(', ' ');dep =dep.replace(')', ' ');dep = dep.trim();dep = dep.replace('\\',' ');dep = dep.trim();try{int nDep = Integer.parseInt(dep);if(nDep > 0 && nDep < 110) {departement = dep ;}}catch(NumberFormatException e){departement = "" ;}}}Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),date.getRawValue());observationMediateur.ajouterObservation(obs);}private void modifierObservation() {Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),date.getRawValue());obs.setNumeroOrdre(numeroOrdre);observationMediateur.modifierObservation(obs);}private void supprimerObservation() {observationMediateur.supprimerObservation(this, numeroOrdre);}public void afficherDetailsObservation(Observation obs){raz() ;char g ;String idLoc =obs.getIdentifiantLocalite().replaceAll(" ","/");idLoc = idLoc.replaceAll("%","");idLoc = idLoc.replaceAll("\"","");idLoc = idLoc.replace('\\',' ');idLoc = idLoc.trim();if(!obs.getDate().equals("null") && !obs.getDate().equals("000null")) {String[] dateEtHeure = obs.getDate().split(" ", 2);if(verifierFormatDate(dateEtHeure[0])) {date.setValue(dateEtHeure[0]) ;}else{date.setRawValue("");}}if(!obs.getLieudit().equals("null") && !obs.getLieudit().equals("000null")) {lieudit.setValue(obs.getLieudit()) ;}if(!obs.getStation().equals("null") && !obs.getStation().equals("000null")) {station.setValue(obs.getStation()) ;}if(!obs.getMilieu().equals("null") && !obs.getMilieu().equals("000null")) {milieu.setValue(obs.getMilieu()) ;}if(!obs.getCommentaire().equals("null") && !obs.getCommentaire().equals("000null")) {comment.setValue(obs.getCommentaire()) ;}if(!obs.getLocalite().equals("null") && !obs.getLocalite().equals("000null")) {if(!idLoc.equals("000null")) {commune.setValue(obs.getLocalite()+" ("+idLoc+")") ;}else{commune.setValue(obs.getLocalite());}}if(!obs.getIdentifiantLocalite().equals("null") && !obs.getIdentifiantLocalite().equals("000null")) {departement = idLoc;}if(!obs.getNomSaisi().equals("null") && !obs.getNomSaisi().equals("000null")) {espece.setValue(obs.getNomSaisi()) ;}if(!obs.getNumeroNomenclaturalSaisi().equals("null") && !obs.getNumeroNomenclaturalSaisi().equals("000null")) {numeroNom = obs.getNumeroNomenclaturalSaisi() ;}if(!obs.getNumeroOrdre().equals("null") && !obs.getNumeroOrdre().equals("000nu2ll")) {numeroOrdre = obs.getNumeroOrdre() ;}}public void raz(){raz(Champs.TOUT);}public void raz(Champs champs){switch (champs) {case DATE:date.reset() ;break;case LIEUDIT:lieudit.reset() ;break;case STATION:station.reset() ;break;case MILIEU:milieu.reset() ;break;case COMMENT:comment.reset() ;break;case COMMUNE:commune.reset() ;departement ="";break;case ESPECE:espece.reset();numeroNom = "" ;numeroOrdre = "";break;case TOUT:commune.reset();date.reset() ;lieudit.reset() ;station.reset() ;milieu.reset() ;comment.reset() ;milieu.reset() ;departement ="";espece.reset();numeroNom = "" ;numeroOrdre = "";break;}}private void setModification(String mode){if(mode.equals("true")) {boutonOK.setText("Modifier") ;setTitle("Modification") ;boutonAnnuler.setText("Supprimer") ;modification = true ;selecteurMode.removeClass("x-selec-crea") ;selecteurMode.setCls("x-selec-modif") ;}else{boutonOK.setText("Ajouter") ;setTitle("Saisir") ;boutonAnnuler.setText("Réinitialiser") ;modification = false ;selecteurMode.removeClass("x-selec-modif") ;selecteurMode.setCls("x-selec-crea") ;}}/*** renvoie vrai si on est en mode modification, faux si on est en mode création* @return*/public boolean getModification(){return modification ;}public boolean verifierFormatDate(String date) {String regex = "[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}" ;if(date.matches(regex) && !date.equals("0000-00-00")) {return true ;}else {return false;}}private void ajusterTailleChamps() {int tailleChamps = (this.getInnerWidth()/100)*40;this.tailleChamps = tailleChamps ;commune.setWidth(tailleChamps);station.setWidth(tailleChamps);espece.setWidth(tailleChamps);lieudit.setWidth(tailleChamps);milieu.setWidth(tailleChamps);comment.setWidth(tailleChamps);}}