Package org.infoglue.cms.webservices

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

/* ===============================================================================
*
* 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.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.exolab.castor.jdo.Database;
import org.infoglue.cms.controllers.kernel.impl.simple.CastorDatabaseService;
import org.infoglue.cms.controllers.kernel.impl.simple.FormEntryController;
import org.infoglue.cms.controllers.kernel.impl.simple.ServerNodeController;
import org.infoglue.cms.controllers.kernel.impl.simple.UserControllerProxy;
import org.infoglue.cms.entities.management.FormEntry;
import org.infoglue.cms.entities.management.FormEntryAssetVO;
import org.infoglue.cms.entities.management.FormEntryVO;
import org.infoglue.cms.entities.management.FormEntryValueVO;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.util.ConstraintExceptionBuffer;
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 form entries and their values.
*
* @author Mattias Bogeblad
*/

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

  /**
   * The principal executing the workflow.
   */
  private InfoGluePrincipal principal;
 
  private static FormEntryController formEntryController = FormEntryController.getController();
   
    /**
     * Inserts one or many new SiteNode including versions etc.
     */
   
    public Boolean createFormEntry(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);

        List newSiteNodeIdList = new ArrayList();
       
        logger.info("****************************************");
        logger.info("Creating gorm entry through webservice....");
        logger.info("****************************************");
       
        logger.info("principalName:" + principalName);
        logger.info("inputsArray:" + inputsArray);
       
        try
        {
      final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer();
            List formEntries = (List) serializer.deserialize(inputsArray);
          logger.info("formEntries:" + formEntries);

            initializePrincipal(principalName);
          Iterator formEntriesIterator = formEntries.iterator();
          while(formEntriesIterator.hasNext())
          {
              Map formEntry = (Map)formEntriesIterator.next();
             
              String formName     = (String)formEntry.get("formName");
              Integer formContentId   = (Integer)formEntry.get("formContentId");
              String originAddress   = (String)formEntry.get("originAddress");
              String userIP       = (String)formEntry.get("userIP");
              String userAgent     = (String)formEntry.get("userAgent");
              String userName     = principalName;
              Date registrationDate  = new Date();
             
              Map formEntryValues   = (Map)formEntry.get("formEntryValues");
             
              logger.info("formName:" + formName);
              logger.info("formContentId:" + formContentId);
              logger.info("originAddress:" + originAddress);
              logger.info("userIP:" + userIP);
              logger.info("userAgent:" + userAgent);

              logger.info("formEntryValues:" + formEntryValues);

              List formEntryValueVOList = new ArrayList();
              Iterator formEntryValuesIterator = formEntryValues.keySet().iterator();
              while(formEntryValuesIterator.hasNext())
              {
                String name = (String)formEntryValuesIterator.next();
                if(name != null && !name.equals(""))
                {
                  String value = (String)formEntryValues.get(name);
                  FormEntryValueVO formEntryValueVO = new FormEntryValueVO();
                  formEntryValueVO.setName(name);
                  formEntryValueVO.setValue(value);
                  formEntryValueVOList.add(formEntryValueVO);
                }
                else
                {
                  logger.warn("No name in variable - skipping");
                }
              }
             
              FormEntryVO formEntryVO = new FormEntryVO();
              formEntryVO.setFormContentId(formContentId);
              formEntryVO.setFormName(formName);
              formEntryVO.setOriginAddress(originAddress);
              formEntryVO.setUserAgent(userAgent);
              formEntryVO.setUserIP(userIP);
              formEntryVO.setUserName(userName);
              formEntryVO.setRegistrationDateTime(registrationDate);

              FormEntry newFormEntry = null;
             
              Database db = CastorDatabaseService.getDatabase();
              ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();

              beginTransaction(db);
              try
              {
                newFormEntry = formEntryController.create(formEntryVO, formEntryValueVOList, db);
                               
                  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());
              }
             
             
              Database db2 = CastorDatabaseService.getDatabase();

              beginTransaction(db2);
              try
              {
                newFormEntry = formEntryController.getFormEntryWithId(newFormEntry.getFormEntryId(), db2);

                List digitalAssets = (List)formEntry.get("digitalAssets");
                logger.info("digitalAssets:" + digitalAssets);
                if(digitalAssets != null)
                {
                  Iterator digitalAssetIterator = digitalAssets.iterator();
                  while(digitalAssetIterator.hasNext())
                  {
                      RemoteAttachment remoteAttachment = (RemoteAttachment)digitalAssetIterator.next();
                    logger.info("digitalAssets in ws:" + remoteAttachment);
                   
                    FormEntryAssetVO newAsset = new FormEntryAssetVO();
              newAsset.setContentType(remoteAttachment.getContentType());
              newAsset.setAssetKey(remoteAttachment.getName());
              newAsset.setFileName(remoteAttachment.getFileName());
              newAsset.setFileSize(new Integer(new Long(remoteAttachment.getBytes().length).intValue()));
              byte[] bytes = remoteAttachment.getBytes();
              InputStream is = new ByteArrayInputStream(bytes);
   
              formEntryController.createAsset(newAsset, newFormEntry, is, newFormEntry.getId(), principal, db2);
                }  
                }

                  commitTransaction(db2);
              }
              catch(Exception e)
              {
                  logger.error("An error occurred so we should not completes the transaction:" + e, e);
                  rollbackTransaction(db2);
                  throw new SystemException(e.getMessage());
              }

          }
          logger.info("Done with site nodes..");
        }
        catch(Throwable e)
        {
          status = new Boolean(false);
            logger.error("En error occurred when we tried to create a new siteNode:" + e.getMessage(), e);
        }
       
        updateCaches();

        return status;
    }

    /**
     * Deletes a form entry.
     */
   
    public Boolean deleteFormEntry(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("Deleting form entry through webservice....");
        logger.info("******************************************");
       
        logger.info("principalName:" + principalName);
        logger.info("inputsArray:" + inputsArray);
        //logger.warn("contents:" + contents);
       
        try
        {
      final DynamicWebserviceSerializer serializer = new DynamicWebserviceSerializer();
            Map content = (Map) serializer.deserialize(inputsArray);
          logger.info("content:" + content);

            initializePrincipal(principalName);
           
            Integer formEntryId = (Integer)content.get("formEntryId");
            Boolean forceDelete = (Boolean)content.get("forceDelete");
            if(forceDelete == null)
              forceDelete = new Boolean(false);
                       
            logger.info("formEntryId:" + formEntryId);
           
            FormEntryVO formEntryVO = new FormEntryVO();
            formEntryVO.setFormEntryId(formEntryId);

            FormEntryController.getController().delete(formEntryVO);
                          
          logger.info("Done with contents..");

        }
        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.RemoteFormServiceImpl

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.