Package org.infoglue.cms.webservices

Source Code of org.infoglue.cms.webservices.RemoteUserPropertiesServiceImpl

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

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionController;
import org.infoglue.cms.controllers.kernel.impl.simple.DigitalAssetController;
import org.infoglue.cms.controllers.kernel.impl.simple.ServerNodeController;
import org.infoglue.cms.controllers.kernel.impl.simple.UserControllerProxy;
import org.infoglue.cms.controllers.kernel.impl.simple.UserPropertiesController;
import org.infoglue.cms.entities.content.DigitalAssetVO;
import org.infoglue.cms.entities.management.UserProperties;
import org.infoglue.cms.entities.management.UserPropertiesVO;
import org.infoglue.cms.entities.management.impl.simple.SystemUserImpl;
import org.infoglue.cms.entities.management.impl.simple.UserPropertiesImpl;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.util.ChangeNotificationController;
import org.infoglue.cms.util.NotificationMessage;
import org.infoglue.cms.util.dom.DOMBuilder;
import org.infoglue.cms.webservices.elements.RemoteAttachment;
import org.infoglue.deliver.util.webservices.DynamicWebserviceSerializer;


/**
* This class is responsible for letting an external application call InfoGlue
* API:s remotely. It handles api:s to manage user properties.
*
* @author Mattias Bogeblad
*/

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

  /**
   * The principal executing the workflow.
   */
  private InfoGluePrincipal principal;

    private static UserPropertiesController userPropertiesController = UserPropertiesController.getController();
   
   
    /**
     * Inserts a new UserProperty.
     */
   
    public int updateUserProperties(final String principalName, UserPropertiesVO userPropertiesVO)
    {
        if(!ServerNodeController.getController().getIsIPAllowed(getRequest()))
        {
            logger.error("A client with IP " + getRequest().getRemoteAddr() + " was denied access to the webservice. Could be a hack attempt or you have just not configured the allowed IP-addresses correct.");
            return -1;
        }

        int newUserPropertiesId = 0;
       
        logger.info("***********************************************");
        logger.info("Creating user properties through webservice....");
        logger.info("***********************************************");
       
        try
        {
            initializePrincipal(principalName);
            UserPropertiesVO newUserPropertiesVO = userPropertiesController.update(userPropertiesVO.getLanguageId(), userPropertiesVO.getContentTypeDefinitionId(), userPropertiesVO);
            newUserPropertiesId = newUserPropertiesVO.getId().intValue();
           
      NotificationMessage notificationMessage = new NotificationMessage("RemoteUserProperties.updateUserProperties", UserPropertiesImpl.class.getName(), principalName, NotificationMessage.PUBLISHING, newUserPropertiesVO.getId(), newUserPropertiesVO.getUserName());
      ChangeNotificationController.getInstance().addNotificationMessage(notificationMessage);
        }
        catch(Exception e)
        {
            logger.error("En error occurred when we tried to create a new userProperty:" + e.getMessage(), e);
        }
       
        updateCaches();

        return newUserPropertiesId;
    }

    /**
     * Inserts a new UserProperty.
     */
   
    public Boolean updateUserProperties(final String principalName, int languageId, int contentTypeDefinitionId, boolean forcePublication, boolean allowHTMLContent, boolean allowExternalLinks, boolean allowDollarSigns, boolean allowAnchorSigns, boolean keepExistingAttributes, boolean keepExistingCategories, boolean updateExistingAssets, final Object[] inputsArray, final Object[] assetsArray)
    {
        if(!ServerNodeController.getController().getIsIPAllowed(getRequest()))
        {
            logger.error("A client with IP " + getRequest().getRemoteAddr() + " was denied access to the webservice. Could be a hack attempt or you have just not configured the allowed IP-addresses correct.");
            return new Boolean(false);
        }
       
        Boolean status = new Boolean(true);

        int newUserPropertiesId = 0;
       
        logger.info("***********************************************");
        logger.info("Creating user properties through webservice....");
        logger.info("***********************************************");
       
        try
        {
      final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer();
            Map userPropertiesAttributesMap = (Map)serializer.deserialize(inputsArray);
           
            List assets = (List)serializer.deserialize(assetsArray);
           
            initializePrincipal(principalName);
            logger.info("principalName:" + principalName);
            logger.info("principal:" + principal);
            logger.info("languageId:" + languageId);
            logger.info("contentTypeDefinitionId:" + contentTypeDefinitionId);
           
            UserPropertiesVO userPropertiesVO = new UserPropertiesVO();
            userPropertiesVO.setUserName(principal.getName());
           
          Collection userPropertiesVOList = UserPropertiesController.getController().getUserPropertiesVOList(principal.getName(), languageId);
        Iterator userPropertiesVOListIterator = userPropertiesVOList.iterator();
        while(userPropertiesVOListIterator.hasNext())
        {
          UserPropertiesVO userProperties = (UserPropertiesVO)userPropertiesVOListIterator.next();

          if(userProperties != null && userProperties.getLanguageId().equals(languageId) && userProperties.getValue() != null)
          {
            userPropertiesVO = userProperties;
            break;
          }
        }
           
            logger.info("userPropertiesAttributesMap:" + userPropertiesAttributesMap.size());
           
            DOMBuilder domBuilder = new DOMBuilder();
            Document document = domBuilder.createDocument();
            Element rootElement = null;
            Element attributesRoot = null;
           
            logger.info("keepExistingAttributes:" + keepExistingAttributes);
            if(keepExistingAttributes && userPropertiesVO.getValue() != null)
          {
        String propertyXML = userPropertiesVO.getValue();
        document = domBuilder.getDocument(propertyXML);
       
            attributesRoot = (Element)document.getRootElement().element("attributes");
          }
          else
          {
              rootElement = domBuilder.addElement(document, "article");
              attributesRoot = domBuilder.addElement(rootElement, "attributes");
          }
           
            logger.info("attributesRoot:" + attributesRoot);
            logger.info("XML before:" + document.asXML());

            Iterator attributesIterator = userPropertiesAttributesMap.keySet().iterator();
            while(attributesIterator.hasNext())
            {
                String attributeName  = (String)attributesIterator.next();
                String attributeValue = (String)userPropertiesAttributesMap.get(attributeName);
               
                logger.info(attributeName + "=" + attributeValue);
               
                List<Element> elements = attributesRoot.elements(attributeName);
                logger.info("elements:" + elements.size());
                for(Element attribute : elements)
                {
                  logger.info("attribute:" + attribute);
                    if(attribute != null)
                      attributesRoot.remove(attribute);                 
                }
                Element attribute = domBuilder.addElement(attributesRoot, attributeName);
                
                logger.info("attribute after:" + attribute);
               
                domBuilder.addCDATAElement(attribute, attributeValue);
            }                 
           
            logger.info("XML:" + document.asXML());
           
            userPropertiesVO.setValue(document.asXML());
           
            UserPropertiesVO newUserPropertiesVO = userPropertiesController.update(new Integer(languageId), new Integer(contentTypeDefinitionId), userPropertiesVO);
            newUserPropertiesId = newUserPropertiesVO.getId().intValue();
           
      List existingDigitalAssetVOList = userPropertiesController.getDigitalAssetVOList(newUserPropertiesId);
           
          List digitalAssets = assets;
         
          logger.info("digitalAssets:" + digitalAssets);
          //logger.info("digitalAssets:" + digitalAssets.size());
          if(digitalAssets != null)
          {
              Iterator digitalAssetIterator = digitalAssets.iterator();
              while(digitalAssetIterator.hasNext())
              {
                  RemoteAttachment remoteAttachment = (RemoteAttachment)digitalAssetIterator.next();
                logger.info("digitalAssets in ws:" + remoteAttachment);
                //logger.info("remoteAttachment:" + remoteAttachment.getName() + ":" + remoteAttachment.getSize() + ":" + remoteAttachment.getFilePath());
               
                DigitalAssetVO newAsset = new DigitalAssetVO();
          newAsset.setAssetContentType(remoteAttachment.getContentType());
          newAsset.setAssetKey(remoteAttachment.getName());
          newAsset.setAssetFileName(remoteAttachment.getFileName());
          newAsset.setAssetFilePath(remoteAttachment.getFilePath());
          newAsset.setAssetFileSize(new Integer(new Long(remoteAttachment.getBytes().length).intValue()));
          //is = new FileInputStream(renamedFile);
          InputStream is = new ByteArrayInputStream(remoteAttachment.getBytes());

          Iterator existingDigitalAssetVOListIterator = existingDigitalAssetVOList.iterator();
          while(existingDigitalAssetVOListIterator.hasNext())
          {
            DigitalAssetVO assetVO = (DigitalAssetVO)existingDigitalAssetVOListIterator.next();
            //logger.info("assetVO:" + assetVO.getAssetKey());
            if(assetVO.getAssetKey().equals(newAsset.getAssetKey()))
            {
              //logger.info("Removing:" + assetVO.getAssetKey() + ":" + assetVO.getAssetFileName());
              DigitalAssetController.getController().delete(assetVO.getId(), UserProperties.class.getName(), newUserPropertiesId);
            }
          }
         
                DigitalAssetController.create(newAsset, is, UserProperties.class.getName(), newUserPropertiesVO.getId());
            }  
          }

          if(forcePublication)
          {
        NotificationMessage notificationMessage = new NotificationMessage("RemoteUserProperties.updateUserProperties", UserPropertiesImpl.class.getName(), principalName, NotificationMessage.PUBLISHING, newUserPropertiesVO.getId(), newUserPropertiesVO.getUserName());
        ChangeNotificationController.getInstance().addNotificationMessage(notificationMessage);
          }
        }
        catch(Throwable e)
        {
          status = new Boolean(false);
            logger.error("En error occurred when we tried to create a new userProperty:" + e.getMessage(), e);
        }
       
        updateCaches();

        return status;
    }

   
    /**
     * Deletes a digital asset.
     */
   
    public Boolean deleteDigitalAsset(final String principalName, final Object[] inputsArray)
    {
        if(!ServerNodeController.getController().getIsIPAllowed(getRequest()))
        {
            logger.error("A client with IP " + getRequest().getRemoteAddr() + " was denied access to the webservice. Could be a hack attempt or you have just not configured the allowed IP-addresses correct.");
            return new Boolean(false);
        }
       
        Boolean status = new Boolean(true);
       
        logger.info("****************************************");
        logger.info("Updating content through webservice....");
        logger.info("****************************************");
       
        logger.info("principalName:" + principalName);
        logger.info("inputsArray:" + inputsArray);
        //logger.warn("contents:" + contents);
       
        try
        {
      final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer();
            Map digitalAsset = (Map) serializer.deserialize(inputsArray);
          logger.info("digitalAsset:" + digitalAsset);

            initializePrincipal(principalName);
           
            Integer contentVersionId = (Integer)digitalAsset.get("contentVersionId");
            Integer contentId      = (Integer)digitalAsset.get("contentId");
            Integer languageId      = (Integer)digitalAsset.get("languageId");
            String assetKey      = (String)digitalAsset.get("assetKey");
           
            logger.info("contentVersionId:" + contentVersionId);
            logger.info("contentId:" + contentId);
            logger.info("languageId:" + languageId);
            logger.info("assetKey:" + assetKey);
           
            ContentVersionController.getContentVersionController().deleteDigitalAsset(contentId, languageId, assetKey);
              
          logger.info("Done with contents..");

      NotificationMessage notificationMessage = new NotificationMessage("RemoteUserProperties.deleteDigitalAsset", SystemUserImpl.class.getName(), principalName, NotificationMessage.PUBLISHING, principalName, principalName);
      ChangeNotificationController.getInstance().addNotificationMessage(notificationMessage);
        }
        catch(Throwable e)
        {
          status = new Boolean(false)
            logger.error("En error occurred when we tried to delete a digitalAsset:" + e.getMessage(), e);
        }
       
        updateCaches();

        return status;
    }


   
  /**
   * Checks if the principal exists and if the principal is allowed to create the workflow.
   *
   * @param userName the name of the user.
   * @param workflowName the name of the workflow to create.
   * @throws SystemException if the principal doesn't exists or doesn't have permission to create the workflow.
   */
  private void initializePrincipal(final String userName) throws SystemException
  {
    try
    {
      principal = UserControllerProxy.getController().getUser(userName);
    }
    catch(SystemException e)
    {
      throw e;
    }
    catch(Exception e)
    {
      throw new SystemException(e);
    }
    if(principal == null)
    {
      throw new SystemException("No such principal [" + userName + "].");
    }
  }


}
TOP

Related Classes of org.infoglue.cms.webservices.RemoteUserPropertiesServiceImpl

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.