@Test public void testGetExternalRenderParameters() { final RenderQueryParameters renderQueryParameters = new RenderQueryParameters(); final RenderParameters renderParameters = service.getExternalRenderParameters(alignStackId.getOwner(), alignStackId.getProject(), alignStackId.getStack(), 100000.0, 17000.0, 2337.0, 200, 200, 1.0, renderQueryParameters); Assert.assertNotNull("null parameters returned", renderParameters); }
@Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) public RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner, @PathParam("project") final String project, @PathParam("stack") final String stack, @PathParam("x") final Double x, @PathParam("y") final Double y, @PathParam("z") final Double z, @PathParam("width") final Integer width, @PathParam("height") final Integer height, @PathParam("scale") final Double scale, @BeanParam final RenderQueryParameters renderQueryParameters) { return getExternalRenderParameters(owner, project, stack, null, x, y, z, width, height, scale, renderQueryParameters); }
RenderDataService { @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) public RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner, @PathParam("project") final String project, @PathParam("stack") final String stack, @PathParam("x") final Double x, @PathParam("y") final Double y, @PathParam("z") final Double z, @PathParam("width") final Integer width, @PathParam("height") final Integer height, @PathParam("scale") final Double scale, @BeanParam final RenderQueryParameters renderQueryParameters) { return getExternalRenderParameters(owner, project, stack, null, x, y, z, width, height, scale, renderQueryParameters); } }
RenderDataService { @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) public RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner, @PathParam("project") final String project, @PathParam("stack") final String stack, @PathParam("x") final Double x, @PathParam("y") final Double y, @PathParam("z") final Double z, @PathParam("width") final Integer width, @PathParam("height") final Integer height, @PathParam("scale") final Double scale, @BeanParam final RenderQueryParameters renderQueryParameters) { return getExternalRenderParameters(owner, project, stack, null, x, y, z, width, height, scale, renderQueryParameters); } @SuppressWarnings({"UnusedDeclaration", "WeakerAccess"}) // no-arg constructor required for REST-Easy  RenderDataService();   RenderDataService(final RenderDao renderDao); }
RenderDataService { @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) public RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner, @PathParam("project") final String project, @PathParam("stack") final String stack, @PathParam("x") final Double x, @PathParam("y") final Double y, @PathParam("z") final Double z, @PathParam("width") final Integer width, @PathParam("height") final Integer height, @PathParam("scale") final Double scale, @BeanParam final RenderQueryParameters renderQueryParameters) { return getExternalRenderParameters(owner, project, stack, null, x, y, z, width, height, scale, renderQueryParameters); } @SuppressWarnings({"UnusedDeclaration", "WeakerAccess"}) // no-arg constructor required for REST-Easy  RenderDataService();   RenderDataService(final RenderDao renderDao); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/layoutFile") @GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation( tags = "Layout Data APIs", value = "Get layout file text for all stack layers", produces = MediaType.TEXT_PLAIN) Response getLayoutFile(@PathParam("owner") final String owner,
                                  @PathParam("project") final String project,
                                  @PathParam("stack") final String stack,
                                  @QueryParam("minZ") final Double minZ,
                                  @QueryParam("maxZ") final Double maxZ,
                                  @QueryParam("format") final TileSpecLayout.Format format,
                                  @Context final UriInfo uriInfo); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/layoutFile") @GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation( tags = "Layout Data APIs", value = "Get layout file text for specified stack layer", produces = MediaType.TEXT_PLAIN) Response getLayoutFileForZ(@PathParam("owner") final String owner,
                                      @PathParam("project") final String project,
                                      @PathParam("stack") final String stack,
                                      @PathParam("z") final Double z,
                                      @QueryParam("format") final TileSpecLayout.Format format,
                                      @Context final UriInfo uriInfo); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/zRange/{minZ},{maxZ}/layoutFile") @GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation( tags = "Layout Data APIs", value = "Get layout file text for specified stack layers", produces = MediaType.TEXT_PLAIN) Response getLayoutFileForZRange(@PathParam("owner") final String owner,
                                           @PathParam("project") final String project,
                                           @PathParam("stack") final String stack,
                                           @PathParam("minZ") final Double minZ,
                                           @PathParam("maxZ") final Double maxZ,
                                           @QueryParam("format") final TileSpecLayout.Format format,
                                           @Context final UriInfo uriInfo); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/zValues") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z values for specified stack") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<Double> getZValues(@PathParam("owner") final String owner,
                                   @PathParam("project") final String project,
                                   @PathParam("stack") final String stack,
                                   @QueryParam("minZ") final Double minZ,
                                   @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/sectionData") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z and sectionId for all sections in specified stack", notes = "Stack must be in COMPLETE state for section data to be available") @ApiResponses(value = { @ApiResponse(code = 400, message = "section data not generated"), @ApiResponse(code = 404, message = "stack not found") }) List<SectionData> getSectionData(@PathParam("owner") final String owner,
                                            @PathParam("project") final String project,
                                            @PathParam("stack") final String stack,
                                            @QueryParam("minZ") final Double minZ,
                                            @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/reorderedSectionData") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z and sectionId for all reordered sections in specified stack") @ApiResponses(value = { @ApiResponse(code = 400, message = "section data not generated"), @ApiResponse(code = 404, message = "stack not found") }) List<SectionData> getReorderedSectionData(@PathParam("owner") final String owner,
                                                     @PathParam("project") final String project,
                                                     @PathParam("stack") final String stack,
                                                     @QueryParam("minZ") final Double minZ,
                                                     @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/mergedZValues") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z values for all merged sections in specified stack") @ApiResponses(value = { @ApiResponse(code = 400, message = "section data not generated"), @ApiResponse(code = 404, message = "stack not found") }) List<Double> getMergedZValues(@PathParam("owner") final String owner,
                                         @PathParam("project") final String project,
                                         @PathParam("stack") final String stack,
                                         @QueryParam("minZ") final Double minZ,
                                         @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/mergeableData") @GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation( tags = "Stack Data APIs", value = "List plain text data for all mergeable sections in specified stack", notes = "Data format is 'toIndex < fromIndex : toZ < fromZ'. Only layers with both an integral (.0) and at least one non-integral (e.g. .1) section are included.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) String getMergeableData(@PathParam("owner") final String owner,
                                   @PathParam("project") final String project,
                                   @PathParam("stack") final String stack,
                                   @QueryParam("minZ") final Double minZ,
                                   @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/mergeableZValues") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z values for all mergeable layers in specified stack", notes = "Only layers with both an integral (.0) and at least one non-integral (e.g. .1) section are included.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<Double> getMergeableZValues(@PathParam("owner") final String owner,
                                            @PathParam("project") final String project,
                                            @PathParam("stack") final String stack,
                                            @QueryParam("minZ") final Double minZ,
                                            @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/bounds") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get bounds for section with specified z") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) Bounds getLayerBounds(@PathParam("owner") final String owner,
                                 @PathParam("project") final String project,
                                 @PathParam("stack") final String stack,
                                 @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/sectionData") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "List section data for all sections with specified z", notes = "Section data is dynamically derived so this resource is available for stacks in any state") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<SectionData> getSectionDataForZ(@PathParam("owner") final String owner,
                                                @PathParam("project") final String project,
                                                @PathParam("stack") final String stack,
                                                @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/tileBounds") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get bounds for each tile with specified z") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<TileBounds> getTileBoundsForZ(@PathParam("owner") final String owner,
                                              @PathParam("project") final String project,
                                              @PathParam("stack") final String stack,
                                              @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/tileIds") @PUT @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Set z value for specified tiles (e.g. to split a layer)") @ApiResponses(value = { @ApiResponse(code = 400, message = "stack not in LOADING state"), @ApiResponse(code = 404, message = "stack not found"), }) Response updateZForTiles(@PathParam("owner") final String owner,
                                    @PathParam("project") final String project,
                                    @PathParam("stack") final String stack,
                                    @PathParam("z") final Double z,
                                    @Context final UriInfo uriInfo,
                                    final List<String> tileIds); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/resolvedTiles") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get raw tile and transform specs for section with specified z") @ApiResponses(value = { @ApiResponse(code = 400, message = "too many (> 50,000) tiles in section"), @ApiResponse(code = 404, message = "no tile specs found"), }) ResolvedTileSpecCollection getResolvedTiles(@PathParam("owner") final String owner,
                                                       @PathParam("project") final String project,
                                                       @PathParam("stack") final String stack,
                                                       @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/resolvedTiles") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "Get raw tile and transform specs for specified group or bounding box") @ApiResponses(value = { @ApiResponse(code = 400, message = "too many (> 50,000) matching tiles found"), @ApiResponse(code = 404, message = "no tile specs found"), }) ResolvedTileSpecCollection getResolvedTiles(@PathParam("owner") final String owner,
                                                       @PathParam("project") final String project,
                                                       @PathParam("stack") final String stack,
                                                       @QueryParam("minZ") final Double minZ,
                                                       @QueryParam("maxZ") final Double maxZ,
                                                       @QueryParam("groupId") final String groupId,
                                                       @QueryParam("minX") final Double minX,
                                                       @QueryParam("maxX") final Double maxX,
                                                       @QueryParam("minY") final Double minY,
                                                       @QueryParam("maxY") final Double maxY); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/resolvedTiles") @PUT @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "Save specified raw tile and transform specs") @ApiResponses(value = { @ApiResponse(code = 400, message = "stack not in LOADING state, invalid data provided"), @ApiResponse(code = 404, message = "stack not found"), }) Response saveResolvedTiles(@PathParam("owner") final String owner,
                                      @PathParam("project") final String project,
                                      @PathParam("stack") final String stack,
                                      @QueryParam("deriveData") final Boolean deriveData,
                                      @Context final UriInfo uriInfo,
                                      final ResolvedTileSpecCollection resolvedTiles); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/resolvedTiles") @PUT @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Save specified raw tile and transform specs for section") @ApiResponses(value = { @ApiResponse(code = 400, message = "stack not in LOADING state, invalid data provided"), @ApiResponse(code = 404, message = "stack not found"), }) Response saveResolvedTilesForZ(@PathParam("owner") final String owner,
                                          @PathParam("project") final String project,
                                          @PathParam("stack") final String stack,
                                          @PathParam("z") final Double z,
                                          @QueryParam("deriveData") final Boolean deriveData,
                                          @Context final UriInfo uriInfo,
                                          final ResolvedTileSpecCollection resolvedTiles); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/section/{sectionId}/z") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get z value for section") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack or section not found"), }) Double getZForSection(@PathParam("owner") final String owner,
                                 @PathParam("project") final String project,
                                 @PathParam("stack") final String stack,
                                 @PathParam("sectionId") final String sectionId,
                                 @Context final UriInfo uriInfo); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/section/{sectionId}/z") @PUT @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Set z value for section") @ApiResponses(value = { @ApiResponse(code = 400, message = "stack not in LOADING state"), @ApiResponse(code = 404, message = "stack not found") }) Response updateZForSection(@PathParam("owner") final String owner,
                                      @PathParam("project") final String project,
                                      @PathParam("stack") final String stack,
                                      @PathParam("sectionId") final String sectionId,
                                      @Context final UriInfo uriInfo,
                                      final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/section/{sectionId}/tileBounds") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get bounds for each tile with specified sectionId") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<TileBounds> getTileBoundsForSection(@PathParam("owner") final String owner,
                                                    @PathParam("project") final String project,
                                                    @PathParam("stack") final String stack,
                                                    @PathParam("sectionId") final String sectionId); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/transform/{transformId}") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Transform Data APIs", value = "Get transform spec") @ApiResponses(value = { @ApiResponse(code = 404, message = "transform or stack not found") }) TransformSpec getTransformSpec(@PathParam("owner") final String owner,
                                          @PathParam("project") final String project,
                                          @PathParam("stack") final String stack,
                                          @PathParam("transformId") final String transformId); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height}/tile-count") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get number of tiles within box") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) Long getTileCount(@PathParam("owner") final String owner,
                             @PathParam("project") final String project,
                             @PathParam("stack") final String stack,
                             @PathParam("x") final Double x,
                             @PathParam("y") final Double y,
                             @PathParam("z") final Double z,
                             @PathParam("width") final Integer width,
                             @PathParam("height") final Integer height); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/dvid/imagetile/raw/xy/{width}_{height}/{x}_{y}_{z}/tile-count") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = {"Bounding Box Data APIs", "DVID Style APIs"}, value = "DVID style API to get number of tiles within box") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) Long getTileCountForDvidBox(@PathParam("owner") final String owner,
                                       @PathParam("project") final String project,
                                       @PathParam("stack") final String stack,
                                       @PathParam("x") final Double x,
                                       @PathParam("y") final Double y,
                                       @PathParam("z") final Double z,
                                       @PathParam("width") final Integer width,
                                       @PathParam("height") final Integer height); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/tile-specs") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get flattened tile specs with the specified z", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack or tiles with z not found") }) List<TileSpec> getTileSpecsForZ(@PathParam("owner") final String owner,
                                           @PathParam("project") final String project,
                                           @PathParam("stack") final String stack,
                                           @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/last-tile-transforms") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get last transform for each tile spec with the specified z") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack or tiles with z not found") }) List<LastTileTransform> getLastTileTransformsForZ(@PathParam("owner") final String owner,
                                                             @PathParam("project") final String project,
                                                             @PathParam("stack") final String stack,
                                                             @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get parameters to render all tiles with the specified z", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack or tiles with z not found") }) RenderParameters getRenderParametersForZ(@PathParam("owner") final String owner,
                                                    @PathParam("project") final String project,
                                                    @PathParam("stack") final String stack,
                                                    @PathParam("z") final Double z,
                                                    @BeanParam final RenderQueryParameters renderQueryParameters); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner,
                                                        @PathParam("project") final String project,
                                                        @PathParam("stack") final String stack,
                                                        @PathParam("x") final Double x,
                                                        @PathParam("y") final Double y,
                                                        @PathParam("z") final Double z,
                                                        @PathParam("width") final Integer width,
                                                        @PathParam("height") final Integer height,
                                                        @PathParam("scale") final Double scale,
                                                        @BeanParam final RenderQueryParameters renderQueryParameters); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/dvid/imagetile/raw/xy/{width}_{height}/{x}_{y}_{z}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = {"Bounding Box Data APIs", "DVID Style APIs"}, value = "DVID style API to get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) RenderParameters getExternalRenderParametersForDvidBox(@PathParam("owner") final String owner,
                                                                  @PathParam("project") final String project,
                                                                  @PathParam("stack") final String stack,
                                                                  @PathParam("x") final Double x,
                                                                  @PathParam("y") final Double y,
                                                                  @PathParam("z") final Double z,
                                                                  @PathParam("width") final Integer width,
                                                                  @PathParam("height") final Integer height,
                                                                  @QueryParam("scale") final Double scale,
                                                                  @BeanParam final RenderQueryParameters renderQueryParameters); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/group/{groupId}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified group and box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner,
                                                        @PathParam("project") final String project,
                                                        @PathParam("stack") final String stack,
                                                        @PathParam("groupId") final String groupId,
                                                        @PathParam("x") final Double x,
                                                        @PathParam("y") final Double y,
                                                        @PathParam("z") final Double z,
                                                        @PathParam("width") final Integer width,
                                                        @PathParam("height") final Integer height,
                                                        @PathParam("scale") final Double scale,
                                                        @BeanParam final RenderQueryParameters renderQueryParameters); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/group/{groupId}/dvid/imagetile/raw/xy/{width}_{height}/{x}_{y}_{z}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = {"Bounding Box Data APIs", "DVID Style APIs"}, value = "DVID style API to get parameters to render all tiles within the specified group and box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) RenderParameters getExternalRenderParametersForDvidBox(@PathParam("owner") final String owner,
                                                                  @PathParam("project") final String project,
                                                                  @PathParam("stack") final String stack,
                                                                  @PathParam("groupId") final String groupId,
                                                                  @PathParam("x") final Double x,
                                                                  @PathParam("y") final Double y,
                                                                  @PathParam("z") final Double z,
                                                                  @PathParam("width") final Integer width,
                                                                  @PathParam("height") final Integer height,
                                                                  @BeanParam final RenderQueryParameters renderQueryParameters); StackMetaData getStackMetaData(final StackId stackId); void setFilterSpecs(final String filterListName,
                               final RenderParameters renderParameters); }
