001 package com.mockrunner.mock.web; 002 003 import java.lang.reflect.Method; 004 import java.util.HashMap; 005 import java.util.Map; 006 007 import javax.servlet.jsp.el.FunctionMapper; 008 009 /** 010 * Mock implementation of <code>FunctionMapper</code>. 011 */ 012 public class MockFunctionMapper implements FunctionMapper 013 { 014 private Map functions = new HashMap(); 015 016 public void addFunction(String prefix, String localName, Method function) 017 { 018 FunctionMappingEntry entry = new FunctionMappingEntry(prefix, localName); 019 functions.put(entry, function); 020 } 021 022 public void clearFunctions() 023 { 024 functions.clear(); 025 } 026 027 public Method resolveFunction(String prefix, String localName) 028 { 029 FunctionMappingEntry entry = new FunctionMappingEntry(prefix, localName); 030 return (Method)functions.get(entry); 031 } 032 033 private class FunctionMappingEntry 034 { 035 private String prefix; 036 private String localName; 037 038 public FunctionMappingEntry(String prefix, String localName) 039 { 040 this.prefix = prefix; 041 this.localName = localName; 042 } 043 044 public String getLocalName() 045 { 046 return localName; 047 } 048 049 public String getPrefix() 050 { 051 return prefix; 052 } 053 054 public boolean equals(Object obj) 055 { 056 if(!(obj instanceof FunctionMappingEntry)) return false; 057 if(obj == this) return true; 058 FunctionMappingEntry otherEntry = (FunctionMappingEntry)obj; 059 boolean prefixOk = false; 060 boolean nameOk = false; 061 if(null == prefix) 062 { 063 prefixOk = (otherEntry.getPrefix() == null); 064 } 065 else 066 { 067 prefixOk = prefix.equals(otherEntry.getPrefix()); 068 } 069 if(null == localName) 070 { 071 nameOk = (otherEntry.getLocalName() == null); 072 } 073 else 074 { 075 nameOk = localName.equals(otherEntry.getLocalName()); 076 } 077 return (prefixOk && nameOk); 078 } 079 080 public int hashCode() 081 { 082 int prefixHash = 0; 083 if(null != prefix) 084 { 085 prefixHash = prefix.hashCode(); 086 } 087 int localHash = 0; 088 if(null != localName) 089 { 090 localHash = localName.hashCode(); 091 } 092 return (prefixHash + localHash); 093 } 094 } 095 }