/*
* Created on 20.05.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package de.krutisch.jan.rasterizer;
import java.util.Iterator;
import java.util.Vector;
import java.io.File;
import java.net.URL;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* @author Jan
* PageFormatContainer maintains a list (Vector) of all page formats and contains
* functions to parse the formats from the paperformats.xml file.
*
*/
public class PageFormatContainer {
private Vector pageFormatList;
private EventLogger logger;
/**
* Standard construktor, needs an EventLogger to log errors while parsing xml
* @param logger
*/
public PageFormatContainer(EventLogger logger) {
pageFormatList = new Vector();
this.logger = logger;
//parsePaperSizeXML(url);
}
/**
* Standard constructor. Not used.
*/
public PageFormatContainer() {
pageFormatList = new Vector();
}
/**
* Adding a page format to the vector.
* @param format A PageFormat object
*/
public void add(PageFormat format) {
pageFormatList.add(format);
}
/**
* Returns the vector. can be used to fill a DefaultComboBoxModel
* @return returns the list (Vector) of the contained PageFormat objects
*/
public Vector getVector() {
return pageFormatList;
}
/**
* Open a papersize xml by URL. Used to read the xml contained in the jar
* @param url URL object (use new URL("url"))
*/
void parsePaperSizeXML(URL url) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(url);
parsePaperSizeXML(document);
} catch (DocumentException e) {
logger.log(EventLogger.ERROR,e.getMessage());
}
}
/**
* Open a papersize xml by file. Used to read the user papersizes.xml
* @param file file to open (use new File("filename"))
*/
void parsePaperSizeXML(File file) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(file);
parsePaperSizeXML(document);
} catch (DocumentException e) {
logger.log(EventLogger.ERROR,e.getMessage());
}
}
/**
*
* @return Returns the number of formats contained in the vector.
*/
int getSize() {
if (pageFormatList != null) return pageFormatList.size();
return 0;
}
/**
* The actual parsing method, called with an open Document.
* @param doc XMLDocument to parse the paperFormat from.
*/
public void parsePaperSizeXML(Document doc) {
//pageFormatList = new Vector();
logger.log(EventLogger.DEBUG,"Start");
/* Document doc = null;
try {
doc = this.parse(url);
} catch (Exception e) {
logger.log(EventLogger.ERROR,"Error:" + e);
}
*/
if (doc!=null) {
logger.log(EventLogger.DEBUG,"Doc");
Element root = doc.getRootElement();
// iterate through child elements of root
for ( Iterator i = root.elementIterator("PageFormat"); i.hasNext(); ) {
PageFormat pf = new PageFormat();
int width=0;
int height=0;
int marginTop=0;
int marginRight=0;
int marginBottom=0;
int marginLeft=0;
Element pageFormat = (Element) i.next();
String name,description;
if ((name = pageFormat.attribute("name").getText())!=null) {
logger.log(EventLogger.DEBUG,"---" + name+"----");
pf.setName(name);
}
if ((description = pageFormat.attribute("description").getText())!=null) {
logger.log(EventLogger.DEBUG,"d--" + description+"----");
pf.setDescription(description);
}
for ( Iterator j = pageFormat.elementIterator(); j.hasNext(); ) {
Element element = (Element) j.next();
if (element.getName().equals("Width")) {
logger.log(EventLogger.DEBUG,element.getText());
try {
width = Integer.parseInt(element.getTextTrim());
} catch (NumberFormatException e) {
logger.log(EventLogger.DEBUG,"Error: " + e);
width = 0;
}
pf.setWidth(width);
}
if (element.getName().equals("Height")) {
logger.log(EventLogger.DEBUG,element.getText());
try {
height = Integer.parseInt(element.getTextTrim());
} catch (NumberFormatException e) {
logger.log(EventLogger.DEBUG,"Error: " + e);
height = 0;
}
pf.setHeight(height);
}
if (element.getName().equals("Margins")) {
for ( Iterator k = element.elementIterator(); k.hasNext(); ) {
Element margin = (Element) k.next();
if (margin.getName().equals("Top")) {
logger.log(EventLogger.DEBUG,margin.getText());
try {
pf.setMarginTop(Integer.parseInt(margin.getTextTrim()));
} catch (NumberFormatException e) {
logger.log(EventLogger.DEBUG,"Error: " + e);
pf.setMarginTop(0);
}
}
if (margin.getName().equals("Left")) {
logger.log(EventLogger.DEBUG,margin.getText());
try {
pf.setMarginLeft(Integer.parseInt(margin.getTextTrim()));
} catch (NumberFormatException e) {
logger.log(EventLogger.DEBUG,"Error: " + e);
pf.setMarginLeft(0);
}
}
if (margin.getName().equals("Bottom")) {
logger.log(EventLogger.DEBUG,margin.getText());
try {
pf.setMarginBottom(Integer.parseInt(margin.getTextTrim()));
} catch (NumberFormatException e) {
logger.log(EventLogger.DEBUG,"Error: " + e);
pf.setMarginBottom(0);
}
}
if (margin.getName().equals("Right")) {
logger.log(EventLogger.DEBUG,margin.getText());
try {
pf.setMarginRight(Integer.parseInt(margin.getTextTrim()));
} catch (NumberFormatException e) {
logger.log(EventLogger.DEBUG,"Error: " + e);
pf.setMarginRight(0);
}
}
}
}
}
if (pf.isValid()) {
this.add(pf);
} else {
System.out.print("not Valid");
}
}
}
}
/*
public Document parse(URL url) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(url);
return document;
}
*/
}