package input.xmltemplatereader;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
public class XmlReader {
private static final String LINK = "link";
private List<TemplateStructure> structure;
private List<TemplateStructure> plainStructure;
private static String SECTION = "section";
private static String ITEM = "item";
private static String WRITTEN= "written";
private static String CHILDLINK="childLink";
public XmlReader(String url){
plainStructure = new ArrayList<TemplateStructure>();
structure = new ArrayList<TemplateStructure>();
loadStructureXml(url);
}
private List<TemplateStructure> createStructure(List list){
List<TemplateStructure> tree = new ArrayList<TemplateStructure>();
for ( int i = 0; i < list.size(); i++ ){
Element element = (Element) list.get(i);
TemplateStructure templateStructure = new TemplateStructure();
templateStructure.setTitle(element.getAttributeValue("title"));
plainStructure.add(templateStructure);
if (SECTION.equals(element.getName())){
if(null != element.getAttributeValue(LINK)){
templateStructure.setLink(element.getAttributeValue(LINK));
}
if( null != element.getAttributeValue(WRITTEN) ){
templateStructure.setWritten(false);
}
templateStructure.addSubSection(createStructure(element.getChildren()));
}
else{
if(ITEM.equals(element.getName())){
if( null != element.getAttributeValue(CHILDLINK) ){
templateStructure.setChildLink(true);
templateStructure.addSubSection(createStructure(element.getChildren()));
}else
{
if(null != element.getAttributeValue(WRITTEN)){
templateStructure.setWritten(false);
}
}
}else{
if(LINK.equals(element.getName())){
templateStructure.setLinkType(true);
}
}
}
tree.add(templateStructure);
}
return tree;
}
private void printStructure(){
for (TemplateStructure templateStructure : structure) {
System.out.print(templateStructure.print(0));
System.out.print("\n");
}
}
public void loadStructureXml(String url){
//Se crea un SAXBuilder para poder parsear el archivo
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File( url );
// File xmlFile = new File( "src/input/xmltemplatereader/resources/sad.xml" );
try {
//Se crea el documento a traves del archivo
Document document = (Document) builder.build( xmlFile );
// //Se obtiene la raiz
Element rootNode = document.getRootElement();
List list = rootNode.getChildren();
structure = createStructure(list);
//printStructure();
}catch ( IOException io ) {
System.out.println( io.getMessage() );
}catch ( JDOMException jdomex ) {
System.out.println( jdomex.getMessage() );
}
}
//
// public boolean containsSection(String section){
// for (TemplateStructure templateStructure : structure) {
// if(templateStructure.containsSection(section)){
// return true;
// }
// }
// return false;
// }
public List<TemplateStructure> getPlainStructure() {
return plainStructure;
}
public List <TemplateStructure> getStructure(){
return structure;
}
public Iterator<TemplateStructure> getPlainTemplateStructure(){
return this.plainStructure.iterator();
}
}