You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2009/09/01 11:19:50 UTC
svn commit: r809918 - in
/myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog:
Blog.java JSFUtil.java Null.java
Author: werpu
Date: Tue Sep 1 09:19:50 2009
New Revision: 809918
URL: http://svn.apache.org/viewvc?rev=809918&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-3
added documentation added a tighter convenience method behavior
Modified:
myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java
myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/JSFUtil.java
myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Null.java
Modified: myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java?rev=809918&r1=809917&r2=809918&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java (original)
+++ myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java Tue Sep 1 09:19:50 2009
@@ -4,6 +4,8 @@
import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.scripting.loaders.java.ScriptingClass;
+import static org.apache.myfaces.javaloader.blog.JSFUtil.*;
+
/**
* @author werpu2
* @date: 01.09.2009
@@ -16,25 +18,25 @@
String title1 = "You can alter the code for this small blogging application on the fly, " +
"you even can add new classes on the fly and Grooy will pick it up";
+
String firstName = "";
String lastName = "";
String topic = "";
String content = "";
-
+
private Log getLog() {
return LogFactory.getLog(this.getClass());
}
-
public String addEntry() {
getLog().info("adding entry");
- Object service = JSFUtil.resolveVariable("javaBlogService");
+ Object service = JSFUtil.resolveVariable("javaBlogService");
- if (service == null) {
+ if (service == null) {
getLog().error("service not found");
} else {
getLog().info("service found");
@@ -47,13 +49,22 @@
entry.setLastName(lastName);
entry.setTopic(topic);
entry.setContent(content);
-
- if(service != null) {
- JSFUtil.executeMethod(service, "addEntry", new Cast(Object.class,entry));
- }
+ if (service != null) {
+ /*convenience method to call a method on an object dynamically
+ * executeMethod and cast are static imports which encapsule the
+ * ugly stuff the java introspection provides and reduce
+ * the loc down to sane levels
+ *
+ * note the behavior in case of calling errors
+ * is changed from the default managed behavior
+ * to an unmanaged behavior. This is mostly
+ * the same behavior you get from scripting engines!
+ *
+ */
+ executeMethod(service, "addEntry", cast(Object.class, entry));
+ }
-
//we stay on the same page
return null;
}
Modified: myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/JSFUtil.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/JSFUtil.java?rev=809918&r1=809917&r2=809918&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/JSFUtil.java (original)
+++ myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/JSFUtil.java Tue Sep 1 09:19:50 2009
@@ -12,12 +12,20 @@
/**
* @author werpu2
* @date: 01.09.2009
+ * <p/>
+ * A helper for JSF and introspection related tasks
*/
public class JSFUtil {
public JSFUtil() {
}
+ /**
+ * resolves a variable in the current facesContext
+ *
+ * @param beanName
+ * @return
+ */
public static Object resolveVariable(String beanName) {
Log log = LogFactory.getLog(JSFUtil.class);
Object facesContext = FacesContext.getCurrentInstance();
@@ -27,7 +35,7 @@
log.info("ElResolver Instance:" + elResolver.toString());
try {
- return executeFunction(elResolver, "getValue", new Cast(ClassUtils.classForName("javax.el.ELContext"), elContext), new Null(Object.class), new Cast(Object.class, beanName));
+ return executeFunction(elResolver, "getValue", cast(ClassUtils.classForName("javax.el.ELContext"), elContext), nullCast(Object.class), cast(Object.class, beanName));
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
@@ -35,15 +43,21 @@
}
+ /**
+ * executes a method
+ *
+ * @param obj the target object
+ * @param methodName the method name
+ * @param varargs a list of objects casts or nulls defining the parameter classes and its values
+ * if something occurs on introspection level an unmanaged exception is throw, just like
+ * it would happen in a scripting class
+ */
public static void executeMethod(Object obj, String methodName, Object... varargs) {
-
+
Class[] classes = new Class[varargs.length];
for (int cnt = 0; cnt < varargs.length; cnt++) {
- if (varargs[cnt] instanceof Null) {
- classes[cnt] = ((Null) varargs[cnt]).getNulledClass();
- varargs[cnt] = null;
- } else if (varargs[cnt] instanceof Cast) {
+ if (varargs[cnt] instanceof Cast) {
classes[cnt] = ((Cast) varargs[cnt]).getClazz();
varargs[cnt] = ((Cast) varargs[cnt]).getValue();
} else {
@@ -63,14 +77,22 @@
}
}
+ /**
+ * executes a function on a target object
+ *
+ * @param obj the target object
+ * @param methodName the method name
+ * @param varargs a list of objects casts or nulls defining the parameter classes and its values
+ * if something occurs on introspection level an unmanaged exception is throw, just like
+ * it would happen in a scripting class
+ * @return the result object for the function(method) call
+ * @throws RuntimeException an unmanaged runtime exception in case of an introspection error
+ */
public static Object executeFunction(Object obj, String methodName, Object... varargs) {
Class[] classes = new Class[varargs.length];
for (int cnt = 0; cnt < varargs.length; cnt++) {
- if (varargs[cnt] instanceof Null) {
- classes[cnt] = ((Null) varargs[cnt]).getNulledClass();
- varargs[cnt] = null;
- } else if (varargs[cnt] instanceof Cast) {
+ if (varargs[cnt] instanceof Cast) {
classes[cnt] = ((Cast) varargs[cnt]).getClazz();
varargs[cnt] = ((Cast) varargs[cnt]).getValue();
} else {
@@ -91,4 +113,13 @@
}
+
+ public static Cast cast(Class clazz, Object value) {
+ return new Cast(clazz, value);
+ }
+
+ public static Null nullCast(Class clazz) {
+ return new Null(clazz);
+ }
+
}
Modified: myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Null.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Null.java?rev=809918&r1=809917&r2=809918&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Null.java (original)
+++ myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Null.java Tue Sep 1 09:19:50 2009
@@ -1,17 +1,14 @@
package org.apache.myfaces.javaloader.blog;
/**
- * @author werpu2
- * @date: 01.09.2009
+ *
+ * Special cast case null
*/
-public class Null {
- Class nulledClass = null;
+public class Null extends Cast {
public Null(Class clazz) {
- nulledClass = clazz;
+ super(clazz, null);
}
- public Class getNulledClass() {
- return nulledClass;
- }
+
}