public boolean isValid() {
   for (Property property : properties.values()) {
     property.update();
     if (!property.isValid()) {
       return false;
     }
   }
   return true;
 }
 public String getErrorMessage() {
   String message = "";
   for (String propertyName : getPropertyKeys()) {
     final Property property = getProperty(propertyName);
     if (!property.isValid()) {
       message += property.getName() + ": " + property.getErrorMessage() + "\n";
     }
   }
   if (children != null) {
     for (Object comp : children) {
       String m = ((RobotComponent) comp).getErrorMessage();
       if (m != null && !m.equals("")) {
         message += "" + ((RobotComponent) comp).getFullName() + ":\n" + m;
       }
     }
   }
   return message;
 }