001: /*
002: * Copyright 2005-2007 Noelios Consulting.
003: *
004: * The contents of this file are subject to the terms of the Common Development
005: * and Distribution License (the "License"). You may not use this file except in
006: * compliance with the License.
007: *
008: * You can obtain a copy of the license at
009: * http://www.opensource.org/licenses/cddl1.txt See the License for the specific
010: * language governing permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL HEADER in each file and
013: * include the License file at http://www.opensource.org/licenses/cddl1.txt If
014: * applicable, add the following below this CDDL HEADER, with the fields
015: * enclosed by brackets "[]" replaced with your own identifying information:
016: * Portions Copyright [yyyy] [name of copyright owner]
017: */
018:
019: package org.restlet.data;
020:
021: import org.restlet.util.Engine;
022: import org.restlet.util.Series;
023:
024: /**
025: * Authentication challenge sent by an origin server to a client.
026: *
027: * @author Jerome Louvel (contact@noelios.com)
028: */
029: public final class ChallengeRequest {
030: /** The challenge scheme. */
031: private ChallengeScheme scheme;
032:
033: /** The authentication realm. */
034: private String realm;
035:
036: /** The scheme parameters. */
037: private Series<Parameter> parameters;
038:
039: /**
040: * Constructor.
041: *
042: * @param scheme
043: * The challenge scheme.
044: * @param realm
045: * The authentication realm.
046: */
047: public ChallengeRequest(ChallengeScheme scheme, String realm) {
048: this .scheme = scheme;
049: this .realm = realm;
050: this .parameters = null;
051: }
052:
053: /** {@inheritDoc} */
054: @Override
055: public final boolean equals(final Object obj) {
056: boolean result = (obj == this );
057:
058: // if obj == this no need to go further
059: if (!result) {
060: // if obj isn't a challenge request or is null don't evaluate
061: // further
062: if ((obj instanceof ChallengeRequest) && obj != null) {
063: ChallengeRequest that = (ChallengeRequest) obj;
064: result = (this .getParameters().equals(that
065: .getParameters()));
066:
067: if (result) {
068: if (getRealm() != null) {
069: result = getRealm().equals(that.getRealm());
070: } else {
071: result = (that.getRealm() == null);
072: }
073:
074: if (result) {
075: if (getScheme() != null) {
076: result = getScheme().equals(
077: that.getScheme());
078: } else {
079: result = (that.getScheme() == null);
080: }
081: }
082: }
083: }
084: }
085:
086: return result;
087: }
088:
089: /**
090: * Returns the scheme parameters.
091: *
092: * @return The scheme parameters.
093: */
094: public Series<Parameter> getParameters() {
095: if (this .parameters == null)
096: this .parameters = new Form();
097: return this .parameters;
098: }
099:
100: /**
101: * Returns the realm name.
102: *
103: * @return The realm name.
104: */
105: public String getRealm() {
106: return this .realm;
107: }
108:
109: /**
110: * Returns the scheme used.
111: *
112: * @return The scheme used.
113: */
114: public ChallengeScheme getScheme() {
115: return this .scheme;
116: }
117:
118: /** {@inheritDoc} */
119: @Override
120: public int hashCode() {
121: return Engine
122: .hashCode(getScheme(), getRealm(), getParameters());
123: }
124:
125: /**
126: * Sets the realm name.
127: *
128: * @param realm
129: * The realm name.
130: */
131: public void setRealm(String realm) {
132: this .realm = realm;
133: }
134:
135: /**
136: * Sets the scheme used.
137: *
138: * @param scheme
139: * The scheme used.
140: */
141: public void setScheme(ChallengeScheme scheme) {
142: this.scheme = scheme;
143: }
144:
145: }
|