Index: WebContent/WEB-INF/resources/templates/xhtml10.vm
===================================================================
--- WebContent/WEB-INF/resources/templates/xhtml10.vm	(revision 830:7c16087a0137)
+++ WebContent/WEB-INF/resources/templates/xhtml10.vm	(revision 833:b2d6f0de0404)
@@ -52,51 +52,66 @@
 		#foreach($group in $observation.getGroups()) #if (!$group.hasParent())
 		<div class="section group">
-			<h3 class="title">$group.getTitle()<a class="anchor">a</a></h3>					
+			<h3 class="title"><a class="anchor">a</a>$group.getTitle()</h3>					
 			<div class="block">
 				<p>$group.getDescription()</p>
 				<div class="messages">
-					#set ($messages = $observation.getMessages($group.getName()))
-					#set ($a = true)
-					#foreach($message in $messages)
-					#if ($a)
+					#set ($messages = $observation.getURISortedMessages($group.getName()))
+					#if ($messages.size() > 0)
 					<table>
 						<tbody>
-					#set ($a = false)
-					#end
+						#foreach ($uri in $messages.keySet())
 						#set ($uriCount = $velocityCount)
-						#set ($messageId = "${observationName}_error_${uriCount}_$velocityCount")
-						#set ($contextsCount = $message.getContexts().size())
-						#set ($b = true)
-						#if ($contextsCount == 0)
 							<tr>
-								<td class="linenumber" title=""></td>
-								<td class="colnumber" title=""></td>
-								<td class="codeContext" title=""></td>
-								<td class="error" id="$messageId">
-									<span class="msg">$!esc.html($message.Title)</span>
-									#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
+								<td colspan="4" class="uri" id="${observationName}_${group.Name}_$uriCount">
+								#if ($unicorncall.getInputMethod() == "URI")<span>$uri_token </span><a href="$esc.html($uri)">$esc.html($uri)</a>#end
+								#if ($unicorncall.getInputMethod() == "UPLOAD")<span>$file_token </span>$esc.html($uri)#end
+								#if ($unicorncall.getInputMethod() == "DIRECT")<span>$submitted_file</span>#end
 								</td>
-								<td class="anchor"><a class="smooth" title="$anchor_message" href="#$messageId">a</a></td>
+								<td class="anchor uri"><a class="smooth" title="$anchor_uri" href="#${observationName}_${group.Name}_$uriCount">a</a></td>
 							</tr>
-						#else
-							#foreach($context in $message.getContexts())
-							<tr>
-								<td class="linenumber" title="#if($context.Line)$line_token $context.Line#end">$!context.Line</td>
-								<td class="colnumber" title="#if($context.Column)$column_token $context.Column#end">$!context.Column</td>
-								<td class="codeContext" title="$context_token">$!esc.html($!{context.Context})</td>
-								
-								#if ($b)
-								#set ($b = false)
-								<td class="error" id="$messageId" rowspan="$message.getContexts().size()">
-									<span class="msg">$!esc.html($message.Title)</span>
-									#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
-								</td>
-								<td class="anchor" rowspan="$message.getContexts().size()"><a class="smooth" title="$anchor_message" href="#$messageId">a</a></td>
-								#end
-							</tr>
-							#end								
+							#foreach ($message in $messages.get($uri))
+								#if($message.getType()==2)#set($type="error")#elseif($message.getType()==1)#set($type="warning")#else#set($type="info")#end
+								#set ($messageId = "${observationName}_${group.Name}_${uriCount}_$velocityCount")
+								#set ($contextsCount = $message.getContexts().size())
+								#if ($contextsCount == 0)
+									<tr>
+										<td class="linenumber" title=""></td>
+										<td class="colnumber" title=""></td>
+										<td class="codeContext" title=""></td>
+										<td class="$type level$message.Level" id="$messageId">
+											<span class="msg#if($message.Description && $message.Description != "") desc#end">
+												<span class="$type legend">$type</span>
+												$!esc.html($message.Title)
+											</span>
+											#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
+										</td>
+										<td class="anchor"><a class="smooth" title="$anchor_message" href="#$messageId">a</a></td>
+									</tr>
+								#else
+									#set ($b = true)
+									#foreach($context in $message.getContexts())
+									<tr>
+										<td class="linenumber" title="#if($context.Line)$line_token $context.Line#end">$!context.Line</td>
+										<td class="colnumber" title="#if($context.Column)$column_token $context.Column#end">$!context.Column</td>
+										<td class="codeContext" title="$context_token">
+											#if($context.URI && $context.URI != $uri) <a class="direct_link" href="$context.URI" title="Resource referenced by this context: $context.URI"">link</a> #end
+											$!esc.html($!{context.Context})
+										</td>
+										#if ($b)
+										#set ($b = false)
+										<td class="$type level$message.Level" id="$messageId" rowspan="$message.getContexts().size()">
+											<span class="msg#if($message.Description && $message.Description != "") desc#end">
+												<span class="$type legend">$type</span>
+												$!esc.html($message.Title)
+											</span>
+											#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
+										</td>
+										<td class="anchor" rowspan="$message.getContexts().size()"><a class="smooth" title="$anchor_message" href="#$messageId">a</a></td>
+										#end
+									</tr>
+									#end								
+								#end
+							#end
 						#end
