content: /*
   *  Copyright (C) 2010-2012 Stichting Akvo (Akvo Foundation)
   *
   *  This file is part of Akvo FLOW.
   *
   *  Akvo FLOW is free software: you can redistribute it and modify it under the terms of
   *  the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
   *  either version 3 of the License or any later version.
   *
   *  Akvo FLOW is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *  See the GNU Affero General Public License included below for more details.
   *
   *  The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
   */
  
  package com.gallatinsystems.framework.domain;
  
  /**
   * this is a non-persistent class used to represent logical change records. It will encapsulate an
   * object type, a field value and an old/new value.
   * 
   * @author Christopher Fagiani
   */
  public class DataChangeRecord {
  
      private static final String DELIMITER = "#~#";
      private String type;
      private String oldVal;
      private String newVal;
      private String id;
  
      public DataChangeRecord(String t, String i, String o, String n) {
          type = t;
          id = i;
          oldVal = o;
          newVal = n;
      }
  
      /**
       * parses a packedString to hydrate a new instance. The input to this class should only ever be
       * strings that were initially generated via DataChangeRecord.packString();
       * 
       * @param packedString
       */
      public DataChangeRecord(String packedString) {
          String[] parts = packedString.split(DELIMITER);
          if (parts.length < 3) {
              throw new RuntimeException("Packed string in invalid format: "
                      + packedString);
          } else {
              type = parts[0];
              id = parts[1];
              oldVal = parts[2];
              if (parts.length > 3) {
                  newVal = parts[3];
              } else {
                  newVal = "";
              }
          }
      }
  
      /**
       * forms a string representation of this object.
       * 
       * @return
       */
      public String packString() {
          return type + DELIMITER + id + DELIMITER + oldVal + DELIMITER + newVal;
      }
  
      public String getId() {
          return id;
      }
  
      public void setId(String id) {
          this.id = id;
      }
  
      public String getType() {
          return type;
      }
  
      public void setType(String type) {
          this.type = type;
      }
  
      public String getOldVal() {
          return oldVal;
      }
  
      public void setOldVal(String oldVal) {
          this.oldVal = oldVal;
      }
  
      public String getNewVal() {
          return newVal;
      }
  
      public void setNewVal(String newVal) {
          this.newVal = newVal;
      }
  
  }
  