[overlord-commits] Overlord SVN: r183 - in cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src: test/org/jboss/tools/overlord/jbossesb/model/actions and 1 other directory.

overlord-commits at lists.jboss.org overlord-commits at lists.jboss.org
Thu Jul 17 10:54:11 EDT 2008


Author: objectiser
Date: 2008-07-17 10:54:11 -0400 (Thu, 17 Jul 2008)
New Revision: 183

Modified:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/Messages.properties
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SetStateAction.java
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/SetStateActionTest.java
Log:
Enhanced validation of 'variable' property on the SetStateAction to accommodate navigation of bean properties expressed as a dot notation. Also validates that the properties are read or writable as appropriate.

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/Messages.properties
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/Messages.properties	2008-07-17 13:25:20 UTC (rev 182)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/Messages.properties	2008-07-17 14:54:11 UTC (rev 183)
@@ -25,12 +25,15 @@
 _MUST_DEFINE_SINGLE_WHILE_PATH=While action must have a single 'while' path
 _MUST_DEFINE_SINGLE_WHILE_EXIT=While action must have a single 'exit' path
 _MUST_INITIATE_ROOT=Must 'initiate' root service descriptor for category '{0}' and name '{1}'
-_NOT_FOUND_VARIABLE=Variable '{0}' could not be found on session type '{1}'
+_NOT_FOUND_VARIABLE=Variable '{0}' could not be found on class '{1}'
+_NOT_FOUND_VARIABLE_PROPERTY=Variable '{0}' contains property '{1}' that could not be found on class '{2}'
 _NOT_FOUND_PERFORM_CREATE_SESSION=Perform action can only invoke a service descriptor that starts with a CreateSessionAction
+_NOT_READABLE_PROPERTY=Property '{0}' on class '{1}' is not readable
 _NOT_SPECIFIED_CONVERSATION_TYPE=Conversation type must be specified on root service descriptor
 _NOT_SPECIFIED_CONVERSATION_TYPE_ROLE=Conversation type '{0}' must specify a role name following the '@' symbol
 _NOT_SPECIFIED_PROPERTY=Property '{0}' must be specified
 _NOT_SPECIFIED_REQ_RESP_EPR=Send does not contain request service category/name or response client EPR
+_NOT_WRITABLE_PROPERTY=Property '{0}' on class '{1}' is not writable
 _MUST_BE_FIRST_ACTION='{0}' action must be first in the service descriptor
 _MUST_SPECIFY_STATE_OR_MESSAGE_EXPRESSION=Must specify either a State OR Message based expression
 _PARALLEL_MORE_THAN_TWO_PATHS=Parallel action must specify two or more paths

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SetStateAction.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SetStateAction.java	2008-07-17 13:25:20 UTC (rev 182)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/actions/SetStateAction.java	2008-07-17 14:54:11 UTC (rev 183)
@@ -87,33 +87,69 @@
 			// Check that variable defined on session class
 			Class<?> cls=getService().getSessionClass();
 			
-			if (cls != null) {
-				try {
-					java.beans.BeanInfo bi=java.beans.Introspector.getBeanInfo(cls);
-					
-					boolean f_found=false;
-					
-					java.beans.PropertyDescriptor[] pds=bi.getPropertyDescriptors();
-					
-					for (int i=0; f_found==false && pds != null &&
-								i < pds.length; i++) {
-						if (pds[i].getName().equals(variable)) {
-							f_found = true;
+			java.util.StringTokenizer st=new java.util.StringTokenizer(variable, ".");
+			
+			while (st.hasMoreTokens()) {
+				String token=st.nextToken();
+				
+				if (cls != null) {
+					try {
+						java.beans.BeanInfo bi=java.beans.Introspector.getBeanInfo(cls);
+						
+						java.beans.PropertyDescriptor[] pds=bi.getPropertyDescriptors();
+						java.beans.PropertyDescriptor pd=null;
+						
+						for (int i=0; pd == null && pds != null &&
+									i < pds.length; i++) {
+							if (pds[i].getName().equals(token)) {
+								pd = pds[i];
+							}
 						}
+						
+						if (pd == null) {
+							
+							if (variable.equals(token)) {
+								l.error(this, org.scribble.util.MessageUtil.format(
+										java.util.PropertyResourceBundle.getBundle(
+										"org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
+											"_NOT_FOUND_VARIABLE",
+											new String[]{variable, cls.getName()}), null);
+							} else {
+								l.error(this, org.scribble.util.MessageUtil.format(
+										java.util.PropertyResourceBundle.getBundle(
+										"org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
+											"_NOT_FOUND_VARIABLE_PROPERTY",
+											new String[]{variable, token, cls.getName()}), null);
+							}
+						} else if (st.hasMoreTokens()) {
+							// Check property can be read
+							if (pd.getReadMethod() == null) {
+								l.error(this, org.scribble.util.MessageUtil.format(
+										java.util.PropertyResourceBundle.getBundle(
+										"org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
+											"_NOT_READABLE_PROPERTY",
+											new String[]{pd.getName(), cls.getName()}), null);
+							}
+						} else {
+							// Check property can be written
+							if (pd.getWriteMethod() == null) {
+								l.error(this, org.scribble.util.MessageUtil.format(
+										java.util.PropertyResourceBundle.getBundle(
+										"org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
+											"_NOT_WRITABLE_PROPERTY",
+											new String[]{pd.getName(), cls.getName()}), null);
+							}
+						}
+						
+						if (pd != null) {
+							cls = pd.getPropertyType();
+						}
+					} catch(Exception e) {
+						logger.log(java.util.logging.Level.SEVERE,
+								"Failed to check if variable '"+
+								variable+"' exists on session class '"+
+								cls+"'", e);
 					}
-					
-					if (f_found == false) {
-						l.error(this, org.scribble.util.MessageUtil.format(
-								java.util.PropertyResourceBundle.getBundle(
-								"org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
-									"_NOT_FOUND_VARIABLE",
-									new String[]{variable, cls.getName()}), null);					
-					}
-				} catch(Exception e) {
-					logger.log(java.util.logging.Level.SEVERE,
-							"Failed to check if variable '"+
-							variable+"' exists on session class '"+
-							cls+"'", e);
 				}
 			}
 		}

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/SetStateActionTest.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/SetStateActionTest.java	2008-07-17 13:25:20 UTC (rev 182)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/test/org/jboss/tools/overlord/jbossesb/model/actions/SetStateActionTest.java	2008-07-17 14:54:11 UTC (rev 183)
@@ -86,8 +86,8 @@
 	}
 
 	public void testValidateVariableIsClassProperty() {
-		String varName="class";
-		Class<?> cls=java.lang.Object.class;
+		String varName="writableProperty";
+		Class<?> cls=TestClass2.class;
 		
 		TestESBService service=new TestESBService();
 		service.setRoot(true);
@@ -113,9 +113,105 @@
 		}
 	}
 
+	public void testValidateMultiPartVariableIsClassWritableProperty() {
+		String varName="testClass2.writableProperty";
+		Class<?> cls=TestClass1.class;
+		
+		TestESBService service=new TestESBService();
+		service.setRoot(true);
+		service.setSessionClass(cls);
+
+		java.util.Map<String,String> props=new java.util.Hashtable<String,String>();
+		props.put(SetStateAction.VARIABLE, varName);
+		props.put(SetStateAction.STATE_EXPRESSION, "");
+		
+		org.w3c.dom.Element elem=ESBActionTestUtil.getAction(null,
+							props, null);
+		
+		SetStateAction action=new SetStateAction(service, elem);
+		
+		service.getActions().add(action);
+		
+		TestModelListener l=new TestModelListener();
+		
+		action.validate(l);
+		
+		if (l.isValid() == false) {
+			fail(l.invalidMessage());
+		}
+	}
+
+	public void testValidateMultiPartVariableIsClassNotWritableProperty() {
+		String varName="testClass2.readableProperty";
+		Class<?> cls=TestClass1.class;
+		
+		TestESBService service=new TestESBService();
+		service.setRoot(true);
+		service.setSessionClass(cls);
+
+		java.util.Map<String,String> props=new java.util.Hashtable<String,String>();
+		props.put(SetStateAction.VARIABLE, varName);
+		props.put(SetStateAction.STATE_EXPRESSION, "");
+		
+		org.w3c.dom.Element elem=ESBActionTestUtil.getAction(null,
+							props, null);
+		
+		SetStateAction action=new SetStateAction(service, elem);
+		
+		service.getActions().add(action);
+		
+		TestModelListener l=new TestModelListener();
+		
+		l.addExpectedError(org.scribble.util.MessageUtil.format(
+							java.util.PropertyResourceBundle.getBundle(
+						"org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
+							"_NOT_WRITABLE_PROPERTY",
+						new String[]{"readableProperty", TestClass2.class.getName()}));
+		
+		action.validate(l);
+		
+		if (l.isValid() == false) {
+			fail(l.invalidMessage());
+		}
+	}
+
+	public void testValidateMultiPartVariableIsClassNotReadableProperty() {
+		String varName="testClass2.writableProperty";
+		Class<?> cls=TestClass3.class;
+		
+		TestESBService service=new TestESBService();
+		service.setRoot(true);
+		service.setSessionClass(cls);
+
+		java.util.Map<String,String> props=new java.util.Hashtable<String,String>();
+		props.put(SetStateAction.VARIABLE, varName);
+		props.put(SetStateAction.STATE_EXPRESSION, "");
+		
+		org.w3c.dom.Element elem=ESBActionTestUtil.getAction(null,
+							props, null);
+		
+		SetStateAction action=new SetStateAction(service, elem);
+		
+		service.getActions().add(action);
+		
+		TestModelListener l=new TestModelListener();
+		
+		l.addExpectedError(org.scribble.util.MessageUtil.format(
+							java.util.PropertyResourceBundle.getBundle(
+						"org.jboss.tools.overlord.jbossesb.model.actions.Messages"),
+							"_NOT_READABLE_PROPERTY",
+						new String[]{"testClass2", TestClass3.class.getName()}));
+		
+		action.validate(l);
+		
+		if (l.isValid() == false) {
+			fail(l.invalidMessage());
+		}
+	}
+
 	public void testValidateMissingExpression() {
-		String varName="class";
-		Class<?> cls=java.lang.Object.class;
+		String varName="writableProperty";
+		Class<?> cls=TestClass2.class;
 		
 		TestESBService service=new TestESBService();
 		service.setRoot(true);
@@ -147,8 +243,8 @@
 	}
 	
 	public void testValidateBothExpressions() {
-		String varName="class";
-		Class<?> cls=java.lang.Object.class;
+		String varName="writableProperty";
+		Class<?> cls=TestClass2.class;
 		
 		TestESBService service=new TestESBService();
 		service.setRoot(true);
@@ -182,8 +278,8 @@
 	}
 	
 	public void testValidateMessageExpression() {
-		String varName="class";
-		Class<?> cls=java.lang.Object.class;
+		String varName="writableProperty";
+		Class<?> cls=TestClass2.class;
 		
 		TestESBService service=new TestESBService();
 		service.setRoot(true);
@@ -228,4 +324,33 @@
 			fail("Action is not flagged as a 'SessionBased'");
 		}
 	}
+	
+	public class TestClass1 {
+		public TestClass1() {
+		}
+		
+		public TestClass2 getTestClass2() {
+			return(null);
+		}
+	}
+	
+	public class TestClass2 {
+		public TestClass2() {
+		}
+		
+		public String getReadableProperty() {
+			return(null);
+		}
+		
+		public void setWritableProperty(String str) {
+		}
+	}
+	
+	public class TestClass3 {
+		public TestClass3() {
+		}
+		
+		public void setTestClass2(TestClass2 tc2) {
+		}
+	}
 }




More information about the overlord-commits mailing list