/** * */ package fna.parsing; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Text; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; /** * @author Hong Updates * */ public class CharacterStatementsTransformer4NeXML extends CharacterStatementsTransformer { protected XPath xpathstates; protected XPath xpathstate; protected XPath xpathchar; ArrayList<Treatment> treatments = new ArrayList<Treatment>(); /** * @param listener * @param display * @param perllog * @param seeds */ public CharacterStatementsTransformer4NeXML(ProcessListener listener, Display display, Text perllog, ArrayList<String> seeds) { super(listener, display, perllog, seeds); // TODO Auto-generated constructor stub } protected void setXPaths(){ try{ xpathstates = XPath.newInstance("//x:format/x:states"); xpathstate = XPath.newInstance(".//x:state"); xpathchar = XPath.newInstance("//x:format/x:char"); }catch (Exception e){ e.printStackTrace(); } } /** * Copy file to trafolder * take <description> elements from file and output them to desfolder. * take <character> elements from file and output them to charfolder. * @param folder * @param fname */ @SuppressWarnings("unchecked") protected void outputTo(File desfolder, File chafolder, File trafolder, File file) { try{ String fname = file.getName(); SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(file); Element root = doc.getRootElement(); //get <state> to put in desfolder xpathstates.addNamespace("x", root.getNamespaceURI()); //this is how to handle default namespace List<Element> allstates = xpathstates.selectNodes(doc); Iterator<Element> its = allstates.iterator(); int count = 0; while(its.hasNext()){ Element states = its.next(); String statesid = states.getAttributeValue("id"); xpathstate.addNamespace("x", root.getNamespaceURI()); List<Element> stateels = xpathstate.selectNodes(states); Iterator<Element> it = stateels.iterator(); while(it.hasNext()){ Element state = it.next(); String content; String stateid = state.getAttributeValue("id"); if(state.getAttributeValue("label")!=null) content = state.getAttributeValue("label").trim(); else content =""; content = content.replaceFirst("[,;\\.]+$", ";"); //writing the statesid_stateid file contents in description folder write2file(desfolder, fname+"_"+statesid+"_"+stateid+".txt", content); Treatment t = new Treatment(fname+"_"+statesid+"_"+stateid+".txt", content, "state"); treatments.add(t); //System.out.println(count+":add treatment:"+fname+"_"+statesid+"_"+stateid+".txt \t"+ content+"\tstate"); count++; } } //get <character> to put in chafolder xpathchar.addNamespace("x", root.getNamespaceURI()); List<Element> chars = xpathchar.selectNodes(root); Iterator<Element> it = chars.iterator(); while(it.hasNext()){ Element cha = it.next(); String statesid = cha.getAttributeValue("states"); String content = cha.getAttributeValue("label").trim(); content = content.replaceFirst("[,;\\.]+$", ";"); write2file(chafolder, fname+"_"+statesid+".txt", content); Treatment t = new Treatment(fname+"_"+statesid+".txt", content, "character"); treatments.add(t); //System.out.println(count+":add treatment:"+fname+"_"+statesid+".txt \t"+ content+"\tcharacter"); count++; } root.detach(); //copy to trafolder outputter.output(new Document(root), new BufferedOutputStream(new FileOutputStream(new File(trafolder, file.getName())))); }catch(Exception e){ e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } }