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 }