
org.jdesktop.el.impl.lang.FunctionMapperImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swixml Show documentation
Show all versions of swixml Show documentation
GUI generating engine for Java applications
/*
* Copyright (C) 2007 Sun Microsystems, Inc. All rights reserved. Use is
* subject to license terms.
*/
package org.jdesktop.el.impl.lang;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import org.jdesktop.el.FunctionMapper;
import org.jdesktop.el.impl.util.ReflectionUtil;
/**
* @author Jacob Hookom [[email protected]]
* @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: kchung $
*/
public class FunctionMapperImpl extends FunctionMapper implements
Externalizable {
private static final long serialVersionUID = 1L;
protected Map functions = null;
/*
* (non-Javadoc)
*
* @see javax.el.FunctionMapper#resolveFunction(java.lang.String,
* java.lang.String)
*/
public Method resolveFunction(String prefix, String localName) {
if (this.functions != null) {
Function f = (Function) this.functions.get(prefix + ":" + localName);
return f.getMethod();
}
return null;
}
public void addFunction(String prefix, String localName, Method m) {
if (this.functions == null) {
this.functions = new HashMap();
}
Function f = new Function(prefix, localName, m);
synchronized (this) {
this.functions.put(prefix+":"+localName, f);
}
}
/*
* (non-Javadoc)
*
* @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
*/
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(this.functions);
}
/*
* (non-Javadoc)
*
* @see java.io.Externalizable#readExternal(java.io.ObjectInput)
*/
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
this.functions = (Map) in.readObject();
}
public static class Function implements Externalizable {
protected transient Method m;
protected String owner;
protected String name;
protected String[] types;
protected String prefix;
protected String localName;
/**
*
*/
public Function(String prefix, String localName, Method m) {
if (localName == null) {
throw new NullPointerException("LocalName cannot be null");
}
if (m == null) {
throw new NullPointerException("Method cannot be null");
}
this.prefix = prefix;
this.localName = localName;
this.m = m;
}
public Function() {
// for serialization
}
/*
* (non-Javadoc)
*
* @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
*/
public void writeExternal(ObjectOutput out) throws IOException {
out.writeUTF((this.prefix != null) ? this.prefix : "");
out.writeUTF(this.localName);
if (this.owner != null) {
out.writeUTF(this.owner);
} else {
out.writeUTF(this.m.getDeclaringClass().getName());
}
if (this.name != null) {
out.writeUTF(this.name);
} else {
out.writeUTF(this.m.getName());
}
if (this.types != null) {
out.writeObject(this.types);
} else {
out.writeObject(ReflectionUtil.toTypeNameArray(this.m.getParameterTypes()));
}
}
/*
* (non-Javadoc)
*
* @see java.io.Externalizable#readExternal(java.io.ObjectInput)
*/
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
this.prefix = in.readUTF();
if ("".equals(this.prefix)) this.prefix = null;
this.localName = in.readUTF();
this.owner = in.readUTF();
this.name = in.readUTF();
this.types = (String[]) in.readObject();
}
public Method getMethod() {
if (this.m == null) {
try {
Class t = Class.forName(this.owner);
Class[] p = ReflectionUtil.toTypeArray(this.types);
this.m = t.getMethod(this.name, p);
} catch (Exception e) {
e.printStackTrace();
}
}
return this.m;
}
public boolean matches(String prefix, String localName) {
if (this.prefix != null) {
if (prefix == null) return false;
if (!this.prefix.equals(prefix)) return false;
}
return this.localName.equals(localName);
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof Function) {
Function of = (Function) obj;
return (of.prefix.equals(prefix) &&
of.localName.equals(localName));
}
return false;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
return (this.prefix + this.localName).hashCode();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy