[zb4osgi-changeset] [scm] ZigBee 4 OSGi repository change: r526 - in /projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui: Command.java CommandActionPanel.java

scm-notify at zb4osgi.aaloa.org scm-notify at zb4osgi.aaloa.org
Fri Oct 19 09:49:48 CEST 2012


Author: stefano.lenzi
Date: Fri Oct 19 09:49:48 2012
New Revision: 526

Log:
Better exception handling when issuing a command on the network ( refs #139 )


Modified:
    projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui/Command.java
    projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui/CommandActionPanel.java

Modified: projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui/Command.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui/Command.java (original)
+++ projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui/Command.java Fri Oct 19 09:49:48 2012
@@ -36,6 +36,24 @@
  */
 public class Command {
 	
+	public class CommandParsingException extends IllegalArgumentException {
+		public String value;
+		public int index;
+		
+		public CommandParsingException(String v, int i, String msg, Throwable ex){
+			super(msg,ex);
+			index = i;
+			value = v;
+		}
+		
+		public CommandParsingException(String v, int i, String msg){
+			super(msg);
+			index = i;
+			value = v;
+		}
+		
+	}
+	
 	private Method method;
 	private Cluster cluster;
 	
@@ -57,17 +75,22 @@
 		Class<?>[] params = method.getParameterTypes();
 		Object[] objs = new Object[params.length];
 		for (int i = 0; i < objs.length; i++) {
-			if ( params[i].isAssignableFrom( long.class ) ) objs[i] = Long.decode(values[i]).longValue();
-			else if ( params[i].isAssignableFrom( int.class ) )objs[i] = Integer.decode(values[i]).intValue();
-			else if ( params[i].isAssignableFrom( short.class ) ) objs[i] = Short.decode(values[i]).shortValue();
-			else if ( params[i].isAssignableFrom( byte.class ) ) objs[i] = Byte.decode(values[i]).byteValue();
-			else if ( params[i].isAssignableFrom( double.class ) ) objs[i] = Double.valueOf(values[i]).doubleValue();
-			else if ( params[i].isAssignableFrom( float.class ) ) objs[i] = Float.valueOf(values[i]).floatValue();
-			else if ( params[i].isAssignableFrom( boolean.class ) ) objs[i] = Boolean.valueOf(values[i]).booleanValue() || "on".equalsIgnoreCase(values[i]) || "1".equals(values[i]);
+			try {
+				if ( params[i].isAssignableFrom( long.class ) ) objs[i] = Long.decode(values[i]).longValue();
+				else if ( params[i].isAssignableFrom( int.class ) )objs[i] = Integer.decode(values[i]).intValue();
+				else if ( params[i].isAssignableFrom( short.class ) ) objs[i] = Short.decode(values[i]).shortValue();
+				else if ( params[i].isAssignableFrom( byte.class ) ) objs[i] = Byte.decode(values[i]).byteValue();
+				else if ( params[i].isAssignableFrom( double.class ) ) objs[i] = Double.valueOf(values[i]).doubleValue();
+				else if ( params[i].isAssignableFrom( float.class ) ) objs[i] = Float.valueOf(values[i]).floatValue();
+			}catch (NumberFormatException ex){
+				throw new CommandParsingException(values[i],i,"The parameter is a number and "+values[i]+" does not reppresent a number", ex);
+			}
+			
+			if ( params[i].isAssignableFrom( boolean.class ) ) objs[i] = Boolean.valueOf(values[i]).booleanValue() || "on".equalsIgnoreCase(values[i]) || "1".equals(values[i]);
 			else if ( params[i].isAssignableFrom( String.class ) ) objs[i] = values[i];
 			//TODO Add an option for ignoring type that we cannot convert
 			//TODO Define a plugin system for enabling data conversion
-			else throw new IllegalArgumentException("No convertion defined from "+String.class+" to argument of type "+params[i]); 
+			else throw new CommandParsingException(values[i],i,"No convertion defined from "+String.class+" to argument of type "+params[i]); 
 		}
 		if( method.getReturnType() == void.class ) {
 			method.invoke(cluster, objs);

Modified: projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui/CommandActionPanel.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui/CommandActionPanel.java (original)
+++ projects/zb4osgi/trunk/zigbee.tester/src/main/java/org/persona/zigbee/tester/gui/CommandActionPanel.java Fri Oct 19 09:49:48 2012
@@ -48,6 +48,8 @@
 import javax.swing.table.TableCellEditor;
 import javax.swing.table.TableModel;
 
+import org.persona.zigbee.tester.gui.Command.CommandParsingException;
+
 /**
  * 
  * @author <a href="mailto:stefano.lenzi at isti.cnr.it">Stefano "Kismet" Lenzi</a>
@@ -98,6 +100,17 @@
 					} else {
 						result.setText(returned.toString());
 					}
+				} catch (CommandParsingException ex) {
+					ByteArrayOutputStream bof = new ByteArrayOutputStream();
+					PrintStream ps = new PrintStream(bof);
+					ps.println(
+							"No cluster sent on the, because I was not able to handle the parameter " + 
+							argsModel.getValueAt(ex.index, 0)+" with value '"+ex.value+"' "
+					);
+					ps.println("More dettails on the issue:");
+					ex.printStackTrace(ps);
+					ps.close();
+                    printReport(params,bof.toString());
 				} catch (InvocationTargetException ex){
 					ByteArrayOutputStream bof = new ByteArrayOutputStream();
 					PrintStream ps = new PrintStream(bof);
@@ -113,6 +126,7 @@
                     printReport(params,bof.toString());
 				}
 			}
+			
             private void printReport(String[] params,Object result) {
                 String input = "";
                 String output = "";




More information about the Commit mailing list