/******************************************************************************* | |
* Copyright (c) 2008, 2016 IBM Corporation and Others | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* Kentarou FUKUDA - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.actf.visualization.blind.odfbyhtml; | |
import java.io.FileInputStream; | |
import java.util.ArrayList; | |
import java.util.HashSet; | |
import java.util.List; | |
import java.util.Vector; | |
import org.eclipse.actf.model.dom.html.DocumentTypeUtil; | |
import org.eclipse.actf.model.dom.html.HTMLParserFactory; | |
import org.eclipse.actf.model.dom.html.IHTMLParser; | |
import org.eclipse.actf.model.ui.IModelService; | |
import org.eclipse.actf.util.FileUtils; | |
import org.eclipse.actf.util.dom.DomPrintUtil; | |
import org.eclipse.actf.util.logging.DebugPrintUtil; | |
import org.eclipse.actf.visualization.IVisualizationConst; | |
import org.eclipse.actf.visualization.blind.BlindVisualizerBase; | |
import org.eclipse.actf.visualization.blind.IBlindVisualizer; | |
import org.eclipse.actf.visualization.blind.ui.internal.Messages; | |
import org.eclipse.actf.visualization.engines.blind.BlindVizResourceUtil; | |
import org.eclipse.actf.visualization.engines.blind.eval.EvaluationResultBlind; | |
import org.eclipse.actf.visualization.engines.blind.html.IVisualizeMapData; | |
import org.eclipse.actf.visualization.engines.blind.html.VisualizeEngine; | |
import org.eclipse.actf.visualization.engines.blind.html.util.VisualizeReportUtil; | |
import org.eclipse.actf.visualization.eval.CheckTargetFactory; | |
import org.eclipse.actf.visualization.eval.EvaluationUtil; | |
import org.eclipse.actf.visualization.eval.ICheckTarget; | |
import org.eclipse.actf.visualization.eval.IChecker; | |
import org.eclipse.actf.visualization.eval.guideline.GuidelineHolder; | |
import org.eclipse.actf.visualization.eval.html.statistics.PageData; | |
import org.eclipse.actf.visualization.eval.problem.HighlightTargetNodeInfo; | |
import org.eclipse.actf.visualization.eval.problem.IProblemItem; | |
import org.eclipse.actf.visualization.eval.problem.ProblemItemImpl; | |
import org.eclipse.actf.visualization.util.html2view.Html2ViewMapData; | |
import org.eclipse.actf.visualization.util.html2view.Html2ViewMapMaker; | |
import org.w3c.dom.Document; | |
@SuppressWarnings("nls") | |
public class BlindVisualizerOdfByHtml extends BlindVisualizerBase implements IBlindVisualizer { | |
private final String ODF_HTML_FILE_NAME = "ODF.html"; | |
private final String odf_html_fileS = tmpDirS + ODF_HTML_FILE_NAME; | |
private final String NO_ALT_IMAGE = "10101"; | |
private static final String MAPPED_HTML_FILE_PRE = "MappedHTML"; | |
private static final String HTML_SOURCE_FILE = "source.html"; | |
public boolean setModelService(IModelService targetModel) { | |
if (super.setModelService(targetModel)) { | |
if (targetUrl.startsWith("file://")) { | |
targetUrl = targetUrl.substring(8); | |
} | |
targetUrl = targetUrl.replaceAll("%20", " "); | |
return true; | |
} | |
return false; | |
} | |
public int visualize() { | |
if (null == modelService) { | |
return ERROR; | |
} | |
GuidelineHolder.getInstance().setTargetMimeType(modelService.getCurrentMIMEType()); | |
modelService.saveDocumentAsHTMLFile(odf_html_fileS); | |
checkResult = new EvaluationResultBlind(); | |
try { | |
FileUtils.copyFile(odf_html_fileS, tmpDirS + HTML_SOURCE_FILE, true); | |
Vector<Html2ViewMapData> html2ViewMapV = new Vector<Html2ViewMapData>(); | |
// IHTMLParser htmlParser = HTMLParserFactory.createHTMLParser(); | |
// HtmlErrorLogListener errorLogListener = new | |
// HtmlErrorLogListener(); | |
// htmlParser.addErrorLogListener(errorLogListener); | |
String targetFile = tmpDirS + MAPPED_HTML_FILE_PRE + ".html"; | |
html2ViewMapV = Html2ViewMapMaker.makeMap(ODF_HTML_FILE_NAME, MAPPED_HTML_FILE_PRE + ".html", tmpDirS); | |
if (html2ViewMapV.size() == 0) { | |
targetFile = odf_html_fileS; | |
} | |
IHTMLParser tmpHtmlParser = HTMLParserFactory.createHTMLParser(); | |
tmpHtmlParser.parse(new FileInputStream(targetFile)); | |
Document document = tmpHtmlParser.getDocument(); | |
if (document == null) { | |
return ERROR; | |
} | |
boolean isHTML5 = DocumentTypeUtil.isOriginalHTML5(document.getDoctype()); | |
setStatusMessage(Messages.BlindView_Now_processing); // | |
pageData = new PageData(); | |
VisualizeEngine engine = new VisualizeEngine(); | |
engine.setBaseUrl(""); //$NON-NLS-1$ | |
// TODO "\"->"/" windows | |
// engine.setBaseUrl("file:///"+RESULT_DIR); | |
engine.setTargetUrl(targetUrl); | |
engine.setDocument(document); | |
engine.setHtml2viewMapV(html2ViewMapV); | |
engine.setInvisibleIdSet(new HashSet<String>()); | |
engine.setPageData(pageData); | |
engine.setHTML5(isHTML5); | |
engine.visualize(); | |
maxReachingTime = engine.getMaxTime(); | |
setInfoMessage(getMaxReachingTime()); | |
resultDocument = engine.getResult(); | |
checkResult.setProblemList(engine.getProbelems()); | |
checkResult.setTargetUrl(targetUrl); | |
if (variantFile != null) { | |
variantFile.delete(); | |
} | |
variantFile = engine.getVariantFile(); | |
checkResult.addAssociateFile(variantFile); | |
IVisualizeMapData mapData = engine.getVisualizeMapData(); | |
checkResult.setSourceFile(null); | |
ArrayList<IProblemItem> tmpResults = new ArrayList<IProblemItem>(1024); | |
Document odfDoc = modelService.getDocument(); | |
ICheckTarget checkTarget = CheckTargetFactory.createCheckTarget(odfDoc, modelService.getURL()); | |
checkTarget.setAdditionalDocument("html", document); | |
IChecker[] checkers = EvaluationUtil.getCheckers(); | |
for (int i = 0; i < checkers.length; i++) { | |
// TODO mimetype -> ??? | |
if (checkers[i].isTargetFormat(modelService.getCurrentMIMEType()) && checkers[i].isEnabled()) { | |
long startTime = System.currentTimeMillis(); | |
tmpResults.addAll(checkers[i].check(checkTarget)); | |
DebugPrintUtil.devOrDebugPrintln(System.currentTimeMillis() - startTime); | |
} | |
} | |
visualizeError(resultDocument, tmpResults); | |
// TODO support blind biz -> visitor | |
for (int i = 0; i < tmpResults.size(); i++) { | |
IProblemItem tmpItem = tmpResults.get(i); | |
HighlightTargetNodeInfo nodeInfo = tmpItem.getHighlightTargetNodeInfo(); | |
if (nodeInfo != null) { | |
tmpItem.setHighlightTargetIds(nodeInfo.getHighlightTargetIds(mapData.getOrig2idMap())); | |
} | |
} | |
checkResult.addProblemItems(tmpResults); | |
checkResult.accept(pageData); | |
// TODO move (add Icons into result doc) here | |
if (resultFile != null) { | |
resultFile.delete(); | |
} | |
resultFile = BlindVizResourceUtil.createTempFile(IVisualizationConst.PREFIX_RESULT, | |
IVisualizationConst.SUFFIX_HTML); | |
try { | |
// PrintWriter pw = new PrintWriter(new OutputStreamWriter( | |
// new FileOutputStream(resultFile), "UTF-8")); | |
// ((IHTMLDocumentACTF) resultDocument).printAsSGML(pw, true); | |
// pw.flush(); | |
// pw.close(); | |
DomPrintUtil dpu = new DomPrintUtil(resultDocument); | |
dpu.setHTML5(isHTML5); | |
dpu.writeToFile(resultFile); | |
} catch (Exception e3) { | |
e3.printStackTrace(); | |
} | |
} catch (Exception e) { | |
setStatusMessage(Messages.Visualization_Error); | |
e.printStackTrace(); | |
return ERROR; | |
} | |
return 0; | |
} | |
public boolean isTarget(IModelService modelService) { | |
return (null != modelService | |
&& modelService.getCurrentMIMEType().startsWith("application/vnd.oasis.opendocument.")); | |
} | |
private void visualizeError(Document resultDoc, List<IProblemItem> problems) { | |
int size = problems.size(); | |
for (int i = 0; i < size; i++) { | |
Object obj = problems.get(i); | |
if (obj instanceof ProblemItemImpl) { | |
ProblemItemImpl prob = (ProblemItemImpl) obj; | |
if (prob.getId().equals("O_" + NO_ALT_IMAGE)) { | |
VisualizeReportUtil.visualizeError(resultDoc, prob); | |
} | |
} | |
} | |
} | |
} |