Package org.infoglue.cms.util.workflow.hibernate

Source Code of org.infoglue.cms.util.workflow.hibernate.InfoglueHibernatePropertySetDAOImpl

package org.infoglue.cms.util.workflow.hibernate;

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.infoglue.cms.controllers.kernel.impl.simple.LuceneController;
import org.infoglue.deliver.util.Timer;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;

import com.opensymphony.module.propertyset.PropertyException;
import com.opensymphony.module.propertyset.hibernate.HibernatePropertySetDAO;
import com.opensymphony.module.propertyset.hibernate.PropertySetItem;


/**
* Quickfix
*/
public class InfoglueHibernatePropertySetDAOImpl implements HibernatePropertySetDAO {

    private final static Logger logger = Logger.getLogger(InfoglueHibernatePropertySetDAOImpl.class.getName());
   
    /**
   *
   */
    private SessionFactory sessionFactory;

  /**
   *
   */
    public InfoglueHibernatePropertySetDAOImpl(SessionFactory sessionFactory) {
     
    this.sessionFactory = sessionFactory;
    }

  /**
   *
   */
  public void setImpl(PropertySetItem item, boolean isUpdate) {
        Session session = null;
       
        String entityNameIdKey = "" + item.getEntityName() + "_" + item.getEntityId();
      logger.info("setImpl....:" + entityNameIdKey);
      logger.info("setImpl....:" + item.getKey() + "=" + item.getStringVal());

      Map<String,Object> keyMap = entityNameIdKeyMap.get(entityNameIdKey);
        Map<String,Object> valueMap = entityNameIdValueMap.get(entityNameIdKey);
       
        //logger.info("entityNameIdValueMap:" + entityNameIdValueMap);
       
        //logger.info("valueMap:" + valueMap);
      
        if(valueMap != null)
        {
            //logger.info("Removing :" + item.getKey());
          valueMap.remove(item.getKey());
        }
       
        if(keyMap != null)
        {
          //logger.info("Removing knowledge of " + item.getKey() + " so that it will get search for in the database");
          if(keyMap.containsKey(item.getKey()))
          {
            keyMap.remove(item.getKey());           
              //logger.info("Rereading object...");
            findByKey(item.getEntityName(), item.getEntityId(), item.getKey());
          }
          else
          {
            keyMap.put(item.getKey(), true)
              //logger.info("Rereading object...");
            findByKey(item.getEntityName(), item.getEntityId(), item.getKey());
          }
        }
       
       
        try
        {
          session = this.sessionFactory.openSession();
                   
            if (isUpdate) {
                session.update(item);
            } else {
                session.save(item);
            }

            session.flush();
        } catch (HibernateException he) {
            throw new PropertyException("Could not save key '" + item.getKey() + "':" + he.getMessage());
        } finally {
            try {
                if (session != null) {
                    if (!session.connection().getAutoCommit()) {
                        session.connection().commit();
                    }

                    session.close();
                }
            } catch (Exception e) {
            }
        }
       
        if(valueMap != null)
        {
            //logger.info("Removing :" + item.getKey());
          valueMap.put(item.getKey(), item);
        }
    }

    public Collection getKeys(String entityName, Long entityId, String prefix, int type) {
        //logger.info("getKeys");

        Session session = null;
        List list = null;

        try {
            session = this.sessionFactory.openSession();
            list = InfoglueHibernatePropertySetDAOUtils.getKeysImpl(session, entityName, entityId, prefix, type);
        } catch (HibernateException e) {
            list = Collections.EMPTY_LIST;
        } finally {
            try {
                if (session != null) {
                    session.flush();
                    session.close();
                }
            } catch (Exception e) {
            }
        }

        return list;
    }

    public PropertySetItem create(String entityName, long entityId, String key) {
        return new InfogluePropertySetItemImpl(entityName, entityId, key);
    }

    private static Map<String, Map<String,Object>> entityNameIdKeyMap = new HashMap<String, Map<String,Object>>();
    private static Map<String, Map<String,Object>> entityNameIdValueMap = new HashMap<String, Map<String,Object>>();
   
