All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xapi.elemental.impl.LazyHtmlConverter Maven / Gradle / Ivy

Go to download

Everything needed to run a comprehensive dev environment. Just type X_ and pick a service from autocomplete; new dev modules will be added as they are built. The only dev service not included in the uber jar is xapi-dev-maven, as it includes all runtime dependencies of maven, adding ~4 seconds to build time, and 6 megabytes to the final output jar size (without xapi-dev-maven, it's ~1MB).

The newest version!
package xapi.elemental.impl;

import javax.inject.Provider;

import xapi.ui.api.StyleService;
import xapi.util.api.ConvertsValue;
import xapi.util.api.MergesValues;
import elemental.dom.Element;

public class LazyHtmlConverter , E extends Element>
implements MergesValues {

  protected final LazyHtmlClone cloner;
  private final MergesValues converter;

  public LazyHtmlConverter(ConvertsValue serializer) {
    class Merger implements MergesValues {

      private T item;
      private final LazyHtmlClone cloner = new LazyHtmlClone(
          new Provider() {
            @Override
            public String get() {
              return serializer.convert(item);
            }
          }
      );

      @Override
      public E merge(T from, S service) {
        item = from;
        try {
          return cloner.get();
        } finally {
          item = null;
        }
      }
    };
    Merger merger = new Merger();
    converter = merger;
    cloner = merger.cloner;
  }

  public LazyHtmlConverter(final MergesValues serializer) {
    class Merger implements MergesValues {

      private T item;
      private S service;
      private final LazyHtmlClone cloner = new LazyHtmlClone(
        new Provider() {
          @Override
          public String get() {
            return serializer.merge(item, service);
          }
        }
      );

      @Override
      public E merge(T from, S service) {
        this.service = service;
        item = from;
        try {
          return cloner.get();
        } finally {
          item = null;
          service = null;
        }
      }
    };

    Merger merger = new Merger();
    converter = merger;
    cloner = merger.cloner;
  }

  public LazyHtmlConverter(final MergesValues serializer, final S service) {
    class Merger implements MergesValues {

      private T item;
      private final LazyHtmlClone cloner = new LazyHtmlClone(
        new Provider() {
          @Override
          public String get() {
            return serializer.merge(item, service);
          }
        }
      );

      @Override
      public E merge(T from, S service) {
        item = from;
        try {
          return cloner.get();
        } finally {
          item = null;
        }
      }
    };

    Merger merger = new Merger();
    converter = merger;
    cloner = merger.cloner;
  }

  @Override
  public E merge(T from, S service) {
    return converter.merge(from, service);
  }

  public LazyHtmlConverter setInitializer(ConvertsValue initializer) {
    cloner.setInitializer(initializer);
    return this;
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy