Package com.apress.progwt.server.gwt

Source Code of com.apress.progwt.server.gwt.HibernateFilter

/*
* Copyright 2008 Jeff Dwyer
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.apress.progwt.server.gwt;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;

import org.apache.log4j.Logger;
import org.hibernate.Hibernate;
import org.hibernate.collection.PersistentBag;
import org.hibernate.collection.PersistentList;
import org.hibernate.collection.PersistentMap;
import org.hibernate.collection.PersistentSet;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.proxy.LazyInitializer;

public class HibernateFilter {
    private static final Logger log = Logger
            .getLogger(HibernateFilter.class);

    public static Object filter(Object instance) {
        if (instance == null) {
            return instance;
        }
        if (instance instanceof Date) {
            return new java.util.Date(((java.util.Date) instance)
                    .getTime());
        }

        if (instance instanceof PersistentSet) {
            HashSet<Object> hashSet = new HashSet<Object>();
            PersistentSet persSet = (PersistentSet) instance;
            if (persSet.wasInitialized()) {
                hashSet.addAll(persSet);
            }
            return hashSet;
        }
        if (instance instanceof PersistentList) {
            ArrayList<Object> arrayList = new ArrayList<Object>();
            PersistentList persList = (PersistentList) instance;
            if (persList.wasInitialized()) {
                arrayList.addAll(persList);
            }
            return arrayList;
        }
        if (instance instanceof PersistentBag) {
            ArrayList<Object> arrayList = new ArrayList<Object>();
            PersistentBag persBag = (PersistentBag) instance;
            if (persBag.wasInitialized()) {
                arrayList.addAll(persBag);
            }
            return arrayList;
        }
        if (instance instanceof PersistentMap) {
            HashMap<Object, Object> hashMap = new HashMap<Object, Object>();
            PersistentMap persMap = (PersistentMap) instance;
            if (persMap.wasInitialized()) {
                hashMap.putAll(persMap);
            }
            return hashMap;
        }
        if (instance.getClass().getName().contains("CGLIB")) {

            if (Hibernate.isInitialized(instance)) {

                try {
                    HibernateProxy hp = (HibernateProxy) instance;
                    LazyInitializer li = hp.getHibernateLazyInitializer();
                    log.warn("On The Fly initialization: "
                            + li.getEntityName());
                    return li.getImplementation();

                } catch (ClassCastException c) {
                    log.error("error casting to HibernateProxy "
                            + instance);
                    return null;
                }

                // Hibernate.initialize(instance);
                //
                //              
                // log.warn("\nentity: " + cg.getEntityName()
                // + "\nidentifier" + cg.getIdentifier()
                // + "\nimplemenation " + cg.getImplementation());
                //
                // log.warn("On The Fly initialization: " + instance
                // + " now: " + instance.getClass().getName());
                //
                // if (instance instanceof ReallyCloneable) {
                // log.debug(instance.getClass().getName()
                // + " CGLIB Cloning " + instance);
                // return ((ReallyCloneable) instance).clone();
                // } else {
                // log
                // .warn("Initialized, but doesn't implement
                // ReallyCloneable"
                // + instance.getClass()
                // + " "
                // + instance.getClass().getName());
                // throw new CouldntFixCGLIBException(
                // instance.getClass()
                // + " must implement ReallyCloneable if we're to fix
                // it.");
                // }
            } else {
                log.debug("Uninitialized CGLIB");
                return null;
            }
        }

        return instance;
    }

}
TOP

Related Classes of com.apress.progwt.server.gwt.HibernateFilter

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.