-/**
- * ============LICENSE_START====================================================
- * org.onap.aaf
- * ===========================================================================
- * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
- * ===========================================================================
- * 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.
- * ============LICENSE_END====================================================
- *
- */
-
-package org.onap.aaf.misc.xgen;
-
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.util.Stack;
-
-import org.onap.aaf.misc.env.util.IndentPrintWriter;
-import org.onap.aaf.misc.env.util.StringBuilderWriter;
-
-public class XGen<RT extends XGen<RT>> {
-
- public static int COMMENT_COLUMN = 40;
- private StringBuilder backSB = new StringBuilder();
- private Stack<Back> backStack = new Stack<Back>();
-
- protected XGen(Writer w) {
- forward = new IndentPrintWriter(w);
- }
-
- public int pushBack(Back b) {
- int rv = backStack.size();
- backStack.push(b);
- return rv;
- }
-
- public boolean pretty = false;
- protected IndentPrintWriter forward;
-
- public IndentPrintWriter getWriter() {
- return forward;
- }
-
- protected PrintWriter back = new PrintWriter(
- new StringBuilderWriter(backSB));
-
- @SuppressWarnings("unchecked")
- public RT pretty() {
- pretty = true;
- return (RT) this;
- }
-
- protected void prettyln(PrintWriter pw) {
- if(pretty)pw.println();
- }
-
- public RT leaf(Mark mark, String tag, String ... args) {
- mark.spot = backStack.size();
- return leaf(tag, args);
- }
-
- @SuppressWarnings("unchecked")
- public RT leaf(String tag, String ... attrs) {
- forward.append('<');
- forward.append(tag);
- addAttrs(attrs);
- forward.append('>');
- back.append("</");
- back.append(tag);
- back.append('>');
- backStack.push(new Back(backSB.toString(), false, true));
- backSB.setLength(0);
- return (RT)this;
- }
-
- public RT incr(String tag, String ... args) {
- return incr(null, tag, false, args);
- }
-
- public RT incr(String tag, boolean oneLine, String ... args) {
- return incr(null, tag, oneLine, args);
- }
-
- public RT incr(Mark mark) {
- return incr(mark,mark.comment, false, new String[0]);
- }
-
- public RT incr(Mark mark, String tag, String ... attrs) {
- return incr(mark, tag, false, attrs);
- }
-
- @SuppressWarnings("unchecked")
- public RT incr(Mark mark, String tag, boolean oneLine, String ... attrs) {
- forward.append('<');
- forward.append(tag);
- addAttrs(attrs);
- forward.append('>');
-
- back.append("</");
- back.append(tag);
- back.append('>');
-
- if(pretty) {
- if(mark!=null && mark.comment!=null) {
- int fi = forward.getIndent()*IndentPrintWriter.INDENT;
- for(int i = fi+backSB.length();i<=COMMENT_COLUMN;++i) {
- back.append(' ');
- }
- back.append("<!-- end ");
- back.append(mark.comment);
- back.append(" -->");
-
- forward.toCol(COMMENT_COLUMN);
- forward.append("<!-- begin ");
- forward.append(mark.comment);
- forward.append(" -->");
- }
- forward.inc();
- if(!oneLine) {
- forward.println();
- }
- back.println();
- }
- if(mark!=null)mark.spot = backStack.size();
- backStack.push(new Back(backSB.toString(),true, false));
- backSB.setLength(0);
- return (RT)this;
- }
-
- @SuppressWarnings("unchecked")
- public RT tagOnly(String tag, String ... attrs) {
- forward.append('<');
- forward.append(tag);
- addAttrs(attrs);
- forward.append(" />");
- if(pretty) {
- forward.println();
- }
- return (RT)this;
- }
-
- @SuppressWarnings("unchecked")
- public RT text(String txt) {
- forward.append(txt);
- return (RT)this;
- }
-
- @SuppressWarnings("unchecked")
- public RT xml(String txt) {
- for(int i=0; i<txt.length();++i) {
- char c = txt.charAt(i);
- switch(c) {
- case '<':
- forward.append("<");
- break;
- case '>':
- forward.append(">");
- break;
- case '&':
- forward.append("&");
- break;
- default:
- forward.append(c);
- }
- }
- return (RT)this;
- }
-
-
- @SuppressWarnings("unchecked")
- public RT textCR(int tabs, String txt) {
- for(int i=0;i<tabs;++i) {
- forward.append(" ");
- }
- forward.append(txt);
- if(pretty)forward.println();
- return (RT)this;
- }
-
- @SuppressWarnings("unchecked")
- public RT value() {
- Mark mark = new Mark();
- mark.spot = backStack.size()-1;
- end(mark);
- return (RT)this;
- }
-
- @SuppressWarnings("unchecked")
- public RT value(String txt) {
- forward.append(txt);
- Mark mark = new Mark();
- mark.spot = backStack.size()-1;
- end(mark);
- return (RT)this;
- }
-
- @SuppressWarnings("unchecked")
- public RT value(String txt, int levels) {
- forward.append(txt);
- Mark mark = new Mark();
- mark.spot = backStack.size()-levels;
- end(mark);
- return (RT)this;
- }
-
- @SuppressWarnings("unchecked")
- public RT end(Mark mark) {
- int size = backStack.size();
- Back c;
- boolean println = false;
- for(int i=mark==null?0:mark.spot;i<size;++i) {
- c = backStack.pop();
- if(c.dec)forward.dec();
- forward.append(c.str);
- println = c.cr;
- }
- if(pretty && println) {
- forward.println();
- }
- return (RT)this;
- }
-
- public RT end() {
- Mark mark = new Mark();
- mark.spot=backStack.size()-1;
- if(mark.spot<0)mark.spot=0;
- return end(mark);
- }
-
- public RT end(int i) {
- Mark mark = new Mark();
- mark.spot=backStack.size()-i;
- if(mark.spot<0)mark.spot=0;
- return end(mark);
- }
-
- public void endAll() {
- end(new Mark());
- forward.flush();
- }
-
- protected void addAttrs(String[] attrs) {
- if(attrs!=null) {
- for(String attr : attrs) {
- if(attr!=null && attr.length()>0) {
- forward.append(' ');
- String[] split = attr.split("=",2);
- switch(split.length) {
- case 0:
- break;
- case 1:
- forward.append(split[0]);
-// forward.append("=\"\"");
- break;
- default:
- forward.append(split[0]);
- forward.append("=\"");
- forward.append(split[1]);
- forward.append('"');
- break;
- }
- }
- }
- }
- }
-
- @SuppressWarnings("unchecked")
- public RT comment(String string) {
- if(pretty) {
- forward.print("<!-- ");
- forward.print(string);
- forward.println(" -->");
- }
- return (RT)this;
- }
-
- public void setIndent(int indent) {
- forward.setIndent(indent);
- forward.toIndent();
- }
-
- public int getIndent() {
- return forward.getIndent();
- }
-
-}
+/**\r
+ * ============LICENSE_START====================================================\r
+ * org.onap.aaf\r
+ * ===========================================================================\r
+ * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.\r
+ * ===========================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END====================================================\r
+ *\r
+ */\r
+\r
+package org.onap.aaf.misc.xgen;\r
+\r
+import java.io.PrintWriter;\r
+import java.io.Writer;\r
+import java.util.Stack;\r
+\r
+import org.onap.aaf.misc.env.util.IndentPrintWriter;\r
+import org.onap.aaf.misc.env.util.StringBuilderWriter;\r
+\r
+public class XGen<RT extends XGen<RT>> {\r
+\r
+ public static int COMMENT_COLUMN = 40;\r
+ private StringBuilder backSB = new StringBuilder();\r
+ private Stack<Back> backStack = new Stack<Back>();\r
+ \r
+ protected XGen(Writer w) {\r
+ forward = new IndentPrintWriter(w);\r
+ }\r
+\r
+ public int pushBack(Back b) {\r
+ int rv = backStack.size();\r
+ backStack.push(b);\r
+ return rv;\r
+ }\r
+\r
+ public boolean pretty = false;\r
+ protected IndentPrintWriter forward;\r
+\r
+ public IndentPrintWriter getWriter() {\r
+ return forward;\r
+ }\r
+\r
+ protected PrintWriter back = new PrintWriter(\r
+ new StringBuilderWriter(backSB));\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT pretty() {\r
+ pretty = true;\r
+ return (RT) this;\r
+ }\r
+\r
+ protected void prettyln(PrintWriter pw) {\r
+ if(pretty)pw.println();\r
+ }\r
+\r
+ public RT leaf(Mark mark, String tag, String ... args) {\r
+ mark.spot = backStack.size();\r
+ return leaf(tag, args);\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT leaf(String tag, String ... attrs) {\r
+ forward.append('<');\r
+ forward.append(tag);\r
+ addAttrs(attrs);\r
+ forward.append('>');\r
+ back.append("</");\r
+ back.append(tag);\r
+ back.append('>');\r
+ backStack.push(new Back(backSB.toString(), false, true));\r
+ backSB.setLength(0);\r
+ return (RT)this;\r
+ }\r
+\r
+ public RT incr(String tag, String ... args) {\r
+ return incr(null, tag, false, args);\r
+ }\r
+\r
+ public RT incr(String tag, boolean oneLine, String ... args) {\r
+ return incr(null, tag, oneLine, args);\r
+ }\r
+\r
+ public RT incr(Mark mark) {\r
+ return incr(mark,mark.comment, false, new String[0]);\r
+ }\r
+\r
+ public RT incr(Mark mark, String tag, String ... attrs) {\r
+ return incr(mark, tag, false, attrs);\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT incr(Mark mark, String tag, boolean oneLine, String ... attrs) {\r
+ forward.append('<');\r
+ forward.append(tag);\r
+ addAttrs(attrs);\r
+ forward.append('>');\r
+ \r
+ back.append("</");\r
+ back.append(tag);\r
+ back.append('>');\r
+ \r
+ if(pretty) {\r
+ if(mark!=null && mark.comment!=null) {\r
+ int fi = forward.getIndent()*IndentPrintWriter.INDENT_MULTIPLIER;\r
+ for(int i = fi+backSB.length();i<=COMMENT_COLUMN;++i) {\r
+ back.append(' ');\r
+ }\r
+ back.append("<!-- end ");\r
+ back.append(mark.comment);\r
+ back.append(" -->");\r
+ \r
+ forward.toCol(COMMENT_COLUMN);\r
+ forward.append("<!-- begin ");\r
+ forward.append(mark.comment);\r
+ forward.append(" -->");\r
+ }\r
+ forward.inc();\r
+ if(!oneLine) {\r
+ forward.println();\r
+ }\r
+ back.println();\r
+ }\r
+ if(mark!=null)mark.spot = backStack.size();\r
+ backStack.push(new Back(backSB.toString(),true, false));\r
+ backSB.setLength(0);\r
+ return (RT)this;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT tagOnly(String tag, String ... attrs) {\r
+ forward.append('<');\r
+ forward.append(tag);\r
+ addAttrs(attrs);\r
+ forward.append(" />");\r
+ if(pretty) {\r
+ forward.println();\r
+ }\r
+ return (RT)this;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT text(String txt) {\r
+ forward.append(txt);\r
+ return (RT)this;\r
+ }\r
+ \r
+ @SuppressWarnings("unchecked")\r
+ public RT xml(String txt) {\r
+ for(int i=0; i<txt.length();++i) {\r
+ char c = txt.charAt(i);\r
+ switch(c) {\r
+ case '<':\r
+ forward.append("<");\r
+ break;\r
+ case '>':\r
+ forward.append(">");\r
+ break;\r
+ case '&':\r
+ forward.append("&");\r
+ break;\r
+ default:\r
+ forward.append(c);\r
+ }\r
+ }\r
+ return (RT)this;\r
+ }\r
+\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT textCR(int tabs, String txt) {\r
+ for(int i=0;i<tabs;++i) {\r
+ forward.append(" ");\r
+ }\r
+ forward.append(txt);\r
+ if(pretty)forward.println();\r
+ return (RT)this;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT value() {\r
+ Mark mark = new Mark();\r
+ mark.spot = backStack.size()-1;\r
+ end(mark);\r
+ return (RT)this;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT value(String txt) {\r
+ forward.append(txt);\r
+ Mark mark = new Mark();\r
+ mark.spot = backStack.size()-1;\r
+ end(mark);\r
+ return (RT)this;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT value(String txt, int levels) {\r
+ forward.append(txt);\r
+ Mark mark = new Mark();\r
+ mark.spot = backStack.size()-levels;\r
+ end(mark);\r
+ return (RT)this;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT end(Mark mark) {\r
+ int size = backStack.size();\r
+ Back c;\r
+ boolean println = false;\r
+ for(int i=mark==null?0:mark.spot;i<size;++i) {\r
+ c = backStack.pop();\r
+ if(c.dec)forward.dec();\r
+ forward.append(c.str);\r
+ println = c.cr;\r
+ }\r
+ if(pretty && println) {\r
+ forward.println();\r
+ }\r
+ return (RT)this;\r
+ }\r
+\r
+ public RT end() {\r
+ Mark mark = new Mark();\r
+ mark.spot=backStack.size()-1;\r
+ if(mark.spot<0)mark.spot=0;\r
+ return end(mark);\r
+ }\r
+\r
+ public RT end(int i) {\r
+ Mark mark = new Mark();\r
+ mark.spot=backStack.size()-i;\r
+ if(mark.spot<0)mark.spot=0;\r
+ return end(mark);\r
+ }\r
+\r
+ public void endAll() {\r
+ end(new Mark());\r
+ forward.flush();\r
+ }\r
+\r
+ protected void addAttrs(String[] attrs) {\r
+ if(attrs!=null) {\r
+ for(String attr : attrs) {\r
+ if(attr!=null && attr.length()>0) {\r
+ forward.append(' ');\r
+ String[] split = attr.split("=",2);\r
+ switch(split.length) {\r
+ case 0:\r
+ break;\r
+ case 1:\r
+ forward.append(split[0]);\r
+// forward.append("=\"\"");\r
+ break;\r
+ default:\r
+ forward.append(split[0]);\r
+ forward.append("=\"");\r
+ forward.append(split[1]);\r
+ forward.append('"');\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public RT comment(String string) {\r
+ if(pretty) {\r
+ forward.print("<!-- ");\r
+ forward.print(string);\r
+ forward.println(" -->");\r
+ }\r
+ return (RT)this;\r
+ }\r
+\r
+ public void setIndent(int indent) {\r
+ forward.setIndent(indent);\r
+ forward.toIndent();\r
+ }\r
+\r
+ public int getIndent() {\r
+ return forward.getIndent();\r
+ }\r
+\r
+}\r