View Javadoc

1   /**
2    * This file Copyright (c) 2010-2013 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
32   *
33   */
34  package info.magnolia.module.cache;
35  
36  import java.io.Serializable;
37  import java.util.Map;
38  
39  import edu.emory.mathcs.backport.java.util.Collections;
40  
41  /**
42   * Default cache key implementation. Key is based on the URI, server name, parameters and request headers. Since the server name is likely to change from server to server, copying cached items around will most likely not help to avoid generating cache entries.
43   */
44  public class DefaultCacheKey implements Serializable {
45  
46      // Keep the svuid fixed to prevent deserialization errors. Keep in mind that when adding new properties they will be deserialized to null!
47      private static final long serialVersionUID = 2699497852929596651L;
48  
49      private String uri;
50      private String serverName;
51      private String channel;
52      private String locale;
53      private Map<String, String> params;
54      private Boolean isSecure;
55      private String method;
56  
57      /**
58       * @deprecated since 4.4.6 use info.magnolia.module.cache.DefaultCacheKey.DefaultCacheKey(String, String, String, Map<String, String>, Boolean)
59       */
60      @Deprecated
61      public DefaultCacheKey(String uri, String serverName, String locale, Map<String, String> params) {
62          this(uri, serverName, locale, null, params, false);
63      }
64  
65      /**
66       * @deprecated since 4.5.11 use info.magnolia.module.cache.DefaultCacheKey.DefaultCacheKey(String, String, String, String, String, Map<String, String>, Boolean)
67       */
68      @Deprecated
69      public DefaultCacheKey(String uri, String serverName, String locale, String channel, Map<String, String> params, Boolean isSecure) {
70          this(uri, serverName, locale, channel, null, params, isSecure);
71      }
72  
73      public DefaultCacheKey(String uri, String serverName, String locale, String channel, String method, Map<String, String> params, Boolean isSecure) {
74          this.uri = uri;
75          this.serverName = serverName;
76          this.channel = channel;
77          this.locale = locale;
78          this.params = params == null ? null : Collections.unmodifiableMap(params);
79          this.isSecure = isSecure;
80          this.method = method == null ? null : method.toLowerCase();
81      }
82  
83      @Override
84      public int hashCode() {
85          return (uri == null ? 13 : uri.hashCode())
86                  + (serverName == null ? 17 : serverName.hashCode())
87                  + (locale == null ? 23 : locale.hashCode())
88                  + (channel == null ? 25 : channel.hashCode())
89                  + (params == null ? 29 : params.hashCode())
90                  + (isSecure == null ? 31 : isSecure.hashCode())
91                  + (method == null ? 35 : method.hashCode());
92      }
93  
94      @Override
95      public boolean equals(Object obj) {
96          if (this == obj) {
97              return true;
98          }
99          if (obj == null || !(obj instanceof DefaultCacheKey)) {
100             return false;
101         }
102         DefaultCacheKey that = (DefaultCacheKey) obj;
103         return this.uri == null ? that.uri == null : this.uri.equals(that.uri)
104                 && (this.serverName == null ? that.serverName == null : this.serverName.equals(that.serverName))
105                 && (this.locale == null ? that.locale == null : this.locale.equals(that.locale))
106                 && (this.channel == null ? that.channel == null : this.channel.equals(that.channel))
107                 && (this.params == null ? that.params == null : this.params.equals(that.params))
108                 && (this.isSecure == null ? that.isSecure == null : this.isSecure.equals(that.isSecure))
109                 && (this.method == null ? that.method == null : this.method.equals(that.method));
110     }
111 
112     public String getUri() {
113         return uri;
114     }
115 
116     public String getDomain() {
117         return serverName;
118     }
119 
120     public String getLocale() {
121         return locale;
122     }
123 
124     public String getChannel() {
125         return channel;
126     }
127 
128     public Map<String, String> getParams() {
129         return params;
130     }
131 
132     public Boolean getIsSecured() {
133         return this.isSecure;
134     }
135 
136     public String getMethod() {
137         return method;
138     }
139 
140     // generated toString() method
141     @Override
142     public String toString() {
143         return "DefaultCacheKey{" +
144                 "uri='" + uri + '\'' +
145                 ", serverName='" + serverName + '\'' +
146                 ", locale='" + locale + '\'' +
147                 ", channel='" + channel + '\'' +
148                 ", params=" + params + '\'' +
149                 ", secure='" + isSecure + "'" +
150                 ", method='" + method + "'" +
151                 '}';
152     }
153 
154 }