001/* 
002 * JKNIV, utils - Helper utilities for jdk code.
003 * 
004 * Copyright (C) 2017, the original author or authors.
005 *
006 * This library is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 2.1 of the License.
010 * 
011 * This library is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 * 
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with this library; if not, write to the Free Software Foundation, Inc., 
018 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
019 */
020package net.sf.jkniv.reflect.beans;
021
022public class ObjectProxyFactory
023{
024    /**
025     * Build proxy object for class type of <code>className</code>
026     * @param className canonical name for class name
027     * @param <T> Type of result object
028     * @return Proxy for instanceof T
029     */
030    public static <T> ObjectProxy<T> of(String className)
031    {
032        return new DefaultObjectProxy<T>(className);
033    }
034        
035    /**
036     * Build proxy object for instance of object <code>target</code>
037     * @param target instance of object that proxy will be represent
038     * @param <T> Type of result object
039     * @return Proxy for <code>target</code>
040     */
041    public static <T> ObjectProxy<T> of(T target)
042    {
043        return new DefaultObjectProxy<T>(target);
044    }
045    
046    /**
047     * Build proxy object for class type of <code>targetClazz</code>
048     * @param targetClass target class for object proxy
049     * @param <T> Type of result object
050     * @return Proxy for instanceof <code>targetClass</code>
051     */
052    public static <T> ObjectProxy<T> of(Class<T> targetClass)
053    {
054        return new DefaultObjectProxy<T>(targetClass);
055    }
056    
057    /*
058      TODO implements nested supports
059    public static <T> ObjectProxy<T> newInstanceNested(String className)
060    {
061        return new DefaultObjectProxy<T>(className);
062    }
063    
064    public static <T> ObjectProxy<T> newInstanceNested(T target)
065    {
066        return new DefaultObjectProxy<T>(target);
067    }
068    
069    public static <T> ObjectProxy<T> newInstanceNested(Class<T> targetClazz)
070    {
071        return new DefaultObjectProxy<T>(targetClazz);
072    }
073    */
074    
075}