diff --git a/students/495232796/OOD/builderpattern/pom.xml b/students/495232796/OOD/builderpattern/pom.xml
new file mode 100644
index 0000000000..84bf4627e3
--- /dev/null
+++ b/students/495232796/OOD/builderpattern/pom.xml
@@ -0,0 +1,42 @@
+
+ 4.0.0
+ com.coderising
+ ood-assignment
+ 0.0.1-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.7
+ 1.7
+
+
+
+
+ jar
+
+ ood-assignment
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+
+
+
+ aliyunmaven
+ http://maven.aliyun.com/nexus/content/groups/public/
+
+
+
\ No newline at end of file
diff --git a/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilder.java b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilder.java
new file mode 100644
index 0000000000..cf143e1ee6
--- /dev/null
+++ b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilder.java
@@ -0,0 +1,41 @@
+package com.coderising.dp.builder;
+
+public class TagBuilder {
+ private TagNode rootNode = null;
+ private TagNode curNode = null;
+ private TagNode parentNode = null;
+
+ public TagBuilder(String rootTagName){
+ rootNode = new TagNode(rootTagName);
+ curNode = rootNode;
+ }
+
+ public TagBuilder addChild(String childTagName){
+ TagNode tn = new TagNode(childTagName);
+ curNode.add(tn);
+ parentNode = curNode;
+ curNode = tn;
+
+ return this;
+ }
+ public TagBuilder addSibling(String siblingTagName){
+ TagNode tn = new TagNode(siblingTagName);
+ parentNode.add(tn);
+ curNode = tn;
+
+ return this;
+ }
+ public TagBuilder setAttribute(String name, String value){
+ curNode.setAttribute(name, value);
+
+ return this;
+ }
+ public TagBuilder setText(String value){
+ curNode.setValue(value);
+
+ return this;
+ }
+ public String toXML(){
+ return rootNode.toXML();
+ }
+}
diff --git a/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilderTest.java b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilderTest.java
new file mode 100644
index 0000000000..e98cfae947
--- /dev/null
+++ b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilderTest.java
@@ -0,0 +1,41 @@
+package com.coderising.dp.builder;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TagBuilderTest {
+
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void testToXML() {
+
+ TagBuilder builder = new TagBuilder("order");
+
+ String xml = builder.addChild("line-items")
+ .addChild("line-item").setAttribute("pid", "P3677").setAttribute("qty", "3")
+ .addSibling("line-item").setAttribute("pid", "P9877").setAttribute("qty", "10")
+ .toXML();
+
+ String expected = ""
+ + ""
+ + ""
+ + ""
+ + ""
+ + "";
+
+ System.out.println(xml);
+ System.out.println(expected.equals(xml));
+ assertEquals(expected, xml);
+ }
+
+}
diff --git a/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagNode.java b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagNode.java
new file mode 100644
index 0000000000..6a31e04192
--- /dev/null
+++ b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagNode.java
@@ -0,0 +1,82 @@
+package com.coderising.dp.builder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TagNode {
+ private String tagName;
+ private String tagValue;
+ private List children = new ArrayList<>();
+ private List attributes = new ArrayList<>();
+
+ public TagNode(String name){
+ this.tagName = name;
+ }
+ public void add(TagNode child){
+ this.children.add(child);
+ }
+ public void setAttribute(String name, String value) {
+ Attribute attr = findAttribute(name);
+ if(attr != null){
+ attr.value = value;
+ } else {
+ attributes.add(new Attribute(name,value));
+ }
+ }
+ private Attribute findAttribute(String name){
+ for(Attribute attr : attributes){
+ if(attr.name.equals(name)){
+ return attr;
+ }
+ }
+ return null;
+ }
+ public void setValue(String value) {
+ this.tagValue = value;
+
+ }
+ public String getTagName() {
+ return tagName;
+ }
+ public List getChildren() {
+ return children;
+ }
+
+ private static class Attribute{
+ public Attribute(String name, String value) {
+ this.name = name;
+ this.value = value;
+ }
+ String name;
+ String value;
+
+ }
+ public String toXML(){
+ return toXML(this);
+ }
+ private String toXML(TagNode node){
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("<").append(node.tagName);
+ if(node.attributes.size()> 0){
+ for(int i=0;i");
+ return buffer.toString();
+ }
+ buffer.append(">");
+ for(TagNode childNode : node.children){
+ buffer.append(toXML(childNode));
+ }
+ buffer.append("").append(node.tagName).append(">");
+
+
+ return buffer.toString();
+ }
+ private String toXML(Attribute attr){
+ return attr.name+"=\""+attr.value + "\"";
+ }
+}
diff --git a/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/main/TestAll.java b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/main/TestAll.java
new file mode 100644
index 0000000000..d5ab3b0f05
--- /dev/null
+++ b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/main/TestAll.java
@@ -0,0 +1,17 @@
+package com.coderising.dp.main;
+
+import com.coderising.dp.builder.TagBuilderTest;
+
+public class TestAll {
+
+ public void testTag() {
+ TagBuilderTest tt = new TagBuilderTest();
+ tt.testToXML();
+ }
+
+ public static void main(String[] args) {
+ TestAll ta = new TestAll();
+ ta.testTag();
+ }
+
+}