diff --git a/xtraplatform-tiles/src/main/java/de/ii/xtraplatform/tiles/app/TileProviderFeaturesFactory.java b/xtraplatform-tiles/src/main/java/de/ii/xtraplatform/tiles/app/TileProviderFeaturesFactory.java index b7db1451..7028ab33 100644 --- a/xtraplatform-tiles/src/main/java/de/ii/xtraplatform/tiles/app/TileProviderFeaturesFactory.java +++ b/xtraplatform-tiles/src/main/java/de/ii/xtraplatform/tiles/app/TileProviderFeaturesFactory.java @@ -12,6 +12,8 @@ import dagger.assisted.AssistedFactory; import de.ii.xtraplatform.base.domain.LogContext; import de.ii.xtraplatform.entities.domain.AbstractEntityFactory; +import de.ii.xtraplatform.entities.domain.AutoEntity; +import de.ii.xtraplatform.entities.domain.AutoEntityFactory; import de.ii.xtraplatform.entities.domain.EntityData; import de.ii.xtraplatform.entities.domain.EntityDataBuilder; import de.ii.xtraplatform.entities.domain.EntityFactory; @@ -22,14 +24,20 @@ import de.ii.xtraplatform.features.domain.ImmutableProviderCommonData; import de.ii.xtraplatform.tiles.domain.ImmutableMinMax; import de.ii.xtraplatform.tiles.domain.ImmutableTileProviderFeaturesData; +import de.ii.xtraplatform.tiles.domain.ImmutableTilesetFeatures; import de.ii.xtraplatform.tiles.domain.ImmutableTilesetFeatures.Builder; import de.ii.xtraplatform.tiles.domain.ImmutableTilesetFeaturesDefaults; import de.ii.xtraplatform.tiles.domain.TileProviderData; import de.ii.xtraplatform.tiles.domain.TileProviderFeaturesData; import de.ii.xtraplatform.tiles.domain.TilesetFeatures; import java.util.AbstractMap.SimpleEntry; +import java.util.AbstractMap.SimpleImmutableEntry; +import java.util.Collection; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Optional; +import java.util.function.Consumer; import javax.inject.Inject; import javax.inject.Singleton; import org.slf4j.Logger; @@ -39,7 +47,7 @@ @AutoBind public class TileProviderFeaturesFactory extends AbstractEntityFactory - implements EntityFactory { + implements EntityFactory, AutoEntityFactory { private static final Logger LOGGER = LoggerFactory.getLogger(TileProviderFeaturesFactory.class); @@ -71,6 +79,11 @@ public Optional subType() { return Optional.of(TileProviderFeaturesData.ENTITY_SUBTYPE); } + @Override + public Optional auto() { + return Optional.of(this); + } + @Override public Class entityClass() { return TileProviderFeatures.class; @@ -207,6 +220,40 @@ private TileProviderFeaturesData generateTilesetsIfNecessary(TileProviderFeature .build(); } + @Override + public Map check(T entityData) { + return Map.of(); + } + + @Override + public Map> analyze(T entityData) { + return Map.of(); + } + + @Override + public T generate( + T entityData, Map> types, Consumer>> tracker) { + if (!(entityData instanceof TileProviderFeaturesData)) { + return entityData; + } + + TileProviderFeaturesData data = (TileProviderFeaturesData) entityData; + + Map collections = + types.values().stream() + .flatMap(Collection::stream) + .map( + type -> { + ImmutableTilesetFeatures collection = new Builder().id(type).build(); + + return new SimpleImmutableEntry<>(type, collection); + }) + .collect(ImmutableMap.toImmutableMap(Entry::getKey, Entry::getValue)); + + return (T) + new ImmutableTileProviderFeaturesData.Builder().from(data).tilesets(collections).build(); + } + @AssistedFactory public interface TileProviderFeaturesFactoryAssisted extends FactoryAssisted {