001 package com.nimbusds.jose;
002
003
004 import net.minidev.json.JSONAware;
005 import net.minidev.json.JSONObject;
006
007 import net.jcip.annotations.Immutable;
008
009
010 /**
011 * Compression algorithm name, represents the {@code zip} header parameter in
012 * JSON Web Encryption (JWE) objects. This class is immutable.
013 *
014 * <p>Includes a constant for the standard DEFLATE compression algorithm:
015 *
016 * <ul>
017 * <li>{@link #DEF}
018 * </ul>
019 *
020 * <p>Additional compression algorithm names can be defined using the
021 * constructor.
022 *
023 * @author Vladimir Dzhuvinov
024 * @version $version$ (2013-01-15)
025 */
026 @Immutable
027 public final class CompressionAlgorithm implements JSONAware {
028
029
030 /**
031 * DEFLATE Compressed Data Format Specification version 1.3, as
032 * described in RFC 1951.
033 */
034 public static final CompressionAlgorithm DEF = new CompressionAlgorithm("DEF");
035
036
037 /**
038 * The algorithm name.
039 */
040 private final String name;
041
042
043 /**
044 * Creates a new compression algorithm with the specified name.
045 *
046 * @param name The compression algorithm name. Must not be {@code null}.
047 */
048 public CompressionAlgorithm(final String name) {
049
050 if (name == null)
051 throw new IllegalArgumentException("The compression algorithm name must not be null");
052
053 this.name = name;
054 }
055
056
057 /**
058 * Gets the name of this compression algorithm.
059 *
060 * @return The compression algorithm name.
061 */
062 public String getName() {
063
064 return name;
065 }
066
067
068 /**
069 * Overrides {@code Object.hashCode()}.
070 *
071 * @return The object hash code.
072 */
073 @Override
074 public int hashCode() {
075
076 return name.hashCode();
077 }
078
079
080 /**
081 * Overrides {@code Object.equals()}.
082 *
083 * @param object The object to compare to.
084 *
085 * @return {@code true} if the objects have the same value, otherwise
086 * {@code false}.
087 */
088 @Override
089 public boolean equals(final Object object) {
090
091 return object != null &&
092 object instanceof CompressionAlgorithm &&
093 this.toString().equals(object.toString());
094 }
095
096
097 /**
098 * Returns the string representation of this compression algorithm.
099 *
100 * @see #getName
101 *
102 * @return The string representation.
103 */
104 @Override
105 public String toString() {
106
107 return name;
108 }
109
110
111 /**
112 * Returns the JSON string representation of this compression algorithm.
113 *
114 * @return The JSON string representation.
115 */
116 @Override
117 public String toJSONString() {
118
119 StringBuilder sb = new StringBuilder();
120 sb.append('"');
121 sb.append(JSONObject.escape(name));
122 sb.append('"');
123 return sb.toString();
124 }
125 }