use of com.webcohesion.enunciate.modules.jaxb.model.TypeDefinition in project enunciate by stoicflame.
the class XmlTypeVisitor method visitDeclared.
@Override
public XmlType visitDeclared(DeclaredType declaredType, Context context) {
Element declaredElement = declaredType.asElement();
String fqn = declaredElement instanceof TypeElement ? ((TypeElement) declaredElement).getQualifiedName().toString() : declaredType.toString();
if (context.getStack().contains(fqn)) {
// break the recursion.
return KnownXmlType.ANY_TYPE;
}
context.getStack().push(fqn);
try {
AdapterType adapterType = JAXBUtil.findAdapterType(declaredElement, context.getContext());
if (adapterType != null) {
adapterType.getAdaptingType().accept(this, context);
} else {
MapType mapType = MapType.findMapType(declaredType, context.getContext());
if (mapType != null) {
XmlType keyType = mapType.getKeyType().accept(this, new Context(context.getContext(), false, false, context.stack));
XmlType valueType = mapType.getValueType().accept(this, new Context(context.getContext(), false, false, context.stack));
return new MapXmlType(keyType, valueType);
} else {
switch(declaredElement.getKind()) {
case ENUM:
case CLASS:
XmlType knownType = context.getContext().getKnownType(declaredElement);
if (knownType != null) {
return knownType;
} else {
// type not known, not specified. Last chance: look for the type definition.
TypeDefinition typeDefinition = context.getContext().findTypeDefinition(declaredElement);
if (typeDefinition != null) {
return new XmlClassType(typeDefinition);
}
}
break;
}
}
}
return KnownXmlType.ANY_TYPE;
} finally {
context.getStack().pop();
}
}
use of com.webcohesion.enunciate.modules.jaxb.model.TypeDefinition in project enunciate by stoicflame.
the class AccessorOverridesAnotherMethod method overridesAnother.
public Boolean overridesAnother(Accessor a) {
TypeDefinition typeDefinition = a.getTypeDefinition();
XmlType baseType = typeDefinition.getBaseType();
if (baseType instanceof XmlClassType) {
typeDefinition = ((XmlClassType) baseType).getTypeDefinition();
while (typeDefinition != null) {
ArrayList<Accessor> accessors = new ArrayList<Accessor>();
accessors.addAll(typeDefinition.getAttributes());
accessors.add(typeDefinition.getValue());
accessors.addAll(typeDefinition.getElements());
for (Accessor accessor : accessors) {
if (a.overrides(accessor)) {
return true;
}
}
baseType = typeDefinition.getBaseType();
typeDefinition = baseType instanceof XmlClassType ? ((XmlClassType) baseType).getTypeDefinition() : null;
}
}
return Boolean.FALSE;
}
use of com.webcohesion.enunciate.modules.jaxb.model.TypeDefinition 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.modules.jaxb.model.TypeDefinition in project enunciate by stoicflame.
the class JavaXMLClientModule method generateClientSources.
protected File generateClientSources() {
File sourceDir = getSourceDir();
sourceDir.mkdirs();
Map<String, Object> model = new HashMap<String, Object>();
Map<String, String> conversions = getClientPackageConversions();
EnunciateJaxbContext jaxbContext = this.jaxbModule.getJaxbContext();
model.put("packageFor", new ClientPackageForMethod(conversions, this.context));
model.put("classnameFor", new ClientClassnameForMethod(conversions, jaxbContext));
model.put("simpleNameFor", new SimpleNameForMethod(new ClientClassnameForMethod(conversions, jaxbContext, true)));
model.put("file", new FileDirective(sourceDir, this.enunciate.getLogger()));
model.put("generatedCodeLicense", this.enunciate.getConfiguration().readGeneratedCodeLicenseFile());
model.put("annotationValue", new AnnotationValueMethod());
Set<String> facetIncludes = new TreeSet<String>(this.enunciate.getConfiguration().getFacetIncludes());
facetIncludes.addAll(getFacetIncludes());
Set<String> facetExcludes = new TreeSet<String>(this.enunciate.getConfiguration().getFacetExcludes());
facetExcludes.addAll(getFacetExcludes());
FacetFilter facetFilter = new FacetFilter(facetIncludes, facetExcludes);
model.put("isFacetExcluded", new IsFacetExcludedMethod(facetFilter));
boolean upToDate = isUpToDateWithSources(sourceDir);
if (!upToDate) {
try {
debug("Generating the Java client classes...");
HashMap<String, WebFault> allFaults = new HashMap<String, WebFault>();
AntPatternMatcher matcher = new AntPatternMatcher();
matcher.setPathSeparator(".");
if (this.jaxwsModule != null) {
Set<String> seeAlsos = new TreeSet<String>();
// for each endpoint interface.
for (WsdlInfo wsdlInfo : this.jaxwsModule.getJaxwsContext().getWsdls().values()) {
for (EndpointInterface ei : wsdlInfo.getEndpointInterfaces()) {
if (facetFilter.accept(ei)) {
for (WebMethod webMethod : ei.getWebMethods()) {
if (facetFilter.accept(webMethod)) {
for (WebMessage webMessage : webMethod.getMessages()) {
if (webMessage instanceof RequestWrapper) {
model.put("message", webMessage);
processTemplate(getTemplateURL("client-request-bean.fmt"), model);
seeAlsos.add(getBeanName(new ClientClassnameForMethod(conversions, jaxbContext), ((RequestWrapper) webMessage).getRequestBeanName()));
} else if (webMessage instanceof ResponseWrapper) {
model.put("message", webMessage);
processTemplate(getTemplateURL("client-response-bean.fmt"), model);
seeAlsos.add(getBeanName(new ClientClassnameForMethod(conversions, jaxbContext), ((ResponseWrapper) webMessage).getResponseBeanName()));
} else if (webMessage instanceof WebFault) {
WebFault fault = (WebFault) webMessage;
allFaults.put(fault.getQualifiedName().toString(), fault);
}
}
}
}
}
}
}
// gather the annotation information and process the possible beans for each web fault.
for (WebFault webFault : allFaults.values()) {
boolean implicit = webFault.isImplicitSchemaElement();
String faultBean = implicit ? getBeanName(new ClientClassnameForMethod(conversions, jaxbContext), webFault.getImplicitFaultBeanQualifiedName()) : new ClientClassnameForMethod(conversions, jaxbContext).convert(webFault.getExplicitFaultBeanType());
seeAlsos.add(faultBean);
if (implicit) {
model.put("fault", webFault);
processTemplate(getTemplateURL("client-fault-bean.fmt"), model);
}
}
model.put("seeAlsoBeans", seeAlsos);
model.put("baseUri", this.enunciate.getConfiguration().getApplicationRoot());
for (WsdlInfo wsdlInfo : this.jaxwsModule.getJaxwsContext().getWsdls().values()) {
if (wsdlInfo.getWsdlFile() == null) {
throw new EnunciateException("WSDL " + wsdlInfo.getId() + " doesn't have a filename.");
}
for (EndpointInterface ei : wsdlInfo.getEndpointInterfaces()) {
if (facetFilter.accept(ei)) {
model.put("endpointInterface", ei);
model.put("wsdlFileName", wsdlInfo.getFilename());
processTemplate(getTemplateURL("client-endpoint-interface.fmt"), model);
processTemplate(getTemplateURL("client-soap-endpoint-impl.fmt"), model);
}
}
}
for (WebFault webFault : allFaults.values()) {
if (useServerSide(webFault, matcher)) {
copyServerSideType(sourceDir, webFault);
} else {
TypeElement superFault = (TypeElement) ((DeclaredType) webFault.getSuperclass()).asElement();
if (superFault != null && allFaults.containsKey(superFault.getQualifiedName().toString()) && allFaults.get(superFault.getQualifiedName().toString()).isImplicitSchemaElement()) {
model.put("superFault", allFaults.get(superFault.getQualifiedName().toString()));
} else {
model.remove("superFault");
}
model.put("fault", webFault);
processTemplate(getTemplateURL("client-web-fault.fmt"), model);
}
}
}
for (SchemaInfo schemaInfo : this.jaxbModule.getJaxbContext().getSchemas().values()) {
for (TypeDefinition typeDefinition : schemaInfo.getTypeDefinitions()) {
if (facetFilter.accept(typeDefinition)) {
if (useServerSide(typeDefinition, matcher)) {
copyServerSideType(sourceDir, typeDefinition);
} else {
model.put("rootEl", this.jaxbModule.getJaxbContext().findElementDeclaration(typeDefinition));
model.put("type", typeDefinition);
URL template = typeDefinition.isEnum() ? typeDefinition instanceof QNameEnumTypeDefinition ? getTemplateURL("client-qname-enum-type.fmt") : getTemplateURL("client-enum-type.fmt") : typeDefinition.isSimple() ? getTemplateURL("client-simple-type.fmt") : getTemplateURL("client-complex-type.fmt");
processTemplate(template, model);
}
}
}
for (Registry registry : schemaInfo.getRegistries()) {
model.put("registry", registry);
processTemplate(getTemplateURL("client-registry.fmt"), model);
}
}
} catch (IOException e) {
throw new EnunciateException(e);
} catch (TemplateException e) {
throw new EnunciateException(e);
}
} else {
info("Skipping generation of Java client sources as everything appears up-to-date...");
}
context.setProperty(LIRBARY_DESCRIPTION_PROPERTY, readLibraryDescription(model));
return sourceDir;
}
use of com.webcohesion.enunciate.modules.jaxb.model.TypeDefinition in project enunciate by stoicflame.
the class FunctionIdentifierForMethod method exec.
public Object exec(List list) throws TemplateModelException {
if (list.size() < 1) {
throw new TemplateModelException("The functionIdentifierFor method must have an accessor or type mirror as a parameter.");
}
TemplateModel from = (TemplateModel) list.get(0);
Object unwrapped = FreemarkerUtil.unwrap(from);
TypeMirror typeMirror;
if (unwrapped instanceof Accessor) {
Accessor accessor = (Accessor) unwrapped;
if (accessor.isAdapted()) {
typeMirror = accessor.getAdapterType().getAdaptingType(accessor.getAccessorType(), this.context.getContext());
} else {
typeMirror = accessor.getAccessorType();
}
} else if (unwrapped instanceof TypeMirror) {
typeMirror = (TypeMirror) unwrapped;
} else {
throw new TemplateModelException("The functionIdentifierFor method must have an accessor or type mirror as a parameter.");
}
if (typeMirror instanceof PrimitiveType) {
switch(typeMirror.getKind()) {
case BOOLEAN:
return "Boolean";
case BYTE:
return "Byte";
case CHAR:
return "Character";
case DOUBLE:
return "Double";
case FLOAT:
return "Float";
case INT:
return "Int";
case LONG:
return "Long";
case SHORT:
return "Short";
default:
return (typeMirror.getKind()).toString();
}
} else if (typeMirror instanceof DeclaredType) {
TypeElement declaration = (TypeElement) ((DeclaredType) typeMirror).asElement();
TypeDefinition typeDefinition = this.context.findTypeDefinition(declaration);
if (typeDefinition != null) {
if (typeDefinition instanceof EnumTypeDefinition) {
return typeDefName.calculateName(typeDefinition);
}
} else {
String classname = declaration.getQualifiedName().toString();
if (Boolean.class.getName().equals(classname)) {
return "Boolean";
} else if (Byte.class.getName().equals(classname)) {
return "Byte";
} else if (Character.class.getName().equals(classname)) {
return "UnsignedShort";
} else if (Double.class.getName().equals(classname)) {
return "Double";
} else if (Float.class.getName().equals(classname)) {
return "Float";
} else if (Integer.class.getName().equals(classname)) {
return "Int";
} else if (Long.class.getName().equals(classname)) {
return "Long";
} else if (Short.class.getName().equals(classname)) {
return "Short";
}
}
}
return null;
}
Aggregations