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(""); + + + 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(); + } + +}