Coverage Report - ca.uhn.hl7v2.model.AbstractPrimitive
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractPrimitive
100%
57/57
96%
27/28
2.667
 
 1  
 /**
 2  
  * The contents of this file are subject to the Mozilla Public License Version 1.1
 3  
  * (the "License"); you may not use this file except in compliance with the License.
 4  
  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
 5  
  * Software distributed under the License is distributed on an "AS IS" basis,
 6  
  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
 7  
  * specific language governing rights and limitations under the License.
 8  
  *
 9  
  * The Original Code is "AbstractPrimitive.java".  Description:
 10  
  * "Base class for Primitives.  Performs validation in setValue()."
 11  
  *
 12  
  * The Initial Developer of the Original Code is University Health Network. Copyright (C)
 13  
  * 2001-2005.  All Rights Reserved.
 14  
  *
 15  
  * Contributor(s): ______________________________________.
 16  
  *
 17  
  * Alternatively, the contents of this file may be used under the terms of the
 18  
  * GNU General Public License (the  �GPL�), in which case the provisions of the GPL are
 19  
  * applicable instead of those above.  If you wish to allow use of your version of this
 20  
  * file only under the terms of the GPL and not to allow others to use your version
 21  
  * of this file under the MPL, indicate your decision by deleting  the provisions above
 22  
  * and replace  them with the notice and other provisions required by the GPL License.
 23  
  * If you do not delete the provisions above, a recipient may use your version of
 24  
  * this file under either the MPL or the GPL.
 25  
  *
 26  
  */
 27  
 
 28  
 package ca.uhn.hl7v2.model;
 29  
 
 30  
 import java.util.Collection;
 31  
 
 32  
 import ca.uhn.hl7v2.HL7Exception;
 33  
 import ca.uhn.hl7v2.Location;
 34  
 import ca.uhn.hl7v2.parser.EncodingCharacters;
 35  
 import ca.uhn.hl7v2.parser.Parser;
 36  
 import ca.uhn.hl7v2.validation.PrimitiveTypeRule;
 37  
 import ca.uhn.hl7v2.validation.ValidationContext;
 38  
 import ca.uhn.hl7v2.validation.ValidationException;
 39  
 
 40  
 /**
 41  
  * Base class for Primitives.  Performs validation in setValue().
 42  
  *    
 43  
  * @author Bryan Tripp
 44  
  */
 45  
 @SuppressWarnings("serial")
 46  
 public abstract class AbstractPrimitive extends AbstractType implements Primitive {
 47  
     
 48  
     /**
 49  
      * @param message message to which this type belongs
 50  
      */
 51  
     public AbstractPrimitive(Message message) {
 52  641103
         super(message);
 53  641103
     }
 54  
 
 55  
     private String myValue;
 56  
     
 57  
     /** 
 58  
      * Returns the value of getValue() 
 59  
      * @see java.lang.Object#toString 
 60  
      */
 61  
     public String toString() {
 62  5
         return this.getValue();
 63  
     }
 64  
     
 65  
     /**
 66  
      * @see ca.uhn.hl7v2.model.Primitive#getValue()
 67  
      */
 68  
     public String getValue() {
 69  351599
         return myValue;
 70  
     }
 71  
 
 72  
     /**
 73  
      * Sets the value of this Primitive, first performing validation as specified 
 74  
      * by <code>getMessage().getValidationContext()</code>.  No validation is performed 
 75  
      * if getMessage() returns null. 
 76  
      * <p>
 77  
      * Note: as of the next HAPI release, the ValidationContext will be retrieved
 78  
      * from getParser().getValidationContext(), which ultimately is the ValidationContext
 79  
      * of the active HapiContext.
 80  
      * 
 81  
      * @see ca.uhn.hl7v2.model.Primitive#setValue(String)
 82  
      */    
 83  
     public void setValue(String theValue) throws DataTypeException {
 84  135053
         Message message = getMessage();
 85  
 
 86  135053
         if (message != null) {
 87  134713
             ValidationContext context = message.getParser().getValidationContext();
 88  134713
             String version = message.getVersion();
 89  
 
 90  134713
             if (context != null) {
 91  134453
                 Collection<PrimitiveTypeRule> rules = context.getPrimitiveRules(version, getName(), this); 
 92  
         
 93  134453
                 for (PrimitiveTypeRule rule : rules) {
 94  119428
                     theValue = rule.correct(theValue);
 95  119428
                     ValidationException[] ve = rule.apply(theValue);
 96  119428
                     if (ve.length > 0) {
 97  560
                         throw new DataTypeException(ve[0]);
 98  
                     }
 99  118868
                 }
 100  
             }
 101  
         }
 102  
         
 103  134493
         myValue = theValue;
 104  134493
     }
 105  
 
 106  
     
 107  
     /**
 108  
      * {@inheritDoc }
 109  
      */
 110  
     @Override
 111  
     public String encode() throws HL7Exception {
 112  115
         Parser p = getMessage().getParser();
 113  115
         return p.doEncode(this, EncodingCharacters.getInstance(getMessage()));
 114  
     }
 115  
 
 116  
 
 117  
     /**
 118  
      * {@inheritDoc }
 119  
      */
 120  
     @Override
 121  
     public void parse(String string) throws HL7Exception {
 122  125
         if (string == null) {
 123  5
                 clear();
 124  5
                 return;
 125  
         }
 126  
             
 127  120
             EncodingCharacters encodingCharacters = EncodingCharacters.getInstance(getMessage());
 128  120
         char subc = encodingCharacters.getSubcomponentSeparator();
 129  120
         char cmpc = encodingCharacters.getComponentSeparator();
 130  
 
 131  120
         clear();
 132  
         
 133  
         // If the string contains subcomponent delimiters, parse
 134  
         // these as extra components
 135  120
         int subcIndex = string.indexOf(subc);
 136  120
         int cmpcIndex = string.indexOf(cmpc);
 137  120
         if (subcIndex != -1 || cmpcIndex != -1) {
 138  
             
 139  
             //Object ancestor = AbstractMessage.findAncestorOf(this);
 140  
             
 141  
             int index;
 142  
             char escapeChar;
 143  30
             if (cmpcIndex != -1) {
 144  25
                     index = cmpcIndex;
 145  25
                     escapeChar = cmpc;
 146  
             } else {
 147  5
                             index = subcIndex;
 148  5
                             escapeChar = subc;
 149  
             }
 150  
             
 151  30
                         setValue(string.substring(0, index));
 152  95
             while (index != -1) {
 153  65
                 int prevIndex = index + 1;
 154  65
                 index = string.indexOf(escapeChar, prevIndex);
 155  65
                 if (index != -1) {
 156  35
                     String nextSubComponent = string.substring(prevIndex, index);
 157  35
                     getExtraComponents().getComponent(getExtraComponents().numComponents()).parse(nextSubComponent);
 158  35
                 } else {
 159  30
                     String nextSubComponent = string.substring(prevIndex);
 160  30
                     if (nextSubComponent.length() > 0) {
 161  20
                             getExtraComponents().getComponent(getExtraComponents().numComponents()).parse(nextSubComponent);
 162  
                     }
 163  
                 }
 164  65
             }
 165  
             
 166  30
         } else {
 167  
         
 168  90
                 String escaped = getMessage().getParser().getParserConfiguration()
 169  90
                 .getEscaping().unescape(string, encodingCharacters);
 170  90
             setValue(escaped);
 171  
         
 172  
         }
 173  120
     }
 174  
 
 175  
 
 176  
     /**
 177  
      * {@inheritDoc }
 178  
      */
 179  
     @Override
 180  
     public void clear() {
 181  1160
         super.clear();
 182  1160
         myValue = null;
 183  1160
     }
 184  
 
 185  
         @Override
 186  
         public boolean isEmpty() throws HL7Exception {
 187  4180
                 return (myValue == null || myValue.length() == 0) && super.isEmpty();
 188  
         }
 189  
 
 190  
     public boolean accept(MessageVisitor visitor, Location location) throws HL7Exception {
 191  1470
         return visitor.visit(this, location);
 192  
     }  
 193  
     
 194  
 }