Subversion Repositories bacoAlunos

Rev

Rev 1310 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.utils;

import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.UserImpl;
import pt.utl.ist.berserk.logic.serviceManager.ServiceParameters;

import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.StringTokenizer;

/**
 * @author Jorge Machado
 * @date 3/Mar/2008
 * @time 11:41:51
 * @see pt.estgp.estgweb.utils
 */

public class ReflectionBean {

    private 1.5.0/docs/api/java/lang/String.html">String path;
    private 1.5.0/docs/api/java/lang/String.html">String name;
    private 1.5.0/docs/api/java/lang/String.html">String[] methods;

    public ReflectionBean(1.5.0/docs/api/java/lang/String.html">String path)
    {
        this.path = path;
        parse();
    }

    private void parse()
    {
        1.5.0/docs/api/java/util/StringTokenizer.html">StringTokenizer ts = new 1.5.0/docs/api/java/util/StringTokenizer.html">StringTokenizer(path,".");
        methods = new 1.5.0/docs/api/java/lang/String.html">String[ts.countTokens() - 1];
        name = ts.nextToken();
        int i = 0;
        while(ts.hasMoreTokens())
        {
            methods[i] = ts.nextToken();
            i++;
        }
        for(i = 0; i < methods.length; i++)
        {
            int dif = (int)methods[i].charAt(0) - 'a';
            char firstChar = (char)(((int)'A') + dif);
            methods[i] = "get" + firstChar + methods[i].substring(1);
        }
    }

    public 1.5.0/docs/api/java/lang/String.html">String getName()
    {
        return name;
    }

    public 5+0%2Fdocs%2Fapi+Object">Object invoke(5+0%2Fdocs%2Fapi+Object">Object obj) throws 1.5.0/docs/api/java/lang/NoSuchMethodException.html">NoSuchMethodException, 1.5.0/docs/api/java/lang/IllegalAccessException.html">IllegalAccessException, 1.5.0/docs/api/java/lang/reflect/InvocationTargetException.html">InvocationTargetException
    {
        5+0%2Fdocs%2Fapi+Object">Object returnObj = obj;
        for(int i = 0; i < methods.length; i++)
        {
            1.5.0/docs/api/java/lang/reflect/Method.html">Method m = returnObj.getClass().getMethod(methods[i],null);
            returnObj = m.invoke(returnObj,null);
        }
        return returnObj;
    }

    public static void main(1.5.0/docs/api/java/lang/String.html">String[] args) throws 1.5.0/docs/api/java/lang/IllegalAccessException.html">IllegalAccessException, 1.5.0/docs/api/java/lang/NoSuchMethodException.html">NoSuchMethodException, 1.5.0/docs/api/java/lang/reflect/InvocationTargetException.html">InvocationTargetException
    {
        Announcement a = DomainObjectFactory.createAnnouncementImpl();
        a.setOwner(new UserImpl());
        a.getOwner().setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
        a.setStartDate(new 5+0%2Fdocs%2Fapi+Date">Date());
        ReflectionBean r = new ReflectionBean("objectView");
        1.5.0/docs/api/java/lang/System.html">System.out.println(r.invoke(a));
        r = new ReflectionBean("objectView.owner.saveDate");
        1.5.0/docs/api/java/lang/System.html">System.out.println(r.invoke(a));
    }

    public static 1.5.0/docs/api/java/io/Serializable.html">Serializable lookup(ServiceParameters serviceParameters, 1.5.0/docs/api/java/lang/String.html">String bean) throws 1.5.0/docs/api/java/lang/NoSuchMethodException.html">NoSuchMethodException, 1.5.0/docs/api/java/lang/IllegalAccessException.html">IllegalAccessException, 1.5.0/docs/api/java/lang/reflect/InvocationTargetException.html">InvocationTargetException {
        ReflectionBean r = new ReflectionBean(bean);
        5+0%2Fdocs%2Fapi+Object">Object serializableObjectContainer = serviceParameters.getParameter(r.getName());
        1.5.0/docs/api/java/io/Serializable.html">Serializable serializable = (1.5.0/docs/api/java/io/Serializable.html">Serializable) r.invoke(serializableObjectContainer);
        return serializable;
    }


}