Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * #%L
   * Wikitty :: api
   * %%
   * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
   * %%
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as 
   * published by the Free Software Foundation, either version 3 of the 
  * License, or (at your option) any later version.
  * 
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Lesser Public License for more details.
  * 
  * You should have received a copy of the GNU General Lesser Public 
  * License along with this program.  If not, see
  * <http://www.gnu.org/licenses/lgpl-3.0.html>.
  * #L%
  */
 package org.nuiton.wikitty.addons;
 
 import java.util.Map;
WikittyI18n permet de gerer les traductions des champs des extensions.

Author(s):
poussin
Version:
$Revision$ Last update: $Date$ by : $Author$
 
 public class WikittyI18nImpl extends WikittyI18nAbstract
         implements PropertyChangeListener {
 
     private static final long serialVersionUID = 3824481585361443459L;

    
to use log facility, just put in your code: log.info(\"...\");
 
     static private Log log = LogFactory.getLog(WikittyI18nImpl.class);

    
contient les translations sous une forme plus simple a utiliser
 
     transient protected Map<StringMap<StringString>> translationsCache = null;

    
WikittyI18nImpl :
 
     public WikittyI18nImpl() {
         super();
     }

    
WikittyI18nImpl :

Parameters:
wikitty
 
     public WikittyI18nImpl(Wikitty wikitty) {
         super(wikitty);
     }

    
WikittyI18nImpl :

Parameters:
businessEntityWikitty
 
     public WikittyI18nImpl(BusinessEntityImpl businessEntityWikitty) {
         super(businessEntityWikitty.getWikitty());
     }

    
WikittyAuthorisationImpl :

Parameters:
extension
wikitty
 
 
     public WikittyI18nImpl(WikittyExtension extensionWikitty wikitty) {
         this(wikitty);
         setExtensionForMetaExtension(extension);
     }

    
On surcharge la methode pour se mettre listener des modifications de translation pour pouvoir vider le cache de translation

Parameters:
wikitty
 
     @Override
     public void setWikitty(Wikitty wikitty) {
         if (this. != null) {
             this..removePropertyChangeListener(
                     this);
        }
        super.setWikitty(wikitty);
        if (this. != null) {
            this..addPropertyChangeListener(
                    this);
        }
    }

    
Retourne la translation pour un champs donne pour une lang donnee

Parameters:
lang la langue souhaitee (ex: fr)
field le champs souhaite (ex: name)
Returns:
la traduction
    @Override
    public String getTranslation(String langString field) {
        parseAndCacheTranslations();
        String result = null;
        // If cache is null, no translation is availlable
        if ( != null) {
            Map<StringStringl = .get(lang);
            if (l != null) {
                result = l.get(field);
            }
        }
        if (result == null) {
            // no translation for this field, default return field in parameter
            result = field;
        }
        return result;
    }

    
Modifie la traduction d'un champs

Parameters:
lang
field
trad
    @Override
    public void setTranslation(String langString fieldString trad) {
        parseAndCacheTranslations();
        putInTranslationCache(langfieldtrad);
        // on sauve temporairement le cache, car il va etre supprime
        // suite au setTranslations, vu qu'il est a jour se serait dommage de
        // devoir le reconstruire
        Map<StringMap<StringString>> tmp = ;
        String trans = convertToString(tmp);
        setTranslations(trans);
        // remet le cache sauvegarde en place
         = tmp;
        // on indique que la lang a des traductions si besoin
        if (getLang() == null || !getLang().contains(lang)) {
            addLang(lang);
        }
    }

    
Parse les traductions et le met en cache Translations est de la forme: [fr:"name"="nom","firstname"="prenom"],[en:"name="name","firstname"="firstname"]
    protected void parseAndCacheTranslations() {
        if ( == null) {
        String trans = getTranslations();
            String[] langsFields = StringUtil.split(trans",");
            for (String langFields : langsFields) {
                // suppression des [ ]
                langFields = langFields.substring(1, langFields.length() - 1);
                int colonPos = langFields.indexOf(":");
                // recuperation de la langue
                String lang = langFields.substring(0, colonPos);
                langFields = langFields.substring(colonPos + 1);
                String[] fields = StringUtil.split(langFields",");
                for (String field : fields) {
                    String[] fieldNameAndTrad = StringUtil.split(field"=");
                    String fieldName = fieldNameAndTrad[0];
                    String fieldTrad = fieldNameAndTrad[1];
                    // suppression des "
                    fieldName = fieldName.substring(1, fieldName.length() - 1);
                    fieldTrad = fieldTrad.substring(1, fieldTrad.length() - 1);
                    putInTranslationCache(langfieldNamefieldTrad);
                }
            }
        }
    }

    
met un traduction en plus dans le cache

Parameters:
lang
field
trans
    protected void putInTranslationCache(String langString fieldString trans) {
        if ( == null) {
             = new HashMap<StringMap<StringString>>();
        }
        Map<StringStringl = .get(lang);
        if (l == null) {
            l = new HashMap<StringString>();
            .put(langl);
        }
        l.put(fieldtrans);
    }

    
converti le cache dans une representation string

Parameters:
trans
Returns:
    protected String convertToString(Map<StringMap<StringString>> trans) {
        StringBuilder result = new StringBuilder();
        for (Map.Entry<StringMap<StringString>> l : trans.entrySet()) {
            String lang = l.getKey();
            result.append("[" + lang + ":");
            for(Map.Entry<StringStringt : l.getValue().entrySet()) {
                result.append("\"" + t.getKey() + "\"=\"" + t.getValue() + "\",");
            }
            // suppression de la derniere ,
            if (result.charAt(result.length() - 1) == ',') {
                result.deleteCharAt(result.length() - 1);
            }
            result.append("],");
        }
        if (result.charAt(result.length() - 1) == ',') {
            result.deleteCharAt(result.length() - 1);
        }
        return result.toString();
    }

    
Ecoute les events pour devalider le cache

Parameters:
evt
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        String propName = evt.getPropertyName();
        if (.equals(propName)) {
            // la valeur a change on vide le cache
             = null;
        }
    }
//WikittyI18nImpl
New to GrepCode? Check out our FAQ X