-					#end
-					#if (!$a)
 						</tbody>
 					</table>
@@ -106,54 +121,69 @@
 				#foreach($group in $observation.getGroupChildren($group))
 				<div class="section group">
-					<h3 class="title">$group.getTitle()<a class="anchor">a</a></h3>
+					<h3 class="title"><a class="anchor">a</a>$group.getTitle()</h3>
 					<div class="block">
 						<p>$group.getDescription()</p>
 						<div class="messages">
-						#set ($messages = $observation.getMessages($group.getName()))
-						#set ($a = true)
-						#foreach($message in $messages)
-						#if ($a)
-						<table>
-							<tbody>
-						#set ($a = false)
-						#end
-							#set ($uriCount = $velocityCount)
-							#set ($messageId = "${observationName}_error_${uriCount}_$velocityCount")
-							#set ($contextsCount = $message.getContexts().size())
-							#set ($b = true)
-							#if ($contextsCount == 0)
-								<tr>
-									<td class="linenumber" title=""></td>
-									<td class="colnumber" title=""></td>
-									<td class="codeContext" title=""></td>
-									<td class="error" id="$messageId">
-										<span class="msg">$!esc.html($message.Title)</span>
-										#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
-									</td>
-									<td class="anchor"><a class="smooth" title="$anchor_message" href="#$messageId">a</a></td>
-								</tr>
-							#else
-								#foreach($context in $message.getContexts())
-								<tr>
-									<td class="linenumber" title="#if($context.Line)$line_token $context.Line#end">$!context.Line</td>
-									<td class="colnumber" title="#if($context.Column)$column_token $context.Column#end">$!context.Column</td>
-									<td class="codeContext" title="$context_token">$!esc.html($!{context.Context})</td>
-									
-									#if ($b)
-									#set ($b = false)
-									<td class="error" id="$messageId" rowspan="$message.getContexts().size()">
-										<span class="msg">$!esc.html($message.Title)</span>
-										#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
-									</td>
-									<td class="anchor" rowspan="$message.getContexts().size()"><a class="smooth" title="$anchor_message" href="#$messageId">a</a></td>
+							#set ($messages = $observation.getURISortedMessages($group.getName()))
+							#if ($messages.size() > 0)
+							<table>
+								<tbody>
+								#foreach ($uri in $messages.keySet())
+								#set ($uriCount = $velocityCount)
+									<tr>
+										<td colspan="4" class="uri" id="${observationName}_${group.Name}_$uriCount">
+										#if ($unicorncall.getInputMethod() == "URI")<span>$uri_token </span><a href="$esc.html($uri)">$esc.html($uri)</a>#end
+										#if ($unicorncall.getInputMethod() == "UPLOAD")<span>$file_token </span>$esc.html($uri)#end
+										#if ($unicorncall.getInputMethod() == "DIRECT")<span>$submitted_file</span>#end
+										</td>
+										<td class="anchor uri"><a class="smooth" title="$anchor_uri" href="#${observationName}_${group.Name}_$uriCount">a</a></td>
+									</tr>
+									#foreach ($message in $messages.get($uri))
+										#if($message.getType()==2)#set($type="error")#elseif($message.getType()==1)#set($type="warning")#else#set($type="info")#end
+										#set ($messageId = "${observationName}_${group.Name}_${uriCount}_$velocityCount")
+										#set ($contextsCount = $message.getContexts().size())
+										#if ($contextsCount == 0)
+											<tr>
+												<td class="linenumber" title=""></td>
+												<td class="colnumber" title=""></td>
+												<td class="codeContext" title=""></td>
+												<td class="$type level$message.Level" id="$messageId">
+													<span class="msg#if($message.Description && $message.Description != "") desc#end">
+														<span class="$type legend">$type</span>
+														$!esc.html($message.Title)
+													</span>
+													#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
+												</td>
+												<td class="anchor"><a class="smooth" title="$anchor_message" href="#$messageId">a</a></td>
+											</tr>
+										#else
+											#set ($b = true)
+											#foreach($context in $message.getContexts())
+											<tr>
+												<td class="linenumber" title="#if($context.Line)$line_token $context.Line#end">$!context.Line</td>
+												<td class="colnumber" title="#if($context.Column)$column_token $context.Column#end">$!context.Column</td>
+												<td class="codeContext" title="$context_token">											
+													#if($context.URI && $context.URI != $uri) <a class="direct_link" href="$context.URI" title="Resource referenced by this context: $context.URI">link</a> #end
+													$!esc.html($!{context.Context})
+												</td>
+												#if ($b)
+												#set ($b = false)
+												<td class="$type level$message.Level" id="$messageId" rowspan="$message.getContexts().size()">
+													<span class="msg#if($message.Description && $message.Description != "") desc#end">
+														<span class="$type legend">$type</span>
+														$!esc.html($message.Title)
+													</span>
+													#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
+												</td>
+												<td class="anchor" rowspan="$message.getContexts().size()"><a class="smooth" title="$anchor_message" href="#$messageId">a</a></td>
+												#end
+											</tr>
+											#end								
+										#end
 									#end
