/** * */ package org.jboss.tools.smooks.edimap.editor; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.jboss.tools.smooks.configuration.editors.xml.TagObject; /** * @author Dart * */ public class Test { public static void main(String[] args) { try { new Test().test(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void test() throws IOException { InputStream stream = Test.class.getResourceAsStream("input-message.edi"); //$NON-NLS-1$ InputStreamReader reader = new InputStreamReader(stream); BufferedReader br = new BufferedReader(reader); char segment = '\n'; char field = '*'; char component = '^'; char subcomponent = '~'; StringBuffer stringBuffer = new StringBuffer(); List<String> segmentList = new ArrayList<String>(); int readed = -1; while ((readed = br.read()) != -1) { if (readed != segment) { stringBuffer.append((char) readed); } else { segmentList.add(stringBuffer.toString()); stringBuffer = null; stringBuffer = new StringBuffer(); } } br.close(); reader.close(); stream.close(); TagObject rootTag = new TagObject(); rootTag.setName("root"); //$NON-NLS-1$ List<String> names = new ArrayList<String>(); char[] separators = new char[]{field,component,subcomponent}; for (Iterator<?> iterator = segmentList.iterator(); iterator.hasNext();) { String string = (String) iterator.next(); String[] fields = string.split("\\" + new String(new char[] { field })); //$NON-NLS-1$ TagObject tag = null; if (fields.length != 0) { tag = new TagObject(); if (names.indexOf(fields[0]) == -1) { tag.setName(fields[0]); names.add(tag.getName()); rootTag.addChildTag(tag); } } if (tag != null) { String ss = string.substring(fields[0].length() , string.length()); generateChildrenTag(tag, ss, separators, 0); } } // // System.out.println(rootTag); } private String getSeparator(String s){ if(s.equals("*") || s.equals("+") || s.equals("^")){ //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return "\\" + s; //$NON-NLS-1$ } return s; } private void generateChildrenTag(TagObject parent, String content, char[] separators, int currentSeparator) { char separator = separators[currentSeparator]; String sss = new String(new char[] { separator }); if(content.indexOf(sss) == -1) return; sss = getSeparator(sss); String[] contentArray = content.split(sss); if (contentArray == null || contentArray.length == 0) { return; } for (int i = 0; i < contentArray.length; i++) { String con = contentArray[i]; if(con == null || con.length() == 0) continue; TagObject child = new TagObject(); child.setName(con); parent.addChildTag(child); int newIndex = (currentSeparator+1); if (newIndex <= (separators.length - 1)) { generateChildrenTag(child, con, separators, newIndex); } } } }