Rev 1896 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.modeles.publication;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.modeles.structure.Structure;
import org.tela_botanica.client.util.UtilNombre;
import org.tela_botanica.client.util.UtilString;
import com.extjs.gxt.ui.client.data.ModelData;
import com.google.gwt.json.client.JSONObject;
public class Publication extends aDonnee {
private static final long serialVersionUID = 4142843068041690126L;
public static final String PREFIXE = "cpu";
public static String[] champsObligatoires = {"cpu_id_publication"};
// Cache de valeurs pour contourner des bugs très compliqué d'affichage
public static Map<String, String> editeurs = new HashMap<String, String>();
public static Map<String, Publication> publisSaisiesModifieesCache = new HashMap<String, Publication>();
private Structure editeur = null;
public ArrayList<String> cles = null;
public Publication() {}
public Publication(boolean removePrefix) {
this.removePrefix = removePrefix;
cles = new ArrayList<String>();
cles.add("id_publication");
}
public Publication(JSONObject publication) {
initialiserModele(publication);
editeur = new Structure(publication);
cles = new ArrayList<String>();
cles.add("id_publication");
}
public Publication(ModelData model, boolean removePrefix) {
this.removePrefix = removePrefix;
editeur = new Structure(model);
cles = new ArrayList<String>();
cles.add("id_publication");
Map<String, Object> a = model.getProperties();
Set<String> cles = a.keySet();
Iterator<String> it = cles.iterator();
while (it.hasNext()) {
String cle = it.next();
if (a.get(cle) != null) {
String cleObjet = "";
if (removePrefix) {
cleObjet = cle.replaceFirst("^"+getPrefixe()+"_", "");
}
else {
cleObjet = cle;
String valeur = "";
if (a.get(cle) instanceof Integer) {
valeur = String.valueOf(a.get(cle));
} else if (a.get(cle) instanceof String) {
valeur = (String) a.get(cle);
}
traiterClesEtrangeres(cle, valeur);
}
this.set(cleObjet, a.get(cle));
}
}
}
// Action
//--------
// cette méthode sert dans le cas suivant : le contructeur reçoit un object ModelData
// qui contient cpuap_id_publication mais pas cpu_id_publication ou id_publication. Sans
// la méthode ci-dessous, on aurait des problèmes. Celle-ci affecte à id_publication la
// valeur des clés étrangères rencontrées (cpuap_id_publication, cpuac_id_publication, etc.)
private void traiterClesEtrangeres(String cle, String valeur) {
// on recupere le nom de la clé de la propriété (sans son prefixe)
String nomSansPrefixe = cle.replaceFirst("^[a-zA-Z]+_", "");
// on regarde si cette clé est une clé primaire de la table Publication
if (cles.contains(nomSansPrefixe)) {
// si c'est le cas et que la valeur est non nulle
if (valeur != null && !UtilString.isEmpty(valeur)) {
// on affecte la valeur de la clés étrangère à la clé primaire
if (removePrefix) {
this.set(nomSansPrefixe, valeur);
} else {
this.set(getPrefixe()+"_"+nomSansPrefixe, valeur);
}
}
}
}
protected String getPrefixe() {
return PREFIXE;
}
protected String[] getChampsObligatoires() {
return champsObligatoires;
}
public void setStructureEditeur(Structure structure) {
editeur = structure;
}
public String getId() {
return renvoyerValeurCorrecte("id_publication");
}
public void setId(String idPublication) {
setValeurCorrecte("id_publication", idPublication);
}
public String getNomComplet() {
return renvoyerValeurCorrecte("fmt_nom_complet");
}
public void setNomComplet(String nomComplet) {
setValeurCorrecte("fmt_nom_complet", nomComplet);
}
public String getURI() {
return renvoyerValeurCorrecte("uri");
}
public void setUri(String uri) {
setValeurCorrecte("uri", uri);
}
public String getAuteur() {
return renvoyerValeurCorrecte("fmt_auteur");
}
public void setAuteur(String auteurFormate) {
setValeurCorrecte("fmt_auteur", auteurFormate);
}
public String getCollection() {
return renvoyerValeurCorrecte("collection");
}
public void setCollection(String collection) {
setValeurCorrecte("collection", collection);
}
public String getTitre() {
return renvoyerValeurCorrecte("titre");
}
public void setTitre(String titre) {
setValeurCorrecte("titre", UtilString.ucFirst(titre));
}
public String getNomEditeur() {
// Pour éviter de planter l'application
// on tente de prendre l'éditeur où il est disponible
String editeurNom = getEditeur();
if (UtilNombre.estUnNombre(editeurNom) || editeurNom.isEmpty()) {
if(editeur != null && !editeur.getNom().isEmpty()) {
editeurs.put(editeurNom, editeur.getNom());
editeurNom = editeur.getNom();
} else {
editeurNom = editeurs.get(editeurNom) != null ? editeurs.get(editeurNom) : "";
}
}
return editeurNom;
}
public String getEditeur() {
return getChaineDenormaliseUnique("ce_truk_editeur");
}
public void setEditeur(String editeur) {
setChaineDenormaliseUnique("ce_truk_editeur", "AUTRE", editeur);
}
public String getAnneeParution() {
String annee = "";
String dateParution = this.getDateParution();
if (dateParution.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {// AAAA-MM-JJ
annee = dateParution.split("-")[0];
} else if (dateParution.matches("^[0-2][0-9]{3}-[0-2][0-9]{3}$")) {// AAAA-AAAA
annee = dateParution;
} else if (dateParution.matches("^[0-2][0-9]{3}$")) {// AAAA
annee = dateParution;
} else {
annee = "";
}
return annee;
}
public void setAnneeParution(String annee) {
if (annee.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {// AAAA-MM-JJ
this.setDateParution(annee);
} else if (annee.matches("^[0-2][0-9]{3}-[0-2][0-9]{3}$")) {// AAAA-AAAA
this.setDateParution(annee);
} else if (annee.matches("^[0-2][0-9]{3}$")) {// AAAA
this.setDateParution(annee);
} else {
this.setDateParution("");
}
}
public static boolean etreAnneeParutionValide(String annee) {
boolean valide = false;
if (annee.matches("^[0-2][0-9]{3}$")) {// AAAA
valide = true;
} else if (annee.matches("^[0-2][0-9]{3}-[0-2][0-9]{3}$")) {// AAAA-AAAA
valide = true;
}
return valide;
}
public String getDateParution() {
return renvoyerValeurCorrecte("date_parution");
}
public void setDateParution(String date) {
setValeurCorrecte("date_parution", date);
}
public String getIndicationNvt() {
return renvoyerValeurCorrecte("indication_nvt");
}
public void setIndicationNvt(String nvt) {
setValeurCorrecte("indication_nvt", nvt);
}
public String getFascicule() {
return renvoyerValeurCorrecte("fascicule");
}
public void setFascicule(String fascicule) {
setValeurCorrecte("fascicule", fascicule);
}
public String getPages() {
return renvoyerValeurCorrecte("truk_pages");
}
public void setPages(String pages) {
setValeurCorrecte("truk_pages", pages);
}
}