package org.jboss.iiop.rmi;
import org.omg.CORBA.AttributeMode;
import java.lang.reflect.Method;
import java.rmi.Remote;
public class AttributeAnalysis
extends AbstractAnalysis
{
private AttributeAnalysis(String javaName, AttributeMode mode,
Method accessor, Method mutator)
throws RMIIIOPViolationException
{
super(Util.javaToIDLName(javaName), javaName);
this.mode = mode;
this.cls = accessor.getReturnType();
this.accessor = accessor;
this.mutator = mutator;
if (accessor.getDeclaringClass().isInterface() &&
Remote.class.isAssignableFrom(accessor.getDeclaringClass())) {
accessorAnalysis = new OperationAnalysis(accessor);
if (mutator != null)
mutatorAnalysis = new OperationAnalysis(mutator);
setIDLName(getIDLName()); }
}
AttributeAnalysis(String javaName, Method accessor)
throws RMIIIOPViolationException
{
this(javaName, AttributeMode.ATTR_READONLY, accessor, null);
}
AttributeAnalysis(String javaName, Method accessor, Method mutator)
throws RMIIIOPViolationException
{
this(javaName, AttributeMode.ATTR_NORMAL, accessor, mutator);
}
public AttributeMode getMode()
{
return mode;
}
public Class getCls()
{
return cls;
}
public Method getAccessor()
{
return accessor;
}
public Method getMutator()
{
return mutator;
}
public OperationAnalysis getAccessorAnalysis()
{
return accessorAnalysis;
}
public OperationAnalysis getMutatorAnalysis()
{
return mutatorAnalysis;
}
void setIDLName(String idlName)
{
super.setIDLName(idlName);
if (idlName.charAt(0) >= 0x41 && idlName.charAt(0) <= 0x5a
&& (idlName.length() <= 1
|| idlName.charAt(1) < 0x41 || idlName.charAt(1) > 0x5a)) {
idlName =
idlName.substring(0, 1).toLowerCase() + idlName.substring(1);
}
if (accessorAnalysis != null)
accessorAnalysis.setIDLName("_get_" + idlName);
if (mutatorAnalysis != null)
mutatorAnalysis.setIDLName("_set_" + idlName);
}
private AttributeMode mode;
private Class cls;
private Method accessor = null;
private Method mutator = null;
private OperationAnalysis accessorAnalysis = null;
private OperationAnalysis mutatorAnalysis = null;
}