dev@javaserverfaces.java.net

Re: [REVIEW] Additonal ExternalContextImpl changes

From: Roger Kitain <Roger.Kitain_at_Sun.COM>
Date: Fri, 20 Jan 2006 12:14:07 -0500

r=rogerk

Ryan Lubke wrote:

>
>------------------------------------------------------------------------
>
>SECTION: Modified Files
>----------------------------
>M src/com/sun/faces/context/ExternalContextImpl.java
> - Add new abstract Map class extending BaseContextMap
> called StringArrayValuesMap which contains specialized
> methods for equals(), hashCode(), and containsValue().
> - Fixed bug in previous equals() implementation, and
> added additional size check before usage of Arrays
> class.
> - Update RequestHeaderValuesMap and RequestParameterValuesMap
> to extends StringArrayValuesMap
>
>
>SECTION: Diffs
>----------------------------
>Index: src/com/sun/faces/context/ExternalContextImpl.java
>===================================================================
>RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/context/ExternalContextImpl.java,v
>retrieving revision 1.43
>diff -u -r1.43 ExternalContextImpl.java
>--- src/com/sun/faces/context/ExternalContextImpl.java 13 Jan 2006 20:31:46 -0000 1.43
>+++ src/com/sun/faces/context/ExternalContextImpl.java 20 Jan 2006 17:06:49 -0000
>@@ -747,6 +747,71 @@
> }
> }
>
>+abstract class StringArrayValuesMap extends BaseContextMap {
>+
>+ public boolean equals(Object obj) {
>+
>+ if (obj == null ||
>+ !(obj.getClass() == ExternalContextImpl.theUnmodifiableMapClass)) {
>+ return false;
>+ }
>+ Map objMap = (Map) obj;
>+
>+ if (this.size() != objMap.size()) {
>+ return false;
>+ }
>+ String[] thisKeys = keySet().toArray(new String[this.size()]);
>+ String[] objKeys =
>+ (String[]) objMap.keySet().toArray(new String[objMap.size()]);
>+
>+ Arrays.sort(thisKeys);
>+ Arrays.sort(objKeys);
>+
>+ if (!(Arrays.equals(thisKeys, objKeys))) {
>+ return false;
>+ } else {
>+ for (Object key : thisKeys) {
>+ Object[] thisVal = (Object[]) this.get(key);
>+ Object[] objVal = (Object[]) objMap.get(key);
>+ if (!(Arrays.equals(thisVal, objVal))) {
>+ return false;
>+ }
>+ }
>+ }
>+
>+ return true;
>+
>+ }
>+
>+ protected int hashCode(Object someObject) {
>+ int hashCode = 7 * someObject.hashCode();
>+ for (Object o : entrySet()) {
>+ Map.Entry entry = (Map.Entry) o;
>+ hashCode += entry.getKey().hashCode();
>+ hashCode +=
>+ (Arrays.hashCode((Object[]) entry.getValue()));
>+ }
>+ return hashCode;
>+ }
>+
>+ public boolean containsValue(Object value) {
>+
>+ if (value == null || !value.getClass().isArray()) {
>+ return false;
>+ }
>+
>+ Set entrySet = entrySet();
>+ for (Object anEntrySet : entrySet) {
>+ Map.Entry entry = (Map.Entry) anEntrySet;
>+ // values will be arrays
>+ if (Arrays.equals((Object[]) value, (Object[]) entry.getValue())) {
>+ return true;
>+ }
>+ }
>+ return false;
>+ }
>+}
>+
> class ApplicationMap extends BaseContextMap {
>
> private final ServletContext servletContext;
>@@ -1083,7 +1148,7 @@
>
> } // END RequestParameterMap
>
>-class RequestParameterValuesMap extends BaseContextMap {
>+class RequestParameterValuesMap extends StringArrayValuesMap {
>
> private final ServletRequest request;
>
>@@ -1115,59 +1180,10 @@
> return Collections.unmodifiableCollection(super.values());
> }
>
>- public boolean equals(Object obj) {
>-
>- if (obj == null ||
>- !(obj.getClass() == ExternalContextImpl.theUnmodifiableMapClass)) {
>- return false;
>- }
>- Map objMap = (Map) obj;
>- Set thisKeySet = keySet();
>- Set objKeySet = keySet();
>-
>- if (!thisKeySet.equals(objKeySet)) {
>- return false;
>- } else {
>- for (Object key : thisKeySet) {
>- Object[] thisVal = (Object[]) this.get(key);
>- Object[] objVal = (Object[]) objMap.get(key);
>- if (!(Arrays.equals(thisVal, objVal))) {
>- return false;
>- }
>- }
>- }
>-
>- return true;
>-
>- }
>-
>- public int hashCode() {
>- int hashCode = 7 * request.hashCode();
>- for (Object o : entrySet()) {
>- Map.Entry entry = (Map.Entry) o;
>- hashCode += entry.getKey().hashCode();
>- hashCode +=
>- (Arrays.hashCode((Object[]) entry.getValue()));
>- }
>- return hashCode;
>+ public int hashCode() {
>+ return hashCode(request);
> }
>
>- public boolean containsValue(Object value) {
>-
>- if (value == null || !value.getClass().isArray()) {
>- return false;
>- }
>-
>- Set entrySet = entrySet();
>- for (Object anEntrySet : entrySet) {
>- Map.Entry entry = (Map.Entry) anEntrySet;
>- // values will be arrays
>- if (Arrays.equals((Object[]) value, (Object[]) entry.getValue())) {
>- return true;
>- }
>- }
>- return false;
>- }
>
> // --------------------------------------------- Methods from BaseContextMap
>
>@@ -1250,7 +1266,7 @@
>
> } // END RequestHeaderMap
>
>-class RequestHeaderValuesMap extends BaseContextMap {
>+class RequestHeaderValuesMap extends StringArrayValuesMap {
>
> private final HttpServletRequest request;
>
>@@ -1287,58 +1303,10 @@
>
> public Collection values() {
> return Collections.unmodifiableCollection(super.values());
>- }
>+ }
>
>- public boolean equals(Object obj) {
>- if (obj == null ||
>- !(obj.getClass() == ExternalContextImpl.theUnmodifiableMapClass)) {
>- return false;
>- }
>- Map objMap = (Map) obj;
>- Set thisKeySet = keySet();
>- Set objKeySet = keySet();
>-
>- if (!thisKeySet.equals(objKeySet)) {
>- return false;
>- } else {
>- for (Object key : thisKeySet) {
>- Object[] thisVal = (Object[]) this.get(key);
>- Object[] objVal = (Object[]) objMap.get(key);
>- if (!(Arrays.equals(thisVal, objVal))) {
>- return false;
>- }
>- }
>- }
>-
>- return true;
>- }
>-
>-
>- public boolean containsValue(Object value) {
>- if (value == null || !value.getClass().isArray()) {
>- return false;
>- }
>-
>- Set entrySet = entrySet();
>- for (Object anEntrySet : entrySet) {
>- Map.Entry entry = (Map.Entry) anEntrySet;
>- // values will be arrays
>- if (Arrays.equals((Object[]) value, (Object[]) entry.getValue())) {
>- return true;
>- }
>- }
>- return false;
>- }
>-
>- public int hashCode() {
>- int hashCode = 0;
>- for (Object o : entrySet()) {
>- Map.Entry entry = (Map.Entry) o;
>- hashCode += entry.getKey().hashCode();
>- hashCode +=
>- (Arrays.hashCode((Object[]) entry.getValue()));
>- }
>- return hashCode;
>+ public int hashCode() {
>+ return hashCode(request);
> }
>
> // --------------------------------------------- Methods from BaseContextMap
>
>
>
>
>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe_at_javaserverfaces.dev.java.net
>For additional commands, e-mail: dev-help_at_javaserverfaces.dev.java.net
>
>