Coverage Report - ca.uhn.hl7v2.util.DeepCopy
 
Classes in this File Line Coverage Branch Coverage Complexity
DeepCopy
91%
11/12
100%
8/8
3
 
 1  
 package ca.uhn.hl7v2.util;
 2  
 
 3  
 import ca.uhn.hl7v2.model.DataTypeException;
 4  
 import ca.uhn.hl7v2.HL7Exception;
 5  
 import ca.uhn.hl7v2.model.*;
 6  
 
 7  
 /**
 8  
  * Tools for copying data recurvisely from one message element into another.  Currently only Types are 
 9  
  * supported.  
 10  
  * @author Bryan Tripp
 11  
  */
 12  0
 public class DeepCopy {
 13  
     
 14  
     /**
 15  
      * Copies data from the "from" Type into the "to" Type.  Either Type may be 
 16  
      * a Primitive, Composite, or Varies.  If a Varies is provided, the operation is 
 17  
      * performed on the result of calling its getData() method.  A Primitive may be 
 18  
      * copied into a Composite, in which case the value is copied into the first 
 19  
      * component of the Composite.  A Composite may be copied into a Primitive, 
 20  
      * in which case the first component is copied.  Given Composites with different 
 21  
      * numbers of components, the first components are copied, up to the length 
 22  
      * of the smaller one.
 23  
      *
 24  
      * @param from type to copy from
 25  
      * @param to type to copy to
 26  
      * @throws DataTypeException if the types are not compatible
 27  
      */
 28  
     public static void copy(Type from, Type to) throws DataTypeException {
 29  5045
         for (int i = 1; i <= Terser.numComponents(from); i++) {
 30  6390
             for (int j = 1; j <= Terser.numSubComponents(from, i); j++) {
 31  3595
                 String val = Terser.getPrimitive(from, i, j).getValue();
 32  3595
                 Terser.getPrimitive(to, i, j).setValue(val);
 33  
             }
 34  
         }
 35  2250
     }
 36  
 
 37  
     
 38  
     /**
 39  
      * Copies contents from the source segment to the destination segment.  This 
 40  
      * method calls copy(Type, Type) on each repetition of each field (see additional 
 41  
      * behavioural description there).  An attempt is made to copy each repetition of 
 42  
      * each field in the source segment, regardless of whether the corresponding 
 43  
      * destination field is repeating or even exists.
 44  
      *
 45  
      * @param from the segment from which data are copied 
 46  
      * @param to the segment into which data are copied
 47  
      * @throws HL7Exception if an error occurred while copying
 48  
      */
 49  
     public static void copy(Segment from, Segment to) throws HL7Exception {
 50  85
         int n = from.numFields();
 51  1815
         for (int i = 1; i <= n; i++) {
 52  1730
             Type[] reps = from.getField(i);
 53  2175
             for (int j = 0; j < reps.length; j++) {
 54  445
                 copy(reps[j], to.getField(i, j));
 55  
             }
 56  
         }
 57  85
     }
 58  
 }