/* =============================================================================== * * 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; } }