/**
*
*/
package fna.parsing;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
/**
* @author Hong Updates
*
*/
public class Type4Transformer4TaxonX extends Type4Transformer {
/**
* @param listener
* @param dataprefix
*/
public Type4Transformer4TaxonX(ProcessListener listener, String dataprefix) {
super(listener, dataprefix);
// TODO Auto-generated constructor stub
}
@SuppressWarnings("unchecked")
protected void transformXML(File[] files) {
int number = 0;
try{
SAXBuilder builder = new SAXBuilder();
for(int f = 0; f < files.length; f++) {
int fn = f+1;
//split by treatment
Document doc = builder.build(files[f]);
Element root = doc.getRootElement();
List<Element> treatments = XPath.selectNodes(root,"/tax:taxonx/tax:taxonxBody/tax:treatment");
//detach all but one treatments from doc
ArrayList<Element> saved = new ArrayList<Element>();
for(int t = 1; t<treatments.size(); t++){
Element e = treatments.get(t);
doc.removeContent(e);
e.detach();
saved.add(e);
}
//now doc is a template to create other treatment files
//root.detach();
formatDescription((Element)XPath.selectSingleNode(root,"/tax:taxonx/tax:taxonxBody/tax:treatment"),".//tax:div[@type='description']", ".//tax:p", fn, 0);
root.detach();
writeTreatment2Transformed(root, fn, 0);
listener.info((number++)+"", fn+"_0.xml"); // list the file on GUI here
getDescriptionFrom(root,fn, 0);
//replace treatement in doc with a new treatment in saved
Iterator<Element> it = saved.iterator();
int count = 1;
while(it.hasNext()){
Element e = it.next();
Element body = root.getChild("taxonxBody", root.getNamespace());
Element treatment = (Element) XPath.selectSingleNode(
root,"/tax:taxonx/tax:taxonxBody/tax:treatment");
//in treatment/div[@type="description"], replace <tax:p> tag with <description pid="1.txtp436_1.txt">
int index = body.indexOf(treatment);
e = formatDescription(e, ".//tax:div[@type='description']", ".//tax:p",fn, count);
body.setContent(index, e);
//write each treatment as a file in the target/transfromed folder
//write description text in the target/description folder
root.detach();
writeTreatment2Transformed(root, fn, count);
listener.info((number++)+"", fn+"_"+count+".xml"); // list the file on GUI here
getDescriptionFrom(root, fn, count);
count++;
}
}
}catch(Exception e){
e.printStackTrace();
LOGGER.error("Type4Transformer : error.", e);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}