content: /*
   * CDDL HEADER START
   *
   * The contents of this file are subject to the terms of the Common Development
   * and Distribution License (the "License").
   * You may not use this file except in compliance with the License.
   *
   * You can obtain a copy of the license at
   * src/com/vodafone360/people/VODAFONE.LICENSE.txt or
   * http://github.com/360/360-Engine-for-Android
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   * When distributing Covered Code, include this CDDL HEADER in each file and
   * include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt.
   * If applicable, add the following below this CDDL HEADER, with the fields
   * enclosed by brackets "[]" replaced with your own identifying information:
   * Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   *
   * Copyright 2010 Vodafone Sales & Services Ltd.  All rights reserved.
   * Use is subject to license terms.
   */
  
  package com.vodafone360.people.datatypes;
  
  import java.util.Enumeration;
  import java.util.Hashtable;
  
  import com.vodafone360.people.utils.LogUtils;
  
  /**
   * BaseDataType encapsulating People Session credentials returned as a result of
   * successful sign-in/sign-up.
   */
  public class AuthSessionHolder extends BaseDataType {
  
      /**
       * Tags associated with AuthSessionHolder representing data items associated
       * with AuthSessionHolder item returned from server.
       */
      private enum Tags {
          USER_ID("userid"),
          SESSION_SECRET("sessionsecret"),
          USER_NAME("username"),
          SESSION_ID("sessionid");
  
          private final String tag;
  
          /**
           * Constructor creating Tags item for specified String.
           * 
           * @param s String value for Tags item.
           */
          private Tags(String s) {
              tag = s;
          }
  
          /**
           * String value associated with Tags item.
           * 
           * @return String value for Tags item.
           */
          public String tag() {
              return tag;
          }
  
      }
  
      public long userID;
  
      public String sessionSecret;
  
      public String userName;
  
      public String sessionID;
  
      /**
       * Find Tags item for specified String.
       * 
       * @param tag String value to find in Tags items.
       * @return Tags item for specified String, null otherwise.
       */
      private Tags findTag(String tag) {
          for (Tags tags : Tags.values()) {
              if (tag.compareTo(tags.tag()) == 0) {
                  return tags;
              }
          }
          return null;
      }
  
  
      public int getType() {
          return AUTH_SESSION_HOLDER_TYPE;
      }
  
      /** {@inheritDoc} */
      public String toString() {
          final StringBuilder sb = 
              new StringBuilder("Auth Session Holder: \n  userID: \t");
          sb.append(userID); 
          sb.append("\n  userName: \t"); sb.append(userName);
          sb.append("\n  sessionID:\n\t"); sb.append(sessionID);
          return sb.toString();
      }
  
      /**
       * Create AuthSessionHolder from Hash-table (generated from Hessian data).
       * 
       * @param hash Hash-table containing AuthSessionHolder data.
       * @return AuthSessionHolder generated from supplied Hash-table.
       */
      public AuthSessionHolder createFromHashtable(Hashtable<String, Object> hash) {
          Enumeration<String> e = hash.keys();
          while (e.hasMoreElements()) {
              String key = e.nextElement();
              Object value = hash.get(key);
              Tags tag = findTag(key);
  
              if (null != tag) {
                  setValue(tag, value);
              } else {
                  LogUtils.logE("Tag was null for key: " + key);
              }
          }
  
          return this;
      }
  
      /**
       * Sets the value of the member data item associated with the specified tag.
       * 
       * @param tag Current tag.
       * @param val Value associated with the tag.
       */
      private void setValue(Tags tag, Object value) {
          switch (tag) {
              case SESSION_ID:
                  sessionID = (String)value;
                  break;
  
              case SESSION_SECRET:
                  sessionSecret = (String)value;
                  break;
  
              case USER_ID:
                  userID = ((Long)value).longValue();
                  break;
  
              case USER_NAME:
                  userName = (String)value;
                  break;
                  
              default:
                  // Do nothing.   
                  break;
          }
      }
  }
  