private void writeStructMemberAsAttribute(StructMember member) { // Get the name and the type: Name memberName = member.getName(); Type memberType = member.getType(); // Write the attribute definition: writer.writeStartElement(XS_URI, "attribute"); writer.writeAttribute("name", schemaNames.getSchemaTagName(memberName)); writer.writeAttribute("type", getMemberSchemaTypeName(member.getDeclaringType(), memberType, memberName)); writer.writeEndElement(); }
public void setName(Name name) { if (member==null) { member = new StructMember(); } member.setName(name); } public Type getType() {
public void setType(Type type) { if (member==null) { member = new StructMember(); } member.setType(type); } public Name getName() {
private void generateBuilderFields(StructMember member) { // Get the name of the property: Name name = member.getName(); String field = javaNames.getJavaMemberStyleName(name); // Get the type reference: Type type = member.getType(); JavaTypeReference typeReference = javaTypes.getTypeReference(type, true); javaBuffer.addImports(typeReference.getImports()); // Generate the field: javaBuffer.addLine("private %1$s %2$s;", typeReference.getText(), field); }
public Type getType() { return member==null ? null : member.getType(); } public void setType(Type type) {
private String getName(Concept concept) { String name = concept.getName().toString(); String parent = null; if (concept instanceof StructMember) { StructMember member = (StructMember) concept; parent = member.getDeclaringType().getName().toString(); } else if (concept instanceof Method) { Method method = (Method) concept; parent = method.getDeclaringService().getName().toString(); } if (parent != null) { name = parent + "/" + name; } return name; }
private void generateContainerFields(StructMember member) { // Get the name of the field: Name name = member.getName(); String field = javaNames.getJavaMemberStyleName(name); // Get the type reference: Type type = member.getType(); JavaTypeReference typeReference = javaTypes.getTypeReference(type, true); javaBuffer.addImports(typeReference.getImports()); // Generate the field: javaBuffer.addLine("private %1$s %2$s;", typeReference.getText(), field); }
public boolean isCollection() { return member.getType() instanceof ListType; }
@Override public String toString() { StringBuilder buffer = new StringBuilder(); if (declaringType != null) { buffer.append(declaringType); buffer.append(":"); } buffer.append(getName()); return buffer.toString(); } }
private void generateInterfaceMembers(StructMember member) { // Get the name of the property: Name name = member.getName(); Type type = member.getType(); Model model = type.getModel(); String field = javaNames.getJavaMemberStyleName(name); // Get the type reference: JavaTypeReference typeReference = javaTypes.getTypeReference(type, false); javaBuffer.addImports(typeReference.getImports()); // Generate the getters: javaBuffer.addLine("%1$s %2$s();", typeReference, field); if (type == model.getIntegerType()) { javaBuffer.addLine("Byte %1$sAsByte();", field); javaBuffer.addLine("Short %1$sAsShort();", field); javaBuffer.addLine("Integer %1$sAsInteger();", field); javaBuffer.addLine("Long %1$sAsLong();", field); } javaBuffer.addLine(); // Generate the checker: javaBuffer.addLine("boolean %1$sPresent();", field); javaBuffer.addLine(); }
private void writeStructMemberAsElement(StructMember member) { Name memberName = member.getName(); Type memberType = member.getType(); ListType listType = (ListType) memberType; Type elementType = listType.getElementType(); String elementTypeName = getMemberSchemaTypeName(member.getDeclaringType(), elementType, memberName); if (elementType instanceof PrimitiveType || elementType instanceof EnumType) { writer.writeAttribute("type", getMemberSchemaTypeName(member.getDeclaringType(), memberType, memberName)); writer.writeAttribute("minOccurs", "0"); writer.writeAttribute("maxOccurs", "1");
private Type getType(Type type, Name name) { //all nodes except for leaves in MemberInvovlementTree are assumed //to be a StructType or ListType (for collections) if (type instanceof StructType) { return ((StructType)type).getMember(name).get().getType(); } else if (type instanceof ListType) { ListType listType = (ListType)type; //use the element-type of the list StructType structType = (StructType)listType.getElementType(); return structType.getMember(name).get().getType(); } else { throw new IllegalArgumentException("Expected StructType or ListType element"); } }
private String getName(StructMember member) { return names.getLowerJoined(member.getName(), "_"); }
private void generateStructWriteMemberAsAttribute(StructMember member) { Name name = member.getName(); Type type = member.getType(); String field = javaNames.getJavaMemberStyleName(name); String tag = schemaNames.getSchemaTagName(name); javaBuffer.addLine("if (object.%1$sPresent()) {", field); if (type instanceof PrimitiveType) { Model model = type.getModel(); if (type == model.getBooleanType() || type == model.getIntegerType() || type == model.getDecimalType()) { javaBuffer.addLine("writer.writeAttribute(\"%1$s\", object.%2$s().toString());", tag, field); } else if (type == model.getStringType()) { javaBuffer.addLine("writer.writeAttribute(\"%1$s\", object.%2$s());", tag, field); } else if (type == model.getDateType()) { // TODO: This isn't the XML schema format. javaBuffer.addLine("writer.writeAttribute(\"%1$s\", object.%2$s().toString());", tag, field); } } else if (type instanceof EnumType) { javaBuffer.addLine("writer.writeAttribute(\"%1$s\", object.%2$s().value());", tag, field); } javaBuffer.addLine("}"); }
private void generateContainerMethods(StructMember member) { Name name = member.getName(); Type type = member.getType(); Model model = type.getModel(); String field = javaNames.getJavaMemberStyleName(name); String property = javaNames.getJavaPropertyStyleName(name); String declaring = javaNames.getJavaClassStyleName(member.getDeclaringType().getName());
private void generateStructWriteOne(StructType type) { // Calculate the name of the type and the XML tag: JavaClassName typeName = javaTypes.getInterfaceName(type); String tag = schemaNames.getSchemaTagName(type.getName()); // Add the required imports: javaBuffer.addImport(typeName); javaBuffer.addImport(XmlWriter.class); // Generate the method that uses the default tag name: javaBuffer.addLine("public static void writeOne(%1$s object, XmlWriter writer) {", typeName.getSimpleName()); javaBuffer.addLine( "writeOne(object, \"%1$s\", writer);", tag); javaBuffer.addLine("}"); javaBuffer.addLine(); // Generate the method that receives the tag name as parameter: javaBuffer.addLine( "public static void writeOne(%1$s object, String tag, XmlWriter writer) {", typeName.getSimpleName()); javaBuffer.addLine("writer.writeStartElement(tag);"); Stream.concat(type.attributes(), type.links()) .filter(x -> schemaNames.isRepresentedAsAttribute(x.getName())) .sorted() .forEach(this::generateStructWriteMemberAsAttribute); Stream.concat(type.attributes(), type.links()) .filter(x -> !schemaNames.isRepresentedAsAttribute(x.getName())) .sorted() .forEach(this::generateStructWriteMemberAsElement); javaBuffer.addLine("writer.writeEndElement();"); javaBuffer.addLine("}"); javaBuffer.addLine(); }
private void generateBuilderSource(StructType type) { // Begin class: JavaClassName builderName = javaTypes.getBuilderName(type); javaBuffer.addLine("public class %1$s {", builderName.getSimpleName()); // Generate the fields for attributes and links: Stream.concat(type.attributes(), type.links()).sorted().forEach(this::generateBuilderFields); javaBuffer.addLine(); // Generate the methods for attributes and links: Stream.concat(type.attributes(), type.links()) .sorted() .forEach(member -> generateBuilderMethods(type, member)); // Generate the "build" method: JavaClassName typeName = javaTypes.getInterfaceName(type); JavaClassName containerName = javaTypes.getContainerName(type); javaBuffer.addImport(typeName); javaBuffer.addImport(containerName); javaBuffer.addLine("public %1$s build() {", typeName.getSimpleName()); javaBuffer.addLine( "%1$s container = new %1$s();", containerName.getSimpleName()); Stream.concat(type.attributes(), type.links()).sorted().forEach(member -> { Name name = member.getName(); String field = javaNames.getJavaMemberStyleName(name); javaBuffer.addLine("container.%1$s(%1$s);", field); }); javaBuffer.addLine( "return container;"); javaBuffer.addLine("}"); // End class: javaBuffer.addLine("}"); }