// RecursiveObjectWriter

import 'package:pip_services3_commons/pip_services3_commons.dart';

void main(List<String> arguments) async {
  var myClassB = ClassB();
  var myClassC = ClassB();

  // set_property
  RecursiveObjectWriter.setProperty(myClassB, 'param2', 'new value');
  var value1 = RecursiveObjectReader.getProperty(myClassB, 'param2');
  print('The new values for the myClassB object are: $value1');

  // set_properties
  var myMap = {'param1': 789456, 'param2': 'ABCaccc'};
  RecursiveObjectWriter.setProperties(myClassB, myMap);
  var value2 = RecursiveObjectReader.getProperties(myClassB);
  print('The new values for the myClassB object are: $value2');

  // copy_proerties
  var value3 = RecursiveObjectReader.getProperties(myClassC);
  print('The properties of myClassC and their values are: $value3');
  RecursiveObjectWriter.copyProperties(myClassC, myClassB);
  var value4 = RecursiveObjectReader.getProperties(myClassC);
  print('The new properties of myClassC and their values are: $value4');
}

class ClassA {
  String param1 = 'hello';
  int param2 = 123;

  int methodA() {
    return 123;
  }
}

class ClassAa {
  String param5 = 'hello aa';
}

class ClassB extends ClassA {
  String param4 = 'inside 2';
}