1package gov.nist.javax.sip.header.ims;
2/*
3* Conditions Of Use
4*
5* This software was developed by employees of the National Institute of
6* Standards and Technology (NIST), an agency of the Federal Government.
7* Pursuant to title 15 Untied States Code Section 105, works of NIST
8* employees are not subject to copyright protection in the United States
9* and are considered to be in the public domain.  As a result, a formal
10* license is not needed to use the software.
11*
12* This software is provided by NIST as a service and is expressly
13* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
14* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
15* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
16* AND DATA ACCURACY.  NIST does not warrant or make any representations
17* regarding the use of the software or the results thereof, including but
18* not limited to the correctness, accuracy, reliability or usefulness of
19* the software.
20*
21* Permission to use this software is contingent upon your acceptance
22* of the terms of this agreement
23*
24* .
25*
26*/
27import java.text.ParseException;
28import javax.sip.InvalidArgumentException;
29import javax.sip.header.ExtensionHeader;
30import gov.nist.javax.sip.address.AddressImpl;
31import gov.nist.javax.sip.header.AddressParametersHeader;
32
33/**
34 *
35 * @author aayush.bhatnagar
36 * Rancore Technologies Pvt Ltd, Mumbai India.
37 *
38 * This is the class used for encoding of the P-Served-User header
39 *
40 *
41 */
42public class PServedUser extends AddressParametersHeader implements PServedUserHeader, SIPHeaderNamesIms, ExtensionHeader{
43
44
45    public PServedUser(AddressImpl address)
46    {
47        super(P_SERVED_USER);
48        this.address = address;
49    }
50
51    public PServedUser()
52    {
53        super(NAME);
54    }
55
56    public String getRegistrationState() {
57
58        return getParameter(ParameterNamesIms.REGISTRATION_STATE);
59    }
60
61    public String getSessionCase() {
62
63        return getParameter(ParameterNamesIms.SESSION_CASE);
64    }
65
66    public void setRegistrationState(String registrationState) {
67
68        if((registrationState!=null))
69        {
70            if(registrationState.equals("reg")||registrationState.equals("unreg"))
71            {
72                try {
73                    setParameter(ParameterNamesIms.REGISTRATION_STATE, registrationState);
74                } catch (ParseException e) {
75                    e.printStackTrace();
76                }
77
78            }
79              else
80              {
81                  try {
82                      throw new InvalidArgumentException("Value can be either reg or unreg");
83                  } catch (InvalidArgumentException e) {
84                         e.printStackTrace();
85                    }
86              }
87
88        }
89        else
90        {
91            throw new NullPointerException("regstate Parameter value is null");
92        }
93
94    }
95
96    public void setSessionCase(String sessionCase) {
97
98        if((sessionCase!=null))
99        {
100            if((sessionCase.equals("orig"))||(sessionCase.equals("term")))
101            {
102                try {
103                    setParameter(ParameterNamesIms.SESSION_CASE, sessionCase);
104                } catch (ParseException e) {
105                    e.printStackTrace();
106                }
107            }
108              else
109              {
110                  try {
111                    throw new InvalidArgumentException("Value can be either orig or term");
112                } catch (InvalidArgumentException e) {
113                    e.printStackTrace();
114                }
115
116              }
117        }
118        else
119        {
120            throw new NullPointerException("sess-case Parameter value is null");
121        }
122
123    }
124
125    @Override
126    protected String encodeBody() {
127
128        StringBuffer retval = new StringBuffer();
129
130        retval.append(address.encode());
131
132        if(parameters.containsKey(ParameterNamesIms.REGISTRATION_STATE))
133            retval.append(SEMICOLON).append(ParameterNamesIms.REGISTRATION_STATE).append(EQUALS)
134            .append(this.getRegistrationState());
135
136        if(parameters.containsKey(ParameterNamesIms.SESSION_CASE))
137            retval.append(SEMICOLON).append(ParameterNamesIms.SESSION_CASE).append(EQUALS)
138            .append(this.getSessionCase());
139
140        return retval.toString();
141    }
142
143    public void setValue(String value) throws ParseException {
144        throw new ParseException(value,0);
145
146    }
147
148    public boolean equals(Object other)
149    {
150         if(other instanceof PServedUser)
151         {
152            final PServedUserHeader psu = (PServedUserHeader)other;
153            return this.getAddress().equals(((PServedUser) other).getAddress());
154         }
155        return false;
156    }
157
158
159    public Object clone() {
160        PServedUser retval = (PServedUser) super.clone();
161        return retval;
162    }
163
164}
165