-								</tr>
-								#end								
-							#end
-						#end
-						#if (!$a)
-							</tbody>
-						</table>
-						#end
+								#end
+								</tbody>
+							</table>
+							#end
 						</div>
 					</div>
@@ -195,5 +225,5 @@
 										<td class="colnumber" title=""></td>
 										<td class="codeContext" title=""></td>
-										<td class="info" id="$messageId">
+										<td class="info level$message.Level" id="$messageId">
 											<span class="msg">$!esc.html($message.Title)</span>
 											#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
@@ -210,5 +240,5 @@
 										#if ($b)
 										#set ($b = false)
-										<td class="info" id="$messageId" rowspan="$message.getContexts().size()">
+										<td class="info level$message.Level" id="$messageId" rowspan="$message.getContexts().size()">
 											<span class="msg">$!esc.html($message.Title)</span>
 											#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
@@ -256,5 +286,5 @@
 										<td class="colnumber" title=""></td>
 										<td class="codeContext" title=""></td>
-										<td class="error" id="$messageId">
+										<td class="error level$message.Level" id="$messageId">
 											<span class="msg">$!esc.html($message.Title)</span>
 											#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
@@ -271,5 +301,5 @@
 										#if ($b)
 										#set ($b = false)
-										<td class="error" id="$messageId" rowspan="$message.getContexts().size()">
+										<td class="error level$message.Level" id="$messageId" rowspan="$message.getContexts().size()">
 											<span class="msg">$!esc.html($message.Title)</span>
 											#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
@@ -317,5 +347,5 @@
 										<td class="colnumber" title=""></td>
 										<td class="codeContext" title=""></td>
-										<td class="warning" id="$messageId">
+										<td class="warning level$message.Level" id="$messageId">
 											<span class="msg">$!esc.html($message.Title)</span>
 											#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
@@ -332,5 +362,5 @@
 										#if ($b)
 										#set ($b = false)
-										<td class="warning" id="$messageId" rowspan="$message.getContexts().size()">
+										<td class="warning level$message.Level" id="$messageId" rowspan="$message.getContexts().size()">
 											<span class="msg">$!esc.html($message.Title)</span>
 											#if($message.Description && $message.Description != "")<div class="description">$!message.Description</div>#end
