public String getValue() {
   switch (kind) {
     case KIND_ATTR_TEXT:
     case KIND_ELEMENT_ATTR:
       {
         // note intentional fall-thru!!
         return attribute.getNodeValue();
       }
     case KIND_ELEMENT_CMATTRIBUTE:
       {
         // CS : one would think that we'd just need to return "" here
         // but after editing a item of this kind and giving it value
         // the list of item's doesn't get recomputed.. so we need to trick
         // one of these items to behave like the KIND_ELEMENT_ATTR case
         //
         String value = parent.getAttribute(cmNode.getNodeName());
         return (value != null) ? value : "";
       }
     case KIND_ELEMENT_TEXT:
       {
         return new TreeContentHelper().getElementTextValue(parent);
       }
   }
   return "";
 }