    public PropertySetItem findByKey(String entityName, Long entityId, String key)
    {
        Timer t = new Timer();
       
        String entityNameIdKey = "" + entityName + "_" + entityId;
        //logger.info("findByKey: " + entityNameIdKey);
        Map<String,Object> keyMap = entityNameIdKeyMap.get(entityNameIdKey);
        Map<String,Object> valueMap = entityNameIdValueMap.get(entityNameIdKey);
       
        //logger.info("entityNameIdValueMap:" + entityNameIdValueMap);
       
        if(keyMap == null)
        {
          keyMap = new HashMap<String,Object>();
          entityNameIdKeyMap.put(entityNameIdKey, keyMap);
          List<String> keyList = (List<String>)getKeys(entityName, entityId, null, 0);
          for(String currentKey : keyList)
          {
            //logger.info("Found:" + currentKey);
            keyMap.put(currentKey, true);
          }
        }
        if(valueMap == null)
        {
          valueMap = new HashMap<String,Object>();
          entityNameIdValueMap.put(entityNameIdKey, valueMap);
        }
       
        /*
        if(valueMap != null && valueMap.get(key) != null)
        {
          PropertySetItem item = (PropertySetItem)valueMap.get(key);
            if(key.equals("workflow_status") || key.indexOf("languageId") > -1)
            {
              logger.info("cached Key:" + key);
              logger.info("cached Item:" + item.getType());
              logger.info("cached Item:" + item.getStringVal());
            }
          //logger.info("Cached item exists:" + key);
          return item;
        }
        if(keyMap != null && keyMap.get(key) == null)
        {
          //logger.info("No key in cached key map... returning null for:" + key);
          return null;
        }
        */
       
       
        Session session = null;
        PropertySetItem item = null;

        try {
            session = this.sessionFactory.openSession();
            item = InfoglueHibernatePropertySetDAOUtils.getItem(session, entityName, entityId, key);
            session.flush();
        } catch (HibernateException e) {
            //t.printElapsedTime("FindByKey empty: " + entityName + ":" + entityId + ":" + key);
          //e.printStackTrace();
           
            return null;
        } finally {
            try {
                if (session != null) {
                    session.close();
                }
            } catch (Exception e) {
            }
        }
       
        if(valueMap != null)
          valueMap.put(key, item);
        if(key.equals("workflow_status") || key.indexOf("languageId") > -1)
        {
          logger.info("Key:" + key);
          logger.info("Item:" + item.getType());
          logger.info("Item:" + item.getStringVal());
        }

        //t.printElapsedTime("FindByKey: " + entityName + ":" + entityId + ":" + key);
        return item;
    }

    public void remove(String entityName, Long entityId) {
      logger.info("remove:" + entityName + "_" + entityId);
        Session session = null;

        try {
            session = this.sessionFactory.openSession();

            //hani: todo this needs to be optimised rather badly, but I have no idea how
            Collection keys = getKeys(entityName, entityId, null, 0);
            Iterator iter = keys.iterator();

            while (iter.hasNext()) {
                String key = (String) iter.next();
               
                String entityNameIdKey = "" + entityName + "_" + entityId;
                Map<String,Object> valueMap = entityNameIdValueMap.get(entityNameIdKey);
                if(valueMap != null)
                {
                  logger.info("Removing " + key);
                  valueMap.remove(key);
                }
               
                session.delete(InfoglueHibernatePropertySetDAOUtils.getItem(session, entityName, entityId, key));
            }

            session.flush();
        } catch (HibernateException e) {
            throw new PropertyException("Could not remove all keys: " + e.getMessage());
        } finally {
            try {
                if (session != null) {
                    if (!session.connection().getAutoCommit()) {
                        session.connection().commit();
                    }

                    session.close();
                }
            } catch (Exception e) {
            }
        }
    }

    public void remove(String entityName, Long entityId, String key) {
      logger.info("Remove full");
        Session session = null;

        try {
            session = this.sessionFactory.openSession();
           
            String entityNameIdKey = "" + entityName + "_" + entityId;
            Map<String,Object> valueMap = entityNameIdValueMap.get(entityNameIdKey);
            if(valueMap != null)
            {
              logger.info("Removing " + key);
              valueMap.remove(key);
            }

            session.delete(InfoglueHibernatePropertySetDAOUtils.getItem(session, entityName, entityId, key));
            session.flush();
        } catch (HibernateException e) {
            throw new PropertyException("Could not remove key '" + key + "': " + e.getMessage());
        } finally {
            try {
                if (session != null) {
                    if (!session.connection().getAutoCommit()) {
                        session.connection().commit();
                    }

                    session.close();
                }
            } catch (Exception e) {
            }
        }
    }
}
TOP

Related Classes of org.infoglue.cms.util.workflow.hibernate.InfoglueHibernatePropertySetDAOImpl

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.