use of com.webcohesion.enunciate.api.datatype.DataType in project enunciate by stoicflame.
the class QNameForMediaTypeMethod method exec.
public Object exec(List list) throws TemplateModelException {
if (list.size() < 1) {
throw new TemplateModelException("The QNameForType method must have a type mirror as a parameter.");
}
TemplateModel from = (TemplateModel) list.get(0);
Object unwrapped = FreemarkerUtil.unwrap(from);
if (unwrapped instanceof MediaTypeDescriptor) {
MediaTypeDescriptor mt = (MediaTypeDescriptor) unwrapped;
DataTypeReference typeReference = mt.getDataType();
if (typeReference != null) {
if (typeReference instanceof DataTypeReferenceImpl) {
return ((DataTypeReferenceImpl) typeReference).getElementQName();
} else if (associateJsonWithXml && mt.getMediaType().endsWith("json")) {
DataType dataType = typeReference.getValue();
if (dataType != null) {
XmlType knownType = this.context.getKnownType(dataType.getJavaElement());
if (knownType != null) {
return knownType.getQname();
}
TypeDefinition typeDefinition = this.context.findTypeDefinition(dataType.getJavaElement());
if (typeDefinition != null) {
return typeDefinition.getQname();
}
}
}
}
}
return null;
}
use of com.webcohesion.enunciate.api.datatype.DataType in project enunciate by stoicflame.
the class BaseDatatypeNameForMethod method exec.
public Object exec(List list) throws TemplateModelException {
if (list.size() < 1) {
throw new TemplateModelException("The datatypeNameFor method must have a parameter.");
}
TemplateModel from = (TemplateModel) list.get(0);
Object unwrapped = FreemarkerUtil.unwrap(from);
BaseType baseType = null;
if (unwrapped instanceof DataType) {
DataType dataType = (DataType) unwrapped;
baseType = dataType.getBaseType();
}
if (baseType == null) {
throw new TemplateModelException("No base data type name for: " + unwrapped);
}
switch(baseType) {
case bool:
return "boolean";
case number:
return "number";
case string:
return "string";
default:
return "object";
}
}
use of com.webcohesion.enunciate.api.datatype.DataType in project enunciate by stoicflame.
the class DefinitionIdForMethod method exec.
public Object exec(List list) throws TemplateModelException {
if (list.size() < 1) {
throw new TemplateModelException("The definitionId method must have a parameter.");
}
TemplateModel from = (TemplateModel) list.get(0);
Object unwrapped = FreemarkerUtil.unwrap(from);
if (unwrapped instanceof DataType) {
return definitionIdFromSlug(((DataType) unwrapped).getSlug());
} else if (unwrapped instanceof DataTypeReference) {
return definitionIdFromSlug(((DataTypeReference) unwrapped).getSlug());
}
return null;
}
use of com.webcohesion.enunciate.api.datatype.DataType in project enunciate by stoicflame.
the class ApiDocsJavaDocTagHandler method onInlineTag.
@Override
public String onInlineTag(String tagName, String tagText, DecoratedElement context) {
if ("link".equals(tagName)) {
JavaDocLink link = JavaDocLink.parse(tagText);
String classRef = link.getClassName();
String subelementRef = link.getMemberName();
String value = link.getLabel();
// use the current context as the class ref.
if ("".equals(classRef)) {
DecoratedElement type = context;
while (!(type instanceof DecoratedTypeElement)) {
type = (DecoratedElement) type.getEnclosingElement();
if (type == null || type instanceof PackageElement) {
break;
}
}
if (type instanceof DecoratedTypeElement) {
classRef = ((DecoratedTypeElement) type).getQualifiedName().toString();
}
}
if (!"".equals(classRef)) {
if (classRef.indexOf('.') < 0) {
// if it's a local reference, assume it's in the current package.
DecoratedElement pckg = context;
while (!(pckg instanceof DecoratedPackageElement)) {
pckg = (DecoratedElement) pckg.getEnclosingElement();
if (pckg == null) {
break;
}
}
if (pckg != null) {
classRef = ((DecoratedPackageElement) pckg).getQualifiedName() + "." + classRef;
}
}
// now find the reference
Set<Syntax> syntaxes = this.registry.getSyntaxes(this.context);
for (Syntax syntax : syntaxes) {
List<DataType> dataTypes = syntax.findDataTypes(classRef);
if (dataTypes != null && !dataTypes.isEmpty()) {
DataType dataType = dataTypes.get(0);
Value dataTypeValue = dataType.findValue(subelementRef);
if (dataTypeValue != null) {
return "<a href=\"" + dataType.getSlug() + ".html#" + dataTypeValue.getValue() + "\">" + (value != null ? value : dataTypeValue.getValue()) + "</a>";
}
Property property = dataType.findProperty(subelementRef);
if (property != null) {
return "<a href=\"" + dataType.getSlug() + ".html#prop-" + property.getName() + "\">" + (value != null ? value : property.getName()) + "</a>";
}
return "<a href=\"" + dataType.getSlug() + ".html\">" + (value != null ? value : (subelementRef.isEmpty() ? dataType.getLabel() : subelementRef)) + "</a>";
}
}
List<ResourceApi> resourceApis = this.registry.getResourceApis(this.context);
for (ResourceApi resourceApi : resourceApis) {
Method method = resourceApi.findMethodFor(classRef, subelementRef);
if (method != null) {
if (value == null) {
value = method.getLabel() + " " + method.getResource().getGroup().getLabel();
}
return "<a href=\"" + method.getResource().getGroup().getSlug() + ".html#" + method.getSlug() + "\">" + value + "</a>";
} else {
ResourceGroup resourceGroup = resourceApi.findResourceGroupFor(classRef);
if (resourceGroup != null) {
if (value == null) {
value = resourceGroup.getLabel();
}
return "<a href=\"" + resourceGroup.getSlug() + ".html\">" + value + "</a>";
}
}
}
List<ServiceApi> serviceApis = this.registry.getServiceApis(this.context);
for (ServiceApi serviceApi : serviceApis) {
Operation operation = serviceApi.findOperationFor(classRef, subelementRef);
if (operation != null) {
if (value == null) {
value = operation.getName();
}
return "<a href=\"" + operation.getService().getSlug() + ".html#" + operation.getSlug() + "\">" + value + "</a>";
} else {
Service service = serviceApi.findServiceFor(classRef);
if (service != null) {
if (value == null) {
value = service.getLabel();
}
return "<a href=\"" + service.getSlug() + ".html\">" + value + "</a>";
}
}
}
}
return value != null ? value : tagText.trim();
} else if ("code".equals(tagName)) {
return "<code>" + tagText + "</code>";
}
return tagText;
}
use of com.webcohesion.enunciate.api.datatype.DataType in project enunciate by stoicflame.
the class NamespaceImpl method getTypes.
@Override
public List<? extends DataType> getTypes() {
FacetFilter facetFilter = this.registrationContext.getFacetFilter();
ArrayList<DataType> dataTypes = new ArrayList<DataType>();
for (TypeDefinition typeDefinition : this.schema.getTypeDefinitions()) {
if (!facetFilter.accept(typeDefinition)) {
continue;
}
if (typeDefinition instanceof ComplexTypeDefinition) {
dataTypes.add(new ComplexDataTypeImpl((ComplexTypeDefinition) typeDefinition, registrationContext));
} else if (typeDefinition instanceof EnumTypeDefinition) {
dataTypes.add(new EnumDataTypeImpl((EnumTypeDefinition) typeDefinition, registrationContext));
}
}
return dataTypes;
}
Aggregations