/** * Copyright 2004-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package xmltester; import xmltester.MiniAttribute; import java.util.StringTokenizer; public class MiniDom { private static final String TAB = " "; private MiniElement rootElement; private boolean ignoreRoot; public MiniDom() { } public MiniDom(String name) { rootElement = new MiniElement(name); } public MiniElement getRootElement() { return rootElement; } public void setRootElement(MiniElement rootElement) { this.rootElement = rootElement; } public boolean isIgnoreRoot() { return ignoreRoot; } public void setIgnoreRoot(boolean ignoreRoot) { this.ignoreRoot = ignoreRoot; } public String getAttribute(String name) { StringTokenizer parser = new StringTokenizer(name, "."); MiniElement element = rootElement; String token = name; while (parser.countTokens() > 1) { token = parser.nextToken(); MiniElement child = element.getElement(token); if (child == null) { return null; } element = child; } token = parser.nextToken(); MiniAttribute attribute = element.getAttribute(token); if (attribute == null) { return null; } else { return attribute.getValue(); } } public void setAttribute(String name, String value) { StringTokenizer parser = new StringTokenizer(name, "."); MiniElement element = rootElement; String token = name; while (parser.countTokens() > 1) { token = parser.nextToken(); MiniElement child = element.getElement(token); if (child == null) { child = new MiniElement(token); element.addElement(child); } element = child; } token = parser.nextToken(); MiniAttribute attribute = element.getAttribute(token); if (attribute == null) { attribute = new MiniAttribute(token, value); element.addAttribute(attribute); } else { attribute.setValue(value); } } public String getValue(String name) { StringTokenizer parser = new StringTokenizer(name, "."); MiniElement element = rootElement; String token = name; while (parser.countTokens() > 0) { token = parser.nextToken(); MiniElement child = element.getElement(token); if (child == null) { return null; } element = child; } return element.getBodyContent(); } public void setValue(String name, String value) { StringTokenizer parser = new StringTokenizer(name, "."); MiniElement element = rootElement; String token = name; while (parser.countTokens() > 0) { token = parser.nextToken(); MiniElement child = element.getElement(token); if (child == null) { child = new MiniElement(token); element.addElement(child); } element = child; } element.setBodyContent(value); } @Override public String toString() { StringBuffer buffer = new StringBuffer(); printElement(buffer, rootElement, 0, true); return buffer.toString(); } private void printElement(StringBuffer buffer, MiniElement element, int tabLevel, boolean isRoot) { if (!isRoot || (isRoot && !ignoreRoot)) { printTabs(buffer, tabLevel); printElementOpen(buffer, element); } printElementBody(buffer, element); boolean hasElements = false; for (int i = 0, n = element.getElementCount(); i < n; i++) { hasElements = true; buffer.append("\r\n"); printElement(buffer, element.getElement(i), tabLevel + 1, false); } if (hasElements) { buffer.append("\r\n"); printTabs(buffer, tabLevel); } if (!isRoot || (isRoot && !ignoreRoot)) { printElementClose(buffer, element); } } private void printTabs(StringBuffer buffer, int tabLevel) { for (int i = 0; i < tabLevel; i++) { buffer.append(TAB); } } private void printElementOpen(StringBuffer buffer, MiniElement element) { buffer.append("<"); buffer.append(element.getName()); for (int i = 0, n = element.getAttributeCount(); i < n; i++) { buffer.append(" "); printAttribute(buffer, element.getAttribute(i)); } buffer.append(">"); } private void printElementBody(StringBuffer buffer, MiniElement element) { String bodyContent = element.getBodyContent(); if (bodyContent != null) { buffer.append(bodyContent); } } private void printElementClose(StringBuffer buffer, MiniElement element) { buffer.append("</"); buffer.append(element.getName()); buffer.append(">"); } private void printAttribute(StringBuffer buffer, MiniAttribute attribute) { buffer.append(attribute.getName()); buffer.append("=\""); buffer.append(attribute.getValue()); buffer.append("\""); } }