RenderDataService { @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) public RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner, @PathParam("project") final String project, @PathParam("stack") final String stack, @PathParam("x") final Double x, @PathParam("y") final Double y, @PathParam("z") final Double z, @PathParam("width") final Integer width, @PathParam("height") final Integer height, @PathParam("scale") final Double scale, @BeanParam final RenderQueryParameters renderQueryParameters) { return getExternalRenderParameters(owner, project, stack, null, x, y, z, width, height, scale, renderQueryParameters); } @SuppressWarnings({"UnusedDeclaration", "WeakerAccess"}) // no-arg constructor required for REST-Easy  RenderDataService();   RenderDataService(final RenderDao renderDao); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/layoutFile") @GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation( tags = "Layout Data APIs", value = "Get layout file text for all stack layers", produces = MediaType.TEXT_PLAIN) Response getLayoutFile(@PathParam("owner") final String owner,
                                  @PathParam("project") final String project,
                                  @PathParam("stack") final String stack,
                                  @QueryParam("minZ") final Double minZ,
                                  @QueryParam("maxZ") final Double maxZ,
                                  @QueryParam("format") final TileSpecLayout.Format format,
                                  @Context final UriInfo uriInfo); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/layoutFile") @GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation( tags = "Layout Data APIs", value = "Get layout file text for specified stack layer", produces = MediaType.TEXT_PLAIN) Response getLayoutFileForZ(@PathParam("owner") final String owner,
                                      @PathParam("project") final String project,
                                      @PathParam("stack") final String stack,
                                      @PathParam("z") final Double z,
                                      @QueryParam("format") final TileSpecLayout.Format format,
                                      @Context final UriInfo uriInfo); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/zRange/{minZ},{maxZ}/layoutFile") @GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation( tags = "Layout Data APIs", value = "Get layout file text for specified stack layers", produces = MediaType.TEXT_PLAIN) Response getLayoutFileForZRange(@PathParam("owner") final String owner,
                                           @PathParam("project") final String project,
                                           @PathParam("stack") final String stack,
                                           @PathParam("minZ") final Double minZ,
                                           @PathParam("maxZ") final Double maxZ,
                                           @QueryParam("format") final TileSpecLayout.Format format,
                                           @Context final UriInfo uriInfo); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/zValues") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z values for specified stack") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<Double> getZValues(@PathParam("owner") final String owner,
                                   @PathParam("project") final String project,
                                   @PathParam("stack") final String stack,
                                   @QueryParam("minZ") final Double minZ,
                                   @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/sectionData") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z and sectionId for all sections in specified stack", notes = "Stack must be in COMPLETE state for section data to be available") @ApiResponses(value = { @ApiResponse(code = 400, message = "section data not generated"), @ApiResponse(code = 404, message = "stack not found") }) List<SectionData> getSectionData(@PathParam("owner") final String owner,
                                            @PathParam("project") final String project,
                                            @PathParam("stack") final String stack,
                                            @QueryParam("minZ") final Double minZ,
                                            @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/reorderedSectionData") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z and sectionId for all reordered sections in specified stack") @ApiResponses(value = { @ApiResponse(code = 400, message = "section data not generated"), @ApiResponse(code = 404, message = "stack not found") }) List<SectionData> getReorderedSectionData(@PathParam("owner") final String owner,
                                                     @PathParam("project") final String project,
                                                     @PathParam("stack") final String stack,
                                                     @QueryParam("minZ") final Double minZ,
                                                     @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/mergedZValues") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z values for all merged sections in specified stack") @ApiResponses(value = { @ApiResponse(code = 400, message = "section data not generated"), @ApiResponse(code = 404, message = "stack not found") }) List<Double> getMergedZValues(@PathParam("owner") final String owner,
                                         @PathParam("project") final String project,
                                         @PathParam("stack") final String stack,
                                         @QueryParam("minZ") final Double minZ,
                                         @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/mergeableData") @GET @Produces(MediaType.TEXT_PLAIN) @ApiOperation( tags = "Stack Data APIs", value = "List plain text data for all mergeable sections in specified stack", notes = "Data format is 'toIndex < fromIndex : toZ < fromZ'. Only layers with both an integral (.0) and at least one non-integral (e.g. .1) section are included.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) String getMergeableData(@PathParam("owner") final String owner,
                                   @PathParam("project") final String project,
                                   @PathParam("stack") final String stack,
                                   @QueryParam("minZ") final Double minZ,
                                   @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/mergeableZValues") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "List z values for all mergeable layers in specified stack", notes = "Only layers with both an integral (.0) and at least one non-integral (e.g. .1) section are included.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<Double> getMergeableZValues(@PathParam("owner") final String owner,
                                            @PathParam("project") final String project,
                                            @PathParam("stack") final String stack,
                                            @QueryParam("minZ") final Double minZ,
                                            @QueryParam("maxZ") final Double maxZ); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/bounds") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get bounds for section with specified z") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) Bounds getLayerBounds(@PathParam("owner") final String owner,
                                 @PathParam("project") final String project,
                                 @PathParam("stack") final String stack,
                                 @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/sectionData") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "List section data for all sections with specified z", notes = "Section data is dynamically derived so this resource is available for stacks in any state") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<SectionData> getSectionDataForZ(@PathParam("owner") final String owner,
                                                @PathParam("project") final String project,
                                                @PathParam("stack") final String stack,
                                                @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/tileBounds") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get bounds for each tile with specified z") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<TileBounds> getTileBoundsForZ(@PathParam("owner") final String owner,
                                              @PathParam("project") final String project,
                                              @PathParam("stack") final String stack,
                                              @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/tileIds") @PUT @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Set z value for specified tiles (e.g. to split a layer)") @ApiResponses(value = { @ApiResponse(code = 400, message = "stack not in LOADING state"), @ApiResponse(code = 404, message = "stack not found"), }) Response updateZForTiles(@PathParam("owner") final String owner,
                                    @PathParam("project") final String project,
                                    @PathParam("stack") final String stack,
                                    @PathParam("z") final Double z,
                                    @Context final UriInfo uriInfo,
                                    final List<String> tileIds); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/resolvedTiles") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get raw tile and transform specs for section with specified z") @ApiResponses(value = { @ApiResponse(code = 400, message = "too many (> 50,000) tiles in section"), @ApiResponse(code = 404, message = "no tile specs found"), }) ResolvedTileSpecCollection getResolvedTiles(@PathParam("owner") final String owner,
                                                       @PathParam("project") final String project,
                                                       @PathParam("stack") final String stack,
                                                       @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/resolvedTiles") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "Get raw tile and transform specs for specified group or bounding box") @ApiResponses(value = { @ApiResponse(code = 400, message = "too many (> 50,000) matching tiles found"), @ApiResponse(code = 404, message = "no tile specs found"), }) ResolvedTileSpecCollection getResolvedTiles(@PathParam("owner") final String owner,
                                                       @PathParam("project") final String project,
                                                       @PathParam("stack") final String stack,
                                                       @QueryParam("minZ") final Double minZ,
                                                       @QueryParam("maxZ") final Double maxZ,
                                                       @QueryParam("groupId") final String groupId,
                                                       @QueryParam("minX") final Double minX,
                                                       @QueryParam("maxX") final Double maxX,
                                                       @QueryParam("minY") final Double minY,
                                                       @QueryParam("maxY") final Double maxY); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/resolvedTiles") @PUT @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Stack Data APIs", value = "Save specified raw tile and transform specs") @ApiResponses(value = { @ApiResponse(code = 400, message = "stack not in LOADING state, invalid data provided"), @ApiResponse(code = 404, message = "stack not found"), }) Response saveResolvedTiles(@PathParam("owner") final String owner,
                                      @PathParam("project") final String project,
                                      @PathParam("stack") final String stack,
                                      @QueryParam("deriveData") final Boolean deriveData,
                                      @Context final UriInfo uriInfo,
                                      final ResolvedTileSpecCollection resolvedTiles); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/resolvedTiles") @PUT @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Save specified raw tile and transform specs for section") @ApiResponses(value = { @ApiResponse(code = 400, message = "stack not in LOADING state, invalid data provided"), @ApiResponse(code = 404, message = "stack not found"), }) Response saveResolvedTilesForZ(@PathParam("owner") final String owner,
                                          @PathParam("project") final String project,
                                          @PathParam("stack") final String stack,
                                          @PathParam("z") final Double z,
                                          @QueryParam("deriveData") final Boolean deriveData,
                                          @Context final UriInfo uriInfo,
                                          final ResolvedTileSpecCollection resolvedTiles); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/section/{sectionId}/z") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get z value for section") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack or section not found"), }) Double getZForSection(@PathParam("owner") final String owner,
                                 @PathParam("project") final String project,
                                 @PathParam("stack") final String stack,
                                 @PathParam("sectionId") final String sectionId,
                                 @Context final UriInfo uriInfo); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/section/{sectionId}/z") @PUT @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Set z value for section") @ApiResponses(value = { @ApiResponse(code = 400, message = "stack not in LOADING state"), @ApiResponse(code = 404, message = "stack not found") }) Response updateZForSection(@PathParam("owner") final String owner,
                                      @PathParam("project") final String project,
                                      @PathParam("stack") final String stack,
                                      @PathParam("sectionId") final String sectionId,
                                      @Context final UriInfo uriInfo,
                                      final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/section/{sectionId}/tileBounds") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get bounds for each tile with specified sectionId") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) List<TileBounds> getTileBoundsForSection(@PathParam("owner") final String owner,
                                                    @PathParam("project") final String project,
                                                    @PathParam("stack") final String stack,
                                                    @PathParam("sectionId") final String sectionId); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/transform/{transformId}") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Transform Data APIs", value = "Get transform spec") @ApiResponses(value = { @ApiResponse(code = 404, message = "transform or stack not found") }) TransformSpec getTransformSpec(@PathParam("owner") final String owner,
                                          @PathParam("project") final String project,
                                          @PathParam("stack") final String stack,
                                          @PathParam("transformId") final String transformId); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height}/tile-count") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get number of tiles within box") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) Long getTileCount(@PathParam("owner") final String owner,
                             @PathParam("project") final String project,
                             @PathParam("stack") final String stack,
                             @PathParam("x") final Double x,
                             @PathParam("y") final Double y,
                             @PathParam("z") final Double z,
                             @PathParam("width") final Integer width,
                             @PathParam("height") final Integer height); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/dvid/imagetile/raw/xy/{width}_{height}/{x}_{y}_{z}/tile-count") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = {"Bounding Box Data APIs", "DVID Style APIs"}, value = "DVID style API to get number of tiles within box") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) Long getTileCountForDvidBox(@PathParam("owner") final String owner,
                                       @PathParam("project") final String project,
                                       @PathParam("stack") final String stack,
                                       @PathParam("x") final Double x,
                                       @PathParam("y") final Double y,
                                       @PathParam("z") final Double z,
                                       @PathParam("width") final Integer width,
                                       @PathParam("height") final Integer height); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/tile-specs") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get flattened tile specs with the specified z", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack or tiles with z not found") }) List<TileSpec> getTileSpecsForZ(@PathParam("owner") final String owner,
                                           @PathParam("project") final String project,
                                           @PathParam("stack") final String stack,
                                           @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/last-tile-transforms") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get last transform for each tile spec with the specified z") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack or tiles with z not found") }) List<LastTileTransform> getLastTileTransformsForZ(@PathParam("owner") final String owner,
                                                             @PathParam("project") final String project,
                                                             @PathParam("stack") final String stack,
                                                             @PathParam("z") final Double z); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Section Data APIs", value = "Get parameters to render all tiles with the specified z", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack or tiles with z not found") }) RenderParameters getRenderParametersForZ(@PathParam("owner") final String owner,
                                                    @PathParam("project") final String project,
                                                    @PathParam("stack") final String stack,
                                                    @PathParam("z") final Double z,
                                                    @BeanParam final RenderQueryParameters renderQueryParameters); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner,
                                                        @PathParam("project") final String project,
                                                        @PathParam("stack") final String stack,
                                                        @PathParam("x") final Double x,
                                                        @PathParam("y") final Double y,
                                                        @PathParam("z") final Double z,
                                                        @PathParam("width") final Integer width,
                                                        @PathParam("height") final Integer height,
                                                        @PathParam("scale") final Double scale,
                                                        @BeanParam final RenderQueryParameters renderQueryParameters); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/dvid/imagetile/raw/xy/{width}_{height}/{x}_{y}_{z}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = {"Bounding Box Data APIs", "DVID Style APIs"}, value = "DVID style API to get parameters to render all tiles within the specified box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) RenderParameters getExternalRenderParametersForDvidBox(@PathParam("owner") final String owner,
                                                                  @PathParam("project") final String project,
                                                                  @PathParam("stack") final String stack,
                                                                  @PathParam("x") final Double x,
                                                                  @PathParam("y") final Double y,
                                                                  @PathParam("z") final Double z,
                                                                  @PathParam("width") final Integer width,
                                                                  @PathParam("height") final Integer height,
                                                                  @QueryParam("scale") final Double scale,
                                                                  @BeanParam final RenderQueryParameters renderQueryParameters); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/group/{groupId}/z/{z}/box/{x},{y},{width},{height},{scale}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = "Bounding Box Data APIs", value = "Get parameters to render all tiles within the specified group and box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) RenderParameters getExternalRenderParameters(@PathParam("owner") final String owner,
                                                        @PathParam("project") final String project,
                                                        @PathParam("stack") final String stack,
                                                        @PathParam("groupId") final String groupId,
                                                        @PathParam("x") final Double x,
                                                        @PathParam("y") final Double y,
                                                        @PathParam("z") final Double z,
                                                        @PathParam("width") final Integer width,
                                                        @PathParam("height") final Integer height,
                                                        @PathParam("scale") final Double scale,
                                                        @BeanParam final RenderQueryParameters renderQueryParameters); @Path("v1/owner/{owner}/project/{project}/stack/{stack}/group/{groupId}/dvid/imagetile/raw/xy/{width}_{height}/{x}_{y}_{z}/render-parameters") @GET @Produces(MediaType.APPLICATION_JSON) @ApiOperation( tags = {"Bounding Box Data APIs", "DVID Style APIs"}, value = "DVID style API to get parameters to render all tiles within the specified group and box", notes = "For each tile spec, nested transform lists are flattened and reference transforms are resolved. This should make the specs suitable for external use.") @ApiResponses(value = { @ApiResponse(code = 404, message = "stack not found") }) RenderParameters getExternalRenderParametersForDvidBox(@PathParam("owner") final String owner,
                                                                  @PathParam("project") final String project,
                                                                  @PathParam("stack") final String stack,
                                                                  @PathParam("groupId") final String groupId,
                                                                  @PathParam("x") final Double x,
                                                                  @PathParam("y") final Double y,
                                                                  @PathParam("z") final Double z,
                                                                  @PathParam("width") final Integer width,
                                                                  @PathParam("height") final Integer height,
                                                                  @BeanParam final RenderQueryParameters renderQueryParameters); StackMetaData getStackMetaData(final StackId stackId); void setFilterSpecs(final String filterListName,
                               final RenderParameters renderParameters);  }