package com.kryptnostic.v2.storage.models; import java.util.Map; import java.util.Set; import java.util.UUID; import javax.annotation.concurrent.Immutable; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; import com.kryptnostic.v2.constants.Names; @Immutable public class ObjectTreeLoadRequest { private static final int DEFAULT_DEPTH = 0; private final Set<UUID> objectIds; private final Map<UUID, Set<LoadLevel>> typeLoadLevels; private final int loadDepth; public ObjectTreeLoadRequest( Set<UUID> objectIds, Map<UUID, Set<LoadLevel>> typeLoadLevels ) { this( objectIds, typeLoadLevels, Optional.of( DEFAULT_DEPTH ) ); } @JsonCreator public ObjectTreeLoadRequest( @JsonProperty( Names.OBJECT_IDS ) Set<UUID> objectIds, @JsonProperty( Names.LOAD_LEVELS ) Map<UUID, Set<LoadLevel>> typeLoadLevels, @JsonProperty( Names.DEPTH ) Optional<Integer> loadDepth ) { this.objectIds = objectIds; this.typeLoadLevels = typeLoadLevels; this.loadDepth = loadDepth.or( DEFAULT_DEPTH ); } @JsonProperty( Names.OBJECT_IDS ) public Set<UUID> getObjectIds() { return objectIds; } @JsonProperty( Names.LOAD_LEVELS ) public Map<UUID, Set<LoadLevel>> getTypeLoadLevels() { return typeLoadLevels; } @JsonProperty( Names.DEPTH ) public int getLoadDepth() { return loadDepth; } }