package jp.crwdev.app.setting;
import java.awt.Dimension;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import jp.crwdev.app.OutputSettingParam;
import jp.crwdev.app.constant.Constant;
import jp.crwdev.app.container.ImageFileInfoSplitWrapper;
import jp.crwdev.app.imagefilter.ImageFilterParam;
import jp.crwdev.app.imagefilter.SplitFilter;
import jp.crwdev.app.interfaces.IImageFileInfo;
import jp.crwdev.app.interfaces.IImageFileInfoList;
public class XmlWriter {
private Document mDocument = null;
private Element mRootElement = null;
private String mFilePath = null;
private HashMap<IImageFileInfo, ImageFileInfoSplitWrapper> mSpInfoMap = new HashMap<IImageFileInfo, ImageFileInfoSplitWrapper>();
public XmlWriter(){
}
public boolean openSaveSettingFile(String filepath){
mFilePath = filepath;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation domImpl=builder.getDOMImplementation();
mDocument = domImpl.createDocument("","Setting",null);
mRootElement = mDocument.getDocumentElement();
} catch (ParserConfigurationException e) {
e.printStackTrace();
return false;
}
return true;
}
private void closeDocument(){
//出力
try {
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
DOMSource source = new DOMSource(mDocument);
File newXML = new File(mFilePath);
FileOutputStream os = new FileOutputStream(newXML);
StreamResult result = new StreamResult(os);
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
public void writeSetting(Element parent, OutputSettingParam output, ImageFilterParamSet bases, IImageFileInfoList list){
if(output == null || bases == null || list == null){
return;
}
if(parent == null){
parent = mRootElement;
}
// <output>
Element outputElem = mDocument.createElement("output");
writeOutput(outputElem, output);
parent.appendChild(outputElem);
// <base>
Element baseElem = mDocument.createElement("base");
//writeParam(baseElem, base);
writeFilterBase(baseElem, bases.get(0), "basic");
writeFilterBase(baseElem, bases.get(1), "color");
writeFilterBase(baseElem, bases.get(2), "pict");
writeFilterBase(baseElem, bases.get(3), "text");
parent.appendChild(baseElem);
if(!list.isEnableSort()){
// check order
for(int i=0; i<list.size(); i++){
IImageFileInfo info = list.get(i);
info.setSortOrder(i);
}
}
// <infos>
Element infosElem = mDocument.createElement("infos");
boolean forceWrite = false;
if(!list.isEnableSort()){
infosElem.setAttribute("sort", "false");
forceWrite = true;
}
for(int i=0; i<list.size(); i++){
writeInfo(infosElem, list.get(i), forceWrite);
}
parent.appendChild(infosElem);
closeDocument();
}
private void writeFilterBase(Element parent, ImageFilterParam param, String pageType){
if(param == null){
return;
}
Element filterElem = mDocument.createElement("filter");
filterElem.setAttribute("pageType", pageType);
writeParam(filterElem, param, -1);
parent.appendChild(filterElem);
}
private void writeOutput(Element parent, OutputSettingParam output){
if(parent == null){
parent = mRootElement;
}
parent.setAttribute("fileType", output.getFileType());
parent.setAttribute("bookType", output.getEpubType());
// <folder>
String outputFolder = output.getOutputPath();
if(!outputFolder.isEmpty()){
Element folderElem = mDocument.createElement("folder");
folderElem.appendChild(mDocument.createTextNode(outputFolder));
parent.appendChild(folderElem);
}
// <size>
Dimension size = output.getImageSize();
if(size != null && size.width != 0 && size.height != 0){
Element sizeElem = mDocument.createElement("size");
sizeElem.setAttribute("width", Integer.toString(size.width));
sizeElem.setAttribute("height", Integer.toString(size.height));
parent.appendChild(sizeElem);
}
// <title>
String title = output.getTitle();
if(!title.isEmpty()){
Element titleElem = mDocument.createElement("title");
titleElem.appendChild(mDocument.createTextNode(title));
parent.appendChild(titleElem);
}
// <title_kana>
String titleKana = output.getTitleKana();
if(!titleKana.isEmpty()){
Element titleKanaElem = mDocument.createElement("title_kana");
titleKanaElem.appendChild(mDocument.createTextNode(titleKana));
parent.appendChild(titleKanaElem);
}
// <author>
String author = output.getAuthor();
if(!author.isEmpty()){
Element authorElem = mDocument.createElement("author");
authorElem.appendChild(mDocument.createTextNode(author));
parent.appendChild(authorElem);
}
// <title_kana>
String authorKana = output.getAuthorKana();
if(!authorKana.isEmpty()){
Element authorKanaElem = mDocument.createElement("author_kana");
authorKanaElem.appendChild(mDocument.createTextNode(authorKana));
parent.appendChild(authorKanaElem);
}
// <seriesTitle>
String seriesTitle = output.getSeriesTitle();
if(!seriesTitle.isEmpty()){
Element elem = mDocument.createElement("seriesTitle");
elem.appendChild(mDocument.createTextNode(seriesTitle));
parent.appendChild(elem);
}
// <seriesTitleKana>
String seriesTitleKana = output.getSeriesTitleKana();
if(!seriesTitleKana.isEmpty()){
Element elem = mDocument.createElement("seriesTitleKana");
elem.appendChild(mDocument.createTextNode(seriesTitleKana));
parent.appendChild(elem);
}
// <seriesNumber>
int seriesNumber = output.getSeriesNumber();
if(seriesNumber > 0){
Element elem = mDocument.createElement("seriesNumber");
elem.appendChild(mDocument.createTextNode(Integer.toString(seriesNumber)));
parent.appendChild(elem);
}
// <fixedSize>
boolean fixedSize = output.isFixedSize();
if(true){
Element elem = mDocument.createElement("fixedSize");
elem.appendChild(mDocument.createTextNode(fixedSize ? "true" : "false"));
parent.appendChild(elem);
}
}
private void writeInfo(Element parent, IImageFileInfo info, boolean forceWrite){
if(parent == null){
parent = mRootElement;
}
boolean isEnable = info.isEnable();
if(isEnable && info instanceof ImageFileInfoSplitWrapper){
ImageFileInfoSplitWrapper wrap = (ImageFileInfoSplitWrapper)info;
for(int i=0; i<wrap.getRelativeSplitInfoSize(); i++){
if(!wrap.getRelativeSplitInfo(i).isEnable()){
isEnable = false;
break;
}
}
}
ImageFilterParam param = info.getFilterParam();
if(forceWrite || info.isModify() || param.isEdit() || param.getPageType() != Constant.PAGETYPE_AUTO || param.getSplitType() != SplitFilter.TYPE_NONE || !isEnable){
if(param.getSplitType() == SplitFilter.TYPE_NONE || (param.getSplitType() != SplitFilter.TYPE_NONE && param.getSplitIndex() == 0)){
//<info>
Element infoElem = mDocument.createElement("info");
//<filename>
Element filenameElem = mDocument.createElement("filename");
filenameElem.appendChild(mDocument.createTextNode(info.getFileName()));
infoElem.appendChild(filenameElem);
//<toc>
String tocText = info.getTocText();
if(tocText != null && tocText.length() > 0){
Element tocElem = mDocument.createElement("toc");
tocElem.appendChild(mDocument.createTextNode(tocText));
infoElem.appendChild(tocElem);
}
//<split>
writeSplit(infoElem, info);
//writeParam(infoElem, param);
parent.appendChild(infoElem);
}
}
}
private void writeSplit(Element parent, IImageFileInfo info){
ImageFilterParam param = info.getFilterParam();
int splitType = param.getSplitType();
//<split>
Element splitElem = mDocument.createElement("split");
//if(!info.isEnable()){
// splitElem.setAttribute("enable", Boolean.toString(info.isEnable()));
//}
splitElem.setAttribute("type", Integer.toString(splitType));
float[] v = param.getSplitOffsetV();
float[] h = param.getSplitOffsetH();
if(v != null && h != null && v.length >= 2 && h.length >= 2){
String vline = createFloatArrayString(v);
String hline = createFloatArrayString(h);
splitElem.setAttribute("vline", vline);
splitElem.setAttribute("hline", hline);
}
if(info instanceof ImageFileInfoSplitWrapper){
ImageFileInfoSplitWrapper wrapInfo = (ImageFileInfoSplitWrapper)info;
int size = wrapInfo.getRelativeSplitInfoSize();
String disable = "";
for(int i=0; i<size; i++){
IImageFileInfo winfo = wrapInfo.getRelativeSplitInfo(i);
if(!winfo.isEnable()){
disable += "," + i;
}
ImageFilterParam sparam = wrapInfo.getRelativeSplitInfoFilterParam(i);
writeParam(splitElem, sparam, winfo.getSortOrder());
}
if(!disable.isEmpty()){
splitElem.setAttribute("disable", disable.substring(1));
}
}
else{
if(!info.isEnable()){
splitElem.setAttribute("disable", "0");
}
writeParam(splitElem, param, info.getSortOrder());
}
parent.appendChild(splitElem);
}
private String createFloatArrayString(float[] v){
StringBuilder sb = new StringBuilder();
sb.append(Float.toString(v[0]));
for(int i=1; i<v.length; i++){
sb.append("," + Float.toString(v[i]));
}
return new String(sb);
}
private void writeParam(Element parent, ImageFilterParam param, int order){
if(parent == null){
parent = mRootElement;
}
Element paramElem = mDocument.createElement("param");
paramElem.setAttribute("index", Integer.toString(param.getSplitIndex()));
if(order >= 0){
paramElem.setAttribute("order", Integer.toString(order));
}
if(param.isPreview()){
Element elem = mDocument.createElement("preview");
elem.appendChild(mDocument.createTextNode("true"));
paramElem.appendChild(elem);
}
if(param.isResize()){
Element elem = mDocument.createElement("resize");
elem.appendChild(mDocument.createTextNode("true"));
paramElem.appendChild(elem);
}
if(param.isUnificationTextPage()){
Element elem = mDocument.createElement("unification_text");
elem.appendChild(mDocument.createTextNode("true"));
paramElem.appendChild(elem);
}
if(param.isRotate()){
Element elem = mDocument.createElement("rotate");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("angle", Double.toString(param.getRotateAngle()));
paramElem.appendChild(elem);
}
if(param.isTranslate()){
Element elem = mDocument.createElement("translate");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("x", Integer.toString(param.getTranslateX()));
elem.setAttribute("y", Integer.toString(param.getTranslateY()));
paramElem.appendChild(elem);
}
if(param.isColorPageAutoCrop()){
Element elem = mDocument.createElement("colorAutoCrop");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("l", Integer.toString(param.getColorPageCropLeft()));
elem.setAttribute("t", Integer.toString(param.getColorPageCropTop()));
elem.setAttribute("r", Integer.toString(param.getColorPageCropRight()));
elem.setAttribute("b", Integer.toString(param.getColorPageCropBottom()));
elem.setAttribute("threshold", Integer.toString(param.getColorPageAutoCropThreshold()));
paramElem.appendChild(elem);
}
if(param.isPictPageAutoCrop()){
Element elem = mDocument.createElement("pictAutoCrop");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("l", Integer.toString(param.getPictPageCropLeft()));
elem.setAttribute("t", Integer.toString(param.getPictPageCropTop()));
elem.setAttribute("r", Integer.toString(param.getPictPageCropRight()));
elem.setAttribute("b", Integer.toString(param.getPictPageCropBottom()));
elem.setAttribute("threshold", Integer.toString(param.getPictPageAutoCropThreshold()));
paramElem.appendChild(elem);
}
if(param.isTextPageAutoCrop()){
Element elem = mDocument.createElement("textAutoCrop");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("l", Integer.toString(param.getTextPageCropLeft()));
elem.setAttribute("t", Integer.toString(param.getTextPageCropTop()));
elem.setAttribute("r", Integer.toString(param.getTextPageCropRight()));
elem.setAttribute("b", Integer.toString(param.getTextPageCropBottom()));
elem.setAttribute("threshold", Integer.toString(param.getTextPageAutoCropThreshold()));
paramElem.appendChild(elem);
}
if(param.isFullPageAutoCrop()){
Element elem = mDocument.createElement("fullAutoCrop");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("l", Integer.toString(param.getFullPageCropLeft()));
elem.setAttribute("t", Integer.toString(param.getFullPageCropTop()));
elem.setAttribute("r", Integer.toString(param.getFullPageCropRight()));
elem.setAttribute("b", Integer.toString(param.getFullPageCropBottom()));
elem.setAttribute("threshold", Integer.toString(param.getFullPageAutoCropThreshold()));
paramElem.appendChild(elem);
}
if(param.isFullPageCrop()){
Element elem = mDocument.createElement("fullCrop");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("l", Integer.toString(param.getFullPageCropLeft()));
elem.setAttribute("t", Integer.toString(param.getFullPageCropTop()));
elem.setAttribute("r", Integer.toString(param.getFullPageCropRight()));
elem.setAttribute("b", Integer.toString(param.getFullPageCropBottom()));
paramElem.appendChild(elem);
}
if(param.isColorPageCrop()){
Element elem = mDocument.createElement("colorCrop");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("l", Integer.toString(param.getColorPageCropLeft()));
elem.setAttribute("t", Integer.toString(param.getColorPageCropTop()));
elem.setAttribute("r", Integer.toString(param.getColorPageCropRight()));
elem.setAttribute("b", Integer.toString(param.getColorPageCropBottom()));
paramElem.appendChild(elem);
}
if(param.isTextPageCrop()){
Element elem = mDocument.createElement("textCrop");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("l", Integer.toString(param.getTextPageCropLeft()));
elem.setAttribute("t", Integer.toString(param.getTextPageCropTop()));
elem.setAttribute("r", Integer.toString(param.getTextPageCropRight()));
elem.setAttribute("b", Integer.toString(param.getTextPageCropBottom()));
paramElem.appendChild(elem);
}
if(param.isPictPageCrop()){
Element elem = mDocument.createElement("pictCrop");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("l", Integer.toString(param.getPictPageCropLeft()));
elem.setAttribute("t", Integer.toString(param.getPictPageCropTop()));
elem.setAttribute("r", Integer.toString(param.getPictPageCropRight()));
elem.setAttribute("b", Integer.toString(param.getPictPageCropBottom()));
paramElem.appendChild(elem);
}
if(param.isBlur()){
Element elem = mDocument.createElement("blur");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("value", Float.toString(param.getBlurPixels()));
paramElem.appendChild(elem);
}
if(param.isSharpness()){
Element elem = mDocument.createElement("sharpness");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("value", Float.toString(param.getSharpnessPixels()));
paramElem.appendChild(elem);
}
if(param.isGrayscale()){
Element elem = mDocument.createElement("grayscale");
elem.appendChild(mDocument.createTextNode("true"));
paramElem.appendChild(elem);
}
if(param.isGamma()){
Element elem = mDocument.createElement("gamma");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("value", Double.toString(param.getGamma()));
paramElem.appendChild(elem);
}
if(param.isContrast()){
Element elem = mDocument.createElement("contrast");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("scale", Float.toString(param.getContrast()));
elem.setAttribute("offset", Float.toString(param.getBrightness()));
paramElem.appendChild(elem);
}
//if(param.getSplitType() != SplitFilter.TYPE_NONE){
// Element elem = mDocument.createElement("split");
// elem.appendChild(mDocument.createTextNode("true"));
// elem.setAttribute("type", Integer.toString(param.getSplitType()));
// paramElem.appendChild(elem);
//}
if(param.getPageType() != Constant.PAGETYPE_AUTO){
Element elem = mDocument.createElement("pageType");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("type", Integer.toString(param.getPageType()));
paramElem.appendChild(elem);
}
if(!param.getPageSpread().equals(Constant.PAGESPREAD_AUTO)){
Element elem = mDocument.createElement("pageSpread");
elem.appendChild(mDocument.createTextNode("true"));
elem.setAttribute("type", param.getPageSpread());
paramElem.appendChild(elem);
}
parent.appendChild(paramElem);
}
public boolean openLoadSettingFile(String filepath){
try {
File file = new File(filepath);
if(!file.exists()){
return false;
}
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
factory.setIgnoringElementContentWhitespace(true);
factory.setIgnoringComments(true);
factory.setValidating(false);
Document document = builder.parse("file:///" + filepath);
mDocument = document;
return true;
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public void loadSetting(OutputSettingParam output, ImageFilterParamSet baseParams, IImageFileInfoList list){
if(mDocument == null){
return;
}
HashMap<String, IImageFileInfo> map = null;
if(list != null){
map = new HashMap<String, IImageFileInfo>();
for(int i=0; i<list.size(); i++){
IImageFileInfo info = list.get(i);
map.put(info.getFileName(), info);
}
}
NodeList topNodes = mDocument.getChildNodes();
if(topNodes.getLength() != 1){
return;
}
Node settingNode = topNodes.item(0);
if(settingNode.getNodeName().equalsIgnoreCase("setting")){
NodeList settingNodes = settingNode.getChildNodes();
for(int i=0; i<settingNodes.getLength(); i++){
Node node = settingNodes.item(i);
String name = node.getNodeName();
if(name.equalsIgnoreCase("output")){
if(output != null){
loadOutput(node, output);
}
}
else if(name.equalsIgnoreCase("base")){
if(baseParams != null){
NodeList baseNodes = node.getChildNodes();
for(int n=0; n<baseNodes.getLength(); n++){
loadFilterBase(baseNodes.item(n), baseParams);
//loadParam(baseNodes.item(n), baseParam);
}
}
}
else if(name.equalsIgnoreCase("infos")){
if(list != null){
NodeList infosNodes = node.getChildNodes();
String sort = getAttributeValue(node.getAttributes(), "sort");
if(sort.equalsIgnoreCase("false")){
list.setEnableSort(false);
}else{
list.setEnableSort(true);
}
for(int n=0; n<infosNodes.getLength(); n++){
loadInfo(infosNodes.item(n), map);
}
}
}
}
}
if(mSpInfoMap.size() > 0){
List<IImageFileInfo> tmpList = new ArrayList<IImageFileInfo>();
for(int i=0; i<list.size(); i++){
tmpList.add(list.get(i));
}
list.clear();
for(int i=0; i<tmpList.size(); i++){
IImageFileInfo info = tmpList.get(i);
if(mSpInfoMap.containsKey(info)){
ImageFileInfoSplitWrapper wrapInfo = mSpInfoMap.get(info);
int size = wrapInfo.getRelativeSplitInfoSize();
for(int n=0; n<size; n++){
ImageFileInfoSplitWrapper winfo = wrapInfo.getRelativeSplitInfo(n);
list.add(winfo);
}
}
else{
list.add(info);
}
}
}
}
private void loadFilterBase(Node filterNode, ImageFilterParamSet params){
if(filterNode.getNodeName().equalsIgnoreCase("filter")){
NamedNodeMap attrs = filterNode.getAttributes();
String pageType = getAttributeValue(attrs, "pageType");
if(!pageType.isEmpty()){
int index = 0;
if(pageType.equals("basic")){
index = 0;
}
else if(pageType.equals("color")){
index = 1;
}
else if(pageType.equals("pict")){
index = 2;
}
else if(pageType.equals("text")){
index = 3;
}
ImageFilterParam param = params.get(index);
if(param == null){
params.set(index, new ImageFilterParam());
}
NodeList nodes = filterNode.getChildNodes();
if(nodes.getLength() > 0){
loadParam(nodes.item(0), params.get(index));
}
}
}
}
private void loadOutput(Node outputNode, OutputSettingParam output){
if(outputNode.getNodeName().equalsIgnoreCase("output")){
NamedNodeMap outputAttrs = outputNode.getAttributes();
String fileType = getAttributeValue(outputAttrs, "fileType");
if(fileType.isEmpty()){
fileType = "zip";
}
String bookType = getAttributeValue(outputAttrs, "bookType");
if(bookType.isEmpty()){
bookType = "book";
}
output.setFileType(fileType);
output.setEpubType(bookType);
NodeList nodes = outputNode.getChildNodes();
for(int i=0; i<nodes.getLength(); i++){
Node node = nodes.item(i);
NamedNodeMap attrs = node.getAttributes();
String name = node.getNodeName();
if(name.equalsIgnoreCase("folder")){
if(node.hasChildNodes()){
String path = node.getFirstChild().getNodeValue();
output.setOutputPath(path);
}
}
else if(name.equalsIgnoreCase("size")){
String width = getAttributeValue(attrs, "width");
String height = getAttributeValue(attrs, "height");
output.setImageSize(Integer.parseInt(width), Integer.parseInt(height));
}
else if(name.equalsIgnoreCase("title")){
if(node.hasChildNodes()){
String value = node.getFirstChild().getNodeValue();
output.setTitle(value);
}
}
else if(name.equalsIgnoreCase("title_kana")){
if(node.hasChildNodes()){
String value = node.getFirstChild().getNodeValue();
output.setTitleKana(value);
}
}
else if(name.equalsIgnoreCase("author")){
if(node.hasChildNodes()){
String value = node.getFirstChild().getNodeValue();
output.setAuthor(value);
}
}
else if(name.equalsIgnoreCase("author_kana")){
if(node.hasChildNodes()){
String value = node.getFirstChild().getNodeValue();
output.setAuthorKana(value);
}
}
else if(name.equalsIgnoreCase("seriesTitle")){
if(node.hasChildNodes()){
String value = node.getFirstChild().getNodeValue();
output.setSeriesTitle(value);
}
}
else if(name.equalsIgnoreCase("seriesTitleKana")){
if(node.hasChildNodes()){
String value = node.getFirstChild().getNodeValue();
output.setSeriesTitleKana(value);
}
}
else if(name.equalsIgnoreCase("seriesNumber")){
if(node.hasChildNodes()){
String value = node.getFirstChild().getNodeValue();
output.setSeriesNumber(Integer.parseInt(value));
}
}
else if(name.equalsIgnoreCase("fixedSize")){
if(node.hasChildNodes()){
String enable = node.getFirstChild().getNodeValue();
output.setFixedSize(Boolean.parseBoolean(enable));
}
}
}
}
}
private void loadInfo(Node infoNode, HashMap<String, IImageFileInfo> map){
if(infoNode.getNodeName().equalsIgnoreCase("info")){
NodeList nodes = infoNode.getChildNodes();
Node filenameNode = null;
Node tocNode = null;
Node paramNode = null;
for(int i=0; i<nodes.getLength(); i++){
Node node = nodes.item(i);
if(node.getNodeName().equalsIgnoreCase("filename")){
filenameNode = node;
}
else if(node.getNodeName().equalsIgnoreCase("split")){
paramNode = node;
}
else if(node.getNodeName().equalsIgnoreCase("toc")){
tocNode = node;
}
}
if(filenameNode != null && paramNode != null){
String filename = filenameNode.getFirstChild().getNodeValue();
IImageFileInfo info = map.get(filename);
if(info != null){
if(tocNode != null){
String tocName = tocNode.getFirstChild().getNodeValue();
info.setTocText(tocName);
}
loadSplit(paramNode, info);
//loadParam(paramNode, info.getFilterParam());
}
}
}
}
private void loadSplit(Node splitNode, IImageFileInfo info){
if(splitNode.getNodeName().equalsIgnoreCase("split")){
// type="0" vline="-0.5,0,0.5" hline="-0.5,0,0.5"
NamedNodeMap attrs = splitNode.getAttributes();
String type = getAttributeValue(attrs, "type");
int splitType = Integer.parseInt(type);
if(splitType == SplitFilter.TYPE_NONE){
//String enable = getAttributeValue(attrs, "enable");
//boolean value = true;
//if(!enable.isEmpty()){
// value = Boolean.parseBoolean(enable);
//}
//info.setEnable(value);
String disable = getAttributeValue(attrs, "disable");
if(!disable.isEmpty()){
info.setEnable(false);
}
// 分割無し
NodeList nodes = splitNode.getChildNodes();
for(int i=0; i<nodes.getLength(); i++){
Node node = nodes.item(i);
int order = loadParam(node, info.getFilterParam());
if(order >= 0){
info.setSortOrder(order);
}
}
}
else{
String vline = getAttributeValue(attrs, "vline");
String hline = getAttributeValue(attrs, "hline");
NodeList nodes = splitNode.getChildNodes();
float[] v = null;
float[] h = null;
if(!vline.isEmpty() && !hline.isEmpty()){
v = parseFloatArray(vline);
h = parseFloatArray(hline);
}
info.getFilterParam().setSplitType(splitType, v, h);
ImageFileInfoSplitWrapper first = null;// = new ImageFileInfoSplitWrapper(info, 0);
String disable = getAttributeValue(attrs, "disable");
String[] svals = disable.split(",");
boolean[] vals = null;
if(!disable.isEmpty() && svals.length > 0){
vals = new boolean[nodes.getLength()];
for(int i=0; i<vals.length; i++){
vals[i] = true;
}
for(int i=0; i<svals.length; i++){
try {
int index = Integer.parseInt(svals[i]);
vals[index] = false;
}catch(NumberFormatException e){
}
}
}
for(int i=0; i<nodes.getLength(); i++){
Node node = nodes.item(i);
ImageFileInfoSplitWrapper relWrapInfo = new ImageFileInfoSplitWrapper(info, i /*dummy*/);
int order = loadParam(node, relWrapInfo.getFilterParam());
if(order >= 0){
relWrapInfo.setSortOrder(order);
}
if(first == null){
first = relWrapInfo;
}
first.addRelativeSplitInfo(relWrapInfo);
relWrapInfo.setFirstSplitInfo(first);
if(vals != null){
relWrapInfo.setEnable(vals[i]);
}
}
mSpInfoMap.put(info, first);
}
}
}
private float[] parseFloatArray(String v){
String[] va = v.split(",");
float[] ar = new float[va.length];
for(int i=0; i<va.length; i++){
ar[i] = Float.parseFloat(va[i]);
}
return ar;
}
private int loadParam(Node paramNode, ImageFilterParam param){
int orderVal = -1;
if(paramNode.getNodeName().equalsIgnoreCase("param")){
NodeList nodes = paramNode.getChildNodes();
String order = getAttributeValue(paramNode.getAttributes(), "order");
if(order.length() > 0){
orderVal = Integer.parseInt(order);
}
for(int i=0; i<nodes.getLength(); i++){
Node node = nodes.item(i);
NamedNodeMap attrs = node.getAttributes();
String name = node.getNodeName();
if(name.equalsIgnoreCase("preview")){
String enable = node.getFirstChild().getNodeValue();
param.setPreview(Boolean.parseBoolean(enable));
}
if(name.equalsIgnoreCase("resize")){
String enable = node.getFirstChild().getNodeValue();
param.setResize(Boolean.parseBoolean(enable));
}
if(name.equalsIgnoreCase("unification_text")){
String enable = node.getFirstChild().getNodeValue();
param.setUnificationTextPage(Boolean.parseBoolean(enable));
}
if(name.equalsIgnoreCase("rotate")){
String angle = getAttributeValue(attrs, "angle");
String enable = node.getFirstChild().getNodeValue();
param.setRotate(Boolean.parseBoolean(enable));
param.setRotateAngle(Double.parseDouble(angle));
}
else if(name.equalsIgnoreCase("translate")){
String x = getAttributeValue(attrs, "x");
String y = getAttributeValue(attrs, "y");
String enable = node.getFirstChild().getNodeValue();
param.setTranslate(Boolean.parseBoolean(enable));
param.setTranslateX(Integer.parseInt(x));
param.setTranslateY(Integer.parseInt(y));
}
else if(name.equalsIgnoreCase("fullCrop")){
String l = getAttributeValue(attrs, "l");
String r = getAttributeValue(attrs, "r");
String t = getAttributeValue(attrs, "t");
String b = getAttributeValue(attrs, "b");
String enable = node.getFirstChild().getNodeValue();
param.setFullPageCrop(Boolean.parseBoolean(enable));
param.setFullPageCrop(Integer.parseInt(l), Integer.parseInt(t), Integer.parseInt(r), Integer.parseInt(b));
}
else if(name.equalsIgnoreCase("colorCrop")){
String l = getAttributeValue(attrs, "l");
String r = getAttributeValue(attrs, "r");
String t = getAttributeValue(attrs, "t");
String b = getAttributeValue(attrs, "b");
String enable = node.getFirstChild().getNodeValue();
param.setColorPageCrop(Boolean.parseBoolean(enable));
param.setColorPageCrop(Integer.parseInt(l), Integer.parseInt(t), Integer.parseInt(r), Integer.parseInt(b));
}
else if(name.equalsIgnoreCase("textCrop")){
String l = getAttributeValue(attrs, "l");
String r = getAttributeValue(attrs, "r");
String t = getAttributeValue(attrs, "t");
String b = getAttributeValue(attrs, "b");
String enable = node.getFirstChild().getNodeValue();
param.setTextPageCrop(Boolean.parseBoolean(enable));
param.setTextPageCrop(Integer.parseInt(l), Integer.parseInt(t), Integer.parseInt(r), Integer.parseInt(b));
}
else if(name.equalsIgnoreCase("pictCrop")){
String l = getAttributeValue(attrs, "l");
String r = getAttributeValue(attrs, "r");
String t = getAttributeValue(attrs, "t");
String b = getAttributeValue(attrs, "b");
String enable = node.getFirstChild().getNodeValue();
param.setPictPageCrop(Boolean.parseBoolean(enable));
param.setPictPageCrop(Integer.parseInt(l), Integer.parseInt(t), Integer.parseInt(r), Integer.parseInt(b));
}
else if(name.equalsIgnoreCase("colorAutoCrop")){
String l = getAttributeValue(attrs, "l");
String r = getAttributeValue(attrs, "r");
String t = getAttributeValue(attrs, "t");
String b = getAttributeValue(attrs, "b");
String threshold = getAttributeValue(attrs, "threshold", "0");
String enable = node.getFirstChild().getNodeValue();
param.setColorPageAutoCrop(Boolean.parseBoolean(enable));
param.setColorPageAutoCropThreshold(Integer.parseInt(threshold));
param.setColorPageCrop(Integer.parseInt(l), Integer.parseInt(t), Integer.parseInt(r), Integer.parseInt(b));
}
else if(name.equalsIgnoreCase("pictAutoCrop")){
String l = getAttributeValue(attrs, "l");
String r = getAttributeValue(attrs, "r");
String t = getAttributeValue(attrs, "t");
String b = getAttributeValue(attrs, "b");
String threshold = getAttributeValue(attrs, "threshold", "0");
String enable = node.getFirstChild().getNodeValue();
param.setPictPageAutoCrop(Boolean.parseBoolean(enable));
param.setPictPageAutoCropThreshold(Integer.parseInt(threshold));
param.setPictPageCrop(Integer.parseInt(l), Integer.parseInt(t), Integer.parseInt(r), Integer.parseInt(b));
}
else if(name.equalsIgnoreCase("textAutoCrop")){
String l = getAttributeValue(attrs, "l");
String r = getAttributeValue(attrs, "r");
String t = getAttributeValue(attrs, "t");
String b = getAttributeValue(attrs, "b");
String threshold = getAttributeValue(attrs, "threshold", "0");
String enable = node.getFirstChild().getNodeValue();
param.setTextPageAutoCrop(Boolean.parseBoolean(enable));
param.setTextPageAutoCropThreshold(Integer.parseInt(threshold));
param.setTextPageCrop(Integer.parseInt(l), Integer.parseInt(t), Integer.parseInt(r), Integer.parseInt(b));
}
else if(name.equalsIgnoreCase("fullAutoCrop")){
String l = getAttributeValue(attrs, "l");
String r = getAttributeValue(attrs, "r");
String t = getAttributeValue(attrs, "t");
String b = getAttributeValue(attrs, "b");
String threshold = getAttributeValue(attrs, "threshold", "0");
String enable = node.getFirstChild().getNodeValue();
param.setFullPageAutoCrop(Boolean.parseBoolean(enable));
param.setFullPageAutoCropThreshold(Integer.parseInt(threshold));
param.setFullPageCrop(Integer.parseInt(l), Integer.parseInt(t), Integer.parseInt(r), Integer.parseInt(b));
}
else if(name.equalsIgnoreCase("blur")){
String enable = node.getFirstChild().getNodeValue();
String value = getAttributeValue(attrs, "value");
param.setBlur(Boolean.parseBoolean(enable));
param.setBlurPixels(Float.parseFloat(value));
}
else if(name.equalsIgnoreCase("sharpness")){
String enable = node.getFirstChild().getNodeValue();
String value = getAttributeValue(attrs, "value");
param.setSharpness(Boolean.parseBoolean(enable));
param.setSharpnessPixels(Float.parseFloat(value));
}
else if(name.equalsIgnoreCase("grayscale")){
String enable = node.getFirstChild().getNodeValue();
param.setGrayscale(Boolean.parseBoolean(enable));
}
else if(name.equalsIgnoreCase("gamma")){
String gamma = getAttributeValue(attrs, "value");
String enable = node.getFirstChild().getNodeValue();
param.setGamma(Boolean.parseBoolean(enable));
param.setGamma(Double.parseDouble(gamma));
}
else if(name.equalsIgnoreCase("contrast")){
String scale = getAttributeValue(attrs, "scale");
String offset = getAttributeValue(attrs, "offset");
String enable = node.getFirstChild().getNodeValue();
param.setContrast(Boolean.parseBoolean(enable));
param.setContrast(Float.parseFloat(scale));
param.setBrightness(Float.parseFloat(offset));
}
//else if(name.equalsIgnoreCase("split")){
// String type = getAttributeValue(attrs, "type");
// String enable = node.getFirstChild().getNodeValue();
// if(Boolean.parseBoolean(enable)){
// param.setSplitType(Integer.parseInt(type));
// }
//}
else if(name.equalsIgnoreCase("pageType")){
String type = getAttributeValue(attrs, "type");
String enable = node.getFirstChild().getNodeValue();
if(Boolean.parseBoolean(enable)){
param.setPageType(Integer.parseInt(type));
}
}
else if(name.equalsIgnoreCase("pageSpread")){
String type = getAttributeValue(attrs, "type");
String enable = node.getFirstChild().getNodeValue();
if(Boolean.parseBoolean(enable)){
param.setPageSpread(type);
}
}
}
}
return orderVal;
}
private String getAttributeValue(NamedNodeMap attrs, String name){
Node node = attrs.getNamedItem(name);
if(node != null){
return node.getNodeValue();
} else {
return "";
}
}
private String getAttributeValue(NamedNodeMap attrs, String name, String defaultValue){
Node node = attrs.getNamedItem(name);
if(node != null){
return node.getNodeValue();
} else {
return defaultValue;
}
}
}