@Override
  public void hydrate(
      final ClientObjectManager objectManager, final TCObject tco, final DNA dna, final Object po)
      throws IOException, ClassNotFoundException {
    final DNACursor cursor = dna.getCursor();

    while (cursor.next(this.encoding)) {
      final LogicalAction action = cursor.getLogicalAction();
      final LogicalOperation method = action.getLogicalOperation();
      final Object[] params = action.getParameters();
      apply(objectManager, po, method, params);
    }
  }
 @Override
 public void apply(
     final ObjectID objectID, final DNACursor cursor, final ApplyTransactionInfo includeIDs)
     throws IOException {
   while (cursor.next()) {
     Object action = cursor.getAction();
     if (action instanceof PhysicalAction) {
       final PhysicalAction pa = (PhysicalAction) action;
       if (pa.isEntireArray()) {
         this.componentObjects = (Object[]) pa.getObject();
       } else {
         configMap.put(pa.getFieldName(), pa.getObject());
       }
     } else {
       final LogicalAction logicalAction = (LogicalAction) action;
       final int method = logicalAction.getMethod();
       final Object[] params = logicalAction.getParameters();
       applyMethod(objectID, method, params);
     }
   }
 }