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