Package com.dottydingo.hyperion.service.persistence

Source Code of com.dottydingo.hyperion.service.persistence.SimpleBeanFilter

package com.dottydingo.hyperion.service.persistence;

import com.dottydingo.hyperion.api.ApiObject;
import com.dottydingo.hyperion.exception.InternalException;
import com.dottydingo.hyperion.service.pipeline.auth.AuthorizationContext;;
import net.sf.cglib.beans.BeanMap;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
*/
public class SimpleBeanFilter
{
    private Map<Class,BeanMap> beanMapMap = new HashMap<Class, BeanMap>();

    public <C extends ApiObject> C copy(C original, AuthorizationContext authorizationContext)
    {
        C copy = (C) createInstance(original.getClass());
        BeanMap beanMap = getBeanMap(copy);
        Set<String> set = beanMap.keySet();
        for (String propertyName : set)
        {
            if(authorizationContext.isReadable(propertyName))
                beanMap.put(copy,propertyName,beanMap.get(original,propertyName));
        }

        return copy;
    }

    private synchronized <C extends ApiObject> BeanMap getBeanMap(C object)
    {
        BeanMap beanMap = beanMapMap.get(object.getClass());
        if(beanMap == null)
        {
            beanMap = BeanMap.create(object);
            beanMapMap.put(object.getClass(),beanMap);
        }

        return beanMap;
    }

    private <C extends ApiObject> C createInstance(Class<C> type)
    {
        try
        {
            return type.newInstance();
        }
        catch (Exception e)
        {
            throw new InternalException("Error creating API instance.",e);
        }
    }
}
TOP

Related Classes of com.dottydingo.hyperion.service.persistence.SimpleBeanFilter

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.