Use a template to set the contents of the CommentEmails.

Add an admin editable Comment.vm template used to format the
contents of the comment emails.

Change-Id: Ic8e9cf6c3b60ae0c4a0e8a05537cf308a40ee694
diff --git a/Documentation/config-mail.txt b/Documentation/config-mail.txt
index 5d38ed7..3a133d3 100644
--- a/Documentation/config-mail.txt
+++ b/Documentation/config-mail.txt
@@ -37,6 +37,12 @@
 The `ChangeSubject.vm` template will determine the contents of the email
 subject line for ALL emails related to changes.
 
+Comment.vm
+~~~~~~~~~~
+
+The `Comment.vm` template will determine the contents of the email related to
+a user submitting comments on changes.  It is a `ChangeEmail`: see
+
 Merged.vm
 ~~~~~~~~~
 
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java
index 44fd88a..87377e0 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java
@@ -87,6 +87,7 @@
 
     extractMailExample("ChangeFooter.vm");
     extractMailExample("ChangeSubject.vm");
+    extractMailExample("Comment.vm");
     extractMailExample("Merged.vm");
 
     if (!ui.isBatch()) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
index 3c78e17..acfb55b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
@@ -174,7 +174,7 @@
   }
 
   /** Get a link to the change; null if the server doesn't know its own address. */
-  protected String getChangeUrl() {
+  public String getChangeUrl() {
     if (change != null && getGerritUrl() != null) {
       final StringBuilder r = new StringBuilder();
       r.append(getGerritUrl());
@@ -208,7 +208,7 @@
   }
 
   /** Get the text of the "cover letter", from {@link ChangeMessage}. */
-  protected String getCoverLetter() {
+  public String getCoverLetter() {
     if (changeMessage != null) {
       final String txt = changeMessage.getMessage();
       if (txt != null) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
index 8783d7c..d3c3b7a 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/CommentSender.java
@@ -66,19 +66,12 @@
 
   @Override
   protected void formatChange() throws EmailException {
-    if (!"".equals(getCoverLetter()) || !inlineComments.isEmpty()) {
-      appendText("Comments on Patch Set " + patchSet.getPatchSetId() + ":\n");
-      appendText("\n");
-      formatCoverLetter();
-      formatInlineComments();
-      if (getChangeUrl() != null) {
-        appendText("To respond, visit " + getChangeUrl() + "\n");
-        appendText("\n");
-      }
-    }
+    appendText(velocifyFile("Comment.vm"));
   }
 
-  private void formatInlineComments() {
+  public String getInlineComments() {
+    StringBuilder  cmts = new StringBuilder();
+
     final Repository repo = getRepository();
     try {
       final PatchList patchList = repo != null ? getPatchList() : null;
@@ -91,10 +84,10 @@
         final short side = c.getSide();
 
         if (!pk.equals(currentFileKey)) {
-          appendText("....................................................\n");
-          appendText("File ");
-          appendText(pk.get());
-          appendText("\n");
+          cmts.append("....................................................\n");
+          cmts.append("File ");
+          cmts.append(pk.get());
+          cmts.append("\n");
           currentFileKey = pk;
 
           if (patchList != null) {
@@ -109,26 +102,27 @@
           }
         }
 
-        appendText("Line " + lineNbr);
+        cmts.append("Line " + lineNbr);
         if (currentFileData != null) {
           try {
             final String lineStr = currentFileData.getLine(side, lineNbr);
-            appendText(": ");
-            appendText(lineStr);
+            cmts.append(": ");
+            cmts.append(lineStr);
           } catch (Throwable cce) {
             // Don't quote the line if we can't safely convert it.
           }
         }
-        appendText("\n");
+        cmts.append("\n");
 
-        appendText(c.getMessage().trim());
-        appendText("\n\n");
+        cmts.append(c.getMessage().trim());
+        cmts.append("\n\n");
       }
     } finally {
       if (repo != null) {
         repo.close();
       }
     }
+    return cmts.toString();
   }
 
   private Repository getRepository() {
diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/Comment.vm b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/Comment.vm
new file mode 100644
index 0000000..b7ba89e
--- /dev/null
+++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/Comment.vm
@@ -0,0 +1,47 @@
+## Copyright (C) 2010 The Android Open Source Project
+##
+## Licensed under the Apache License, Version 2.0 (the "License");
+## you may not use this file except in compliance with the License.
+## You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+##
+##
+## Template Type:
+## -------------
+## This is a velocity mail template, see: http://velocity.apache.org and the
+## gerrit-docs:config-mail.txt for more info on modifying gerrit mail templates.
+##
+## Template File Names and extensions:
+## ----------------------------------
+## Gerrit will use templates ending in ".vm" but will ignore templates ending
+## in ".vm.example".  If a .vm template does not exist, the default internal
+## gerrit template which is the same as the .vm.example will be used.  If you
+## want to override the default template, copy the .vm.exmaple file to a .vm
+## file and edit it appropriately.
+##
+## This Template:
+## --------------
+## The Comment.vm template will determine the contents of the email related to
+## a user submitting comments on changes.  It is a ChangeEmail: see
+## ChangeSubject.vm and ChangeFooter.vm.
+##
+#if ($email.coverLetter || $email.inlineComments)
+Comments on Patch Set $patchSet.patchSetId:
+
+#if ($email.coverLetter)
+$email.coverLetter
+
+#end
+#if($email.inlineComments)$email.inlineComments#end
+#if ($email.changeUrl)
+To respond, visit $email.changeUrl
+
+#end
+#end