001 package org.apache.myfaces.tobago.util; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one or more 005 * contributor license agreements. See the NOTICE file distributed with 006 * this work for additional information regarding copyright ownership. 007 * The ASF licenses this file to You under the Apache License, Version 2.0 008 * (the "License"); you may not use this file except in compliance with 009 * the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020 import org.apache.commons.logging.Log; 021 import org.apache.commons.logging.LogFactory; 022 023 import javax.faces.context.FacesContext; 024 import javax.faces.el.ValueBinding; 025 import java.util.Comparator; 026 import java.util.Map; 027 028 /* 029 * Created: Mon Apr 15 15:56:44 2002 030 */ 031 032 public class ValueBindingComparator extends ComparatorBase { 033 034 private static final Log LOG = LogFactory.getLog(ValueBindingComparator.class); 035 036 private FacesContext facesContext; 037 038 private String var; 039 040 private ValueBinding valueBinding; 041 042 public ValueBindingComparator(FacesContext facesContext, String var, ValueBinding valueBinding) { 043 this.facesContext = facesContext; 044 this.var = var; 045 this.valueBinding = valueBinding; 046 } 047 048 public ValueBindingComparator(FacesContext facesContext, String var, ValueBinding valueBinding, boolean reverse) { 049 super(reverse); 050 this.facesContext = facesContext; 051 this.var = var; 052 this.valueBinding = valueBinding; 053 } 054 055 public ValueBindingComparator(FacesContext facesContext, String var, 056 ValueBinding valueBinding, Comparator comparator) { 057 super(comparator); 058 this.facesContext = facesContext; 059 this.var = var; 060 this.valueBinding = valueBinding; 061 } 062 063 public ValueBindingComparator(FacesContext facesContext, String var, 064 ValueBinding valueBinding, boolean reverse, Comparator comparator) { 065 super(reverse, comparator); 066 this.facesContext = facesContext; 067 this.var = var; 068 this.valueBinding = valueBinding; 069 } 070 071 public boolean equals(Object o) { 072 if (this == o) { 073 return true; 074 } 075 if (o == null || getClass() != o.getClass()) { 076 return false; 077 } 078 079 final ValueBindingComparator that = (ValueBindingComparator) o; 080 081 if (!super.equals(o)) { 082 return false; 083 } 084 if (facesContext != null ? !facesContext.equals(that.facesContext) : that.facesContext != null) { 085 return false; 086 } 087 if (valueBinding != null ? !valueBinding.equals(that.valueBinding) : that.valueBinding != null) { 088 return false; 089 } 090 if (var != null ? !var.equals(that.var) : that.var != null) { 091 return false; 092 } 093 094 return true; 095 } 096 097 public int hashCode() { 098 int result; 099 result = (facesContext != null ? facesContext.hashCode() : 0); 100 result = 29 * result + (var != null ? var.hashCode() : 0); 101 result = 29 * result + (valueBinding != null ? valueBinding.hashCode() : 0); 102 result = 29 * result + super.hashCode(); 103 return result; 104 } 105 106 // implementation of java.util.Comparator interface 107 108 /** 109 * @param param1 <description> 110 * @param param2 <description> 111 * @return <description> 112 */ 113 public int compare(Object param1, Object param2) { 114 Object obj1; 115 Object obj2; 116 try { 117 final Map requestMap = facesContext.getExternalContext().getRequestMap(); 118 requestMap.put(var, param1); 119 obj1 = valueBinding.getValue(facesContext); 120 requestMap.put(var, param2); 121 obj2 = valueBinding.getValue(facesContext); 122 123 } catch (Exception e) { 124 ValueBindingComparator.LOG.error(e.getMessage(), e); 125 return 0; 126 } 127 return super.internalCompare(obj1, obj2); 128 } 129 130 }