Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,22 +43,30 @@ protected void onStarted() {
(from, to) -> {
try (MDC.MDCCloseable closeable =
LogContext.putCloseable(CONTEXT.SERVICE, getData().getId())) {
LOGGER.info("3dTile provider with id '{}' state changed: {}", getId(), getState());
if (LOGGER.isInfoEnabled()) {
LOGGER.info("3dTile provider with id '{}' state changed: {}", getId(), getState());
}
}
},
true);

LOGGER.info("3dTile provider with id '{}' started successfully.", getId());
if (LOGGER.isInfoEnabled()) {
LOGGER.info("3dTile provider with id '{}' started successfully.", getId());
}
}

@Override
protected void onReloaded(boolean forceReload) {
LOGGER.info("3dTile provider with id '{}' reloaded successfully.", getId());
if (LOGGER.isInfoEnabled()) {
LOGGER.info("3dTile provider with id '{}' reloaded successfully.", getId());
}
}

@Override
protected void onStopped() {
LOGGER.info("3dTile provider with id '{}' stopped.", getId());
if (LOGGER.isInfoEnabled()) {
LOGGER.info("3dTile provider with id '{}' stopped.", getId());
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,11 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SuppressWarnings({"PMD.GodClass", "PMD.CyclomaticComplexity", "PMD.TooManyMethods"})
public class Tile3dGeneratorFeatures extends AbstractVolatileComposed implements Tile3dGenerator {

private static final Logger LOGGER = LoggerFactory.getLogger(Tile3dGeneratorFeatures.class);
private static ObjectMapper MAPPER =
private static final ObjectMapper MAPPER =
new ObjectMapper()
.registerModule(new Jdk8Module())
.registerModule(new GuavaModule())
Expand Down Expand Up @@ -162,11 +163,7 @@ private void initAsync(VolatileRegistry volatileRegistry) {
}

DelayedVolatile<FeatureProvider> delayedVolatile =
new DelayedVolatile<>(
volatileRegistry,
String.format("generator.%s", featureProviderId),
false,
"generation");
createDelayedVolatile(volatileRegistry, featureProviderId);

addSubcomponent(delayedVolatile, true);

Expand Down Expand Up @@ -257,19 +254,7 @@ public TileMatrixSetData getTileMatrixSetData(
.build());

for (int level = 0; level <= levels.upperEndpoint(); level++) {
double resolution = 360.0 / (256 * Math.pow(2, level));
builder.addTileMatrices(
new ImmutableTileMatrix.Builder()
.id(String.valueOf(level))
.tileWidth(256)
.tileHeight(256)
.matrixWidth((long) Math.pow(2, level))
.matrixHeight((long) Math.pow(2, level))
// not needed for TileWalker, but mandatory
.scaleDenominator(BigDecimal.valueOf(0))
.cellSize(BigDecimal.valueOf(0))
.pointOfOrigin(new BigDecimal[] {BigDecimal.valueOf(0), BigDecimal.valueOf(0)})
.build());
builder.addTileMatrices(createTileMatrix(level));
}

return builder.build();
Expand Down Expand Up @@ -329,11 +314,11 @@ public boolean isTileAvailable(Subtree parent, Tile3dCoordinates tile, int subtr
int localLevel = tile.getLevel() % subtreeLevels;

return always
|| (buffer.length > 0
|| buffer.length > 0
&& getAvailability(
buffer,
localLevel,
TileTree.getMortonCurveIndex(localLevel, tile.getCol(), tile.getRow())));
TileTree.getMortonCurveIndex(localLevel, tile.getCol(), tile.getRow()));
}

@Override
Expand All @@ -348,7 +333,7 @@ public boolean isSubtreeAvailable(Subtree parent, TileTree child, int subtreeLev
&& childSubtreeAvailability.getConstant().filter(c -> c == 1).isPresent();

return always
|| (buffer.length > 0 && getAvailability(buffer, child.getMortonCurveIndex(subtreeLevels)));
|| buffer.length > 0 && getAvailability(buffer, child.getMortonCurveIndex(subtreeLevels));
}

@Override
Expand Down Expand Up @@ -512,6 +497,27 @@ private FeatureProvider getFeatureProvider(Tileset3dFeatures tileset) {
String.format("Feature provider with id '%s' not found.", featureProviderId)));
}

private DelayedVolatile<FeatureProvider> createDelayedVolatile(
VolatileRegistry volatileRegistry, String featureProviderId) {
return new DelayedVolatile<>(
volatileRegistry, String.format("generator.%s", featureProviderId), false, "generation");
}

private ImmutableTileMatrix createTileMatrix(int level) {
return new ImmutableTileMatrix.Builder()
.id(String.valueOf(level))
.tileWidth(256)
.tileHeight(256)
.matrixWidth((long) Math.pow(2, level))
.matrixHeight((long) Math.pow(2, level))
// not needed for TileWalker, but mandatory
.scaleDenominator(BigDecimal.valueOf(0))
.cellSize(BigDecimal.valueOf(0))
.pointOfOrigin(new BigDecimal[] {BigDecimal.valueOf(0), BigDecimal.valueOf(0)})
.build();
}

