Package org.infoglue.cms.controllers.kernel.impl.simple

Source Code of org.infoglue.cms.controllers.kernel.impl.simple.InfoGluePrincipalControllerProxy

/* ===============================================================================
*
* 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.cms.controllers.kernel.impl.simple;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Node;
import org.exolab.castor.jdo.Database;
import org.infoglue.cms.applications.common.VisualFormatter;
import org.infoglue.cms.entities.content.DigitalAssetVO;
import org.infoglue.cms.entities.kernel.BaseEntityVO;
import org.infoglue.cms.entities.management.GroupProperties;
import org.infoglue.cms.entities.management.LanguageVO;
import org.infoglue.cms.entities.management.RoleProperties;
import org.infoglue.cms.entities.management.UserProperties;
import org.infoglue.cms.entities.management.UserPropertiesVO;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.security.InfoGlueGroup;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.security.InfoGlueRole;
import org.infoglue.cms.util.dom.DOMBuilder;
import org.infoglue.deliver.controllers.kernel.impl.simple.LanguageDeliveryController;
import org.infoglue.deliver.util.CacheController;
import org.infoglue.deliver.util.NullObject;

/**
* @author Mattias Bogeblad
*
* This class acts as the proxy for getting a principal from the right source. The source may vary depending
* on security setup.
*/

public class InfoGluePrincipalControllerProxy extends BaseController
{
    private final static Logger logger = Logger.getLogger(InfoGluePrincipalControllerProxy.class.getName());

  public static InfoGluePrincipalControllerProxy getController()
  {
    return new InfoGluePrincipalControllerProxy();
  }
 
  /**
   * This method returns a specific content-object
   */
  /*
    public InfoGluePrincipal getInfoGluePrincipal(String userName) throws ConstraintException, SystemException
    {
    InfoGluePrincipal infoGluePrincipal = null;
     
      try
      {
      AuthorizationModule authorizationModule = (AuthorizationModule)Class.forName(InfoGlueAuthenticationFilter.authorizerClass).newInstance();
      authorizationModule.setExtraProperties(InfoGlueAuthenticationFilter.extraProperties);
     
      infoGluePrincipal = authorizationModule.getAuthorizedInfoGluePrincipal(userName);
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
     
      return infoGluePrincipal;
    }
   */
  /**
   * Getting a property for a Principal - used for personalisation.
   * This method starts with getting the property on the user and if it does not exist we check out the
   * group-properties as well.
   */
 
  public String getPrincipalPropertyValue(InfoGluePrincipal infoGluePrincipal, String propertyName, Integer languageId, Integer siteNodeId, boolean useLanguageFallback, boolean escapeSpecialCharacters, boolean findLargestValue) throws Exception
  {
    return getPrincipalPropertyValue(infoGluePrincipal, propertyName, languageId, siteNodeId, useLanguageFallback, escapeSpecialCharacters, findLargestValue, false);
  }
 
  /**
   * Getting a property for a Principal - used for personalisation.
   * This method starts with getting the property on the user and if it does not exist we check out the
   * group-properties as well.
   */
 
