[jboss-svn-commits] JBL Code SVN: r12286 - labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jun 1 12:09:03 EDT 2007


Author: wrzep
Date: 2007-06-01 12:09:03 -0400 (Fri, 01 Jun 2007)
New Revision: 12286

Modified:
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/ProxyUtils.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/SyncProxy.java
Log:
JBLAB-867 - fixed


Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/ProxyUtils.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/ProxyUtils.java	2007-06-01 15:59:01 UTC (rev 12285)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/ProxyUtils.java	2007-06-01 16:09:03 UTC (rev 12286)
@@ -141,12 +141,30 @@
 			
 		} catch (Exception e) {
 		
-			log.debug("Could not instantinate: " + type.getName(), e);
+			log.warn("Could not instantinate: " + type.getName(), e);
 			
 			return null;
 		}
 	}
 
+	public static Class<?> getInterfaceClass(Class<? extends Object> rwClass) {
+		
+		String classString = rwClass.getName().
+					replaceFirst("project.rw", "project").replaceFirst("RW","");
+
+		Class<?> retClass;
+		try {
+			retClass = Thread.currentThread().getContextClassLoader().
+																loadClass(classString);
+		} catch (ClassNotFoundException e) {
+			log.warn(e);
+			return null;
+		}
+		
+		return retClass;
+	}
+
+	
 	public static boolean isRWType(Class<? extends Object> type) {
 		
 		return type.getPackage().getName().equals("org.jboss.forge.common.projects.project.rw");
@@ -179,5 +197,38 @@
 	
 	private ProxyUtils() {}
 
+	public static Method getSetter(Object obj, String getterName, Class<? extends Object> paramClass) {
+		
+		try {
+			return obj.getClass().getMethod(getSetterName(getterName), getInterfaceClass(paramClass));
+		} catch (SecurityException e) {
+			log.warn(e);
+		} catch (NoSuchMethodException e) {
+			log.warn(e);
+		}
+		
+		return null;
+	}
+
 	
+
+	private static String getSetterName(String getterName) {
+		
+		if (getterName.startsWith("get")) {
+			return getterName.replaceFirst("get", "set");
+		}
+		
+		if (getterName.startsWith("is")) {
+			return getterName.replaceFirst("is", "set");
+		}
+		
+		return null;
+	}
+
+	public static void invoke(Object obj, Method m, Object result) throws Throwable {
+		
+		Object[] arr = new Object[1];
+		arr[0] = result;
+		invoke(obj, m, arr);
+	}
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/SyncProxy.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/SyncProxy.java	2007-06-01 15:59:01 UTC (rev 12285)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/SyncProxy.java	2007-06-01 16:09:03 UTC (rev 12286)
@@ -114,6 +114,11 @@
     				&& !ProxyUtils.isSimpleType(m.getReturnType())) {
     			
     			result = ProxyUtils.getRWType(m.getReturnType());
+    			
+    			if (result != null) {
+    				Method setter = ProxyUtils.getSetter(obj, m.getName(), result.getClass());
+    				ProxyUtils.invoke(obj, setter, result);
+    			}
     		}
     		
     		if (!ProxyUtils.isGetter(m) && !ProxyUtils.isSetter(m)) {




More information about the jboss-svn-commits mailing list