code: public void upsert(final AbstractHtml tag, final String key,
              final WffBMArray bmArray)
              throws InvalidTagException, NullValueException {
  
          if (tag == null) {
              throw new NullValueException("tag cannot be null");
          }
          if (tag instanceof NoTag) {
              throw new InvalidTagException(
                      "NoTag and Blank tag are not allowed to use");
          }
          if (key == null) {
              throw new NullValueException("key cannot be null");
          }
          if (bmArray == null) {
              throw new NullValueException("bmArray cannot be null");
          }
          if (!browserPage.contains(tag)) {
              throw new InvalidTagException(
                      "The given tag is not available in the corresponding browserPage instance.");
          }
          AbstractHtmlRepository.addWffData(tag, key, bmArray);
      }
docs: Inserts or replaces (if already exists) the key bmArray pair in the
  wffObjects property of tag. The conventional JavaScript array of
  {@code WffBMArray} will be set to the {@code wffObjects} property of the
  given tag at client side.
  
  @param tag
  the tag object on which the given bmArray to be set.
  @param key
  key to set in wffObjects property of the tag.
  @param bmArray
  @throws InvalidTagException
  if the given instance is of NoTag / Blank
  @throws NullValueException
  if tag, key or bmArray is null
  @since 2.1.8
  @author WFF