package sharpen.xobotos.api.interop;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
import sharpen.xobotos.api.interop.Signature.Mode;
import sharpen.xobotos.api.interop.glue.AbstractTypeReference;
import sharpen.xobotos.api.interop.glue.TypeReference;
import sharpen.xobotos.api.interop.marshal.MarshalInfo.MarshalEntry;
import sharpen.xobotos.config.ConfigurationException;
import sharpen.xobotos.config.annotations.AttributeReference;
import java.util.Collections;
import java.util.List;
@XStreamAlias("native-struct")
public class NativeStruct extends NativeTypeTemplate {
@XStreamAsAttribute
@XStreamAlias("native-type")
private String _nativeType;
@XStreamImplicit(itemFieldName = "member")
private List<MemberInfo> _members;
private Object readResolve() {
if (_members == null)
throw new ConfigurationException("Missing <member> entries in NativeStruct");
if (_nativeType == null)
throw new ConfigurationException("Missing <native-type> in NativeStruct");
return this;
}
public List<MemberInfo> getMembers() {
return Collections.unmodifiableList(_members);
}
@XStreamAlias("member")
public static class MemberInfo {
@XStreamAsAttribute
@XStreamAlias("name")
private String _name;
@XStreamAsAttribute
@XStreamAlias("native-name")
private String _nativeName;
@XStreamOmitField
@AttributeReference("marshal")
private MarshalEntry _marshal;
@XStreamAsAttribute
@XStreamAlias("mode")
private Mode _mode;
@XStreamAsAttribute
@XStreamAlias("value")
private String _value;
public String getName() {
return _name;
}
public String getNativeName() {
return _nativeName != null ? _nativeName : _name;
}
public MarshalEntry getMarshalInfo() {
return _marshal;
}
public Mode getMode() {
return _mode;
}
public String getValue() {
return _value;
}
}
public AbstractTypeReference getNativeType() {
return new TypeReference(_nativeType);
}
}