Package org.apache.jetspeed.om.impl

Source Code of org.apache.jetspeed.om.impl.LanguageSetImpl

/*
* Copyright 2000-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jetspeed.om.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.apache.jetspeed.om.common.MutableLanguage;
import org.apache.jetspeed.om.common.Support;
import org.apache.jetspeed.util.JetspeedLocale;
import org.apache.pluto.om.common.Language;
import org.apache.pluto.om.common.LanguageSet;

/**
*
* LanguageSetImpl
*
* @author <a href="mailto:weaver@apache.org">Scott T. Weaver </a>
* @author <a href="mailto:ate@douma.nu">Ate Douma</a>
* @version $Id: LanguageSetImpl.java 482818 2006-12-05 22:54:14Z taylor $
*/
public class LanguageSetImpl implements LanguageSet, Serializable, Support
{
    private ClassLoader classLoader = null;

    private String resources;
    protected Collection innerCollection;

    /**
     *
     * @param wrappedSet
     */
    public LanguageSetImpl( Collection collection )
    {
        super();
        this.innerCollection = collection;
    }

    public LanguageSetImpl()
    {       
        this(Collections.synchronizedList(new ArrayList()));
    }

    /**
     * @see org.apache.pluto.om.common.LanguageSet#iterator()
     */
    public Iterator iterator()
    {
        return innerCollection.iterator();
    }

    /**
     * @see org.apache.pluto.om.common.LanguageSet#getLocales()
     */
    public Iterator getLocales()
    {
        HashSet localSet = new HashSet();
        synchronized (innerCollection)
        {
            Iterator itr = innerCollection.iterator();
            while (itr.hasNext())
            {
                Language lang = (Language) itr.next();
                localSet.add(lang.getLocale());
            }
        }
        return localSet.iterator();
    }

    /**
     * @see org.apache.pluto.om.common.LanguageSet#get(java.util.Locale)
     */
    public Language get( Locale locale )
    {
        LanguageImpl fallback = null;
        synchronized(innerCollection)
        {
            Iterator searchItr = innerCollection.iterator();
            while (searchItr.hasNext())
            {
                LanguageImpl lang = (LanguageImpl)searchItr.next();
   
                if (lang.getLocale().equals(locale))
                {
                    if (resources != null && lang.getParentResourceBundle() == null)
                    {
                        lang.setResourceBundle(loadResourceBundle(lang.getLocale()));
                    }
                    return lang;
                }
                else if (lang.getLocale().getLanguage().equals(locale.getLanguage()))
                {
                    fallback = lang;
                }
   
            }
        }
        if ( fallback == null )
        {
            if ( getDefaultLocale().equals(locale) )
            {
                // no default language stored yet
                LanguageImpl defaultLanguage = new LanguageImpl();
                defaultLanguage.setLocale(locale);
               
                if ( resources != null )
                {
                    defaultLanguage.setResourceBundle(loadResourceBundle(locale));
                    defaultLanguage.loadDefaults();
                    innerCollection.add(defaultLanguage);
                    return defaultLanguage;
                }
            }
            else
            {
                fallback = (LanguageImpl)get(getDefaultLocale());
            }
        }
       
        LanguageImpl language = new LanguageImpl();
        language.setLocale(locale);
        language.setTitle(fallback.getTitle());
        language.setShortTitle(fallback.getShortTitle());
        language.setKeywords(fallback.getKeywordStr());
        if ( resources != null )
        {
          language.setResourceBundle(loadResourceBundle(locale));
        }
        language.loadDefaults();
        innerCollection.add(language);
        return language;
    }

    /**
     * @see org.apache.pluto.om.common.LanguageSet#getDefaultLocale()
     */
    public Locale getDefaultLocale()
    {       
        return JetspeedLocale.getDefaultLocale();
    }

    public boolean add( Object o )
    {
        if (o instanceof Language)
        {
            Language language = (Language) o;
            if (language.getLocale() == null)
            {
                ((MutableLanguage) o).setLocale(getDefaultLocale());
            }

            synchronized (innerCollection)
            {
                Iterator ite = innerCollection.iterator();
                while (ite.hasNext())
                {
                    Language lang = (Language) ite.next();
                    if (lang.equals(language))
                    {
                        innerCollection.remove(lang);
                        return innerCollection.add(o);
                    }
                }
            }
            return innerCollection.add(o);
        }
        return false;
    }

    /**
     * @return
     */
    public Collection getInnerCollection()
    {
        return innerCollection;
    }

    /**
     * @param collection
     */
    public void setInnerCollection( Collection collection )
    {
        innerCollection = collection;
    }

    public int size()
    {
        return innerCollection.size();
    }

    /**
     * @param string
     */
    public void setResources( String string )
    {
        resources = string;
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.jetspeed.om.common.Support#postLoad(java.lang.Object)
     */
    public void postLoad( Object parameter ) throws Exception
    {
        Iterator iter = ((Collection) parameter).iterator();
        LanguageImpl language;
        while (iter.hasNext())
        {
            language = (LanguageImpl)get((Locale)iter.next());
            // load available resource bundle values
            language.loadDefaults();
        }
        // ensure default locale language is created and available resource bundle values are loaded
        language = (LanguageImpl)get(getDefaultLocale());
        language.loadDefaults();
    }

    protected ResourceBundle loadResourceBundle( Locale locale )
    {
        ResourceBundle resourceBundle = null;
        try
        {
            if (resources != null)
            {
                if (classLoader != null)
                {
                    resourceBundle = ResourceBundle.getBundle(resources, locale, classLoader);
                }
                else
                {
                    resourceBundle = ResourceBundle.getBundle(resources, locale, Thread.currentThread()
                            .getContextClassLoader());
                }
            }
        }
        catch (MissingResourceException x)
        {
            return null;
        }
        return resourceBundle;
    }

    /**
     *
     * Sets Portlet Class Loader
     *
     * @param loader
     */
    public void setClassLoader( ClassLoader loader )
    {
        classLoader = loader;
    }
}
TOP

Related Classes of org.apache.jetspeed.om.impl.LanguageSetImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.