  public String getPrincipalPropertyValue(InfoGluePrincipal infoGluePrincipal, String propertyName, Integer languageId, Integer siteNodeId, boolean useLanguageFallback, boolean escapeSpecialCharacters, boolean findLargestValue, boolean findPrioValue) throws Exception
  {
    String value = "";
   
    if(infoGluePrincipal == null || propertyName == null)
      return null;
   
    Database db = CastorDatabaseService.getDatabase();
   
    beginTransaction(db);
   
    try
        {
        value = getPrincipalPropertyValue(db, infoGluePrincipal, propertyName, languageId, siteNodeId, useLanguageFallback, escapeSpecialCharacters, findLargestValue, findPrioValue);
        commitTransaction(db);
        }
        catch(Exception e)
        {
          logger.error("An error occurred so we should not completes the transaction:" + e, e);
            rollbackTransaction(db);
            throw new SystemException(e.getMessage());
        }   
         
    return value;
 
 

  /**
   * Getting a property for a Principal - used for personalisation.
   * This method starts with getting the property on the user and if it does not exist we check out the
   * group-properties as well.
   */
 
  public String getPrincipalPropertyValue(Database db, InfoGluePrincipal infoGluePrincipal, String propertyName, Integer languageId, Integer siteNodeId, boolean useLanguageFallback, boolean escapeSpecialCharacters, boolean findLargestValue) throws Exception
  {
    return getPrincipalPropertyValue(db, infoGluePrincipal, propertyName, languageId, siteNodeId, useLanguageFallback, escapeSpecialCharacters, findLargestValue, false);
  }
 
  /**
   * Getting a property for a Principal - used for personalisation.
   * This method starts with getting the property on the user and if it does not exist we check out the
   * group-properties as well.
   */
 
  public String getPrincipalPropertyValue(Database db, InfoGluePrincipal infoGluePrincipal, String propertyName, Integer languageId, Integer siteNodeId, boolean useLanguageFallback, boolean escapeSpecialCharacters, boolean findLargestValue, boolean findPrioValue) throws Exception
  {
    String key = "" + infoGluePrincipal.getName() + "_" + propertyName + "_" + languageId + "_" + siteNodeId + "_" + useLanguageFallback + "_" + escapeSpecialCharacters + "_" + findLargestValue + "_" + findPrioValue;
    logger.info("key:" + key);
    Object object = (String)CacheController.getCachedObject("principalPropertyValueCache", key);

      if(object instanceof NullObject)
    {
      logger.info("There was an cached property but it was null:" + object);
      return null;
    }
    else if(object != null)
    {
      logger.info("There was an cached principalPropertyValue:" + object);
      return (String)object;
    }

    String value = "";
   
    if(infoGluePrincipal == null || propertyName == null)
      return null;
 
    Collection userPropertiesList = UserPropertiesController.getController().getUserPropertiesList(infoGluePrincipal.getName(), languageId, db, true);
    Iterator userPropertiesListIterator = userPropertiesList.iterator();
    while(userPropertiesListIterator.hasNext())
    {
      UserProperties userProperties = (UserProperties)userPropertiesListIterator.next();

      if(userProperties != null && userProperties.getLanguage().getLanguageId().equals(languageId) && userProperties.getValue() != null && propertyName != null)
      {
        String propertyXML = userProperties.getValue();
        DOMBuilder domBuilder = new DOMBuilder();
        Document document = domBuilder.getDocument(propertyXML);
 
        Node node = document.getRootElement().selectSingleNode("attributes/" + propertyName);
        if(node != null)
        {
          value = node.getStringValue();
          logger.info("Getting value: " + value);
          if(value != null && escapeSpecialCharacters)
            value = new VisualFormatter().escapeHTML(value);
          break;
        }
      }
    }
   
    if(value.equals(""))
    { 
      List roles = infoGluePrincipal.getRoles();
      String largestValue = "-1";
      String prioValue = null;
      int latestPriority = 0;
      Iterator rolesIterator = roles.iterator();
      while(rolesIterator.hasNext())
      {
        InfoGlueRole role = (InfoGlueRole)rolesIterator.next();
       
        Collection rolePropertiesList = RolePropertiesController.getController().getRolePropertiesList(role.getName(), languageId, db, true);

        Iterator rolePropertiesListIterator = rolePropertiesList.iterator();
        while(rolePropertiesListIterator.hasNext())
        {
          RoleProperties roleProperties = (RoleProperties)rolePropertiesListIterator.next();
         
          if(roleProperties != null && roleProperties.getLanguage().getLanguageId().equals(languageId) && roleProperties.getValue() != null && propertyName != null)
          {
            String propertyXML = roleProperties.getValue();
            DOMBuilder domBuilder = new DOMBuilder();
            Document document = domBuilder.getDocument(propertyXML);
           
            Node propertyPriorityNode = document.getRootElement().selectSingleNode("attributes/PropertyPriority");
            int currentPriority = 0;
            if(propertyPriorityNode != null)
            {
              try
              {
                String propertyPriorityValue = propertyPriorityNode.getStringValue();
                logger.info("propertyPriorityValue:" + propertyPriorityValue);

                if(propertyPriorityValue != null && !propertyPriorityValue.equals(""))
                  currentPriority = new Integer(propertyPriorityValue);
              }
              catch (Exception e)
              {
                e.printStackTrace();
              }
            }
           
            Node node = document.getRootElement().selectSingleNode("attributes/" + propertyName);
            if(node != null)
            {
              value = node.getStringValue();
              logger.info("Getting value: " + value);
              if(value != null && escapeSpecialCharacters)
                value = new VisualFormatter().escapeHTML(value);
             
              if(value != null && !value.equals("") && findLargestValue && new Integer(largestValue).intValue() < new Integer(value).intValue())
                  largestValue = value;

              logger.info("" + findLargestValue + ":" + findPrioValue + ":" + currentPriority + "=" + latestPriority);
              if(value != null && !value.equals("") && !findLargestValue && findPrioValue && currentPriority > latestPriority)
              {
                logger.info("Using other value..");
                prioValue = value;
                latestPriority = currentPriority;
              }

              break;
            }
          }
        }
      }
     
      if(findLargestValue)
          value = largestValue;
     
      if(findPrioValue && prioValue != null)
      {
          value = prioValue;
          logger.info("Using prio value");
      }
     
      if(value.equals("") && useLanguageFallback)
      {
        LanguageVO masterLanguageVO = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(db, siteNodeId);
        if(!masterLanguageVO.getLanguageId().equals(languageId))
          value = getPrincipalPropertyValue(infoGluePrincipal, propertyName, masterLanguageVO.getLanguageId(), siteNodeId, useLanguageFallback, escapeSpecialCharacters, findLargestValue);
      }
    }
   
    if(value.equals(""))
    { 
      List groups = infoGluePrincipal.getGroups();
      String largestValue = "-1";
      String prioValue = null;
      int latestPriority = 0;
      Iterator groupsIterator = groups.iterator();
      while(groupsIterator.hasNext())
      {
        InfoGlueGroup group = (InfoGlueGroup)groupsIterator.next();
       
        Collection groupPropertiesList = GroupPropertiesController.getController().getGroupPropertiesList(group.getName(), languageId, db, true);

        Iterator groupPropertiesListIterator = groupPropertiesList.iterator();
        while(groupPropertiesListIterator.hasNext())
        {
          GroupProperties groupProperties = (GroupProperties)groupPropertiesListIterator.next();
         
          if(groupProperties != null && groupProperties.getLanguage().getLanguageId().equals(languageId) && groupProperties.getValue() != null && propertyName != null)
          {
            String propertyXML = groupProperties.getValue();
            DOMBuilder domBuilder = new DOMBuilder();
            Document document = domBuilder.getDocument(propertyXML);
           
            Node propertyPriorityNode = document.getRootElement().selectSingleNode("attributes/PropertyPriority");
            int currentPriority = 0;
            if(propertyPriorityNode != null)
            {
              try
              {
                String propertyPriorityValue = propertyPriorityNode.getStringValue();
                logger.info("propertyPriorityValue:" + propertyPriorityValue);

                if(propertyPriorityValue != null && !propertyPriorityValue.equals(""))
                  currentPriority = new Integer(propertyPriorityValue);
              }
              catch (Exception e)
              {
                e.printStackTrace();
              }
            }

            Node node = document.getRootElement().selectSingleNode("attributes/" + propertyName);
            if(node != null)
            {
              value = node.getStringValue();
              logger.info("Getting value: " + value);
              if(value != null && escapeSpecialCharacters)
                value = new VisualFormatter().escapeHTML(value);
             
              if(value != null && !value.equals("") && findLargestValue && new Integer(largestValue).intValue() < new Integer(value).intValue())
                  largestValue = value;
             
              logger.info("" + findLargestValue + ":" + findPrioValue + ":" + currentPriority + "=" + latestPriority);
              if(value != null && !value.equals("") && !findLargestValue && findPrioValue && currentPriority > latestPriority)
              {
                logger.info("Using other value..");
                prioValue = value;
                latestPriority = currentPriority;
              }
             
              break;
            }
          }
        }
      }
     
      if(findLargestValue)
          value = largestValue;
     
      if(findPrioValue && prioValue != null)
      {
          value = prioValue;
          logger.info("Using prio value");
      }

      if(value.equals("") && useLanguageFallback)
      {
        LanguageVO masterLanguageVO = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(db, siteNodeId);
        if(!masterLanguageVO.getLanguageId().equals(languageId))
          value = getPrincipalPropertyValue(infoGluePrincipal, propertyName, masterLanguageVO.getLanguageId(), siteNodeId, useLanguageFallback, escapeSpecialCharacters, findLargestValue);
      }
    }
     
    if(value != null)
        CacheController.getCachedObject("principalPropertyValueCache", key);
   
    if(value != null)
          CacheController.cacheObject("principalPropertyValueCache", key, value);
      else
          CacheController.cacheObject("principalPropertyValueCache", key, new NullObject());
   
    return value;
 
 
 
  /**
   * Getting all assets for a Principal - used for personalisation.
   */
 
  public List getPrincipalAssets(Database db, InfoGluePrincipal infoGluePrincipal, Integer languageId) throws Exception
  {
    /*
    String key = "" + infoGluePrincipal.getName() + "_" + languageId;
    logger.info("key:" + key);
    Object object = (String)CacheController.getCachedObject("principalPropertyValueCache", key);

      if(object instanceof NullObject)
    {
      logger.info("There was an cached property but it was null:" + object);
      return null;
    }
    else if(object != null)
    {
      logger.info("There was an cached principalPropertyValue:" + object);
      return (String)object;
    }
    */
   
    List digitalAssets = new ArrayList();
   
    if(infoGluePrincipal == null)
      return null;
 
    try
    {
      List userPropertiesVOList = UserPropertiesController.getController().getUserPropertiesVOList(infoGluePrincipal.getName(), languageId);
      if(userPropertiesVOList != null && userPropertiesVOList.size() > 0)
      {
        UserPropertiesVO userPropertiesVO = (UserPropertiesVO)userPropertiesVOList.get(0);
        if(userPropertiesVO != null && userPropertiesVO.getId() != null)
             {
               digitalAssets = UserPropertiesController.getController().getDigitalAssetVOList(userPropertiesVO.getId());
             }
      }
    }
    catch(Exception e)
    {
      logger.warn("We could not fetch the list of digitalAssets: " + e.getMessage(), e);
    }
    /*
    if(value != null)
        CacheController.getCachedObject("principalPropertyValueCache", key);
   
    if(value != null)
          CacheController.cacheObject("principalPropertyValueCache", key, value);
      else
          CacheController.cacheObject("principalPropertyValueCache", key, new NullObject());
    */
   
    return digitalAssets;
 

  /**
   * Getting all assets for a Principal - used for personalisation.
   */
 
  public DigitalAssetVO getPrincipalAsset(Database db, InfoGluePrincipal infoGluePrincipal, Integer languageId, String assetKey) throws Exception
  {
    DigitalAssetVO asset = null;
   
    if(infoGluePrincipal == null)
      return null;
 
    try
    {
      List<DigitalAssetVO> assetList = getPrincipalAssets(db, infoGluePrincipal, languageId);
      Iterator<DigitalAssetVO> assetListIterator = assetList.iterator();
      while(assetListIterator.hasNext())
      {
        DigitalAssetVO currentAsset = (DigitalAssetVO)assetListIterator.next();
        logger.info("" + currentAsset.getAssetKey() + "=" + assetKey);
        if(currentAsset.getAssetKey().equals(assetKey))
        {
          asset = currentAsset;
          break;
        }
      }
    }
    catch(Exception e)
    {
      logger.warn("We could not fetch the list of digitalAssets: " + e.getMessage(), e);
    }
    /*
    if(value != null)
        CacheController.getCachedObject("principalPropertyValueCache", key);
   
    if(value != null)
          CacheController.cacheObject("principalPropertyValueCache", key, value);
      else
          CacheController.cacheObject("principalPropertyValueCache", key, new NullObject());
    */
   
    return asset;
 

 
  /**
   * Getting a property for a Principal - used for personalisation.
   * This method starts with getting the property on the user and if it does not exist we check out the
   * group-properties as well. The value in question is a map - name-value.
   */
 
  public Map getPrincipalPropertyHashValues(InfoGluePrincipal infoGluePrincipal, String propertyName, Integer languageId, Integer siteNodeId, boolean useLanguageFallback, boolean escapeSpecialCharacters) throws Exception
  {
    Properties properties = new Properties();
   
    String attributeValue = getPrincipalPropertyValue(infoGluePrincipal, propertyName, languageId, siteNodeId, useLanguageFallback, escapeSpecialCharacters, false);
   
    ByteArrayInputStream is = new ByteArrayInputStream(attributeValue.getBytes("UTF-8"));

    properties.load(is);
       
    return properties;
 

  /**
   * Getting a property for a Principal - used for personalisation.
   * This method starts with getting the property on the user and if it does not exist we check out the
   * group-properties as well. The value in question is a map - name-value.
   */
 
  public Map getPrincipalPropertyHashValues(Database db, InfoGluePrincipal infoGluePrincipal, String propertyName, Integer languageId, Integer siteNodeId, boolean useLanguageFallback, boolean escapeSpecialCharacters) throws Exception
  {
    Properties properties = new Properties();
   
    String attributeValue = getPrincipalPropertyValue(db, infoGluePrincipal, propertyName, languageId, siteNodeId, useLanguageFallback, escapeSpecialCharacters, false);
   
    ByteArrayInputStream is = new ByteArrayInputStream(attributeValue.getBytes("UTF-8"));

    properties.load(is);
       
    return properties;
 

  public InfoGluePrincipal getTestPrincipal()
  {
    //BasicMethodAccessManager.checkAccessToCall(new String[]{SubscriptionsJob.class.getName()}, "FUCK OFF - your attempt have been registered.");
   
    return new InfoGluePrincipal("TestUser", "none", "none", "none", new ArrayList(), new ArrayList(), true, null);
  }
 
 
  public BaseEntityVO getNewVO()
  {
    return null;
  }
}
TOP

Related Classes of org.infoglue.cms.controllers.kernel.impl.simple.InfoGluePrincipalControllerProxy

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.