@Override
    public Mapper.Builder parse(String name, Map<String, Object> node, ParserContext parserContext)
        throws MapperParsingException {
      if (parserContext.indexVersionCreated().before(Version.V_1_3_0)) {
        throw new IllegalArgumentException(
            "type="
                + CONTENT_TYPE
                + " is not supported on indices created before version 1.3.0. Is your cluster running multiple datanode versions?");
      }

      Builder builder = new Builder(parserContext.mapperService().fullName(NAME));
      if (parserContext.indexVersionCreated().before(Version.V_2_0_0)) {
        parseField(builder, builder.name, node, parserContext);
      }

      for (Iterator<Map.Entry<String, Object>> iterator = node.entrySet().iterator();
          iterator.hasNext(); ) {
        Map.Entry<String, Object> entry = iterator.next();
        String fieldName = Strings.toUnderscoreCase(entry.getKey());
        Object fieldNode = entry.getValue();
        if (fieldName.equals("enabled")) {
          builder.enabled(nodeBooleanValue(fieldNode));
          iterator.remove();
        }
      }
      return builder;
    }
    @Override
    public MetadataFieldMapper.Builder parse(
        String name, Map<String, Object> node, ParserContext parserContext)
        throws MapperParsingException {
      Builder builder = new Builder(parserContext.mapperService().fullName(NAME));

      for (Iterator<Map.Entry<String, Object>> iterator = node.entrySet().iterator();
          iterator.hasNext(); ) {
        Map.Entry<String, Object> entry = iterator.next();
        String fieldName = Strings.toUnderscoreCase(entry.getKey());
        Object fieldNode = entry.getValue();
        if (fieldName.equals("enabled")) {
          builder.enabled(nodeBooleanValue(fieldNode));
          iterator.remove();
        }
      }
      return builder;
    }
 @Override
 public MetadataFieldMapper.Builder<?, ?> parse(
     String name, Map<String, Object> node, ParserContext parserContext)
     throws MapperParsingException {
   Builder builder = new Builder(parserContext.mapperService().fullName(NAME));
   for (Iterator<Map.Entry<String, Object>> iterator = node.entrySet().iterator();
       iterator.hasNext(); ) {
     Map.Entry<String, Object> entry = iterator.next();
     String fieldName = Strings.toUnderscoreCase(entry.getKey());
     Object fieldNode = entry.getValue();
     if (fieldName.equals("enabled")) {
       builder.enabled(
           nodeBooleanValue(fieldNode)
               ? EnabledAttributeMapper.ENABLED
               : EnabledAttributeMapper.DISABLED);
       iterator.remove();
     } else if (fieldName.equals("store")
         && parserContext.indexVersionCreated().before(Version.V_2_0_0_beta1)) {
       builder.store(parseStore(fieldName, fieldNode.toString()));
       iterator.remove();
     }
   }
   return builder;
 }