import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.lt.cj.config.entities.ConfigModel;
import org.lt.cj.config.entities.TMallConfigModel;
import org.lt.cj.core.Seed;
public
class
XMLConfigWriter {
public
Document buildUpMallDocument(TMallConfigModel missionConfig) throws MissionConfigException, EnterUrlsException {
if
(missionConfig == null) {
throw
new
MissionConfigException();
}
else
if
(missionConfig.getSeeds().isEmpty()) {
return
null;
}
Element rootElement =
new
Element(
"website"
);
rootElement.setAttribute(
"name"
, missionConfig.getWebsiteName());
rootElement.setAttribute(
"url"
, missionConfig.getWebsiteUrl());
Element taskElement =
new
Element(
"taskName"
);
taskElement.addContent(missionConfig.getTaskName());
rootElement.addContent(taskElement);
Element seeds =
new
Element(
"seeds"
);
for
(int i = 0; i < missionConfig.getSeeds().size(); i++) {
Element seedElement =
new
Element(
"seed"
);
Element seedNameElement =
new
Element(
"seedName"
);
seedNameElement.addContent(missionConfig.getSeeds().get(i).getSeedName());
Element seedUrlElement =
new
Element(
"seedUrl"
);
seedUrlElement.addContent(missionConfig.getSeeds().get(i).getUrl());
Element seedSortNameElement =
new
Element(
"sortName"
);
seedSortNameElement.addContent(missionConfig.getSeeds().get(i).getSortName());
seedElement.addContent(seedSortNameElement);
seedElement.addContent(seedNameElement);
seedElement.addContent(seedUrlElement);
seeds.addContent(seedElement);
}
rootElement.addContent(seeds);
Element fiturls =
new
Element(
"fitUrls"
);
for
(int i = 0; i < missionConfig.getFitUrlRegs().size(); i++) {
Element fitUrl =
new
Element(
"fit_url"
);
fitUrl.addContent(missionConfig.getFitUrlRegs().get(i));
fiturls.addContent(fitUrl);
}
rootElement.addContent(fiturls);
Element workingThreadsElement =
new
Element(
"workingThreads"
);
workingThreadsElement.addContent(
""
+ missionConfig.getWorkingThreads());
rootElement.addContent(workingThreadsElement);
Element pageEncodingElement =
new
Element(
"pageEncoding"
);
pageEncodingElement.addContent(missionConfig.getPageEncoding());
rootElement.addContent(pageEncodingElement);
Element dwdPhoFlagElement =
new
Element(
"dwdPhoFlag"
);
dwdPhoFlagElement.addContent(missionConfig.getDwdPhoFlag());
rootElement.addContent(dwdPhoFlagElement);
Element oriLan =
new
Element(
"orien_lan"
);
oriLan.addContent(missionConfig.getOrigLanguage());
Element transLan =
new
Element(
"trans_lan"
);
transLan.addContent(missionConfig.getTranLanguage());
rootElement.addContent(oriLan);
rootElement.addContent(transLan);
Element pageUrlRegs =
new
Element(
"pageUrlRegs"
);
for
(int i = 0; i < missionConfig.getPageReg().size(); i++) {
Element pageUrl =
new
Element(
"pageUrl"
);
pageUrl.addContent(missionConfig.getFitUrlRegs().get(i));
pageUrlRegs.addContent(pageUrl);
}
rootElement.addContent(pageUrlRegs);
Map<String, List<String>> map = missionConfig.getEntityReg();
List<String> list = null;
Element pathElements =
new
Element(
"pathElements"
);
Iterator iter = map.entrySet().iterator();
while
(iter.hasNext()) {
Map.Entry e = (Map.Entry) iter.next();
Element element =
new
Element(e.getKey() +
""
);
map = missionConfig.getEntityReg();
list = map.get(e.getKey() +
""
);
for
(int i = 0; i < list.size(); i++) {
Element path =
new
Element(
"path"
);
path.addContent(list.get(i));
element.addContent(path);
}
pathElements.addContent(element);
}
rootElement.addContent(pathElements);
Document myDocument =
new
Document(rootElement);
return
myDocument;
}
public
void createConfigFile(Document document, String filepath) {
try
{
XMLOutputter xmlOutPutter =
new
XMLOutputter();
xmlOutPutter.setFormat(Format.getPrettyFormat());
File file =
new
File(filepath);
if
(!file.exists()) {
if
(file.createNewFile()) {
FileOutputStream fileOutputStream =
new
FileOutputStream(filepath);
xmlOutPutter.output(document, fileOutputStream);
return
;
}
}
FileOutputStream fileOutputStream =
new
FileOutputStream(filepath);
xmlOutPutter.output(document, fileOutputStream);
}
catch
(java.io.IOException e) {
e.printStackTrace();
}
}
public
void saveTask(String filePath, ConfigModel configModel) {
try
{
TMallConfigModel tMallConfigModel = (TMallConfigModel) configModel;
Document document = buildUpMallDocument(tMallConfigModel);
if
(document != null) {
createConfigFile(document, filePath);
}
}
catch
(MissionConfigException ex) {
Logger.getLogger(XMLConfigWriter.
class
.getName()).log(Level.SEVERE, null, ex);
}
catch
(EnterUrlsException ex) {
Logger.getLogger(XMLConfigWriter.
class
.getName()).log(Level.SEVERE, null, ex);
}
}
public
TMallConfigModel readMallDocument(String filePath) {
TMallConfigModel model =
new
TMallConfigModel();
SAXBuilder sb =
new
SAXBuilder();
try
{
Document doc = sb.build(filePath);
Element root = doc.getRootElement();
String websiteName = root.getAttributeValue(
"name"
);
String websiteAddr = root.getAttributeValue(
"url"
);
model.setWebsiteName(websiteName);
model.setWebsiteUrl(websiteAddr);
Element taskNameElement = root.getChild(
"taskName"
);
String taskName = taskNameElement.
getText
();
model.setTaskName(taskName);
List<Seed> seedList =
new
ArrayList();
Element seedsElement = root.getChild(
"seeds"
);
List list = seedsElement.getChildren();
for
(int i = 0; i < list.size(); i++) {
Element element = (Element) seedsElement.getChildren().get(i);
Seed seed =
new
Seed();
Element seedNameElement = element.getChild(
"seedName"
);
Element seedUrlElement = element.getChild(
"seedUrl"
);
Element seedSortNameElement = element.getChild(
"sortName"
);
seed.setSeedName(seedNameElement.getTextTrim());
seed.setUrl(seedUrlElement.getTextTrim());
seed.setSortName(seedSortNameElement.getTextTrim());
Element parentSeedElement = element.getChild(
"parentSeed"
);
if
(parentSeedElement != null) {
Seed parentSeed =
new
Seed();
Element parentSeedNameElement = parentSeedElement.getChild(
"seedName"
);
Element parentSeedUrlElement = parentSeedElement.getChild(
"seedUrl"
);
Element parentSeedSortNameElement = parentSeedElement.getChild(
"sortName"
);
parentSeed.setSeedName(parentSeedNameElement.
getText
());
parentSeed.setUrl(parentSeedUrlElement.getTextTrim());
parentSeed.setSortName(parentSeedSortNameElement.getTextTrim());
}
seedList.add(seed);
}
model.setSeeds(seedList);
list =
new
ArrayList();
Element extractHtmlElement = root.getChild(
"extractHtml"
);
if
(extractHtmlElement != null) {
for
(int i = 0; i < extractHtmlElement.getChildren().size(); i++) {
Element element = (Element) extractHtmlElement.getChildren().get(i);
list.add(element.
getText
());
}
}
model.setExtractHtmlReg(list);
list =
new
ArrayList();
Element fitUrlsElement = root.getChild(
"fitUrls"
);
for
(int i = 0; i < fitUrlsElement.getChildren().size(); i++) {
Element element = (Element) fitUrlsElement.getChildren().get(i);
list.add(element.
getText
());
}
model.setFitUrlRegs(list);
Element workingThreadsElement = root.getChild(
"workingThreads"
);
String workingCount = workingThreadsElement.
getText
();
model.setWorkingThreads(Integer.valueOf(workingCount));
Element pageEncodingElement = root.getChild(
"pageEncoding"
);
String pageEncoding = pageEncodingElement.
getText
();
model.setPageEncoding(pageEncoding);
Element dwdPhoFlagElement = root.getChild(
"dwdPhoFlag"
);
String dphoFlag = dwdPhoFlagElement.
getText
();
model.setDwdPhoFlag(dphoFlag);
Element orien_lanElement = root.getChild(
"orien_lan"
);
String orien = orien_lanElement.
getText
();
model.setOrigLanguage(orien);
Element trans_lanElement = root.getChild(
"trans_lan"
);
String trans_lan = trans_lanElement.
getText
();
model.setTranLanguage(trans_lan);
Element pageUrlRegsElement = root.getChild(
"pageUrlRegs"
);
list =
new
ArrayList();
for
(int i = 0; i < pageUrlRegsElement.getChildren().size(); i++) {
Element element = (Element) pageUrlRegsElement.getChildren().get(i);
list.add(element.
getText
());
}
model.setPageReg(list);
Map<String, List<String>> entityReg =
new
HashMap();
Element pathElements = root.getChild(
"pathElements"
);
for
(int i = 0; i < pathElements.getChildren().size(); i++) {
Element element = (Element) pathElements.getChildren().get(i);
List<String> pathList =
new
ArrayList();
String mapName = element.getName();
for
(int j = 0; j < element.getChildren().size(); j++) {
Element childElement = (Element) element.getChildren().get(j);
pathList.add(childElement.
getText
());
}
entityReg.put(mapName, pathList);
}
model.setEntityReg(entityReg);
}
catch
(JDOMException ex) {
Logger.getLogger(XMLConfigWriter.
class
.getName()).log(Level.SEVERE, null, ex);
}
catch
(IOException ex) {
Logger.getLogger(XMLConfigWriter.
class
.getName()).log(Level.SEVERE, null, ex);
}
return
model;
}
}