Revision: 18290
          http://sourceforge.net/p/gate/code/18290
Author:   ian_roberts
Date:     2014-09-04 12:14:12 +0000 (Thu, 04 Sep 2014)
Log Message:
-----------
Added the option for a free-text "comment" field on each unit, allowing 
annotators to feed back arbitrary comments with each judgment (e.g. why they 
chose not to annotate anything, or the classification they think is correct if 
they've had to choose "none of the above").

Modified Paths:
--------------
    
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/EntityClassificationResultsImporter.java
    
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/NewClassificationJobAction.java
    
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/newClassificationJobForm.xml
    
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/EntityAnnotationResultsImporter.java
    
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/NewAnnotationJobAction.java
    
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/newAnnotationJobForm.xml
    
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/rest/CrowdFlowerClient.java

Modified: 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/EntityClassificationResultsImporter.java
===================================================================
--- 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/EntityClassificationResultsImporter.java
      2014-09-04 01:19:45 UTC (rev 18289)
+++ 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/EntityClassificationResultsImporter.java
      2014-09-04 12:14:12 UTC (rev 18290)
@@ -159,9 +159,8 @@
           if(judgments != null) {
             for(JsonElement judgmentElt : judgments) {
               JsonObject judgment = judgmentElt.getAsJsonObject();
-              String answer =
-                      judgment.getAsJsonObject("data").get("answer")
-                              .getAsString();
+              JsonObject data = judgment.getAsJsonObject("data");
+              String answer = data.get("answer").getAsString();
               long judgmentId = judgment.get("id").getAsLong();
               double trust = judgment.get("trust").getAsDouble();
               long workerId = judgment.get("worker_id").getAsLong();
@@ -172,6 +171,14 @@
               judgmentAnn.getFeatures().put("trust", Double.valueOf(trust));
               judgmentAnn.getFeatures()
                       .put("worker_id", Long.valueOf(workerId));
+              if(data.get("comment") != null) {
+                if(data.get("comment").isJsonPrimitive()) {
+                  String comment = data.get("comment").getAsString().trim();
+                  if(comment.length() > 0) {
+                    judgmentAnn.getFeatures().put("comment", comment);
+                  }
+                }
+              }
             }
           } else {
             log.warn("Unit " + unitId + " has no judgments");

Modified: 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/NewClassificationJobAction.java
===================================================================
--- 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/NewClassificationJobAction.java
       2014-09-04 01:19:45 UTC (rev 18289)
+++ 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/NewClassificationJobAction.java
       2014-09-04 12:14:12 UTC (rev 18290)
@@ -28,13 +28,17 @@
 
 import javax.swing.AbstractAction;
 import javax.swing.AbstractButton;
+import javax.swing.JCheckBox;
 import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JTable;
+import javax.swing.JTextField;
 import javax.swing.ListSelectionModel;
 import javax.swing.SwingUtilities;
 import javax.swing.WindowConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 import javax.swing.table.DefaultTableModel;
 
 import com.jeta.forms.components.panel.FormPanel;
@@ -68,7 +72,9 @@
       
       panel.setPreferredSize(new Dimension(500, 400));
       
-      // attach listeners etc.
+      initListeners(panel);
+
+      // put the panel in a JOptionPane
       final JTable commonOptionsTable = panel.getTable("commonOptions");
       final DefaultTableModel optionsTableModel = new DefaultTableModel(
               new String[][] {
@@ -173,7 +179,10 @@
                                 panel.getTextField("title").getText().trim(),
                                 
panel.getTextComponent("instructions").getText(),
                                 panel.getTextField("caption").getText().trim(),
-                                commonOptions));
+                                commonOptions,
+                                
panel.getCheckBox("commentCheckbox").isSelected()
+                                  ? 
panel.getTextField("commentCaption").getText().trim()
+                                  : null));
                         // if the creation was successful we can dispose the 
dialog
                         SwingUtilities.invokeLater(new Runnable() {
                           public void run() {
@@ -226,8 +235,28 @@
       statusLabel.setText("<html><p>A caption is required</p></html>");
       statusLabel.setIcon(MainFrame.getIcon("Invalid"));
       valid = false;
+    } else if(panel.getCheckBox("commentCheckbox").isSelected()
+            && 
"".equals(panel.getTextField("commentCaption").getText().trim())) {
+      statusLabel.setText("<html><p>A caption for the \"comment\" field is 
required</p></html>");
+      statusLabel.setIcon(MainFrame.getIcon("Invalid"));
+      valid = false;      
     }
     return valid;
   }
+  
+  protected void initListeners(FormPanel panel) {
+    final JLabel commentLabel = panel.getLabel("commentCaptionLabel");
+    final JTextField commentField = panel.getTextField("commentCaption");
+    final JCheckBox commentCheckbox = panel.getCheckBox("commentCheckbox");
+    commentCheckbox.addChangeListener(new ChangeListener() {
+      
+      @Override
+      public void stateChanged(ChangeEvent e) {
+        commentLabel.setEnabled(commentCheckbox.isSelected());
+        commentField.setEnabled(commentCheckbox.isSelected());
+      }
+    });
+  }
 
+
 }

Modified: 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/newClassificationJobForm.xml
===================================================================
--- 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/newClassificationJobForm.xml
  2014-09-04 01:19:45 UTC (rev 18289)
+++ 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/newClassificationJobForm.xml
  2014-09-04 12:14:12 UTC (rev 18290)
@@ -24,8 +24,8 @@
     </at>
     <at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
    </super>
-   <at 
name="id">/Users/ian/svn/gate-extras/crowd-flower-tools/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/newClassificationJobForm.xml</at>
-   <at 
name="rowspecs">TOP:30DLU:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:MIN(90DLU;DEFAULT):GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:MIN(90DLU;DEFAULT):GROW(1.0),CENTER:2DLU:NONE</at>
+   <at 
name="id">/Users/ian/svn/gate/plugins/Crowd_Sourcing/src/gate/crowdsource/classification/newClassificationJobForm.xml</at>
+   <at 
name="rowspecs">TOP:30DLU:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:MIN(90DLU;DEFAULT):GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:MIN(90DLU;DEFAULT):GROW(1.0),CENTER:2DLU:NONE</at>
    <at 
name="colspecs">FILL:4DLU:NONE,LEFT:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MIN(75DLU;DEFAULT):GROW(1.0),FILL:DEFAULT:NONE,FILL:4DLU:NONE</at>
    <at name="components">
     <object classname="java.util.LinkedList">
@@ -39,7 +39,7 @@
            <at name="row">3</at>
            <at name="colspan">1</at>
            <at name="rowspan">1</at>
-           <at name="halign">default</at>
+           <at name="halign">right</at>
            <at name="valign">default</at>
            <at name="insets" object="insets">0,0,0,0</at>
           </object>
@@ -55,8 +55,8 @@
            <object classname="com.jeta.forms.store.support.PropertyMap">
             <at name="text">Job title</at>
             <at name="height">16</at>
+            <at name="name"/>
             <at name="width">49</at>
-            <at name="name"></at>
             <at name="fill">
              <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
               <at name="name">fill</at>
@@ -114,7 +114,7 @@
           <at name="properties">
            <object classname="com.jeta.forms.store.support.PropertyMap">
             <at name="height">28</at>
-            <at name="width">679</at>
+            <at name="width">594</at>
             <at name="name">title</at>
             <at name="toolTipText">The title of the CrowdFlower job.</at>
             <at name="border">
@@ -151,7 +151,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">2</at>
-           <at name="row">7</at>
+           <at name="row">11</at>
            <at name="colspan">4</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -170,8 +170,8 @@
            <object classname="com.jeta.forms.store.support.PropertyMap">
             <at name="text">Instructions</at>
             <at name="height">16</at>
+            <at name="name"/>
             <at name="width">772</at>
-            <at name="name"></at>
             <at name="fill">
              <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
               <at name="name">fill</at>
@@ -211,7 +211,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">2</at>
-           <at name="row">9</at>
+           <at name="row">13</at>
            <at name="colspan">4</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -288,6 +288,7 @@
               </at>
              </object>
             </at>
+            <at name="y">-38</at>
            </object>
           </at>
          </object>
@@ -302,7 +303,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">2</at>
-           <at name="row">11</at>
+           <at name="row">15</at>
            <at name="colspan">4</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -362,7 +363,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">2</at>
-           <at name="row">13</at>
+           <at name="row">17</at>
            <at name="colspan">3</at>
            <at name="rowspan">9</at>
            <at name="halign">default</at>
@@ -506,7 +507,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">5</at>
-           <at name="row">13</at>
+           <at name="row">17</at>
            <at name="colspan">1</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -561,7 +562,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">5</at>
-           <at name="row">15</at>
+           <at name="row">19</at>
            <at name="colspan">1</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -616,7 +617,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">5</at>
-           <at name="row">17</at>
+           <at name="row">21</at>
            <at name="colspan">1</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -671,7 +672,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">5</at>
-           <at name="row">19</at>
+           <at name="row">23</at>
            <at name="colspan">1</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -729,7 +730,7 @@
            <at name="row">5</at>
            <at name="colspan">1</at>
            <at name="rowspan">1</at>
-           <at name="halign">default</at>
+           <at name="halign">right</at>
            <at name="valign">default</at>
            <at name="insets" object="insets">0,0,0,0</at>
           </object>
@@ -745,8 +746,8 @@
            <object classname="com.jeta.forms.store.support.PropertyMap">
             <at name="text">Task caption</at>
             <at name="height">16</at>
+            <at name="name"/>
             <at name="width">81</at>
-            <at name="name"></at>
             <at name="fill">
              <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
               <at name="name">fill</at>
@@ -803,10 +804,12 @@
           <at name="classname">javax.swing.JTextField</at>
           <at name="properties">
            <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="selectionEnd">51</at>
             <at name="text">Which of the following describes 
&quot;{{entity}}&quot; best?</at>
             <at name="height">28</at>
-            <at name="width">679</at>
+            <at name="width">594</at>
             <at name="name">caption</at>
+            <at name="selectionStart">51</at>
             <at name="toolTipText">&lt;html&gt;&lt;p&gt;The question that will 
be presented to the user.&lt;/p&gt;&lt;p&gt;The caption may contain a 
placeholder {{entity}}, which will be replaced by the text of the entity that 
is the target of the current task.&lt;/p&gt;&lt;/html&gt;</at>
             <at name="border">
              <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
@@ -835,6 +838,238 @@
        </object>
       </at>
      </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">7</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">right</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at 
name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">Allow free-text comment</at>
+            <at name="height">16</at>
+            <at name="width">159</at>
+            <at name="name">commentCheckboxLabel</at>
+            <at name="fill">
+             <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object 
classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">9</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">right</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at 
name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">Caption for comment field</at>
+            <at name="height">16</at>
+            <at name="width">166</at>
+            <at name="name">commentCaptionLabel</at>
+            <at name="fill">
+             <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object 
classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">4</at>
+           <at name="row">7</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at 
name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JCheckBox</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JCheckBox</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="selected">true</at>
+            <at name="height">20</at>
+            <at name="width">515</at>
+            <at name="name">commentCheckbox</at>
+            <at name="border">
+             <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object 
classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">4</at>
+           <at name="row">9</at>
+           <at name="colspan">2</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at 
name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTextField</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTextField</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="selectionEnd">7</at>
+            <at name="text">Comment</at>
+            <at name="height">28</at>
+            <at name="width">594</at>
+            <at name="name">commentCaption</at>
+            <at name="selectionStart">7</at>
+            <at name="border">
+             <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object 
classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
     </object>
    </at>
    <at name="properties">
@@ -892,7 +1127,7 @@
    <at name="cellpainters">
     <object classname="com.jeta.forms.store.support.Matrix">
      <at name="rows">
-      <object classname="[Ljava.lang.Object;" size="22">
+      <object classname="[Ljava.lang.Object;" size="26">
        <at name="item" index="0">
         <object classname="[Ljava.lang.Object;" size="6"/>
        </at>
@@ -959,6 +1194,18 @@
        <at name="item" index="21">
         <object classname="[Ljava.lang.Object;" size="6"/>
        </at>
+       <at name="item" index="22">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </at>
+       <at name="item" index="23">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </at>
+       <at name="item" index="24">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </at>
+       <at name="item" index="25">
+        <object classname="[Ljava.lang.Object;" size="6"/>
+       </at>
       </object>
      </at>
     </object>

Modified: 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/EntityAnnotationResultsImporter.java
===================================================================
--- 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/EntityAnnotationResultsImporter.java
      2014-09-04 01:19:45 UTC (rev 18289)
+++ 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/EntityAnnotationResultsImporter.java
      2014-09-04 12:14:12 UTC (rev 18290)
@@ -25,6 +25,7 @@
 
 import gate.Annotation;
 import gate.AnnotationSet;
+import gate.FeatureMap;
 import gate.Resource;
 import gate.Utils;
 import gate.creole.AbstractLanguageAnalyser;
@@ -202,12 +203,20 @@
           if(judgments != null) {
             for(JsonElement judgmentElt : judgments) {
               JsonObject judgment = judgmentElt.getAsJsonObject();
-              JsonArray answer =
-                      judgment.getAsJsonObject("data").get("answer")
-                              .getAsJsonArray();
+              JsonObject data = judgment.getAsJsonObject("data");
+              JsonArray answer = data.get("answer").getAsJsonArray();
               Long judgmentId = judgment.get("id").getAsLong();
               Double trust = judgment.get("trust").getAsDouble();
               Long workerId = judgment.get("worker_id").getAsLong();
+              String comment = null;
+              if(data.get("comment") != null) {
+                if(data.get("comment").isJsonPrimitive()) {
+                  comment = data.get("comment").getAsString().trim();
+                  if("".equals(comment)) {
+                    comment = null;
+                  }
+                }
+              }
               if(answer.size() > 0) {
                 // judgment says there are some entities to annotate.  Look for
                 // sequences of consecutive token indices and create one result
@@ -235,10 +244,14 @@
                     if(!found) {
                       // no existing annotation found, create one
                       try {
-                        resultAS.add(startOffset, endOffset, 
resultAnnotationType, Utils.featureMap(
+                        FeatureMap features = Utils.featureMap(
                                 JUDGMENT_ID_FEATURE_NAME, judgmentId,
                                 "trust", trust,
-                                "worker_id", workerId));
+                                "worker_id", workerId);
+                        if(comment != null) {
+                          features.put("comment", comment);
+                        }
+                        resultAS.add(startOffset, endOffset, 
resultAnnotationType, features);
                       } catch(InvalidOffsetException e) {
                         throw new ExecutionException("Invalid offset obtained 
from existing annotation!", e);
                       }

Modified: 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/NewAnnotationJobAction.java
===================================================================
--- 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/NewAnnotationJobAction.java
       2014-09-04 01:19:45 UTC (rev 18289)
+++ 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/NewAnnotationJobAction.java
       2014-09-04 12:14:12 UTC (rev 18290)
@@ -25,11 +25,15 @@
 import java.io.InputStream;
 
 import javax.swing.AbstractAction;
+import javax.swing.JCheckBox;
 import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
+import javax.swing.JTextField;
 import javax.swing.SwingUtilities;
 import javax.swing.WindowConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
 import com.jeta.forms.components.panel.FormPanel;
 
@@ -62,7 +66,9 @@
       
       panel.setPreferredSize(new Dimension(500, 400));
       
-      // attach listeners etc.
+      initListeners(panel);
+      
+      // wrap panel in a JOptionPane.
       final JOptionPane optionPane = new JOptionPane(panel, 
JOptionPane.PLAIN_MESSAGE,
               JOptionPane.OK_CANCEL_OPTION);
       final JDialog dialog  = new JDialog(MainFrame.getInstance(), "New 
annotation job", true);
@@ -103,7 +109,11 @@
                                 
panel.getTextComponent("instructions").getText(),
                                 panel.getTextField("caption").getText().trim(),
                                 
panel.getTextField("noEntitiesCaption").getText().trim(),
-                                
panel.getTextField("noEntitiesError").getText().trim()));
+                                
panel.getTextField("noEntitiesError").getText().trim(),
+                                
panel.getCheckBox("commentCheckbox").isSelected()
+                                        ? 
panel.getTextField("commentCaption").getText().trim()
+                                        : null));
+                        
                         // if the creation was successful we can dispose the 
dialog
                         SwingUtilities.invokeLater(new Runnable() {
                           public void run() {
@@ -164,8 +174,27 @@
       statusLabel.setText("<html><p>An error message for the \"no entities\" 
checkbox is required</p></html>");
       statusLabel.setIcon(MainFrame.getIcon("Invalid"));
       valid = false;
+    } else if(panel.getCheckBox("commentCheckbox").isSelected()
+            && 
"".equals(panel.getTextField("commentCaption").getText().trim())) {
+      statusLabel.setText("<html><p>A caption for the \"comment\" field is 
required</p></html>");
+      statusLabel.setIcon(MainFrame.getIcon("Invalid"));
+      valid = false;      
     }
     return valid;
   }
-
+  
+  protected void initListeners(FormPanel panel) {
+    final JLabel commentLabel = panel.getLabel("commentCaptionLabel");
+    final JTextField commentField = panel.getTextField("commentCaption");
+    final JCheckBox commentCheckbox = panel.getCheckBox("commentCheckbox");
+    commentCheckbox.addChangeListener(new ChangeListener() {
+      
+      @Override
+      public void stateChanged(ChangeEvent e) {
+        commentLabel.setEnabled(commentCheckbox.isSelected());
+        commentField.setEnabled(commentCheckbox.isSelected());
+      }
+    });
+  }
+  
 }

Modified: 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/newAnnotationJobForm.xml
===================================================================
--- 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/newAnnotationJobForm.xml
  2014-09-04 01:19:45 UTC (rev 18289)
+++ 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/newAnnotationJobForm.xml
  2014-09-04 12:14:12 UTC (rev 18290)
@@ -24,8 +24,8 @@
     </at>
     <at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
    </super>
-   <at 
name="id">/Users/ian/svn/gate-extras/crowd-flower-tools/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/newAnnotationJobForm.xml</at>
-   <at 
name="rowspecs">TOP:30DLU:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:MIN(90DLU;DEFAULT):GROW(1.0),CENTER:2DLU:NONE</at>
+   <at 
name="id">/Users/ian/svn/gate/plugins/Crowd_Sourcing/src/gate/crowdsource/ne/newAnnotationJobForm.xml</at>
+   <at 
name="rowspecs">TOP:30DLU:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:MIN(90DLU;DEFAULT):GROW(1.0),CENTER:2DLU:NONE</at>
    <at 
name="colspecs">FILL:4DLU:NONE,LEFT:DEFAULT:NONE,FILL:4DLU:NONE,FILL:MIN(75DLU;DEFAULT):GROW(1.0),FILL:4DLU:NONE</at>
    <at name="components">
     <object classname="java.util.LinkedList">
@@ -56,8 +56,8 @@
             <at name="horizontalAlignment">11</at>
             <at name="text">Job title</at>
             <at name="height">16</at>
-            <at name="name"/>
             <at name="width">49</at>
+            <at name="name">titleLabel</at>
             <at name="horizontalTextPosition">10</at>
             <at name="fill">
              <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
@@ -153,7 +153,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">2</at>
-           <at name="row">11</at>
+           <at name="row">15</at>
            <at name="colspan">3</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -172,8 +172,8 @@
            <object classname="com.jeta.forms.store.support.PropertyMap">
             <at name="text">Instructions</at>
             <at name="height">16</at>
-            <at name="name"/>
             <at name="width">772</at>
+            <at name="name">instructionsLabel</at>
             <at name="fill">
              <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
               <at name="name">fill</at>
@@ -213,7 +213,7 @@
          <at name="cellconstraints">
           <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
            <at name="column">2</at>
-           <at name="row">13</at>
+           <at name="row">17</at>
            <at name="colspan">3</at>
            <at name="rowspan">1</at>
            <at name="halign">default</at>
@@ -234,7 +234,7 @@
             <at name="text">&lt;p&gt;For this task you need to indicate 
whether each snippet of text contains any mentions of person names, and if so 
which words these are. Click on words to highlight them, and your task is to 
highlight all the words that form part of a person name.&lt;/p&gt;
 &lt;p&gt;If there are &lt;i&gt;no&lt;/i&gt; person names within the snippet of 
text, then do not highlight any words, instead tick the &quot;there are no 
person names in this sentence&quot; checkbox to confirm that you have verified 
this.&lt;/p&gt;</at>
             <at name="scrollableTracksViewportWidth">true</at>
-            <at name="height">313</at>
+            <at name="height">251</at>
             <at name="width">753</at>
             <at name="name">instructions</at>
             <at name="selectionStart">468</at>
@@ -378,10 +378,11 @@
           <at name="classname">com.jeta.forms.components.label.JETALabel</at>
           <at name="properties">
            <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="horizontalAlignment">11</at>
             <at name="text">Task caption</at>
             <at name="height">16</at>
             <at name="width">81</at>
-            <at name="name"></at>
+            <at name="name">captionLabel</at>
             <at name="horizontalTextPosition">10</at>
             <at name="fill">
              <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
@@ -497,10 +498,11 @@
           <at name="classname">com.jeta.forms.components.label.JETALabel</at>
           <at name="properties">
            <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="horizontalAlignment">11</at>
             <at name="text">Caption for &quot;no entities&quot; checkbox</at>
             <at name="height">16</at>
             <at name="width">217</at>
-            <at name="name"></at>
+            <at name="name">noEntitiesCaptionLabel</at>
             <at name="horizontalTextPosition">10</at>
             <at name="fill">
              <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
@@ -619,7 +621,7 @@
             <at name="text">Error message if &quot;no entities&quot; not 
checked</at>
             <at name="height">16</at>
             <at name="width">264</at>
-            <at name="name"></at>
+            <at name="name">noEntitiesErrorLabel</at>
             <at name="horizontalTextPosition">10</at>
             <at name="fill">
              <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
@@ -712,6 +714,236 @@
        </object>
       </at>
      </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">11</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">right</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at 
name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">Allow free-text comment</at>
+            <at name="height">16</at>
+            <at name="width">159</at>
+            <at name="name">commentCheckboxLabel</at>
+            <at name="fill">
+             <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object 
classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">2</at>
+           <at name="row">13</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">right</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at 
name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">Comment field caption</at>
+            <at name="height">16</at>
+            <at name="width">144</at>
+            <at name="name">commentCaptionLabel</at>
+            <at name="fill">
+             <object 
classname="com.jeta.forms.store.properties.effects.PaintProperty">
+              <at name="name">fill</at>
+             </object>
+            </at>
+            <at name="border">
+             <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object 
classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">4</at>
+           <at name="row">11</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at 
name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JCheckBox</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JCheckBox</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="selected">true</at>
+            <at name="height">20</at>
+            <at name="width">496</at>
+            <at name="name">commentCheckbox</at>
+            <at name="border">
+             <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object 
classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
+     <item >
+      <at name="value">
+       <object classname="com.jeta.forms.store.memento.BeanMemento">
+        <super classname="com.jeta.forms.store.memento.ComponentMemento">
+         <at name="cellconstraints">
+          <object 
classname="com.jeta.forms.store.memento.CellConstraintsMemento">
+           <at name="column">4</at>
+           <at name="row">13</at>
+           <at name="colspan">1</at>
+           <at name="rowspan">1</at>
+           <at name="halign">default</at>
+           <at name="valign">default</at>
+           <at name="insets" object="insets">0,0,0,0</at>
+          </object>
+         </at>
+         <at 
name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
+        </super>
+        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
+        <at name="beanclass">javax.swing.JTextField</at>
+        <at name="beanproperties">
+         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
+          <at name="classname">javax.swing.JTextField</at>
+          <at name="properties">
+           <object classname="com.jeta.forms.store.support.PropertyMap">
+            <at name="text">Comment</at>
+            <at name="height">28</at>
+            <at name="width">496</at>
+            <at name="name">commentCaption</at>
+            <at name="border">
+             <object 
classname="com.jeta.forms.store.properties.CompoundBorderProperty">
+              <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+               <at name="name">border</at>
+              </super>
+              <at name="borders">
+               <object classname="java.util.LinkedList">
+                <item >
+                 <at name="value">
+                  <object 
classname="com.jeta.forms.store.properties.DefaultBorderProperty">
+                   <super 
classname="com.jeta.forms.store.properties.BorderProperty">
+                    <at name="name">border</at>
+                   </super>
+                  </object>
+                 </at>
+                </item>
+               </object>
+              </at>
+             </object>
+            </at>
+           </object>
+          </at>
+         </object>
+        </at>
+       </object>
+      </at>
+     </item>
     </object>
    </at>
    <at name="properties">
@@ -769,7 +1001,7 @@
    <at name="cellpainters">
     <object classname="com.jeta.forms.store.support.Matrix">
      <at name="rows">
-      <object classname="[Ljava.lang.Object;" size="14">
+      <object classname="[Ljava.lang.Object;" size="18">
        <at name="item" index="0">
         <object classname="[Ljava.lang.Object;" size="5"/>
        </at>
@@ -812,6 +1044,18 @@
        <at name="item" index="13">
         <object classname="[Ljava.lang.Object;" size="5"/>
        </at>
+       <at name="item" index="14">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="15">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="16">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
+       <at name="item" index="17">
+        <object classname="[Ljava.lang.Object;" size="5"/>
+       </at>
       </object>
      </at>
     </object>

Modified: 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/rest/CrowdFlowerClient.java
===================================================================
--- 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/rest/CrowdFlowerClient.java
  2014-09-04 01:19:45 UTC (rev 18289)
+++ 
gate/trunk/plugins/Crowd_Sourcing/src/gate/crowdsource/rest/CrowdFlowerClient.java
  2014-09-04 12:14:12 UTC (rev 18290)
@@ -75,11 +75,14 @@
    *          task extracted from the entity annotation. This is
    *          expressed as a List of [value, description] two-element
    *          Lists, one for each option.
+   * @param commentCaption caption for the free-text "comment" field, or null
+   *          if no comment field should be shown.
    * @return the newly created job ID.
    * @throws IOException
    */
   public long createClassificationJob(String title, String instructions,
-          String caption, List<List<String>> commonOptions) throws IOException 
{
+          String caption, List<List<String>> commonOptions,
+          String commentCaption) throws IOException {
     log.debug("Creating classification job");
     log.debug("title: " + title);
     log.debug("instructions: " + instructions);
@@ -124,6 +127,11 @@
       }
     }
     cml.append("</cml:radios>\n");
+    if(commentCaption != null) {
+      cml.append("<cml:text name=\"comment\" label=\"");
+      StringEscapeUtils.escapeXml(cml, commentCaption);
+      cml.append("\"/>");
+    }
 
     log.debug("cml: " + cml.toString());
 
@@ -316,11 +324,14 @@
    *          checkbox.
    * @param noEntitiesError the error message to show to the user if they have
    *          not marked any annotations but have also not ticked the checkbox.
+   * @param commentCaption caption for the free-text "comment" field, or null
+   *          if no comment field should be shown.
    * @return the newly created job ID.
    * @throws IOException
    */
   public long createAnnotationJob(String title, String instructions,
-          String caption, String noEntitiesCaption, String noEntitiesError)
+          String caption, String noEntitiesCaption, String noEntitiesError,
+          String commentCaption)
             throws IOException {
     log.debug("Creating annotation job");
     log.debug("title: " + title);
@@ -378,6 +389,11 @@
     cml.append("\" value=\"1\"\n"
             + "      only-if=\"!answer:required\" validates=\"required\"/>\n"
             + "</div>\n");
+    if(commentCaption != null) {
+      cml.append("<cml:text name=\"comment\" label=\"");
+      StringEscapeUtils.escapeXml(cml, commentCaption);
+      cml.append("\"/>");
+    }
     log.debug("cml: " + cml.toString());
 
     log.debug("POSTing to CrowdFlower");

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
GATE-cvs mailing list
GATE-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gate-cvs

Reply via email to