/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/
package org.infoglue.deliver.controllers.kernel.impl.simple;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import org.apache.log4j.Logger;
import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.OQLQuery;
import org.exolab.castor.jdo.QueryResults;
import org.infoglue.cms.controllers.kernel.impl.simple.LanguageController;
import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeController;
import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeVersionController;
import org.infoglue.cms.entities.content.ContentVO;
import org.infoglue.cms.entities.content.ContentVersionVO;
import org.infoglue.cms.entities.management.Language;
import org.infoglue.cms.entities.management.LanguageVO;
import org.infoglue.cms.entities.management.Repository;
import org.infoglue.cms.entities.management.RepositoryLanguage;
import org.infoglue.cms.entities.management.impl.simple.LanguageImpl;
import org.infoglue.cms.entities.structure.SiteNode;
import org.infoglue.cms.entities.structure.SiteNodeVO;
import org.infoglue.cms.entities.structure.SiteNodeVersionVO;
import org.infoglue.cms.entities.structure.impl.simple.SiteNodeImpl;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.util.CmsPropertyHandler;
import org.infoglue.deliver.applications.databeans.DeliveryContext;
import org.infoglue.deliver.util.CacheController;
import org.infoglue.deliver.util.NullObject;
import org.infoglue.deliver.util.Timer;
public class LanguageDeliveryController extends BaseDeliveryController
{
private final static Logger logger = Logger.getLogger(LanguageDeliveryController.class.getName());
private final static LanguageDeliveryController languageDeliveryController = new LanguageDeliveryController();
/**
* Private constructor to enforce factory-use
*/
private LanguageDeliveryController()
{
}
/**
* Factory method
*/
public static LanguageDeliveryController getLanguageDeliveryController()
{
return languageDeliveryController;
}
/**
* This method return a LanguageVO
*/
public LanguageVO getLanguageVO(Database db, Integer languageId) throws SystemException, Exception
{
if(languageId == null || languageId.intValue() == 0)
return null;
String key = "" + languageId;
logger.info("key:" + key);
LanguageVO languageVO = (LanguageVO)CacheController.getCachedObject("languageCache", key);
if(languageVO != null)
{
logger.info("There was an cached languageVO:" + languageVO);
}
else
{
languageVO = LanguageController.getController().getLanguageVOWithId(languageId, db);
//Language language = (Language)getObjectWithId(LanguageImpl.class, languageId, db);
//if(language != null)
// languageVO = language.getValueObject();
CacheController.cacheObject("languageCache", key, languageVO);
}
return languageVO;
}
/**
* This method returns all languages for a certain repository.
*
* @param repositoryId
* @return
* @throws SystemException
* @throws Exception
*/
public List<LanguageVO> getAvailableLanguagesForRepository(Database db, Integer repositoryId) throws SystemException, Exception
{
String key = "" + repositoryId + "_allLanguages";
logger.info("key:" + key);
List<LanguageVO> list = (List<LanguageVO>)CacheController.getCachedObject("languageCache", key);
if(list != null)
{
logger.info("There was an cached list:" + list);
}
else
{
//Timer t = new Timer();
list = new ArrayList<LanguageVO>();
Timer t = new Timer();
String SQL = "SELECT l.languageId, l.name, l.languageCode, l.charset from cmLanguage l, cmRepositoryLanguage rl where rl.languageId = l.languageId AND rl.repositoryId = ? ORDER BY rl.sortOrder, rl.languageId";
logger.info("SQL:" + SQL);
Connection conn = (Connection) db.getJdbcConnection();
PreparedStatement psmt = conn.prepareStatement(SQL.toString());
psmt.setInt(1, repositoryId);
ResultSet rs = psmt.executeQuery();
while(rs.next())
{
LanguageVO languageVO = new LanguageVO();
languageVO.setLanguageId(new Integer(rs.getString(1)));
languageVO.setName(rs.getString(2));
languageVO.setLanguageCode(rs.getString(3));
languageVO.setCharset(rs.getString(4));
logger.info("Found:" + languageVO);
list.add(languageVO);
}
rs.close();
psmt.close();
if(logger.isInfoEnabled())
t.printElapsedTime("Pure JDBC2 took...");
/* */
/*
OQLQuery oql = db.getOQLQuery( "SELECT l FROM org.infoglue.cms.entities.management.impl.simple.LanguageImpl l WHERE l.repositoryLanguages.repository = $1 ORDER BY l.repositoryLanguages.sortOrder, l.languageId");
oql.bind(repositoryId);
QueryResults results = oql.execute(Database.READONLY);
while(results.hasMore())
{
Language language = (Language)results.next();
System.out.println("language 2:" + language.getName());
list.add(language.getValueObject());
}
results.close();
oql.close();
t.printElapsedTime("CASTOR 2 took...");
*/
if(list.size() > 0)
CacheController.cacheObject("languageCache", key, list);
}
return list;
}
/**
* This method returns the languages assigned to a respository.
*/
public List getAvailableLanguages(Database db, Integer siteNodeId) throws SystemException, Exception
{
logger.info("getAvailableLanguages for " + siteNodeId + " start.");
List languageVOList = new ArrayList();
logger.info("siteNodeId:" + siteNodeId);
//SiteNode siteNode = (SiteNode)getObjectWithId(SiteNodeImpl.class, siteNodeId, db);
SiteNodeVO siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(siteNodeId, db);
if(siteNodeVO != null)
{
List repositoryLanguages = getAvailableLanguagesForRepository(db, siteNodeVO.getRepositoryId());
if(logger.isInfoEnabled())
logger.info("repositoryLanguages:" + repositoryLanguages.size());
Iterator repositoryLanguagesIterator = repositoryLanguages.iterator();
while(repositoryLanguagesIterator.hasNext())
{
LanguageVO language = (LanguageVO)repositoryLanguagesIterator.next();
if(language != null)
{
logger.info("Adding " + language.getName() + " to the list of available languages");
languageVOList.add(language);
}
}
/*
Repository repository = siteNode.getRepository();
if(repository != null)
{
logger.info("repository:" + repository.getName());
Collection repositoryLanguages = repository.getRepositoryLanguages();
logger.info("repositoryLanguages:" + repositoryLanguages.size());
Iterator repositoryLanguagesIterator = repositoryLanguages.iterator();
while(repositoryLanguagesIterator.hasNext())
{
RepositoryLanguage repositoryLanguage = (RepositoryLanguage)repositoryLanguagesIterator.next();
Language language = repositoryLanguage.getLanguage();
if(language != null)
{
logger.info("Adding " + language.getName() + " to the list of available languages");
languageVOList.add(language.getValueObject());
}
}
}
*/
}
logger.info("getAvailableLanguages for " + siteNodeId + " end.");
return languageVOList;
}
/**
* This method returns the master language.
* todo - add attribute on repositoryLanguage to be able to sort them... and then fetch the first
*/
public LanguageVO getMasterLanguage(Database db, String repositoryName) throws SystemException, Exception
{
Language language = null;
OQLQuery oql = db.getOQLQuery( "SELECT l FROM org.infoglue.cms.entities.management.impl.simple.LanguageImpl l WHERE l.repositoryLanguages.repository.name = $1 ORDER BY l.repositoryLanguages.sortOrder, l.languageId");
oql.bind(repositoryName);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
language = (Language)results.next();
}
results.close();
oql.close();
return (language == null) ? null : language.getValueObject();
}
/**
* This method returns the master language.
* todo - add attribute on repositoryLanguage to be able to sort them... and then fetch the first
*/
public LanguageVO getMasterLanguageForRepository(Database db, Integer repositoryId) throws SystemException, Exception
{
String languageKey = "" + repositoryId;
if(logger.isInfoEnabled())
logger.info("languageKey in getMasterLanguageForRepository:" + languageKey);
LanguageVO languageVO = (LanguageVO)CacheController.getCachedObject("masterLanguageCache", languageKey);
if(languageVO != null)
{
if(logger.isInfoEnabled())
logger.info("There was an cached master language:" + languageVO.getName());
}
else
{
OQLQuery oql = db.getOQLQuery( "SELECT l FROM org.infoglue.cms.entities.management.impl.simple.LanguageImpl l WHERE l.repositoryLanguages.repository.repositoryId = $1 ORDER BY l.repositoryLanguages.sortOrder, l.languageId");
oql.bind(repositoryId);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
Language language = (Language)results.next();
languageVO = language.getValueObject();
}
results.close();
oql.close();
CacheController.cacheObject("masterLanguageCache", languageKey, languageVO);
}
return languageVO;
}
/**
* This method returns the master language.
* todo - add attribute on repositoryLanguage to be able to sort them... and then fetch the first
*/
public LanguageVO getMasterLanguageForRepository(Integer repositoryId, Database db) throws SystemException, Exception
{
return LanguageController.getController().getMasterLanguage(repositoryId, db);
/*
LanguageVO languageVO = null;
String languageKey = "" + repositoryId;
logger.info("languageKey in getMasterLanguageForRepository:" + languageKey);
languageVO = (LanguageVO)CacheController.getCachedObject("masterLanguageCache", languageKey);
if(languageVO != null)
{
logger.info("There was an cached master language:" + languageVO.getName());
}
else
{
OQLQuery oql = db.getOQLQuery( "SELECT l FROM org.infoglue.cms.entities.management.impl.simple.LanguageImpl l WHERE l.repositoryLanguages.repository.repositoryId = $1 ORDER BY l.repositoryLanguages.sortOrder, l.languageId");
oql.bind(repositoryId);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
Language language = (Language)results.next();
languageVO = language.getValueObject();
}
results.close();
oql.close();
CacheController.cacheObject("masterLanguageCache", languageKey, languageVO);
}
return languageVO;
*/
}
/**
* This method returns the master language.
* todo - add attribute on repositoryLanguage to be able to sort them... and then fetch the first
*/
public LanguageVO getMasterLanguageForSiteNode(Database db, Integer siteNodeId) throws SystemException, Exception
{
SiteNodeVO smallestSiteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(siteNodeId, db);
return getMasterLanguageForRepository(smallestSiteNodeVO.getRepositoryId(), db);
}
/**
* This method returns the master language.
* todo - add attribute on repositoryLanguage to be able to sort them... and then fetch the first
*/
/*
public LanguageVO getMasterLanguageForSiteNode(Database db, Integer siteNodeId) throws SystemException, Exception
{
String languageKey = "siteNodeId_" + siteNodeId;
logger.info("languageKey in getMasterLanguageForSiteNode:" + languageKey);
LanguageVO languageVO = (LanguageVO)CacheController.getCachedObject("masterLanguageCache", languageKey);
if(languageVO != null)
{
logger.info("There was an cached master language:" + languageVO.getName());
}
else
{
SiteNode siteNode = (SiteNode)getObjectWithId(SiteNodeImpl.class, siteNodeId, db);
Integer repositoryId = siteNode.getRepository().getRepositoryId();
OQLQuery oql = db.getOQLQuery( "SELECT l FROM org.infoglue.cms.entities.management.impl.simple.LanguageImpl l WHERE l.repositoryLanguages.repository.repositoryId = $1 ORDER BY l.repositoryLanguages.sortOrder, l.languageId");
oql.bind(repositoryId);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
Language language = (Language)results.next();
languageVO = language.getValueObject();
}
results.close();
oql.close();
CacheController.cacheObject("masterLanguageCache", languageKey, languageVO);
}
return languageVO;
}
*/
/**
* This method returns the master language.
* todo - add attribute on repositoryLanguage to be able to sort them... and then fetch the first
*/
public LanguageVO getMasterLanguageForSiteNodeWithValityCheck(Database db, NodeDeliveryController ndc, Integer siteNodeId) throws SystemException, Exception
{
String languageKey = "validLanguage_siteNodeId_" + siteNodeId;
logger.info("languageKey in getMasterLanguageForSiteNode:" + languageKey);
LanguageVO languageVO = (LanguageVO)CacheController.getCachedObject("masterLanguageCache", languageKey);
if(languageVO != null)
{
logger.info("There was an cached master language:" + languageVO.getName());
}
else
{
SiteNodeVO siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(siteNodeId, db);
Integer repositoryId = siteNodeVO.getRepositoryId();
OQLQuery oql = db.getOQLQuery( "SELECT l FROM org.infoglue.cms.entities.management.impl.simple.LanguageImpl l WHERE l.repositoryLanguages.repository.repositoryId = $1 ORDER BY l.repositoryLanguages.sortOrder, l.languageId");
oql.bind(repositoryId);
QueryResults results = oql.execute(Database.READONLY);
while (results.hasMore())
{
Language language = (Language)results.next();
LanguageVO languageVOCandidate = language.getValueObject();
if(getIsValidLanguage(db, ndc, siteNodeId, languageVOCandidate.getId()))
{
languageVO = languageVOCandidate;
break;
}
}
results.close();
oql.close();
if(languageVO != null)
CacheController.cacheObject("masterLanguageCache", languageKey, languageVO);
}
return languageVO;
}
/**
* This method returns language with the languageCode sent in.
*/
public Locale getLocaleWithId(Database db, Integer languageId)
{
String key = "" + languageId;
logger.info("key:" + key);
Locale locale = (Locale)CacheController.getCachedObject("localeCache", key);
if(locale != null)
{
logger.info("There was an cached locale:" + locale);
}
else
{
locale = Locale.getDefault();
if (languageId != null)
{
try
{
LanguageVO languageVO = getLanguageVO(db, languageId);
locale = new Locale(languageVO.getLanguageCode());
}
catch (Exception e)
{
logger.error("An error occurred in getLocaleWithId: getting locale with languageid:" + languageId + "," + e, e);
}
}
CacheController.cacheObject("localeCache", key, locale);
}
return locale;
}
/**
* This method returns language with the languageCode sent in.
*/
public Locale getLocaleWithCode(String languageCode)
{
String key = "" + languageCode;
logger.info("key:" + key);
Locale locale = (Locale)CacheController.getCachedObject("localeCache", key);
if(locale != null)
{
logger.info("There was an cached locale:" + locale);
}
else
{
locale = Locale.getDefault();
if (languageCode != null)
{
try
{
locale = new Locale(languageCode);
}
catch (Exception e)
{
logger.error("An error occurred in getLocaleWithCode: getting locale with languageCode:" + languageCode + "," + e, e);
}
}
CacheController.cacheObject("localeCache", key, locale);
}
return locale;
}
/**
* This method returns language with the languageCode sent in.
*/
public LanguageVO getLanguageWithCode(Database db, String languageCode) throws SystemException, Exception
{
return LanguageController.getController().getLanguageVOWithCode(languageCode, db);
/*
String key = "" + languageCode;
logger.info("key:" + key);
LanguageVO languageVO = (LanguageVO)CacheController.getCachedObject("languageCache", key);
if(languageVO != null)
{
logger.info("There was an cached languageVO:" + languageVO);
}
else
{
Language language = null;
OQLQuery oql = db.getOQLQuery( "SELECT l FROM org.infoglue.cms.entities.management.impl.simple.LanguageImpl l WHERE l.languageCode = $1");
oql.bind(languageCode);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
language = (Language)results.next();
languageVO = language.getValueObject();
}
results.close();
oql.close();
CacheController.cacheObject("languageCache", key, languageVO);
}
return languageVO;
*/
}
/**
* This method returns language with the languageCode sent in if it is allowed/supported in the current repository.
*/
public LanguageVO getLanguageIfRepositorySupportsIt(Database db, String languageCodes, Integer siteNodeId) throws SystemException, Exception
{
if (languageCodes == null) return null;
int index = Integer.MAX_VALUE;
int currentIndex = 0;
logger.info("Coming in with languageCodes:" + languageCodes);
Language language = null;
SiteNode siteNode = (SiteNode)getObjectWithId(SiteNodeImpl.class, siteNodeId, db);
Repository repository = siteNode.getRepository();
if(repository != null)
{
Collection languages = repository.getRepositoryLanguages();
Iterator languageIterator = languages.iterator();
while(languageIterator.hasNext())
{
RepositoryLanguage repositoryLanguage = (RepositoryLanguage)languageIterator.next();
Language currentLanguage = repositoryLanguage.getLanguage();
logger.info("CurrentLanguageCode:" + currentLanguage.getLanguageCode());
currentIndex = languageCodes.toLowerCase().indexOf(currentLanguage.getLanguageCode().toLowerCase());
if( currentIndex > -1 && currentIndex < index)
{
index = currentIndex;
logger.info("Found the language in the list of supported languages for this site: " + currentLanguage.getName() + " - priority:" + index);
language = currentLanguage;
if (index==0) break; // Continue and try to find a better candidate unless index is 0 (first prio)
}
}
}
return (language == null) ? null : language.getValueObject();
}
/**
* This method returns language with the languageCode sent in if it is allowed/supported in the current repository.
*/
public LanguageVO getLanguageIfSiteNodeSupportsIt(Database db, String languageCodes, Integer siteNodeId, InfoGluePrincipal principal) throws SystemException, Exception
{
if (languageCodes == null)
return null;
String key = "" + siteNodeId + "_" + languageCodes;
Object languageVOCandidate = CacheController.getCachedObjectFromAdvancedCache("siteNodeLanguageCache", key);
//Object languageVOCandidate = CacheController.getCachedObject("siteNodeLanguageCache", key);
if(languageVOCandidate != null)
{
if(languageVOCandidate instanceof NullObject)
return null;
else
return (LanguageVO)languageVOCandidate;
}
int index = Integer.MAX_VALUE;
int currentIndex = 0;
logger.info("Coming in with languageCodes:" + languageCodes);
LanguageVO language = null;
//SiteNode siteNode = (SiteNode)getObjectWithId(SiteNodeImpl.class, siteNodeId, db);
SiteNodeVO siteNodeVO = NodeDeliveryController.getNodeDeliveryController(null, null, null).getSiteNodeVO(db, siteNodeId);
List repositoryLanguages = getAvailableLanguagesForRepository(db, siteNodeVO.getRepositoryId());
Iterator languageIterator = repositoryLanguages.iterator();
while(languageIterator.hasNext())
{
LanguageVO currentLanguage = (LanguageVO)languageIterator.next();
logger.info("CurrentLanguageCode:" + currentLanguage.getLanguageCode());
NodeDeliveryController ndc = NodeDeliveryController.getNodeDeliveryController(siteNodeId, currentLanguage.getId(), new Integer(-1));
currentIndex = languageCodes.toLowerCase().indexOf(currentLanguage.getLanguageCode().toLowerCase());
if(getIsValidLanguage(db, ndc, siteNodeVO.getId(), currentLanguage.getId()) && currentIndex > -1 && currentIndex < index)
{
index = currentIndex;
logger.info("Found the language in the list of supported languages for this site: " + currentLanguage.getName() + " - priority:" + index);
DeliveryContext deliveryContext = DeliveryContext.getDeliveryContext();
ContentVO contentVO = ndc.getBoundContent(db, principal, siteNodeId, currentLanguage.getId(), false, BasicTemplateController.META_INFO_BINDING_NAME, deliveryContext);
if(contentVO != null)
{
ContentVersionVO contentVersionVO = ContentDeliveryController.getContentDeliveryController().getContentVersionVO(db, siteNodeId, contentVO.getId(), currentLanguage.getId(), false, deliveryContext, principal);
if(contentVersionVO != null)
{
language = currentLanguage;
logger.info("Language now: " + language.getName());
}
}
if (index==0) break; // Continue and try to find a better candidate unless index is 0 (first prio)
}
}
String groupKey1 = "repository_" + siteNodeVO.getRepositoryId();
String groupKey2 = CacheController.getPooledString(3, siteNodeId);
if(language != null)
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, language, new String[]{groupKey1, groupKey2}, true);
else
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, new NullObject(), new String[]{groupKey1, groupKey2}, true);
logger.info("Returning language: " + language);
return language;
/*
Repository repository = siteNode.getRepository();
if(repository != null)
{
Collection languages = repository.getRepositoryLanguages();
Iterator languageIterator = languages.iterator();
while(languageIterator.hasNext())
{
RepositoryLanguage repositoryLanguage = (RepositoryLanguage)languageIterator.next();
Language currentLanguage = repositoryLanguage.getLanguage();
logger.info("CurrentLanguageCode:" + currentLanguage.getLanguageCode());
NodeDeliveryController ndc = NodeDeliveryController.getNodeDeliveryController(siteNodeId, currentLanguage.getId(), new Integer(-1));
currentIndex = languageCodes.toLowerCase().indexOf(currentLanguage.getLanguageCode().toLowerCase());
if(getIsValidLanguage(db, ndc, siteNode, currentLanguage.getId()) && currentIndex > -1 && currentIndex < index)
{
index = currentIndex;
logger.info("Found the language in the list of supported languages for this site: " + currentLanguage.getName() + " - priority:" + index);
DeliveryContext deliveryContext = DeliveryContext.getDeliveryContext();
ContentVO contentVO = ndc.getBoundContent(db, principal, siteNodeId, currentLanguage.getId(), false, BasicTemplateController.META_INFO_BINDING_NAME, deliveryContext);
if(contentVO != null)
{
ContentVersionVO contentVersionVO = ContentDeliveryController.getContentDeliveryController().getContentVersionVO(db, siteNodeId, contentVO.getId(), currentLanguage.getId(), false, deliveryContext, principal);
if(contentVersionVO != null)
{
language = currentLanguage;
logger.info("Language now: " + language.getName());
}
}
if (index==0) break; // Continue and try to find a better candidate unless index is 0 (first prio)
}
}
}
StringBuilder groupKey1 = new StringBuilder("repository_").append(repository.getId());
String groupKey2 = CacheController.getPooledString(3, siteNodeId);
if(language != null)
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, language.getValueObject(), new String[]{groupKey1.toString(), groupKey2.toString()}, true);
else
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, new NullObject(), new String[]{groupKey1.toString(), groupKey2.toString()}, true);
logger.info("Returning language: " + language);
return (language == null) ? null : language.getValueObject();
*/
}
/**
* This method returns language with the languageCode sent in if it is allowed/supported in the current repository.
*/
public LanguageVO getLanguageIfSiteNodeSupportsIt(Database db, Integer languageId, Integer siteNodeId) throws SystemException, Exception
{
if (languageId == null)
return null;
String key = "" + siteNodeId + "_" + languageId;
Object languageVOCandidate = CacheController.getCachedObjectFromAdvancedCache("siteNodeLanguageCache", key);
//Object languageVOCandidate = CacheController.getCachedObject("siteNodeLanguageCache", key);
if(languageVOCandidate != null)
{
if(languageVOCandidate instanceof NullObject)
return null;
else
return (LanguageVO)languageVOCandidate;
}
NodeDeliveryController ndc = NodeDeliveryController.getNodeDeliveryController(siteNodeId, languageId, new Integer(-1));
if(logger.isInfoEnabled())
logger.info("Coming in with languageId:" + languageId);
LanguageVO language = null;
SiteNodeVO siteNode = ndc.getSiteNodeVO(db, siteNodeId);
//SiteNode siteNode = (SiteNode)getObjectWithId(SiteNodeImpl.class, siteNodeId, db);
if(!getIsValidLanguage(db, ndc, siteNode, languageId))
return null;
List repositoryLanguages = getAvailableLanguagesForRepository(db, siteNode.getRepositoryId());
Iterator languageIterator = repositoryLanguages.iterator();
logger.info("languages on :" + siteNode.getId() + ":" + siteNode.getRepositoryId() + "=" + repositoryLanguages.size());
while(languageIterator.hasNext())
{
LanguageVO currentLanguage = (LanguageVO)languageIterator.next();
logger.info("CurrentLanguage:" + currentLanguage.getId());
if(currentLanguage.getId().intValue() == languageId.intValue())
{
logger.info("Found the language in the list of supported languages for this site: " + currentLanguage.getName());
if(getIsValidLanguage(db, ndc, siteNode, currentLanguage.getId()))
{
language = currentLanguage;
break;
}
}
}
String groupKey1 = new StringBuilder("repository_").append(siteNode.getRepositoryId()).toString();
String groupKey2 = CacheController.getPooledString(3, siteNodeId);
if(language != null)
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, language, new String[]{groupKey1, groupKey2}, true);
else
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, new NullObject(), new String[]{groupKey1, groupKey2}, true);
logger.info("Returning language: " + language);
return language;
/*
Repository repository = siteNode.getRepository();
if(repository != null)
{
Collection languages = repository.getRepositoryLanguages();
Iterator languageIterator = languages.iterator();
logger.info("languages on :" + siteNode.getId() + ":" + repository.getId() + "=" + languages.size());
while(languageIterator.hasNext())
{
RepositoryLanguage repositoryLanguage = (RepositoryLanguage)languageIterator.next();
Language currentLanguage = repositoryLanguage.getLanguage();
logger.info("CurrentLanguage:" + currentLanguage.getId());
if(currentLanguage.getId().intValue() == languageId.intValue())
{
logger.info("Found the language in the list of supported languages for this site: " + currentLanguage.getName());
if(getIsValidLanguage(db, ndc, siteNode, currentLanguage.getId()))
{
language = currentLanguage;
break;
}
}
}
}
StringBuilder groupKey1 = new StringBuilder("repository_").append(repository.getId());
String groupKey2 = CacheController.getPooledString(3, siteNodeId);
if(language != null)
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, language.getValueObject(), new String[]{groupKey1.toString(), groupKey2.toString()}, true);
else
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, new NullObject(), new String[]{groupKey1.toString(), groupKey2.toString()}, true);
logger.info("Returning language: " + language);
return (language == null) ? null : language.getValueObject();
*/
}
/**
* This method returns all languages available for a site node.
*/
public List getLanguagesForSiteNode(Database db, Integer siteNodeId, InfoGluePrincipal principal) throws SystemException, Exception
{
String key = "" + siteNodeId;
List languageVOList = (List)CacheController.getCachedObjectFromAdvancedCache("siteNodeLanguageCache", key);
//List languageVOList = (List)CacheController.getCachedObject("siteNodeLanguageCache", key);
if(languageVOList != null)
return languageVOList;
logger.info("Looking for languages on page with id:" + siteNodeId);
languageVOList = new ArrayList();
//SiteNode siteNode = (SiteNode)getObjectWithId(SiteNodeImpl.class, siteNodeId, db);
SiteNodeVO siteNodeVO = NodeDeliveryController.getNodeDeliveryController(null,null,null).getSiteNodeVO(db, siteNodeId);
if(siteNodeVO == null || siteNodeVO.getRepositoryId() == null)
{
logger.error("The sitenode " + siteNodeId + " was requested but either did not exist or had no repo:" + siteNodeVO);
return LanguageController.getController().getLanguageVOList(db);
}
List repositoryLanguages = getAvailableLanguagesForRepository(db, siteNodeVO.getRepositoryId());
Iterator languageIterator = repositoryLanguages.iterator();
while(languageIterator.hasNext())
{
LanguageVO currentLanguage = (LanguageVO)languageIterator.next();
logger.info("CurrentLanguageCode:" + currentLanguage.getLanguageCode());
NodeDeliveryController ndc = NodeDeliveryController.getNodeDeliveryController(siteNodeId, currentLanguage.getId(), new Integer(-1));
if(getIsValidLanguage(db, ndc, siteNodeVO.getId(), currentLanguage.getId()))
{
logger.info("Found the language in the list of supported languages for this site: " + currentLanguage.getName());
languageVOList.add(currentLanguage);
}
}
if(languageVOList != null)
{
String groupKey1 = new StringBuilder("repository_").append(siteNodeVO.getRepositoryId()).toString();
String groupKey2 = CacheController.getPooledString(3, siteNodeId);
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, languageVOList, new String[]{groupKey1, groupKey2}, true);
//CacheController.cacheObject("siteNodeLanguageCache", key, languageVOList);
}
/*
Repository repository = siteNode.getRepository();
if(repository != null)
{
Collection languages = repository.getRepositoryLanguages();
Iterator languageIterator = languages.iterator();
while(languageIterator.hasNext())
{
RepositoryLanguage repositoryLanguage = (RepositoryLanguage)languageIterator.next();
Language currentLanguage = repositoryLanguage.getLanguage();
logger.info("CurrentLanguageCode:" + currentLanguage.getLanguageCode());
NodeDeliveryController ndc = NodeDeliveryController.getNodeDeliveryController(siteNodeId, currentLanguage.getId(), new Integer(-1));
if(getIsValidLanguage(db, ndc, siteNode, currentLanguage.getId()))
{
logger.info("Found the language in the list of supported languages for this site: " + currentLanguage.getName());
languageVOList.add(currentLanguage.getValueObject());
}
}
}
if(languageVOList != null)
{
StringBuilder groupKey1 = new StringBuilder("repository_").append(repository.getId());
String groupKey2 = CacheController.getPooledString(3, siteNodeId);
CacheController.cacheObjectInAdvancedCache("siteNodeLanguageCache", key, languageVOList, new String[]{groupKey1.toString(), groupKey2.toString()}, true);
//CacheController.cacheObject("siteNodeLanguageCache", key, languageVOList);
}
*/
logger.info("Returning languageVOList: " + languageVOList.size());
return languageVOList;
}
public boolean getIsValidLanguage(Database db, NodeDeliveryController ndc, Integer siteNodeId, /*SiteNode siteNode,*/ Integer languageId) throws Exception
{
boolean isValidLanguage = true;
//Integer siteNodeId = siteNode.getId();
Integer disabledLanguagesSiteNodeVersionId = ndc.getDisabledLanguagesSiteNodeVersionId(db, siteNodeId);
logger.info("disabledLanguagesSiteNodeVersionId:" + disabledLanguagesSiteNodeVersionId);
if(disabledLanguagesSiteNodeVersionId != null)
{
SiteNodeVersionVO disabledLanguagesSiteNodeVersionVO = SiteNodeVersionController.getController().getSiteNodeVersionVOWithId(disabledLanguagesSiteNodeVersionId, db);
String disabledLanguagesString = CmsPropertyHandler.getPropertySetValue("siteNode_" + disabledLanguagesSiteNodeVersionVO.getSiteNodeId() + "_disabledLanguages");
logger.info("disabledLanguagesString:" + disabledLanguagesString);
if(disabledLanguagesString != null && !disabledLanguagesString.equalsIgnoreCase(""))
{
String[] disabledLanguagesStringArray = disabledLanguagesString.split(",");
for(int i=0; i<disabledLanguagesStringArray.length; i++)
{
logger.info("languageId.intValue():" + languageId.intValue());
logger.info("disabledLanguagesStringArray:" + disabledLanguagesStringArray);
if(languageId.intValue() == new Integer(disabledLanguagesStringArray[i]).intValue())
{
isValidLanguage = false;
logger.info("isValidLanguage:" + isValidLanguage);
break;
}
}
}
String enabledLanguagesString = CmsPropertyHandler.getPropertySetValue("siteNode_" + disabledLanguagesSiteNodeVersionVO.getSiteNodeId() + "_enabledLanguages");
if(enabledLanguagesString != null && !enabledLanguagesString.equalsIgnoreCase(""))
{
isValidLanguage = false;
String[] enabledLanguagesStringArray = enabledLanguagesString.split(",");
for(int i=0; i<enabledLanguagesStringArray.length; i++)
{
if(languageId.intValue() == new Integer(enabledLanguagesStringArray[i]).intValue())
{
isValidLanguage = true;
break;
}
}
}
}
logger.info("languageId:" + languageId + " was valid:" + isValidLanguage);
return isValidLanguage;
}
public boolean getIsValidLanguage(Database db, NodeDeliveryController ndc, SiteNodeVO siteNode, Integer languageId) throws Exception
{
boolean isValidLanguage = true;
Integer siteNodeId = siteNode.getId();
Integer disabledLanguagesSiteNodeVersionId = ndc.getDisabledLanguagesSiteNodeVersionId(db, siteNodeId);
logger.info("disabledLanguagesSiteNodeVersionId:" + disabledLanguagesSiteNodeVersionId);
if(disabledLanguagesSiteNodeVersionId != null)
{
SiteNodeVersionVO disabledLanguagesSiteNodeVersionVO = SiteNodeVersionController.getController().getSiteNodeVersionVOWithId(disabledLanguagesSiteNodeVersionId, db);
String disabledLanguagesString = CmsPropertyHandler.getPropertySetValue("siteNode_" + disabledLanguagesSiteNodeVersionVO.getSiteNodeId() + "_disabledLanguages");
logger.info("disabledLanguagesString:" + disabledLanguagesString);
if(disabledLanguagesString != null && !disabledLanguagesString.equalsIgnoreCase(""))
{
String[] disabledLanguagesStringArray = disabledLanguagesString.split(",");
for(int i=0; i<disabledLanguagesStringArray.length; i++)
{
logger.info("languageId.intValue():" + languageId.intValue());
logger.info("disabledLanguagesStringArray:" + disabledLanguagesStringArray);
if(languageId.intValue() == new Integer(disabledLanguagesStringArray[i]).intValue())
{
isValidLanguage = false;
logger.info("isValidLanguage:" + isValidLanguage);
break;
}
}
}
String enabledLanguagesString = CmsPropertyHandler.getPropertySetValue("siteNode_" + disabledLanguagesSiteNodeVersionVO.getSiteNodeId() + "_enabledLanguages");
if(enabledLanguagesString != null && !enabledLanguagesString.equalsIgnoreCase(""))
{
isValidLanguage = false;
String[] enabledLanguagesStringArray = enabledLanguagesString.split(",");
for(int i=0; i<enabledLanguagesStringArray.length; i++)
{
if(languageId.intValue() == new Integer(enabledLanguagesStringArray[i]).intValue())
{
isValidLanguage = true;
break;
}
}
}
}
logger.info("languageId:" + languageId + " was valid:" + isValidLanguage);
return isValidLanguage;
}
}