[323933] WCAG 2.0/JIS support
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
index b6ccc5a..688eca0 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
@@ -258,6 +258,7 @@
case IBlindProblem.WRONG_ALT_INPUT:
case IBlindProblem.SEPARATE_DBCS_ALT_IMG:
case IBlindProblem.SEPARATE_DBCS_ALT_INPUT:
+ case IBlindProblem.WRONG_NBSP_ALT_IMG:
wrong++;
errorCount++;
case IBlindProblem.NO_ALT_AREA: // TODO
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/ImgChecker.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/ImgChecker.java
index 47fe030..c6d50ce 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/ImgChecker.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/ImgChecker.java
@@ -108,6 +108,7 @@
if (info != null) {
isVisible = !info.isInvisible();
}
+ img.removeAttribute("id");
if (imgText.length() > 0 && isVisible) {
spanEl.appendChild(doc.createTextNode(imgText));
@@ -125,7 +126,9 @@
Element areaE = (Element) areaNL.item(i);
BlindProblem prob = null;
Integer idObj = null;
-
+
+ areaEl.setAttribute("id", areaE.getAttribute("id")+"-span");
+
if (!areaE.hasAttribute(ALT)) {
if (areaE.hasAttribute("href")) {
prob = new BlindProblem(IBlindProblem.NO_ALT_AREA,
diff --git a/plugins/org.eclipse.actf.visualization.eval/resources/checkitem.xml b/plugins/org.eclipse.actf.visualization.eval/resources/checkitem.xml
index ba375ce..0c5f828 100644
--- a/plugins/org.eclipse.actf.visualization.eval/resources/checkitem.xml
+++ b/plugins/org.eclipse.actf.visualization.eval/resources/checkitem.xml
@@ -643,10 +643,6 @@
</checkitem>
<checkitem type="warning" id="L_2">
<guideline>
- <gItem id="7.1.4.3" name="JIS"/>
- <gItem id="7.1.4.4" name="JIS"/>
- <gItem id="1.4.3" name="WCAG 2.0"/>
- <gItem id="1.4.4" name="WCAG 2.0"/>
</guideline>
<metrics>
<mItem score="2" name="Perceivable"/>
@@ -709,8 +705,10 @@
</checkitem>
<checkitem type="user" id="L_10">
<guideline>
+ <gItem techniques="F3" id="7.1.1.1" name="JIS"/>
<gItem techniques="F83, G18, G145" id="7.1.4.3" name="JIS"/>
<gItem techniques="F83, G17, G18" id="7.1.4.6" name="JIS"/>
+ <gItem techniques="F3" id="7.1.1.1" name="WCAG 2.0"/>
<gItem techniques="F83, G18, G145" id="1.4.3" name="WCAG 2.0"/>
<gItem techniques="F83, G17, G18" id="1.4.6" name="WCAG 2.0"/>
</guideline>
diff --git a/plugins/org.eclipse.actf.visualization.eval/resources/description.properties b/plugins/org.eclipse.actf.visualization.eval/resources/description.properties
index 579f353..fd1e49f 100644
--- a/plugins/org.eclipse.actf.visualization.eval/resources/description.properties
+++ b/plugins/org.eclipse.actf.visualization.eval/resources/description.properties
@@ -59,4 +59,4 @@
L_4 = Do not use fixed-size font.
L_5 = This text is too small.
L_6 = This text is too small and its font size is fixed.
-L_10 = This area has background image. Please confirm the contrast between text and background.{0}
\ No newline at end of file
+L_10 = This area has background image. Please confirm the contrast between text and background, and confirm important information is not provided only by background image. .{0}
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.eval/resources/description_ja.properties b/plugins/org.eclipse.actf.visualization.eval/resources/description_ja.properties
index c46c589..d162c01 100644
--- a/plugins/org.eclipse.actf.visualization.eval/resources/description_ja.properties
+++ b/plugins/org.eclipse.actf.visualization.eval/resources/description_ja.properties
@@ -10,7 +10,7 @@
###############################################################################
B_0 = \u753b\u50cf\u306balt\u5c5e\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\u3092\u63d0\u4f9b\u3057\u3066\u304f\u3060\u3055\u3044\u3002(\u3082\u3057\u652f\u63f4\u6280\u8853\u304c\u3053\u306e\u753b\u50cf\u3092\u7121\u8996\u3059\u308b\u3079\u304d\u5834\u5408\u306f\u3001 alt="" \u3068\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044)\uff1a src="{0}"
B_1 = \u753b\u50cf\u30dc\u30bf\u30f3\u306balt\u5c5e\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\u3092\u63d0\u4f9b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-B_2 = area\u8981\u7d20\u306balt\u5c5e\u6027\u304c\u6709\u308a\u307e\u305b\u3093\uff1a {0}\u3002\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\u3092\u63d0\u4f9b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+B_2 = area\u8981\u7d20\u306balt\u5c5e\u6027\u304c\u3042\u308a\u307e\u305b\u3093\uff1a {0}\u3002\u4ee3\u66ff\u30c6\u30ad\u30b9\u30c8\u3092\u63d0\u4f9b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
B_4 = "{0}"\u306f\u753b\u50cf\u306ealt\u5c5e\u6027\u3068\u3057\u3066\u4e0d\u9069\u5207\u3067\u3059
B_5 = "{0}"\u306f\u753b\u50cf\u30dc\u30bf\u30f3\u306ealt\u5c5e\u6027\u3068\u3057\u3066\u4e0d\u9069\u5207\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059
B_6 = "{0}"\u306farea\u8981\u7d20\u306ealt\u5c5e\u6027\u3068\u3057\u3066\u4e0d\u9069\u5207\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059
@@ -20,12 +20,12 @@
B_12 = \u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u3082\u3057\u304f\u306f\u898b\u51fa\u3057\uff08h1\u3001h2\u2026\uff09\u3092\u5229\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3000(\u52b9\u679c\u7684\u306a\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u30fb\u898b\u51fa\u3057\u304c\u7121\u3044\u305f\u3081\u3001\u5230\u7740\u306b2\u5206\u4ee5\u4e0a\u304b\u304b\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u3059)
B_14 = \u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af "{0}"\u3000\u306f\u3001\u8aad\u307f\u4e0a\u3052\u53ef\u80fd\u306a\u30c6\u30ad\u30b9\u30c8\u3092\u6301\u305f\u306a\u3044\u305f\u3081\u3001\u97f3\u58f0\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093
B_15 = "{0}"\u3000\u306f\u6587\u5b57\u9593\u306b\u7a7a\u767d\u3092\u542b\u3093\u3067\u3044\u308b\u305f\u3081\u3001\u97f3\u58f0\u3067\u6b63\u78ba\u306b\u8aad\u307f\u4e0a\u3052\u308b\u3053\u3068\u304c\u51fa\u6765\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059
-B_16 = input\u306bid\u5c5e\u6027\u304c\u6709\u308a\u307e\u305b\u3093
+B_16 = input\u306bid\u5c5e\u6027\u304c\u3042\u308a\u307e\u305b\u3093
B_17 = "\u672c\u6587\u3078\u79fb\u52d5"\u306a\u3069\u306e\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u3078\u306e\u5230\u9054\u306b{0}\u79d2\u3082\u304b\u304b\u308a\u307e\u3059\u3000(\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306e\u633f\u5165\u4f4d\u7f6e\u3092\u898b\u76f4\u3057\u3066\u304f\u3060\u3055\u3044)
B_18 = \u3053\u306e\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306f\u30b8\u30e3\u30f3\u30d7\u5148\u306e\u30a2\u30f3\u30ab\u30fc"{0}"\u304c\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u5229\u7528\u3067\u304d\u307e\u305b\u3093
B_19 = \u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306f"\u672c\u6587\u3078\u79fb\u52d5"\u3001"\u672c\u6587\u3078\u306e\u30ea\u30f3\u30af"\u7b49\u3001\u306a\u308b\u3079\u304f\u7c21\u6613\u306a\u30c6\u30ad\u30b9\u30c8\u3092\u7528\u3044\u3066\u4e0b\u3055\u3044\u3000"{0}"\u3000\u306f\u5c11\u3057\u5197\u9577\u3067\u3059
B_20 = "\u672c\u6587\u3078\u79fb\u52d5"\u306a\u3069\u306e\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306e\u63d0\u4f9b\u3092\u691c\u8a0e\u3057\u3066\u4e0b\u3055\u3044
-B_21 = \u3053\u306e\u30da\u30fc\u30b8\u306b\u306f"\u672c\u6587\u3078\u79fb\u52d5"\u306a\u3069\u306e\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306f\u6709\u308a\u307e\u305b\u3093\u304c\u3001\u5404\u30b3\u30f3\u30c6\u30f3\u30c4\u3078\u306e\u5230\u9054\u6642\u9593\u306f\u6700\u5927\u3067\u3082{0}\u79d2\u3067\u3059\u3000(\u5fc5\u8981\u304c\u3042\u308c\u3070\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306e\u63d0\u4f9b\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044)
+B_21 = \u3053\u306e\u30da\u30fc\u30b8\u306b\u306f"\u672c\u6587\u3078\u79fb\u52d5"\u306a\u3069\u306e\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u5404\u30b3\u30f3\u30c6\u30f3\u30c4\u3078\u306e\u5230\u9054\u6642\u9593\u306f\u6700\u5927\u3067\u3082{0}\u79d2\u3067\u3059\u3000(\u5fc5\u8981\u304c\u3042\u308c\u3070\u30b9\u30ad\u30c3\u30d7\u30ea\u30f3\u30af\u306e\u63d0\u4f9b\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044)
B_22 = \u3088\u308a\u591a\u304f\u306e\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u306e\u63d0\u4f9b\u3084\u3001\u898b\u51fa\u3057\u306e\u5229\u7528\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3000(\u65e2\u306b\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u304c\u5229\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u5230\u9054\u306b2\u5206\u4ee5\u4e0a\u5fc5\u8981\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u3059)
B_23 = \u3088\u308a\u591a\u304f\u306e\u898b\u51fa\u3057\u3092\u63d0\u4f9b\u3059\u308b\u304b\u3001\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u306e\u5229\u7528\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3000(\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\u898b\u51fa\u3057\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u5230\u9054\u306b2\u5206\u4ee5\u4e0a\u5fc5\u8981\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u3059)
B_24 = \u3088\u308a\u591a\u304f\u306e\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u30fb\u898b\u51fa\u3057\u306e\u5229\u7528\u3092\u8003\u616e\u3057\u3066\u304f\u3060\u3055\u3044\u3000(\u65e2\u306b\u30da\u30fc\u30b8\u5185\u30ea\u30f3\u30af\u30fb\u898b\u51fa\u3057\u304c\u7528\u3044\u3089\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u5230\u9054\u306b2\u5206\u4ee5\u4e0a\u5fc5\u8981\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u3059)
@@ -59,4 +59,4 @@
L_4 = \u56fa\u5b9a\u30b5\u30a4\u30ba\u306e\u30d5\u30a9\u30f3\u30c8\u306f\u4f7f\u308f\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
L_5 = \u3053\u306e\u6587\u5b57\u306f\u5c0f\u3055\u3059\u304e\u307e\u3059\u3002
L_6 = \u3053\u306e\u6587\u5b57\u306f\u5c0f\u3055\u3059\u304e\u307e\u3059\u3002\u3055\u3089\u306b\u56fa\u5b9a\u30b5\u30a4\u30ba\u306e\u30d5\u30a9\u30f3\u30c8\u304c\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059\u3002
-L_10 = \u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8\u3067\u80cc\u666f\u753b\u50cf\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u6587\u5b57\u8272\u3068\u80cc\u666f\u8272\u306e\u9593\u306e\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u6bd4\u304c\u5341\u5206\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002{0}
\ No newline at end of file
+L_10 = \u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8\u3067\u80cc\u666f\u753b\u50cf\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u6587\u5b57\u8272\u3068\u80cc\u666f\u8272\u306e\u9593\u306e\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\u6bd4\u304c\u5341\u5206\u304b\u3001\u80cc\u666f\u753b\u50cf\u306e\u307f\u306b\u3088\u3063\u3066\u91cd\u8981\u306a\u60c5\u5831\u3092\u4f1d\u3048\u3066\u3044\u306a\u3044\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002{0}
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/EvaluationUtil.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/EvaluationUtil.java
index 048868f..df74293 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/EvaluationUtil.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/EvaluationUtil.java
@@ -31,8 +31,8 @@
*/
public static boolean isOriginalDOM() {
return IPreferenceConstants.CHECKER_ORG_DOM.equals(EvaluationPlugin
- .getDefault().getPluginPreferences().getString(
- IPreferenceConstants.CHECKER_TARGET));
+ .getDefault().getPreferenceStore()
+ .getString(IPreferenceConstants.CHECKER_TARGET));
}
/**
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/ITechniquesItem.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/ITechniquesItem.java
index cd0de87..d16f6ac 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/ITechniquesItem.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/ITechniquesItem.java
@@ -14,14 +14,13 @@
/**
* Interface to hold Techniques item information
*/
-public interface ITechniquesItem {
+public interface ITechniquesItem extends Comparable<ITechniquesItem> {
/**
* @return name of guideline
*/
public abstract String getGuidelineName();
-
/**
* @return ID of Techniques item (e.g., H1, G1, etc.)
*/
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/guideline/GuidelineHolder.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/guideline/GuidelineHolder.java
index 85a9ba1..5f44703 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/guideline/GuidelineHolder.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/guideline/GuidelineHolder.java
@@ -14,20 +14,30 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.actf.util.FileUtils;
import org.eclipse.actf.util.logging.DebugPrintUtil;
import org.eclipse.actf.visualization.eval.ICheckerInfoProvider;
import org.eclipse.actf.visualization.eval.IEvaluationItem;
import org.eclipse.actf.visualization.eval.IGuidelineItem;
+import org.eclipse.actf.visualization.eval.ITechniquesItem;
import org.eclipse.actf.visualization.eval.preferences.ICheckerPreferenceConstants;
+import org.eclipse.actf.visualization.eval.problem.IProblemItem;
+import org.eclipse.actf.visualization.eval.problem.ProblemItemImpl;
+import org.eclipse.actf.visualization.eval.problem.ReportUtil;
import org.eclipse.actf.visualization.internal.eval.CheckerExtension;
import org.eclipse.actf.visualization.internal.eval.EvaluationItemImpl;
import org.eclipse.actf.visualization.internal.eval.EvaluationPlugin;
@@ -84,7 +94,7 @@
private Map<String, IEvaluationItem> checkitemMap = new HashMap<String, IEvaluationItem>();
private String[] metricsNames = new String[0];
-
+
private String[] localizedMetricsNames = new String[0];
private boolean[][] correspondingMetricsOfLeafGuideline;
@@ -105,6 +115,15 @@
private String currentMimeType = "text/html"; //$NON-NLS-1$
+ /**
+ * for debug/print use. Set of TechniquesItems
+ */
+ private SortedSet<ITechniquesItem> techniquesItemSet;
+ /**
+ * for debug/print use. Map from a techniques ID to a Set of ProblemItems
+ */
+ private Map<String, Set<IProblemItem>> techniquesProblemMap;
+
// TODO guideline base -> check item base On/Off
@SuppressWarnings("unchecked")
@@ -198,19 +217,23 @@
localizedMetricsNames = new String[metricsNameSet.size()];
metricsNameSet.toArray(metricsNames);
metricsNameSet.toArray(localizedMetricsNames);
-
- for(int i=0; i<localizedMetricsNames.length;i++){
- if(localizedMetricsNames[i].equalsIgnoreCase("perceivable")){
+
+ for (int i = 0; i < localizedMetricsNames.length; i++) {
+ if (localizedMetricsNames[i]
+ .equalsIgnoreCase("perceivable")) {
localizedMetricsNames[i] = Messages.Perceivable;
- }else if(localizedMetricsNames[i].equalsIgnoreCase("operable")){
+ } else if (localizedMetricsNames[i]
+ .equalsIgnoreCase("operable")) {
localizedMetricsNames[i] = Messages.Operable;
- }else if(localizedMetricsNames[i].equalsIgnoreCase("understandable")){
+ } else if (localizedMetricsNames[i]
+ .equalsIgnoreCase("understandable")) {
localizedMetricsNames[i] = Messages.Understandable;
- }else if(localizedMetricsNames[i].equalsIgnoreCase("robust")){
+ } else if (localizedMetricsNames[i]
+ .equalsIgnoreCase("robust")) {
localizedMetricsNames[i] = Messages.Robust;
}
}
-
+
enabledMetrics = new boolean[metricsNameSet.size()];
Arrays.fill(enabledMetrics, true);
} else {
@@ -221,7 +244,7 @@
}
for (IEvaluationItem tmpItem : checkitemMap.values()) {
- if(tmpItem instanceof EvaluationItemImpl){
+ if (tmpItem instanceof EvaluationItemImpl) {
((EvaluationItemImpl) tmpItem).initMetrics(metricsNames);
}
addGuidelineSelectionChangedListener(tmpItem);
@@ -480,7 +503,6 @@
return localizedMetricsNames;
}
-
private void initGuidelineNameLevel2checkItem() {
for (GuidelineData data : guidelineMaps.values()) {
data.setEvaluationItems(checkitemMap.values(), metricsNames);
@@ -762,4 +784,159 @@
return guidelineNames;
}
+ private class ItemType {
+ boolean error = false;
+ boolean warning = false;
+ boolean user = false;
+ boolean info = false;
+
+ public ItemType(int severity) {
+ setSeverity(severity);
+ }
+
+ public void setSeverity(int severity) {
+ switch (severity) {
+ case IProblemItem.SEV_ERROR:
+ error = true;
+ break;
+ case IProblemItem.SEV_WARNING:
+ warning = true;
+ break;
+ case IProblemItem.SEV_USER:
+ user = true;
+ break;
+ case IProblemItem.SEV_INFO:
+ info = true;
+ break;
+ }
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer tmpSB = new StringBuffer();
+ if (error) {
+ tmpSB.append(Messages.ProblemConst_Essential_2 + " / ");
+ }
+ if (warning) {
+ tmpSB.append(Messages.ProblemConst_Warning + " / ");
+ }
+ if (user) {
+ tmpSB.append(Messages.ProblemConst_User_Check_5 + " / ");
+ }
+ if (info) {
+ tmpSB.append(Messages.ProblemConst_Info + " / ");
+ }
+ if (tmpSB.length() > 3) {
+ tmpSB.setLength(tmpSB.length() - 3);
+ }
+ return tmpSB.toString();
+ }
+ }
+
+ @Override
+ public String toString() {
+ Set<IEvaluationItem> eSet = getMatchedCheckitemSet();
+ ArrayList<IProblemItem> ar = new ArrayList<IProblemItem>();
+ for (IEvaluationItem i : eSet) {
+ ar.add(new ProblemItemImpl(i.getId()));
+ }
+ Map<String, ItemType> itemMap = new HashMap<String, ItemType>();
+ ReportUtil ru = new ReportUtil();
+ ru.setMode(ReportUtil.TAB);
+ StringBuffer tmpSB = new StringBuffer();
+ tmpSB.append("ACTF id\t" + ru.getFirstLine() + FileUtils.LINE_SEP);
+ for (IProblemItem i : ar) {
+ tmpSB.append(i.getId() + "\t" + ru.toString(i) + FileUtils.LINE_SEP);
+ String[] techS = i.getEvaluationItem().getTableDataTechniques()
+ .split(",");
+ for (String s : techS) {
+ String tech = s.trim();
+ ItemType itemType = itemMap.get(tech);
+ if (itemType == null) {
+ itemType = new ItemType(i.getSeverity());
+ itemMap.put(tech, itemType);
+ } else {
+ itemType.setSeverity(i.getSeverity());
+ }
+ }
+ }
+ tmpSB.append(FileUtils.LINE_SEP);
+
+ Set<String> keys = new TreeSet<String>(new Comparator<String>() {
+ public int compare(String o1, String o2) {
+
+ Pattern TECH_ID = Pattern.compile("(\\p{Alpha}+)(\\d+)");
+ Matcher m1 = TECH_ID.matcher(o1);
+ m1.matches();
+ String prefix1 = m1.group(1);
+ int number1 = Integer.parseInt(m1.group(2));
+ Matcher m2 = TECH_ID.matcher(o2);
+ m2.matches();
+ String prefix2 = m2.group(1);
+ int number2 = Integer.parseInt(m2.group(2));
+
+ int flag = prefix1.compareTo(prefix2);
+ if (flag == 0) {
+ flag = new Integer(number1).compareTo(new Integer(number2));
+ }
+ return flag;
+ }
+ });
+
+ keys.addAll(itemMap.keySet());
+
+ for (String key : keys) {
+ tmpSB.append(key + "\t" + itemMap.get(key) + FileUtils.LINE_SEP);
+ }
+
+ return tmpSB.toString();
+ }
+
+ public SortedSet<ITechniquesItem> getTechniquesItemSet() {
+ if (techniquesItemSet == null)
+ createTechSet();
+ return techniquesItemSet;
+ }
+
+ private void createTechSet() {
+ techniquesItemSet = new TreeSet<ITechniquesItem>();
+
+ for (IEvaluationItem i : matchedCheckitemSet) {
+ ProblemItemImpl pitem = new ProblemItemImpl(i.getId());
+ ITechniquesItem[][] techs = pitem.getEvaluationItem()
+ .getTechniques();
+ for (int j = 0; j < techs.length; j++) {
+ for (int j2 = 0; j2 < techs[j].length; j2++) {
+ techniquesItemSet.add(techs[j][j2]);
+ }
+ }
+ }
+ }
+
+ public Map<String, Set<IProblemItem>> getTechProbMap() {
+ if (techniquesProblemMap == null)
+ createTechProbMap();
+ return techniquesProblemMap;
+ }
+
+ private void createTechProbMap() {
+ techniquesProblemMap = new HashMap<String, Set<IProblemItem>>();
+
+ for (IEvaluationItem i : matchedCheckitemSet) {
+ ProblemItemImpl pitem = new ProblemItemImpl(i.getId());
+ ITechniquesItem[][] techs = pitem.getEvaluationItem()
+ .getTechniques();
+ for (int j = 0; j < techs.length; j++) {
+ for (int j2 = 0; j2 < techs[j].length; j2++) {
+ ITechniquesItem tech = techs[j][j2];
+ techniquesItemSet.add(tech);
+ if (!techniquesProblemMap.containsKey(tech.getId())) {
+ techniquesProblemMap.put(tech.getId(),
+ new HashSet<IProblemItem>());
+ }
+ techniquesProblemMap.get(tech.getId()).add(pitem);
+ }
+ }
+ }
+ }
}
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
index 49395c6..fad0191 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
@@ -28,6 +28,7 @@
import org.eclipse.actf.visualization.eval.html.statistics.HeadingsData;
import org.eclipse.actf.visualization.eval.html.statistics.ImageStatData;
import org.eclipse.actf.visualization.eval.html.statistics.PageData;
+import org.eclipse.actf.visualization.eval.problem.IProblemItem;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -171,6 +172,7 @@
private List<Element> accessKeyList;
private List<Element> styleList;
private List<Element> styleElementList;
+ private List<Element> idElementList;
/**
* Constructor of the class.
@@ -779,6 +781,19 @@
}
/**
+ * Get all elements that has id attribute.
+ *
+ * @return
+ */
+ public List<Element> getElementsWithId() {
+ if (idElementList == null) {
+ idElementList = getElementsListByXPath(target, "//*[@id]");
+ }
+ return idElementList;
+ }
+
+
+ /**
* Get all style elements.
*
* @return
@@ -1308,4 +1323,54 @@
public void setLiveFile(File liveFile) {
this.liveFile = liveFile;
}
+
+ /**
+ * Append an error icon to an element in the blind view. If it is already
+ * appended or it failed to append, returns false.
+ *
+ * @param pitem
+ * @param original
+ * @return
+ */
+ public boolean appendErrorIcon(IProblemItem pitem, Element original) {
+ try {
+ String id = document2IdMap.get(original).toString();
+ Element tmpE = resultDoc.getElementById("id" + id);
+ if (tmpE != null && "area".equalsIgnoreCase(tmpE.getTagName())) {
+ tmpE = resultDoc.getElementById("id" + id + "-span");
+ }
+ if (tmpE != null
+ && tmpE.getElementsByTagName("img").getLength() == 0) {
+ Element errorImg = resultDoc.createElement("img");
+ errorImg.setAttribute(ATTR_ALT, "error icon");
+ errorImg.setAttribute(ATTR_SRC, "img/exclawhite21.gif");
+ errorImg.setAttribute(ATTR_TITLE, pitem.getDescription());
+
+ String comment = pitem.getDescription();
+ StringBuffer comment_sb = new StringBuffer();
+ // if (871 == curInfo.getId()) {
+ for (int x = 0; x < comment.length(); x++) {
+ if (comment.charAt(x) == '\"') {
+ comment_sb.append("\\");
+ }
+ if (comment.charAt(x) == '\'') {
+ comment_sb.append('\\');
+ }
+ comment_sb.append(comment.charAt(x));
+ }
+
+ String tmpS = comment_sb.toString().replaceAll("\n", "")
+ .replaceAll("\r", "");
+
+ errorImg.setAttribute("onmouseover", "updateBaloon2(\"id" + id
+ + "\",\"" + tmpS + "\");");
+ tmpE.appendChild(errorImg);
+ return true;
+ } else {
+ return false;
+ }
+ } catch (Exception e) {
+ return false;
+ }
+ }
}
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlTagUtil.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlTagUtil.java
index ee9b10d..9799c13 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlTagUtil.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlTagUtil.java
@@ -243,4 +243,22 @@
}
return result;
}
+
+ public static boolean isTextControl(Element ctrl) {
+ String tagName = ctrl.getTagName().toLowerCase();
+ return (tagName.equals("textarea") || (tagName.equals("input") && ctrl
+ .getAttribute("type").toLowerCase().matches("|text|password")));
+ }
+
+ public static boolean isButtonControl(Element ctrl) {
+ String tagName = ctrl.getTagName().toLowerCase();
+ return ((tagName.equals("button") && ctrl.getAttribute("type")
+ .toLowerCase().matches("submit|reset|button")) || (tagName
+ .equals("input") && ctrl.getAttribute("type").toLowerCase()
+ .matches("submit|reset|button|image")));
+ }
+
+ public static boolean isBlankString(String str) {
+ return str.matches("[\\p{Space}\u3000\u00A0]*");
+ }
}
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
index a26a7e3..f547804 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
@@ -15,8 +15,6 @@
import java.util.Vector;
import org.eclipse.actf.util.FileUtils;
-import org.eclipse.actf.util.xpath.XPathService;
-import org.eclipse.actf.util.xpath.XPathServiceFactory;
import org.eclipse.actf.visualization.eval.html.HtmlTagUtil;
import org.eclipse.actf.visualization.eval.problem.IProblemItem;
import org.eclipse.actf.visualization.eval.problem.ProblemItemImpl;
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ReportUtil.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ReportUtil.java
index fc59fdc..71159bc 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ReportUtil.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/problem/ReportUtil.java
@@ -25,8 +25,12 @@
public class ReportUtil implements IProblemItemVisitor {
+ public static final int CSV = 0;
+ public static final int TAB = 1;
+
public static final String LINE_SEP = FileUtils.LINE_SEP;
private static final String COMMA = ",";
+ private static final String TAB_STRING = "\t";
private static final String DOUBLEQUATE = "\"";
private PrintWriter reportPW;
@@ -43,6 +47,16 @@
private HashMap<IEvaluationItem, String> cacheMap = new HashMap<IEvaluationItem, String>();
+ private int mode = CSV;
+
+ public int getMode() {
+ return mode;
+ }
+
+ private boolean isCSV = true;
+
+ private String separator = COMMA;
+
public ReportUtil() {
enabledMetrics = gh.getEnabledMetrics();
@@ -52,31 +66,46 @@
}
}
+ public void setMode(int mode) {
+ switch (mode) {
+ case CSV:
+ isCSV = true;
+ this.mode = mode;
+ separator = COMMA;
+ break;
+ case TAB:
+ isCSV = false;
+ this.mode = mode;
+ separator = TAB_STRING;
+ break;
+ }
+ }
+
public String getFirstLine() {
StringBuffer tmpSB = new StringBuffer();
- tmpSB.append(prep(IProblemConst.TITLE_TYPE) + COMMA);
+ tmpSB.append(prep(IProblemConst.TITLE_TYPE) + separator);
for (int i = 0; i < metricsNames.length; i++) {
if (enabledMetrics[i]) {
- tmpSB.append(prep(metricsNames[i]) + COMMA);
+ tmpSB.append(prep(metricsNames[i]) + separator);
}
}
for (int i = 0; i < guidelineNames.length; i++) {
if (enabledGuidelines[i]) {
- tmpSB.append(prep(guidelineNames[i]) + COMMA);
+ tmpSB.append(prep(guidelineNames[i]) + separator);
}
}
tmpSB.append(prep(IProblemConst.TITLE_GUIDELINE + "("
+ IProblemConst.TITLE_HELP + ")")
- + COMMA
+ + separator
+ prep(IProblemConst.TITLE_TECHNIQUS)
- + COMMA
+ + separator
+ prep(IProblemConst.TITLE_TECHNIQUS + "("
+ IProblemConst.TITLE_HELP + ")")
- + COMMA
+ + separator
+ prep(IProblemConst.TITLE_LINE)
- + COMMA
+ + separator
+ prep(IProblemConst.TITLE_DESCRIPTION));
return (tmpSB.toString());
@@ -93,11 +122,15 @@
}
private String prep(String target) {
- return (DOUBLEQUATE
- + target.replaceAll(DOUBLEQUATE, DOUBLEQUATE + DOUBLEQUATE) + DOUBLEQUATE);
+ if (isCSV) {
+ return (DOUBLEQUATE
+ + target.replaceAll(DOUBLEQUATE, DOUBLEQUATE + DOUBLEQUATE) + DOUBLEQUATE);
+ }else{
+ return(target.replaceAll(TAB_STRING, " "));
+ }
}
- public String getCSV(IProblemItem item) {
+ public String toString(IProblemItem item) {
if (item == null) {
return "";
}
@@ -106,18 +139,18 @@
String csvStr = cacheMap.get(evalItem);
if (csvStr == null) {
StringBuffer tmpSB = new StringBuffer();
- tmpSB.append(prep(item.getSeverityStr()) + COMMA);
+ tmpSB.append(prep(item.getSeverityStr()) + separator);
int[] metricsValues = evalItem.getMetricsScores();
for (int i = 0; i < metricsValues.length; i++) {
if (enabledMetrics[i]) {
tmpSB.append(prep(Integer.toString(-metricsValues[i]))
- + COMMA);
+ + separator);
}
}
String[] guidelineValues = evalItem.getTableDataGuideline();
for (int i = 0; i < guidelineValues.length; i++) {
if (enabledGuidelines[i]) {
- tmpSB.append(prep(guidelineValues[i]) + COMMA);
+ tmpSB.append(prep(guidelineValues[i]) + separator);
}
}
StringBuffer urlSB = new StringBuffer();
@@ -140,41 +173,41 @@
for (int i = 0; i < guidelines.length; i++) {
IGuidelineItem gItem = guidelines[i];
if (gItem.isEnabled()) {
- urlSB.append(gItem.getUrl() + COMMA + " ");
+ urlSB.append(gItem.getUrl() + separator + " ");
for (ITechniquesItem tech : techniques[i]) {
techSet.add(tech);
}
}
}
for (ITechniquesItem i : techSet) {
- techUrlSB.append(i.getUrl() + COMMA + " ");
+ techUrlSB.append(i.getUrl() + separator + " ");
}
String tmpS = urlSB.toString();
if (tmpS.length() > 2) {
tmpS = tmpS.substring(0, tmpS.length() - 2);
}
- tmpSB.append(prep(tmpS) + COMMA);
+ tmpSB.append(prep(tmpS) + separator);
tmpSB.append(prep(item.getEvaluationItem().getTableDataTechniques())
- + COMMA);
+ + separator);
tmpS = techUrlSB.toString();
if (tmpS.length() > 2) {
tmpS = tmpS.substring(0, tmpS.length() - 2);
}
- tmpSB.append(prep(tmpS) + COMMA);
+ tmpSB.append(prep(tmpS) + separator);
csvStr = tmpSB.toString();
cacheMap.put(evalItem, csvStr);
}
- return (csvStr + prep(item.getLineStrMulti()) + COMMA + prep(item
+ return (csvStr + prep(item.getLineStrMulti()) + separator + prep(item
.getDescription()));
}
public void visit(IProblemItem item) {
if (item != null)
- reportPW.println(getCSV(item));
+ reportPW.println(toString(item));
}
}
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/internal/eval/TechniquesItemImpl.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/internal/eval/TechniquesItemImpl.java
index e323cf2..56e038e 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/internal/eval/TechniquesItemImpl.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/internal/eval/TechniquesItemImpl.java
@@ -10,14 +10,27 @@
*******************************************************************************/
package org.eclipse.actf.visualization.internal.eval;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import org.eclipse.actf.visualization.eval.ITechniquesItem;
public class TechniquesItemImpl implements ITechniquesItem {
+ /**
+ * parse ID such as "SCR24"
+ */
+ private static final Pattern TECH_ID = Pattern
+ .compile("(\\p{Alpha}+)(\\d+)");
+
+ private static final List<String> prefixArray = Arrays.asList("G", "H",
+ "C", "SCR", "SVR", "SM", "T", "ARIA", "FLASH", "F");
private String guideline = "";
private String id = "";
private String url = "";
-
+
public String getGuidelineName() {
return guideline;
}
@@ -30,10 +43,10 @@
return url;
}
- public void setGuidelineName(String guideline){
+ public void setGuidelineName(String guideline) {
this.guideline = guideline;
}
-
+
public void setId(String id) {
this.id = id;
}
@@ -42,5 +55,30 @@
this.url = url;
}
+ public int compareTo(ITechniquesItem o) {
+ Matcher m1 = TECH_ID.matcher(this.getId());
+ m1.matches();
+ String prefix1 = m1.group(1);
+ int number1 = Integer.parseInt(m1.group(2));
+ int i1 = prefixArray.indexOf(prefix1);
+ if (i1 < 0) {
+ System.err.println("Unknown techniques prefix: " + prefix1);
+ i1 = 999;
+ }
+ Matcher m2 = TECH_ID.matcher(o.getId());
+ m2.matches();
+ String prefix2 = m2.group(1);
+ int number2 = Integer.parseInt(m2.group(2));
+ int i2 = prefixArray.indexOf(prefix2);
+ if (i2 < 0) {
+ System.err.println("Unknown techniques prefix: " + prefix2);
+ i2 = 999;
+ }
+ int flag = new Integer(i1).compareTo(new Integer(i2));
+ if (flag == 0) {
+ flag = new Integer(number1).compareTo(new Integer(number2));
+ }
+ return flag;
+ }
}