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
;
}
}