[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; + } }