@SuppressWarnings("PMD.CognitiveComplexity")
private void processZ(
FeatureProvider featureProvider,
Tileset3dFeatures tileset,
Expand Down Expand Up @@ -682,7 +688,7 @@ private static void setAvailability(
availability[byteIndex] |= 1 << bitIndex;
}

@SuppressWarnings("PMD.ExcessiveMethodLength")
@SuppressWarnings({"PMD.ExcessiveMethodLength", "PMD.CognitiveComplexity", "PMD.NPathComplexity"})
private static ImmutableSubtree buildSubtree(
int subtreeLevels,
int size,
Expand Down Expand Up @@ -815,15 +821,15 @@ private static Optional<Polygon> computeExclusionPolygon(
*/

// handle the special cases first
if (tile.getCol() == 0 && tile.getRow() == (factor - 1)) {
if (tile.getCol() == 0 && tile.getRow() == factor - 1) {
return Optional.empty();
} else if (tile.getCol() == 0) {
double xmin = bbox.getXmin() + dx / factor * tile.getCol();
double xmax = xmin + dx / factor;
double ymin = bbox.getYmin() + dy / factor * (tile.getRow() + 1);
double ymax = ymin + dy / factor;
return Optional.of(Polygon.ofBbox(xmin, ymin, xmax, ymax, OgcCrs.CRS84));
} else if (tile.getRow() == (factor - 1)) {
} else if (tile.getRow() == factor - 1) {
double xmin = bbox.getXmin() + dx / factor * (tile.getCol() - 1);
double xmax = xmin + dx / factor;
double ymin = bbox.getYmin() + dy / factor * tile.getRow();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@
import de.ii.xtraplatform.tiles3d.domain.spec.Tileset3d;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.time.Instant;
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.ArrayList;
Expand All @@ -92,10 +91,12 @@
value = Tile3dProviderFeaturesData.PROVIDER_SUBTYPE)
},
data = Tile3dProviderFeaturesData.class)
@SuppressWarnings({"PMD.GodClass", "PMD.TooManyMethods"})
public class Tile3dProviderFeatures extends AbstractTile3dProvider<Tile3dProviderFeaturesData>
implements Tile3dProvider, Tile3dAccess, Tile3dSeeding {

private static final Logger LOGGER = LoggerFactory.getLogger(Tile3dProviderFeatures.class);
private static final byte[] NO_CONTENT = new byte[0];

private final ResourceStore rootStore;
private final Map<String, Tileset3d> metadata;
Expand Down Expand Up @@ -175,66 +176,57 @@ private void init() {
stores.put(tilesetCfg.getId(), store);
}

List<Cache3d> caches =
!getData().getCaches().isEmpty()
? getData().getCaches()
: List.of(
new ImmutableCache3d.Builder()
.type(Cache3d.Type.DYNAMIC)
.levels(
getData()
.getTilesetDefaults()
.getLevels()
.getOrDefault("default", MinMax.of(0, 0)))
.tilesetLevels(
getData().getTilesets().entrySet().stream()
.collect(
Collectors.toMap(
Entry::getKey, e -> e.getValue().getLevels().get("default"))))
.build());
List<Cache3d> caches = getData().getCaches();
if (caches.isEmpty()) {
caches = List.of(createDefaultCache());
}

initCaches(caches);

// registerChangeHandlers();
}

private void initCaches(List<Cache3d> caches) {
for (int i = 0; i < caches.size(); i++) {
Cache3d cache = caches.get(i);

for (Cache3d cache : caches) {
if (cache.getType() == Cache3d.Type.DYNAMIC) {
Map<String, Map<String, Range<Integer>>> cacheRanges = getCacheRanges(cache);
Map<String, Map<String, TileMatrixSetBase>> customTms =
cacheRanges.entrySet().stream()
.map(
entry ->
Map.entry(
entry.getKey(),
entry.getValue().entrySet().stream()
.map(
tmsEntry -> {
String tmsId = tmsEntry.getKey();
TileMatrixSetData tmsData =
tileGenerator.getTileMatrixSetData(
entry.getKey(), tmsId, tmsEntry.getValue());
return Map.entry(
tmsId, (TileMatrixSetBase) TileMatrixSet.custom(tmsData));
})
.collect(MapStreams.toMap())))
.collect(MapStreams.toMap());
Tile3dCacheDynamic current =
new Tile3dCacheDynamic(tileWalker, customTms, cacheRanges, cache.getSeeded());

generatorCaches.add(current);
generatorCaches.add(createDynamicCache(cache));
}
}
}

@Override
protected void onStopped() {
// unregisterChangeHandlers();
private Cache3d createDefaultCache() {
return new ImmutableCache3d.Builder()
.type(Cache3d.Type.DYNAMIC)
.levels(getData().getTilesetDefaults().getLevels().getOrDefault("default", MinMax.of(0, 0)))
.tilesetLevels(
getData().getTilesets().entrySet().stream()
.collect(
Collectors.toMap(Entry::getKey, e -> e.getValue().getLevels().get("default"))))
.build();
}

super.onStopped();
private Tile3dCacheDynamic createDynamicCache(Cache3d cache) {
Map<String, Map<String, Range<Integer>>> cacheRanges = getCacheRanges(cache);
Map<String, Map<String, TileMatrixSetBase>> customTms =
cacheRanges.entrySet().stream()
.map(
entry ->
Map.entry(
entry.getKey(),
entry.getValue().entrySet().stream()
.map(
tmsEntry -> {
String tmsId = tmsEntry.getKey();
TileMatrixSetData tmsData =
tileGenerator.getTileMatrixSetData(
entry.getKey(), tmsId, tmsEntry.getValue());
return Map.entry(
tmsId, (TileMatrixSetBase) TileMatrixSet.custom(tmsData));
})
.collect(MapStreams.toMap())))
.collect(MapStreams.toMap());

return new Tile3dCacheDynamic(tileWalker, customTms, cacheRanges, cache.getSeeded());
}

@Override
Expand All @@ -243,6 +235,7 @@ public Optional<Tileset3d> getMetadata(String tilesetId) {
}

@Override
@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.AvoidDeeplyNestedIfStmts"})
public Optional<Blob> getFile(Tile3dQuery tileQuery) throws IOException {
Optional<TileResult> error = validate(tileQuery);

Expand Down Expand Up @@ -277,10 +270,10 @@ public Optional<Blob> getFile(Tile3dQuery tileQuery) throws IOException {
true,
shouldStore);

if (!shouldStore && bytes != null) {
if (!shouldStore && bytes.length > 0) {
return Optional.of(
ImmutableBlob.builder()
.path(Path.of(tileQuery.getFileName().get()))
.path(java.nio.file.Path.of(tileQuery.getFileName().get()))
.lastModified(Instant.now().toEpochMilli())
.size(bytes.length)
.contentSupplier(() -> new ByteArrayInputStream(bytes))
Expand All @@ -290,10 +283,10 @@ public Optional<Blob> getFile(Tile3dQuery tileQuery) throws IOException {
byte[] bytes =
seedSubtree(tileQueryImplicit.toTileSubMatrix(), tileset, () -> {}, true, shouldStore);

if (!shouldStore && bytes != null) {
if (!shouldStore && bytes.length > 0) {
return Optional.of(
ImmutableBlob.builder()
.path(Path.of(tileQuery.getFileName().get()))
.path(java.nio.file.Path.of(tileQuery.getFileName().get()))
.lastModified(Instant.now().toEpochMilli())
.size(bytes.length)
.contentSupplier(() -> new ByteArrayInputStream(bytes))
Expand Down Expand Up @@ -363,6 +356,7 @@ public void seedSubtrees(Tile3dSeedingJob job, Consumer<Integer> updateProgress)
}
}

@SuppressWarnings({"PMD.CognitiveComplexity", "PMD.CyclomaticComplexity"})
private byte[] seedSubtree(
TileSubMatrix coords,
Tileset3dFeatures tileset,
Expand Down Expand Up @@ -390,7 +384,7 @@ private byte[] seedSubtree(
child.getCol(),
child.getRow());
}
return null;
return NO_CONTENT;
}

byte[] subtreeBytes =
Expand All @@ -405,7 +399,7 @@ private byte[] seedSubtree(
coords.getColMin(),
coords.getRowMin());
}
return null;
return NO_CONTENT;
}
}

Expand All @@ -427,7 +421,7 @@ private byte[] seedSubtree(
} finally {
updateProgress2.run();
}
return null;
return NO_CONTENT;
}

@Override
Expand All @@ -452,6 +446,7 @@ public void seedTiles(
}
}

@SuppressWarnings({"PMD.CognitiveComplexity", "PMD.CyclomaticComplexity"})
private byte[] seedTiles(
TileSubMatrix subMatrix,
Tileset3dFeatures tileset,
Expand All @@ -474,7 +469,7 @@ private byte[] seedTiles(
}

updateProgress2.accept((int) subMatrix.getNumberOfTiles());
return null;
return NO_CONTENT;
}

byte[] subtreeBytes = store.getSubtree(parent.getLevel(), parent.getCol(), parent.getRow());
Expand Down Expand Up @@ -512,7 +507,7 @@ private byte[] seedTiles(
}
}
}
return null;
return NO_CONTENT;
}

private Map<String, Tile3dGenerationParameters> validTilesets(
Expand All @@ -521,7 +516,9 @@ private Map<String, Tile3dGenerationParameters> validTilesets(
.filter(
entry -> {
if (!getData().getTilesets().containsKey(entry.getKey())) {
LOGGER.warn("Tileset with name '{}' not found", entry.getKey());
if (LOGGER.isWarnEnabled()) {
LOGGER.warn("Tileset with name '{}' not found", entry.getKey());
}
return false;
}
return true;
Expand Down
Loading
Loading