/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.xml.xsd.typeprovider;
import gw.internal.xml.xsd.typeprovider.schema.XmlSchemaObject;
import gw.lang.reflect.IConstructorInfo;
import gw.lang.reflect.IMethodInfo;
import gw.lang.reflect.IPropertyAccessor;
import gw.lang.reflect.IPropertyInfo;
import gw.lang.reflect.IType;
import gw.lang.reflect.PropertyInfoBuilder;
import gw.lang.reflect.TypeSystem;
import gw.lang.reflect.java.IJavaClassInfo;
import gw.lang.reflect.java.IJavaType;
import gw.lang.reflect.java.JavaTypes;
import gw.lang.reflect.java.JavaTypes;
import gw.xml.XmlSchemaAccess;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class XmlSchemaAccessTypeData<T> extends XmlSchemaTypeData<T> implements IXmlSchemaTypeData<T> {
private final String _typeName;
private final String _schemaSchemaTypeName;
private final T _context;
public XmlSchemaAccessTypeData( String typeName, String schemaSchemaTypeName, T context, XmlSchemaIndex<T> schemaIndex ) {
super( schemaIndex );
_typeName = typeName;
_schemaSchemaTypeName = schemaSchemaTypeName;
_context = context;
}
@Override
public String getName() {
return _typeName;
}
@Override
public XmlSchemaObject getSchemaObject() {
return null;
}
@Override
public boolean isAnonymous() {
return false;
}
public List<IPropertyInfo> getDeclaredProperties() {
List<IPropertyInfo> props = new ArrayList<IPropertyInfo>( 1 );
final IType schemaAccessType = TypeSystem.getByFullName( "gw.xml.XmlSchemaAccess" ).getParameterizedType( TypeSystem.getByFullName( _schemaSchemaTypeName ) );
props.add( new PropertyInfoBuilder()
.withName( "SchemaAccess" )
.withType( schemaAccessType )
.withDescription( "An object that allows programmatic reflective access to the loaded schema" )
.withStatic()
.withAccessor( new IPropertyAccessor() {
@Override
public Object getValue( Object ctx ) {
return getSchemaIndex().getXmlSchemaAccess();
//return TypeSystem.getByFullName( _schemaSchemaTypeName ).getTypeInfo().getMethod( "parse", TypeSystem.get( InputStream.class ) ).getCallHandler().handleCall( null, _xmlSchemaSource.getInputStream() );
}
@Override
public void setValue( Object ctx, Object value ) {
throw new UnsupportedOperationException();
}
} )
.build( this ) );
return props;
}
@Override
public List<IMethodInfo> getDeclaredMethods() {
return Collections.emptyList();
}
@Override
public List<IConstructorInfo> getDeclaredConstructors() {
return Collections.emptyList();
}
@Override
public boolean isFinal() {
return true;
}
@Override
public boolean isEnum() {
return false;
}
@Override
public IType getSuperType() {
return JavaTypes.OBJECT();
}
@Override
public boolean prefixSuperProperties() {
return false;
}
@Override
public long getFingerprint() {
return getSchemaIndex().getFingerprint();
}
@Override
public Class getBackingClass() {
return XmlSchemaAccess.class;
}
@Override
public IJavaClassInfo getBackingClassInfo() {
return ((IJavaType)JavaTypes.getSystemType(XmlSchemaAccess.class)).getBackingClassInfo();
}
public T getContext() {
return _context;
}
@Override
public void maybeInit() {
// nothing to do
}
}