/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.xml.xsd.typeprovider;
import gw.fs.IFile;
import gw.lang.reflect.*;
import gw.lang.reflect.java.IJavaBackedType;
import gw.lang.reflect.java.IJavaClassInfo;
import gw.util.GosuClassUtil;
import java.net.URL;
import java.util.List;
import static gw.config.CommonServices.getFileSystem;
public class XmlType extends TypeBase implements IXmlType, IEnhanceableType, IJavaBackedType {
private final ITypeLoader _typeLoader;
private final IXmlTypeData _typeData;
public XmlType(ITypeLoader typeLoader, IXmlTypeData typeData) {
_typeLoader = typeLoader;
_typeData = typeData;
}
@Override
public String getName() {
return _typeData.getName();
}
@Override
public String getRelativeName() {
return GosuClassUtil.getNameNoPackage( _typeData.getName() );
}
@Override
public String getNamespace() {
return GosuClassUtil.getPackage( _typeData.getName() );
}
@Override
public ITypeLoader getTypeLoader() {
return _typeLoader;
}
@Override
public IType getSupertype() {
return _typeData.getSuperType();
}
@Override
public IType[] getInterfaces() {
List<? extends IType> interfaces = _typeData.getInterfaces();
return interfaces.toArray(new IType[interfaces.size()]);
}
@Override
public ITypeInfo getTypeInfo() {
return _typeData;
}
@Override
public String toString() {
return _typeData.getName();
}
@Override
public IXmlTypeData getTypeData() {
return _typeData;
}
@Override
public boolean isEnum() {
return _typeData.isEnum();
}
@Override
public boolean isFinal() {
return _typeData.isFinal();
}
@Override
public IJavaClassInfo getBackingClassInfo() {
return _typeData.getBackingClassInfo();
}
@Override
public Class getBackingClass() {
return _typeData.getBackingClass();
}
@Override
protected IJavaClassInfo getArrayComponentClass() {
return getBackingClassInfo();
}
@Override
public IType getTypeFromJavaBackedType() {
return TypeSystem.getTypeFromJavaBasedType(this);
}
@Override
public IFile[] getSourceFiles() {
URL schemaURL = _typeData.getSchemaIndex().getSchemaURL();
if (schemaURL != null) {
return new IFile[]{getFileSystem().getIFile(schemaURL)};
}
return IFile.EMPTY_ARRAY;
}
}