view src/main/java/ac/jp/u_ryukyu/cr/ie/tatsuki/xmlReader/UpdateXmlHundler.java @ 42:c036d36c33af

function refactor
author one
date Tue, 25 Nov 2014 11:57:17 +0900
parents
children
line wrap: on
line source

package ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class UpdateXmlHundler extends DefaultHandler {
  private String elementName;
  private boolean flag = false;
  private PrintWriter pw;
  private int count = 0;
  String xmlStr = "";

  public UpdateXmlHundler(String xml) throws IOException {
    File file = new File("./XML/" + xml + ".xml");
    pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));

  }

  @Override
  public void startElement(String uri, String localName, String qName, Attributes attributes) {
    pw.print(xmlStr);
    xmlStr = "<";
    if (qName != "") {
      // System.out.print("qName= " + qName);
      elementName = qName;

      if (elementName.equals("roleRefIds") || elementName.equals("organizationRefIds")
          || elementName.equals("personRefIds") || elementName.equals("childrenRoleRefIds")
          || elementName.equals("roleDescriptionElementRefIds"))
        flag = true;
      xmlStr = xmlStr + elementName;
    }

    if (attributes.getLength() != 0) {
      for (int count = 0; attributes.getLength() > count; count++) {
        String value = attributes.getValue(count);
        xmlStr = xmlStr + " " + attributes.getLocalName(count) + "=\"" + value + "\"";
      }
    }
    xmlStr = xmlStr + ">";
    String tab = tab();
    pw.print(tab + xmlStr);
    count++;
    xmlStr = "\n";
  }

  @Override
  public void characters(char[] ch, int start, int length) {
    String str = new String(ch, start, length);
    Pattern pattern = Pattern.compile("\n");
    Matcher macher = pattern.matcher(str);
    String[] split = str.split(" ");
    if (!macher.find()) {
      if (flag == true) {
        flag = false;
        for (String text : split) {
          pw.println();
          if (elementName.equals("roleRefIds"))
            pw.print(tab() + "<roleRefId>" + text + "</roleRefId>");
          if (elementName.equals("organizationRefIds"))
            pw.print(tab() + "<organizationRefId>" + text + "</organizationRefId>");
          if (elementName.equals("personRefIds"))
            pw.print(tab() + "<personRefId>" + text + "</personRefId>");
          if (elementName.equals("childrenRoleRefIds"))
            pw.print(tab() + "<childrenRoleRefId>" + text + "</childrenRoleRefId>");
          if (elementName.equals("roleDescriptionElementRefIds"))
            pw.print(tab() + "<roleDescriptionElementRefId>" + text + "</roleDescriptionElementRefId>");
        }
        count--;
        xmlStr = "\n" + tab();
        count++;
        return;
      } else {
        if (str.equals("松田賢一"))
          System.out.println("aaaa");
        pw.print(str);
      }
      xmlStr = "";
      return;
    }
    if (flag == true) {
      xmlStr = "";
      flag = false;
    }

  }

  @Override
  public void endElement(String namespaceURI, String localName, String qName) {
    count--;
    if (xmlStr == "\n")
      xmlStr = xmlStr + tab();
    pw.print(xmlStr);
    pw.print("</" + qName + ">");
    xmlStr = "\n";
  }

  @Override
  public void startDocument() {
    // System.out.print("start");
  }

  @Override
  public void endDocument() {
    pw.close();
    System.out.print("end");
  }

  private String tab() {
    String tab = "";
    for (int tabCount = 0; tabCount < count; tabCount++) {
      tab = tab + "  ";
    }
    return tab;
  }

}