Class DatasetsWebService
- Author:
- tesarst
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classstatic classWrite-shape for an annotation tag.static final classThis is an aggregated entity across value URI and value, thus theidandobjectClassare omitted.static final classstatic final classstatic final classstatic final classstatic classstatic classstatic classOne accepted rewrite the grounding gate applied to a persisted annotation — a case/whitespace-only near-match canonicalized to the term's label, a blank label filled in from its URI, and/or a known Gemma-ontology term (e.g.static final classstatic enumWhich of the two stored sample-correlation matricesgetDatasetSampleCorrelation(DatasetArg, DatasetsWebService.CorrelationMatrixChoice)should return.static classstatic classstatic classThe server's reply — mirrors CAB'sCurationCommitReport.static classstatic classWire shape of one curation decision.static classcurationDetails section.static classstatic classThe whole desired curation state for one dataset (CAB'sCurationDocument).static classBody for the bulk lock routes.static classOne dataset's outcome in a bulk lock request.static classWire shape of the curation lock.static classPublications section — same identifier shape and set-replace semantics asPUT /publications.static classWhich agent run is applying this commit.static classstatic classCursor full-fidelity shape forgetDatasetAuditEvents(DatasetArg, CursorArg, LimitArg, boolean, boolean)(compact=false).static classCursor-mode response shape forgetDatasetSamples(DatasetArg, QuantitationTypeArg, boolean, CursorArg, LimitArg, ExcludeArg, boolean).static classCursor collapsed shape forgetDatasetAuditEvents(DatasetArg, CursorArg, LimitArg, boolean, boolean)(compact=true).static classCursor shape forgetDatasetTickets(DatasetArg, CursorArg, LimitArg).static classResponse body forupdateDatasetBasics(DatasetArg, DatasetsWebService.DatasetBasicsUpdateRequest)— the persisted name and description after the update.static classstatic classOptional request body forimportDataset(DatasetsWebService.DatasetImportRequest).static final classWire shape forgetDatasetMetadataFiles(DatasetArg): one entry per available metadata file.static classLightweight view of a dataset's sharing state, returned by the permissions endpoint.static final classThin dataset projection for the typeahead/datasets/searchendpoint.static classstatic classThe experimental-design section (CABDesignCommit).static classOptional request body forrunDatasetDifferentialAnalysis(DatasetArg, DatasetsWebService.DifferentialAnalysisRunRequest).static classstatic classIdentity half of every committable design entity: exactly one ofgemmaIdorclientRef.static classA group of subsets, logically organized by aBioAssayDimension.static classstatic classstatic final classstatic classOne experimental factor.static classOne factor value, with the samples it applies to (by GSM short name) and its statements.static classstatic classCursor-mode counterpart toDatasetsWebService.FilteredAndInferredAndPaginatedResponseDataObject.static classstatic classstatic classstatic classstatic final classWire shape forgetDatasetMeanVariance(DatasetArg): parallel mean / variance arrays.static classA per-factor-value numeric measurement (continuous factors).static classAn ontology term reference — a human label plus an optional ontology URI.static final classstatic enumSort direction forgetDatasetSvdLoadings(DatasetArg, Integer, Integer, DatasetsWebService.PcLoadingDirection):bothsorts by |loading| desc,positivefilters to loading > 0 desc,negativefilters to loading < 0 asc.static final classWire shape forgetDatasetSvdLoadings(DatasetArg, Integer, Integer, DatasetsWebService.PcLoadingDirection): the top-N probe loadings on a principal component plus the bioAssay scores on the same PC.static classstatic classstatic classOptional request body forrunDatasetSwitchPlatform(DatasetArg, DatasetsWebService.PlatformSwitchRequest).static classA single publication on theupdateDatasetPublications(DatasetArg, DatasetsWebService.PublicationsUpdateRequest)wire: which paper, and why.static classstatic final classWire shape for one metric column ofDatasetsWebService.SequencingQcMetricsValueObject.static classstatic classstatic classCursor-mode counterpart toDatasetsWebService.QueriedAndFilteredAndInferredAndPaginatedResponseDataObject.static classCursor shape forgetDatasetsExpressionLevelsForGene(GeneArg, QueryArg, FilterArg, OffsetArg, LimitArg, Boolean, ExpLevelConsolidationArg, CursorArg, Boolean)/getDatasetsExpressionLevelsForGeneInTaxon(TaxonArg, GeneArg, QueryArg, FilterArg, OffsetArg, LimitArg, Boolean, ExpLevelConsolidationArg, CursorArg, Boolean).static classstatic classstatic classstatic classLegacy shape forgetDatasetsExpressionLevelsForGene(GeneArg, QueryArg, FilterArg, OffsetArg, LimitArg, Boolean, ExpLevelConsolidationArg, CursorArg, Boolean)/getDatasetsExpressionLevelsForGeneInTaxon(TaxonArg, GeneArg, QueryArg, FilterArg, OffsetArg, LimitArg, Boolean, ExpLevelConsolidationArg, CursorArg, Boolean).static classstatic classstatic classResponse body forrenameDatasetShortName(DatasetArg, DatasetsWebService.RenameDatasetRequest).static classstatic classstatic classLegacy full-fidelity shape forgetDatasetAuditEvents(DatasetArg, CursorArg, LimitArg, boolean, boolean)(compact=false).static classLegacy-mode response shape forgetDatasetSamples(DatasetArg, QuantitationTypeArg, boolean, CursorArg, LimitArg, ExcludeArg, boolean).static classstatic classLegacy collapsed shape forgetDatasetAuditEvents(DatasetArg, CursorArg, LimitArg, boolean, boolean)(compact=true).static classLegacy shape forgetDatasetTickets(DatasetArg, CursorArg, LimitArg).static classstatic final classWire shape for one sub-sample report row ofDatasetsWebService.SampleQcMetricsValueObject.static classOne per-sample characteristic (CABSampleCharacteristicCommit); the sample is a GSM short name.static final classWire shape forgetDatasetSampleCorrelation(DatasetArg, DatasetsWebService.CorrelationMatrixChoice): a symmetric N×N Pearson correlation matrix with bioAssay ids + short names parallel to the rows/columns.static classstatic final classWire shape for one bioAssay's row ofDatasetsWebService.SequencingQcMetricsValueObject.static classA committable collection: authoritativeitemsplus explicitdeletedIds(the only way to remove).static final classWire shape forgetDatasetQcMetrics(DatasetArg).static final classstatic classOne row ofgetStaleDatasets(OffsetArg, LimitArg): a dataset owing pipeline work, and what it owes.static classOne statement (subject / predicate / object triple with an optional category).static classOne experiment-level tag (CABTagCommit); a statement-shaped tag rides itsstatements.static final classstatic interface -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionjakarta.ws.rs.core.ResponseacquireCurationLock(DatasetArg<?> datasetArg, Boolean steal, Integer ttlMinutes, String onBehalfOf, String runId, String agentName) acquireCurationLocks(Boolean steal, Integer ttlMinutes, String onBehalfOf, String runId, String agentName, DatasetsWebService.CurationLockBulkRequest body) jakarta.ws.rs.core.ResponseaddDatasetAnnotationTag(DatasetArg<?> datasetArg, AnnotationsWebService.AnnotationDto body, Long annotationSetId) addSampleCharacteristic(DatasetArg<?> datasetArg, Long bioAssayId, DatasetsWebService.AnnotationTagInput body) batchMarkSampleOutliers(DatasetArg<?> datasetArg, DatasetsWebService.BatchOutlierRequest body) Batch outlier mark / unmark.jakarta.ws.rs.core.ResponseclearFactorValueNeedsAttention(DatasetArg<?> datasetArg, Long factorValueId, String note) Resolve every open needs-attention ticket on a factor value.commitCuration(DatasetArg<?> datasetArg, Boolean force, String onBehalfOf, DatasetsWebService.CurationDocument body) jakarta.ws.rs.core.ResponsedeleteDatasetProcessedData(DatasetArg<?> datasetArg, boolean confirm) Delete the processed expression data vectors for a dataset (port ofdeleteProcessedDataCLI).jakarta.ws.rs.core.ResponsedeleteDatasetRawData(DatasetArg<?> datasetArg, QuantitationTypeArg<?> quantitationTypeArg, boolean confirm) Delete the raw expression data vectors for a dataset (port ofdeleteRawDataCLI).getBlacklistedDatasets(FilterArg<ExpressionExperiment> filterArg, SortArg<ExpressionExperiment> sortArg, OffsetArg offset, LimitArg limit, CursorArg cursorArg) Browse blacklisted datasets.jakarta.ws.rs.core.ResponsegetCurationDecisions(DatasetArg<?> datasetArg, boolean history) The standing refusals on a dataset, or the whole decision log.jakarta.ws.rs.core.ResponsegetCurationLock(DatasetArg<?> datasetArg) 🛑 This route deliberately serves the BARE object, not the{"data": …}envelope the rest of the service uses.getCurationLocks(DatasetArrayArg datasets) getDatasetAllPublications(DatasetArg<?> datasetArg, Boolean includeRejected) getDatasetAnnotations(DatasetArg<?> datasetArg, Boolean includeFreeText) Retrieves the annotations for the given dataset.getDatasetAuditEvents(DatasetArg<?> datasetArg, CursorArg cursorArg, LimitArg limitArg, boolean compact, boolean excludeEmpty) getDatasetBatchInformation(DatasetArg<?> datasetArg) getDatasetCellLevelCharacteristics(DatasetArg<?> datasetArg, QuantitationTypeArg<?> qtArg, jakarta.ws.rs.core.HttpHeaders headers) getDatasetCellTypeAssignment(DatasetArg<?> datasetArg, QuantitationTypeArg<?> qtArg, String ctaName, String protocolName, ExcludeArg<CellTypeAssignmentValueObject> excludeArg, Boolean useBioAssayId, jakarta.ws.rs.core.HttpHeaders headers) getDatasetCurationDetails(DatasetArg<?> datasetArg) jakarta.ws.rs.core.ResponsegetDatasetDesign(DatasetArg<?> datasetArg, QuantitationTypeArg<?> quantitationTypeArg, Boolean useProcessedQuantitationType, Boolean download, Boolean force) Retrieves the design for the given dataset.getDatasetDesignJson(DatasetArg<?> datasetArg) Retrieves the structured experimental design for the given dataset as JSON.getDatasetDifferentialExpressionAnalyses(DatasetArg<?> datasetArg, OffsetArg offsetArg, LimitArg limitArg, boolean includeAssays) Retrieves the differential analysis results for the given dataset.jakarta.ws.rs.core.ResponsegetDatasetDifferentialExpressionAnalysisResultSets(DatasetArg<?> datasetArg, jakarta.ws.rs.core.UriInfo uriInfo) Retrieves the result sets of all the differential expression analyses of a dataset.jakarta.ws.rs.core.ResponsegetDatasetDiffExAnalysisArchive(DatasetArg<?> datasetArg, Long analysisId, Boolean download, Boolean force) Retrieve the differential-expression analysis archive for a dataset.jakarta.ws.rs.core.ResponsegetDatasetDraftAnnotationSet(DatasetArg<?> datasetArg, String onBehalfOf) jakarta.ws.rs.core.ResponsegetDatasetExpression(DatasetArg<?> datasetArg, Boolean filterData, Boolean download, Boolean force) Retrieves the data for the given dataset.getDatasetGeeq(DatasetArg<?> datasetArg) getDatasetGeeqPublic(DatasetArg<?> datasetArg) Public sibling ofgetDatasetGeeq(DatasetArg): returns the per-factor GEEQ breakdown without exposing the admin-only detected/manual override scores or the free-textotherIssuescurator field, which live onGeeqAdminValueObject.getDatasetGroups(DatasetArg<?> datasetArg, boolean includeSummaries, boolean includeSummariesLegacy) Groups that have ANY permission (read or admin) on the given dataset (gap §3c ofGEMMA_UI_ENDPOINT_GAP.md).getDatasetHasBatchInformation(DatasetArg<?> datasetArg) Indicate if the experiment has batch information.getDatasetMeanVariance(DatasetArg<?> datasetArg) Retrieves the per-probe mean / variance pre-computed byMeanVarianceService.jakarta.ws.rs.core.ResponsegetDatasetMetadataFile(DatasetArg<?> datasetArg, String typeArg, Boolean download) Stream a single preprocessing-metadata file by type for a dataset.getDatasetMetadataFiles(DatasetArg<?> datasetArg) List the preprocessing-metadata files available for a dataset.getDatasetPermissions(DatasetArg<?> datasetArg) Retrieve the current sharing state of a dataset.getDatasetPipelineStatus(DatasetArg<?> datasetArg) getDatasetPipelineStatusAlias(DatasetArg<?> datasetArg) Curation-UI compatibility alias forgetDatasetPipelineStatus(DatasetArg): the UI uses the flatter, hyphenated path/datasets/{id}/pipeline-status; the canonical handler lives at/pipelineStatus.getDatasetPlatforms(DatasetArg<?> datasetArg, Boolean original) Retrieves platforms for the given dataset.jakarta.ws.rs.core.ResponsegetDatasetProcessedExpression(DatasetArg<?> datasetArg, Boolean filtered, Boolean download, Boolean force) Retrieve processed expression data.getDatasetQcMetrics(DatasetArg<?> datasetArg) Retrieves the per-sample sequencing QC metrics for a dataset — read depth, mapping rate, duplication and the rest of the RNA-Seq pipeline's MultiQC general statistics — keyed by bioAssay id.getDatasetQuantitationTypes(DatasetArg<?> datasetArg) Retrieve all available quantitation types for a dataset.jakarta.ws.rs.core.ResponsegetDatasetRawExpression(DatasetArg<?> datasetArg, QuantitationTypeArg<?> quantitationTypeArg, Boolean download, Boolean force) Retrieve raw expression data.DatasetsWebService.QueriedAndFilteredAndInferredAndPaginatedResponseDataObject<DatasetsWebService.ExpressionExperimentWithSearchResultValueObject> getDatasets(QueryArg query, FilterArg<ExpressionExperiment> filterArg, OffsetArg offsetArg, LimitArg limitArg, SortArg<ExpressionExperiment> sortArg) getDatasetSampleCorrelation(DatasetArg<?> datasetArg, DatasetsWebService.CorrelationMatrixChoice which) Retrieves the sample-sample correlation matrix plus both outlier classifications (curator-flagged + algorithmic), unmasked.getDatasetSamples(DatasetArg<?> datasetArg, QuantitationTypeArg<?> quantitationTypeArg, boolean useProcessedQuantitationType, CursorArg cursorArg, LimitArg limitArg, ExcludeArg<BioAssayValueObject> excludeArg, boolean includePredictedOutliers) Retrieves the samples for the given dataset.DatasetsWebService.QueriedAndFilteredAndInferredAndLimitedResponseDataObject<DatasetsWebService.AnnotationWithUsageStatisticsValueObject> getDatasetsAnnotationsUsageStatistics(QueryArg query, FilterArg<ExpressionExperiment> filter, ExcludeArg<DatasetsWebService.AnnotationWithUsageStatisticsValueObject> exclude, LimitArg limitArg, Integer minFrequency, String category, StringArrayArg excludedCategoryUris, Boolean excludeFreeTextCategories, StringArrayArg excludedTermUris, Boolean excludeFreeTextTerms, Boolean excludeUncategorizedTerms, Boolean retainMentionedTerms, Boolean includePredicates, Boolean includeObjects) getDatasetsByIds(DatasetArrayArg datasetsArg, FilterArg<ExpressionExperiment> filter, OffsetArg offset, LimitArg limit, SortArg<ExpressionExperiment> sort, CursorArg cursorArg) Retrieves all datasets matching the given identifiers.DatasetsWebService.QueriedAndFilteredAndInferredAndLimitedResponseDataObject<DatasetsWebService.CategoryWithUsageStatisticsValueObject> getDatasetsCategoriesUsageStatistics(QueryArg query, FilterArg<ExpressionExperiment> filter, LimitArg limit, StringArrayArg excludedCategoryUris, Boolean excludeFreeTextCategories, StringArrayArg excludedTermUris, Boolean excludeFreeTextTerms, Boolean excludeUncategorizedTerms, Boolean retainMentionedTerms) getDatasetsDifferentialExpression(DatasetArrayArg datasets, Long diffExSet, Double threshold, LimitArg limit, Boolean keepNonSpecific, ExpLevelConsolidationArg consolidate, Boolean precise) Retrieves the expression levels of genes highly expressed in the given component on given datasets.getDatasetsDifferentialExpressionAnalysisResultsForGene(GeneArg<?> geneArg, QueryArg query, FilterArg<ExpressionExperiment> filter, OffsetArg offsetArg, LimitArg limitArg, Double threshold, jakarta.ws.rs.core.HttpHeaders headers) Obtain differential expression analysis results for a given gene.getDatasetsDifferentialExpressionAnalysisResultsForGeneInTaxon(TaxonArg<?> taxonArg, GeneArg<?> geneArg, QueryArg query, FilterArg<ExpressionExperiment> filter, OffsetArg offsetArg, LimitArg limitArg, Double threshold, jakarta.ws.rs.core.HttpHeaders headers) Obtain differential expression analysis results for a given gene in a given taxon.getDatasetsExpressionLevelsForGene(GeneArg<?> geneArg, QueryArg queryArg, FilterArg<ExpressionExperiment> filterArg, OffsetArg offsetArg, LimitArg limitArg, Boolean keepNonSpecific, ExpLevelConsolidationArg consolidate, CursorArg cursorArg, Boolean precise) Retrieve the expression levels of a given gene across all datasets.getDatasetsExpressionLevelsForGeneInTaxon(TaxonArg<?> taxonArg, GeneArg<?> geneArg, QueryArg queryArg, FilterArg<ExpressionExperiment> filterArg, OffsetArg offsetArg, LimitArg limitArg, Boolean keepNonSpecific, ExpLevelConsolidationArg consolidate, CursorArg cursorArg, Boolean precise) Retrieve the expression levels of a given gene and taxon across all datasets.getDatasetsExpressionLevelsForGenes(DatasetArrayArg datasets, GeneArrayArg genes, Boolean keepNonSpecific, ExpLevelConsolidationArg consolidate, Boolean precise) getDatasetsExpressionLevelsForGenesInTaxon(DatasetArrayArg datasets, TaxonArg<?> taxonArg, GeneArrayArg genes, Boolean keepNonSpecific, ExpLevelConsolidationArg consolidate, Boolean precise) Retrieves the expression levels of given genes on given datasets.getDatasetsExpressionPca(DatasetArrayArg datasets, Integer component, LimitArg limit, Boolean keepNonSpecific, ExpLevelConsolidationArg consolidate, Boolean precise) Retrieves the expression levels of genes highly expressed in the given component on given datasets.getDatasetSingleCellDimension(DatasetArg<?> datasetArg, QuantitationTypeArg<?> qtArg, ExcludeArg<SingleCellDimensionValueObject> excludeArg, Boolean useBioAssayIds, jakarta.ws.rs.core.HttpHeaders headers) Retrieve the single-cell dimension for a given quantitation type.jakarta.ws.rs.core.ResponsegetDatasetSingleCellExpression(DatasetArg<?> datasetArg, QuantitationTypeArg<?> quantitationTypeArg, Boolean download, Boolean force, jakarta.ws.rs.core.HttpHeaders headers) ResponseDataObject<com.fasterxml.jackson.databind.JsonNode> getDatasetSourceMetadata(DatasetArg<?> datasetArg) getDatasetsPipelineStatus(DatasetArrayArg datasets) Bulk sibling ofgetDatasetPipelineStatus(DatasetArg).DatasetsWebService.QueriedAndFilteredAndInferredAndLimitedResponseDataObject<DatasetsWebService.ArrayDesignWithUsageStatisticsValueObject> getDatasetsPlatformsUsageStatistics(QueryArg query, FilterArg<ExpressionExperiment> filter, LimitArg limit) DatasetsWebService.QueriedAndFilteredAndInferredResponseDataObject<DatasetsWebService.TaxonWithUsageStatisticsValueObject> getDatasetsTaxaUsageStatistics(QueryArg query, FilterArg<ExpressionExperiment> filterArg) getDatasetSubSetById(DatasetArg<?> datasetArg, Long subSetId) getDatasetSubSetGroup(DatasetArg<?> datasetArg, Long bioAssayDimensionId, boolean includePredictedOutliers) getDatasetSubSetGroups(DatasetArg<?> datasetArg) Retrieve all the "groups" of subsets of a dataset.getDatasetSubSets(DatasetArg<?> datasetArg) getDatasetSubSetSamples(DatasetArg<?> datasetArg, Long subSetId, CursorArg cursorArg, LimitArg limitArg, boolean includePredictedOutliers) Retrieves the samples of a specific subset of a dataset.getDatasetSvd(DatasetArg<?> datasetArg) Retrieves the design for the given dataset.getDatasetSvdLoadings(DatasetArg<?> datasetArg, Integer pc, Integer top, DatasetsWebService.PcLoadingDirection direction) Retrieve the top-N probe loadings on a chosen principal component, plus the bioAssay scores on that PC.getDatasetTickets(DatasetArg<?> datasetArg, CursorArg cursorArg, LimitArg limitArg) getDatasetVisibility(DatasetArg<?> datasetArg) Curation-UI compatibility alias forgetDatasetPermissions(DatasetArg).getNumberOfAnnotations(QueryArg query, FilterArg<ExpressionExperiment> filter, String category, Integer minFrequency, Boolean excludeFreeText) getNumberOfDatasets(QueryArg query, FilterArg<ExpressionExperiment> filter) getSampleCharacteristics(DatasetArg<?> datasetArg, Long bioAssayId) getStaleDatasets(OffsetArg offset, LimitArg limit) The datasets that owe pipeline work: every dataset with at least onestalestep, and which steps those are.jakarta.ws.rs.core.ResponseCuration-UI workflow-step endpoint: kick off an async GEO (or ArrayExpress) accession load.jakarta.ws.rs.core.ResponselistDatasetAnnotationSets(DatasetArg<?> datasetArg, String role, String source, String createdBy, String shape) makeDatasetPrivate(DatasetArg<?> datasetArg) Curation-UI workflow-step endpoint: raw ACL flip to make a dataset private.makeDatasetPublic(DatasetArg<?> datasetArg) Curation-UI workflow-step endpoint: raw ACL flip to make a dataset publicly readable.markDatasetSampleOutlier(DatasetArg<?> datasetArg, Long bioAssayId, DatasetsWebService.SampleOutlierRequest body) Mark (or unmark) a BioAssay as a sample outlier.jakarta.ws.rs.core.ResponsemarkFactorValueNeedsAttention(DatasetArg<?> datasetArg, Long factorValueId, DatasetsWebService.FactorValueNeedsAttentionRequest body) Open a "needs attention" ticket against a factor value.patchDatasetQuantitationType(DatasetArg<?> datasetArg, Long qtId, DatasetsWebService.QuantitationTypePatchRequest body) Body-driven PATCH dispatcher for a quantitation type.preflightCuration(DatasetArg<?> datasetArg, String onBehalfOf, DatasetsWebService.CurationDocument body) previewDatasetDesignChange(DatasetArg<?> datasetArg, ExperimentalDesignValueObject proposed) Dry-run preflight for a proposed design replacement.publishDataset(DatasetArg<?> datasetArg, String reviewer) Curation-UI workflow-step endpoint: curator-state-machine transition that publishes a dataset under a named reviewer.recomputeDatasetGeeq(DatasetArg<?> datasetArg, GeeqService.ScoreMode mode) recomputeDatasetGeeqViaPost(DatasetArg<?> datasetArg, DatasetsWebService.GeeqRecomputeRequest body) Alias forrecomputeDatasetGeeq(DatasetArg, GeeqService.ScoreMode)that exposes the GEEQ recompute underPOST /datasets/{id}/geeq/recomputewith a JSON body.recomputeDatasetGeeqViaPostAlias(DatasetArg<?> datasetArg, DatasetsWebService.GeeqRecomputeRequest body) Curation-UI compatibility alias forrecomputeDatasetGeeqViaPost(DatasetArg, DatasetsWebService.GeeqRecomputeRequest): UI callsPOST /datasets/{id}/geeq/recalculatewith the same body shape.jakarta.ws.rs.core.ResponserecordCurationDecision(DatasetArg<?> datasetArg, String onBehalfOf, DatasetsWebService.CurationDecisionRequest body) Record a curator's standing ruling that a change must NOT be made -- or, rarely, that one may be.jakarta.ws.rs.core.ResponseredoDatasetDifferentialAnalysis(DatasetArg<?> datasetArg, Long analysisId) jakarta.ws.rs.core.ResponseredoDatasetDifferentialAnalysisAlias(DatasetArg<?> datasetArg, Long analysisId) Curation-UI compatibility alias forredoDatasetDifferentialAnalysis(DatasetArg, Long): UI callsPOST /datasets/{id}/analyses/differential/{aid}/redo; the canonical handler lives at/tasks/redo/{analysisId}.jakarta.ws.rs.core.ResponserefreshDataset(DatasetArg<?> datasetArg, Boolean refreshVectors, Boolean refreshReports) Retrieve a "refreshed" dataset.jakarta.ws.rs.core.ResponserefreshDatasetsAnnotations(QueryArg query, FilterArg<ExpressionExperiment> filter, ExcludeArg<DatasetsWebService.AnnotationWithUsageStatisticsValueObject> exclude, LimitArg limitArg, Integer minFrequency, String category, StringArrayArg excludedCategoryUris, Boolean excludeFreeTextCategories, StringArrayArg excludedTermUris, Boolean excludeFreeTextTerms, Boolean excludeUncategorizedTerms, Boolean retainMentionedTerms, Boolean includePredicates, Boolean includeObjects) jakarta.ws.rs.core.ResponserefreshDatasetsPlatforms(QueryArg query, FilterArg<ExpressionExperiment> filter, LimitArg limit) jakarta.ws.rs.core.ResponsereleaseCurationLock(DatasetArg<?> datasetArg, String onBehalfOf) releaseCurationLocks(String onBehalfOf, DatasetsWebService.CurationLockBulkRequest body) jakarta.ws.rs.core.ResponseremoveDatasetAnnotationTag(DatasetArg<?> datasetArg, Long annotationId) jakarta.ws.rs.core.ResponseremoveDatasetDifferentialAnalysis(DatasetArg<?> datasetArg, Long analysisId) jakarta.ws.rs.core.ResponseremoveDatasetDifferentialAnalysisAlias(DatasetArg<?> datasetArg, Long analysisId) Curation-UI compatibility alias forremoveDatasetDifferentialAnalysis(DatasetArg, Long): UI callsDELETE /datasets/{id}/analyses/differential/{aid}.removeSampleCharacteristic(DatasetArg<?> datasetArg, Long bioAssayId, Long characteristicId) renameDatasetShortName(DatasetArg<?> datasetArg, DatasetsWebService.RenameDatasetRequest body) jakarta.ws.rs.core.ResponsereplaceDatasetDesign(DatasetArg<?> datasetArg, Boolean force, Long agentProposalId, ExperimentalDesignValueObject proposed) Apply a proposedExperimentalDesignValueObjectas the experiment's new design.restoreDatasetCurationFromSnapshot(DatasetArg<?> datasetArg, Long setId, Boolean dryRun, Boolean force, String onBehalfOf) jakarta.ws.rs.core.ResponserunDatasetBatchInformationFetch(DatasetArg<?> datasetArg) jakarta.ws.rs.core.ResponserunDatasetBatchInformationFetchAlias(DatasetArg<?> datasetArg) Curation-UI compatibility alias forrunDatasetBatchInformationFetch(DatasetArg): UI callsPOST /datasets/{id}/batchInformation/fetch.jakarta.ws.rs.core.ResponserunDatasetDiagnostics(DatasetArg<?> datasetArg) jakarta.ws.rs.core.ResponserunDatasetDiagnosticsAlias(DatasetArg<?> datasetArg) Curation-UI compatibility alias forrunDatasetDiagnostics(DatasetArg): UI callsPOST /datasets/{id}/preprocess/diagnostics.jakarta.ws.rs.core.ResponserunDatasetDifferentialAnalysis(DatasetArg<?> datasetArg, DatasetsWebService.DifferentialAnalysisRunRequest body) jakarta.ws.rs.core.ResponserunDatasetDifferentialAnalysisAlias(DatasetArg<?> datasetArg, DatasetsWebService.DifferentialAnalysisRunRequest body) Alias forrunDatasetDifferentialAnalysis(DatasetArg, DifferentialAnalysisRunRequest)that exposes the DEA dispatch under/datasets/{id}/analyses/differential.jakarta.ws.rs.core.ResponserunDatasetGeeq(DatasetArg<?> datasetArg, GeeqService.ScoreMode mode) jakarta.ws.rs.core.ResponserunDatasetPreprocess(DatasetArg<?> datasetArg) jakarta.ws.rs.core.ResponserunDatasetPreprocessAlias(DatasetArg<?> datasetArg) Curation-UI compatibility alias forrunDatasetPreprocess(DatasetArg): UI callsPOST /datasets/{id}/preprocess.jakarta.ws.rs.core.ResponserunDatasetSvd(DatasetArg<?> datasetArg) jakarta.ws.rs.core.ResponserunDatasetSwitchPlatform(DatasetArg<?> datasetArg, DatasetsWebService.PlatformSwitchRequest body) searchDatasets(QueryArg query, LimitArg limit) Deprecated.setDatasetQuantitationTypePreferred(DatasetArg<?> datasetArg, Long qtId, DatasetsWebService.QuantitationTypePreferredRequest body) Mark a QuantitationType as the preferred one (within its vector-type bucket) for the given dataset.signDatasetCuration(DatasetArg<?> datasetArg, String onBehalfOf, Boolean dryRun, Boolean keepLock, DatasetsWebService.CurationDocument body) jakarta.ws.rs.core.ResponsesnapshotDatasetCuration(DatasetArg<?> datasetArg, String createdBy) jakarta.ws.rs.core.ResponsesubmitDatasetAnnotationSet(DatasetArg<?> datasetArg, AnnotationSetsWebService.AnnotationSetRequest body) updateDatasetAnnotations(DatasetArg<?> datasetArg, DatasetsWebService.AnnotationsUpdateRequest body) updateDatasetBasics(DatasetArg<?> datasetArg, DatasetsWebService.DatasetBasicsUpdateRequest body) updateDatasetCurationDetails(DatasetArg<?> datasetArg, DatasetsWebService.CurationDetailsUpdateRequest body) Deprecated.per Decision 1 ofAUDIT_AS_WORKFLOW_RECCE.mdthetroubled/needsAttentionflips are now backed byTicketService: atroubled=trueflip opens aTicketType.QUALITY_REVIEWticket,troubled=falseresolves the matching open ticket(s), and analogously forneedsAttention(mapped toTicketType.GENERICon open).updateDatasetPermissions(DatasetArg<?> datasetArg, DatasetsWebService.PermissionsUpdateRequest body) updateDatasetPublications(DatasetArg<?> datasetArg, DatasetsWebService.PublicationsUpdateRequest body) updateSampleCharacteristics(DatasetArg<?> datasetArg, Long bioAssayId, DatasetsWebService.AnnotationsUpdateRequest body) jakarta.ws.rs.core.ResponseupsertDatasetDraftAnnotationSet(DatasetArg<?> datasetArg, String onBehalfOf, AnnotationSetsWebService.UpsertDraftRequest body)
-
Field Details
-
TEXT_TAB_SEPARATED_VALUES_UTF8
- See Also:
-
TEXT_TAB_SEPARATED_VALUES_UTF8_TYPE
public static final jakarta.ws.rs.core.MediaType TEXT_TAB_SEPARATED_VALUES_UTF8_TYPE -
APPLICATION_10X_MEX
- See Also:
-
APPLICATION_10X_MEX_TYPE
public static final jakarta.ws.rs.core.MediaType APPLICATION_10X_MEX_TYPE
-
-
Constructor Details
-
DatasetsWebService
public DatasetsWebService()
-
-
Method Details
-
getDatasets
@GZIP @GET @Produces("application/json") public DatasetsWebService.QueriedAndFilteredAndInferredAndPaginatedResponseDataObject<DatasetsWebService.ExpressionExperimentWithSearchResultValueObject> getDatasets(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filterArg, @QueryParam("offset") @DefaultValue("0") OffsetArg offsetArg, @QueryParam("limit") @DefaultValue("20") LimitArg limitArg, @QueryParam("sort") SortArg<ExpressionExperiment> sortArg) -
searchDatasets
@Deprecated @GET @Path("/search") @Produces("application/json") public ResponseDataObject<List<DatasetsWebService.DatasetSearchHitValueObject>> searchDatasets(@QueryParam("query") QueryArg query, @QueryParam("limit") @DefaultValue("20") LimitArg limit) Deprecated.redundant withGET /datasets?query=...(the paginated catalogue runs the same search), which every known client uses instead — no caller of this endpoint was found across gemma-ui, gemma-curation-agents, or gemma.R. Scheduled for removal in the 2.10 release.Typeahead-style search for datasets. Wraps the globalSearchServicefiltered toExpressionExperimentand projects each hit to a thinDatasetsWebService.DatasetSearchHitValueObject. Intended for the curation-UI browser import dialog (seeGEMMA_UI_ENDPOINT_GAP.md§3i). -
getNumberOfDatasets
@GET @Path("/count") @Produces("application/json") public ResponseDataObject<Long> getNumberOfDatasets(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter) -
getNumberOfSamples
@GET @Path("/samples/count") @Produces("application/json") public ResponseDataObject<Long> getNumberOfSamples(@QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter) -
getDatasetsPlatformsUsageStatistics
@GZIP @GET @Path("/platforms") @Produces("application/json") public DatasetsWebService.QueriedAndFilteredAndInferredAndLimitedResponseDataObject<DatasetsWebService.ArrayDesignWithUsageStatisticsValueObject> getDatasetsPlatformsUsageStatistics(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("limit") @DefaultValue("50") LimitArg limit) -
refreshDatasetsPlatforms
@GET @Path("/platforms/refresh") @PreAuthorize("hasAuthority('GROUP_CURATOR')") @Produces("application/json") public jakarta.ws.rs.core.Response refreshDatasetsPlatforms(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("limit") @DefaultValue("50") LimitArg limit) -
getDatasetsCategoriesUsageStatistics
@GET @Path("/categories") @Produces("application/json") public DatasetsWebService.QueriedAndFilteredAndInferredAndLimitedResponseDataObject<DatasetsWebService.CategoryWithUsageStatisticsValueObject> getDatasetsCategoriesUsageStatistics(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("limit") @DefaultValue("20") LimitArg limit, @QueryParam("excludedCategories") StringArrayArg excludedCategoryUris, @QueryParam("excludeFreeTextCategories") @DefaultValue("false") Boolean excludeFreeTextCategories, @QueryParam("excludedTerms") StringArrayArg excludedTermUris, @QueryParam("excludeFreeTextTerms") @DefaultValue("false") Boolean excludeFreeTextTerms, @QueryParam("excludeUncategorizedTerms") @DefaultValue("false") Boolean excludeUncategorizedTerms, @QueryParam("retainMentionedTerms") @DefaultValue("false") Boolean retainMentionedTerms) -
getDatasetsAnnotationsUsageStatistics
@GET @GZIP @Path("/annotations") @Produces("application/json") public DatasetsWebService.QueriedAndFilteredAndInferredAndLimitedResponseDataObject<DatasetsWebService.AnnotationWithUsageStatisticsValueObject> getDatasetsAnnotationsUsageStatistics(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("exclude") ExcludeArg<DatasetsWebService.AnnotationWithUsageStatisticsValueObject> exclude, @QueryParam("limit") LimitArg limitArg, @QueryParam("minFrequency") Integer minFrequency, @QueryParam("category") String category, @QueryParam("excludedCategories") StringArrayArg excludedCategoryUris, @QueryParam("excludeFreeTextCategories") @DefaultValue("false") Boolean excludeFreeTextCategories, @QueryParam("excludedTerms") StringArrayArg excludedTermUris, @QueryParam("excludeFreeTextTerms") @DefaultValue("false") Boolean excludeFreeTextTerms, @QueryParam("excludeUncategorizedTerms") @DefaultValue("false") Boolean excludeUncategorizedTerms, @QueryParam("retainMentionedTerms") @DefaultValue("false") Boolean retainMentionedTerms, @QueryParam("includePredicates") @DefaultValue("false") Boolean includePredicates, @QueryParam("includeObjects") @DefaultValue("false") Boolean includeObjects) -
getNumberOfAnnotations
@GET @Path("/annotations/count") @Produces("application/json") public ResponseDataObject<Long> getNumberOfAnnotations(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("category") String category, @QueryParam("minFrequency") @DefaultValue("1") Integer minFrequency, @QueryParam("excludeFreeText") @DefaultValue("false") Boolean excludeFreeText) -
refreshDatasetsAnnotations
@GET @Path("/annotations/refresh") @PreAuthorize("hasAuthority('GROUP_CURATOR')") @Produces("application/json") public jakarta.ws.rs.core.Response refreshDatasetsAnnotations(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("exclude") ExcludeArg<DatasetsWebService.AnnotationWithUsageStatisticsValueObject> exclude, @QueryParam("limit") LimitArg limitArg, @QueryParam("minFrequency") Integer minFrequency, @QueryParam("category") String category, @QueryParam("excludedCategories") StringArrayArg excludedCategoryUris, @QueryParam("excludeFreeTextCategories") @DefaultValue("false") Boolean excludeFreeTextCategories, @QueryParam("excludedTerms") StringArrayArg excludedTermUris, @QueryParam("excludeFreeTextTerms") @DefaultValue("false") Boolean excludeFreeTextTerms, @QueryParam("excludeUncategorizedTerms") @DefaultValue("false") Boolean excludeUncategorizedTerms, @QueryParam("retainMentionedTerms") @DefaultValue("false") Boolean retainMentionedTerms, @QueryParam("includePredicates") @DefaultValue("false") Boolean includePredicates, @QueryParam("includeObjects") @DefaultValue("false") Boolean includeObjects) -
getDatasetsTaxaUsageStatistics
@GET @Path("/taxa") @Produces("application/json") public DatasetsWebService.QueriedAndFilteredAndInferredResponseDataObject<DatasetsWebService.TaxonWithUsageStatisticsValueObject> getDatasetsTaxaUsageStatistics(@QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filterArg) -
getDatasetsByIds
@GET @Path("/{dataset}") @Produces("application/json") public Object getDatasetsByIds(@PathParam("dataset") DatasetArrayArg datasetsArg, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("offset") @DefaultValue("0") OffsetArg offset, @QueryParam("limit") @DefaultValue("20") LimitArg limit, @QueryParam("sort") @DefaultValue("+id") SortArg<ExpressionExperiment> sort, @QueryParam("cursor") CursorArg cursorArg) Retrieves all datasets matching the given identifiers.- Parameters:
datasetsArg- a list of identifiers, separated by commas (','). Identifiers can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient.Only datasets that user has access to will be available.
Do not combine different identifiers in one query.
-
getBlacklistedDatasets
@GET @Path("/blacklisted") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public Object getBlacklistedDatasets(@QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filterArg, @QueryParam("sort") @DefaultValue("+id") SortArg<ExpressionExperiment> sortArg, @QueryParam("offset") @DefaultValue("0") OffsetArg offset, @QueryParam("limit") @DefaultValue("20") LimitArg limit, @QueryParam("cursor") CursorArg cursorArg) Browse blacklisted datasets. -
getDatasetPlatforms
@GET @Path("/{dataset}/platforms") @Produces("application/json") public ResponseDataObject<List<ArrayDesignValueObject>> getDatasetPlatforms(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("original") @DefaultValue("false") Boolean original) Retrieves platforms for the given dataset.- Parameters:
datasetArg- can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.
-
getDatasetSamples
@GET @GZIP @Path("/{dataset}/samples") @Produces("application/json") public Object getDatasetSamples(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("quantitationType") QuantitationTypeArg<?> quantitationTypeArg, @QueryParam("useProcessedQuantitationType") boolean useProcessedQuantitationType, @QueryParam("cursor") CursorArg cursorArg, @QueryParam("limit") LimitArg limitArg, @QueryParam("exclude") ExcludeArg<BioAssayValueObject> excludeArg, @QueryParam("includePredictedOutliers") @DefaultValue("false") boolean includePredictedOutliers) Retrieves the samples for the given dataset.- Parameters:
datasetArg- can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.
-
markDatasetSampleOutlier
@PUT @Path("/{dataset}/samples/{bioAssayId}/outlier") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<BioAssayValueObject> markDatasetSampleOutlier(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("bioAssayId") Long bioAssayId, @Nullable DatasetsWebService.SampleOutlierRequest body) Mark (or unmark) a BioAssay as a sample outlier.Curation-UI workflow-step endpoint: the experiment-page "flag/unflag outlier" buttons call this. Flagging sets the assay's processed-data values to missing via
OutlierFlaggingService.markAsMissing(Collection); the inverse reverts that. The endpoint validates that the supplied bioAssay belongs to the path-derived dataset before mutating, returning400otherwise. -
batchMarkSampleOutliers
@POST @Path("/{dataset}/samples/outliers") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<DatasetsWebService.BatchOutlierResponse> batchMarkSampleOutliers(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.BatchOutlierRequest body) Batch outlier mark / unmark. Pairs withGET /sample-correlation— the UI builds up mark/unmark deltas as the curator clicks samples, then sends a single request to persist the change. Delta semantics (not declarative replacement) so a filtered UI view can't accidentally unflag samples the user couldn't see. -
markFactorValueNeedsAttention
@POST @Path("/{dataset}/factor-values/{factorValueId}/needs-attention") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_USER')") public jakarta.ws.rs.core.Response markFactorValueNeedsAttention(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("factorValueId") Long factorValueId, @Nullable DatasetsWebService.FactorValueNeedsAttentionRequest body) Open a "needs attention" ticket against a factor value.Replaces the legacy gemma-web
ExperimentalDesignController.markFactorValuesAsNeedsAttentionAJAX call. Routes throughFactorValueNeedsAttentionService, which opens aTicketType.GENERICticket targeting both the factor value and its owning EE. -
clearFactorValueNeedsAttention
@DELETE @Path("/{dataset}/factor-values/{factorValueId}/needs-attention") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_USER')") public jakarta.ws.rs.core.Response clearFactorValueNeedsAttention(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("factorValueId") Long factorValueId, @QueryParam("note") @Nullable String note) Resolve every open needs-attention ticket on a factor value. -
getDatasetAllPublications
@GET @Path("/{dataset}/publications") @Produces("application/json") public ResponseDataObject<List<DatasetPublicationValueObject>> getDatasetAllPublications(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("includeRejected") @DefaultValue("false") Boolean includeRejected) -
getDatasetSourceMetadata
@GET @GZIP @Path("/{dataset}/sourceMetadata") @Produces("application/json") public ResponseDataObject<com.fasterxml.jackson.databind.JsonNode> getDatasetSourceMetadata(@PathParam("dataset") DatasetArg<?> datasetArg) -
updateDatasetPublications
@PUT @Path("/{dataset}/publications") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<List<DatasetPublicationValueObject>> updateDatasetPublications(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.PublicationsUpdateRequest body) -
getDatasetTickets
@GET @Path("/{dataset}/tickets") @Produces("application/json") public Object getDatasetTickets(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("cursor") CursorArg cursorArg, @QueryParam("limit") @DefaultValue("20") LimitArg limitArg) -
getDatasetTicketsBulk
@POST @Path("/tickets") @Consumes("application/json") @Produces("application/json") @PreAuthorize("isAuthenticated()") public ResponseDataObject<Map<Long, List<TicketSummaryForTargetValueObject>>> getDatasetTicketsBulk(@Nullable DatasetsWebService.DatasetTicketsBulkRequest body) -
getDatasetGroups
@GET @Path("/{dataset}/groups") @Produces("application/json") public ResponseDataObject<?> getDatasetGroups(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("includeSummaries") @DefaultValue("false") boolean includeSummaries, @QueryParam("include_summaries") @DefaultValue("false") boolean includeSummariesLegacy) Groups that have ANY permission (read or admin) on the given dataset (gap §3c ofGEMMA_UI_ENDPOINT_GAP.md). WhenincludeSummaries=true, each entry includes the group's lightweight summary (name, description, memberCount); otherwise only the group names are returned. -
getDatasetAuditEvents
@GET @GZIP @Path("/{dataset}/auditEvents") @Produces("application/json") public Object getDatasetAuditEvents(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("cursor") CursorArg cursorArg, @QueryParam("limit") @Nullable LimitArg limitArg, @QueryParam("compact") @DefaultValue("false") boolean compact, @QueryParam("excludeEmpty") @DefaultValue("false") boolean excludeEmpty) -
submitDatasetAnnotationSet
@POST @Path("/{dataset}/annotation-sets") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public jakarta.ws.rs.core.Response submitDatasetAnnotationSet(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable AnnotationSetsWebService.AnnotationSetRequest body) -
snapshotDatasetCuration
@POST @Path("/{dataset}/annotation-sets/snapshot") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public jakarta.ws.rs.core.Response snapshotDatasetCuration(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("createdBy") @Nullable String createdBy) -
restoreDatasetCurationFromSnapshot
@POST @Path("/{dataset}/annotation-sets/{setId}/restore") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public ResponseDataObject<DatasetsWebService.CurationCommitReport> restoreDatasetCurationFromSnapshot(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("setId") Long setId, @QueryParam("dryRun") @DefaultValue("false") Boolean dryRun, @QueryParam("force") @DefaultValue("false") Boolean force, @QueryParam("onBehalfOf") @Nullable String onBehalfOf) -
listDatasetAnnotationSets
@GET @GZIP @Path("/{dataset}/annotation-sets") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public jakarta.ws.rs.core.Response listDatasetAnnotationSets(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("role") @Nullable String role, @QueryParam("source") @Nullable String source, @QueryParam("createdBy") @Nullable String createdBy, @QueryParam("shape") @Nullable String shape) -
recordCurationDecision
@POST @Path("/{dataset}/curation/decisions") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public jakarta.ws.rs.core.Response recordCurationDecision(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("onBehalfOf") @Nullable String onBehalfOf, @Nullable DatasetsWebService.CurationDecisionRequest body) Record a curator's standing ruling that a change must NOT be made -- or, rarely, that one may be. -
getCurationDecisions
@GET @Path("/{dataset}/curation/decisions") @Produces("application/json") @PreAuthorize("isAuthenticated()") public jakarta.ws.rs.core.Response getCurationDecisions(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("history") @DefaultValue("false") boolean history) The standing refusals on a dataset, or the whole decision log. -
getCurationLock
@GET @Path("/{dataset}/curation/lock") @Produces("application/json") @PreAuthorize("isAuthenticated()") public jakarta.ws.rs.core.Response getCurationLock(@PathParam("dataset") DatasetArg<?> datasetArg) 🛑 This route deliberately serves the BARE object, not the{"data": …}envelope the rest of the service uses. Do not "fix" the inconsistency.The curation UI's
api/client.tsunwraps only when adatakey is present and nothing but envelope keys sits beside it, so the bare body passes through intact andgetCurationLocktypes it asCurationLock. Wrapping it would make the client readlockedoff the envelope, getundefined— falsy — and conclude that nobody holds the lock. It would not error. It would invite a second curator into an experiment someone else is editing, which is the failure this lock exists to prevent, and no test here would catch it because the response is still valid JSON.The inconsistency was raised by cab on 2026-09-09 after their cleanup read
data.locked, got{}and skipped a release, leaving a dataset locked for its lease. That was a client assuming an envelope it had not checked, not a shape problem; cab now accepts both. uib established the direction of the danger and asked that it not change without their client landing first.⇒ If this ever does gain the envelope: uib's client goes first, this second, and the two are separate deploys. Not a change to make quietly alongside something else.
-
acquireCurationLock
@POST @Path("/{dataset}/curation/lock") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public jakarta.ws.rs.core.Response acquireCurationLock(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("steal") @DefaultValue("false") Boolean steal, @QueryParam("ttlMinutes") @DefaultValue("30") Integer ttlMinutes, @QueryParam("onBehalfOf") @Nullable String onBehalfOf, @QueryParam("runId") @Nullable String runId, @QueryParam("agentName") @Nullable String agentName) -
releaseCurationLock
@DELETE @Path("/{dataset}/curation/lock") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public jakarta.ws.rs.core.Response releaseCurationLock(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("onBehalfOf") @Nullable String onBehalfOf) -
getCurationLocks
@GET @Path("/curation/locks") @Produces("application/json") @PreAuthorize("isAuthenticated()") public ResponseDataObject<Map<Long, DatasetsWebService.CurationLockResponse>> getCurationLocks(@QueryParam("datasets") DatasetArrayArg datasets) -
getCurationLocksBulk
@POST @Path("/curation/locks/query") @Consumes("application/json") @Produces("application/json") @PreAuthorize("isAuthenticated()") public ResponseDataObject<Map<Long, DatasetsWebService.CurationLockResponse>> getCurationLocksBulk(@Nullable DatasetsWebService.CurationLockBulkRequest body) -
acquireCurationLocks
@POST @Path("/curation/locks") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public ResponseDataObject<Map<Long, DatasetsWebService.CurationLockBulkResult>> acquireCurationLocks(@QueryParam("steal") @DefaultValue("false") Boolean steal, @QueryParam("ttlMinutes") @DefaultValue("30") Integer ttlMinutes, @QueryParam("onBehalfOf") @Nullable String onBehalfOf, @QueryParam("runId") @Nullable String runId, @QueryParam("agentName") @Nullable String agentName, @Nullable DatasetsWebService.CurationLockBulkRequest body) -
releaseCurationLocks
@POST @Path("/curation/locks/release") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public ResponseDataObject<Map<Long,Boolean>> releaseCurationLocks(@QueryParam("onBehalfOf") @Nullable String onBehalfOf, @Nullable DatasetsWebService.CurationLockBulkRequest body) -
signDatasetCuration
@POST @Path("/{dataset}/curation/sign") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public ResponseDataObject<DatasetsWebService.CurationCommitReport> signDatasetCuration(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("onBehalfOf") @Nullable String onBehalfOf, @QueryParam("dryRun") @DefaultValue("false") Boolean dryRun, @QueryParam("keepLock") @DefaultValue("false") Boolean keepLock, @Nullable DatasetsWebService.CurationDocument body) -
getDatasetDraftAnnotationSet
@GET @Path("/{dataset}/annotation-sets/draft") @Produces("application/json") @PreAuthorize("isAuthenticated()") public jakarta.ws.rs.core.Response getDatasetDraftAnnotationSet(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("onBehalfOf") @Nullable String onBehalfOf) -
upsertDatasetDraftAnnotationSet
@PUT @Path("/{dataset}/annotation-sets/draft") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN') or hasAuthority('GROUP_AGENT')") public jakarta.ws.rs.core.Response upsertDatasetDraftAnnotationSet(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("onBehalfOf") @Nullable String onBehalfOf, @Nullable AnnotationSetsWebService.UpsertDraftRequest body) -
getDatasetCurationDetails
@GET @Path("/{dataset}/curationDetails") @Produces("application/json") public ResponseDataObject<CurationDetailsValueObject> getDatasetCurationDetails(@PathParam("dataset") DatasetArg<?> datasetArg) -
updateDatasetCurationDetails
@PUT @Path("/{dataset}/curationDetails") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") @Deprecated public ResponseDataObject<CurationDetailsValueObject> updateDatasetCurationDetails(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.CurationDetailsUpdateRequest body) Deprecated.per Decision 1 ofAUDIT_AS_WORKFLOW_RECCE.mdthetroubled/needsAttentionflips are now backed byTicketService: atroubled=trueflip opens aTicketType.QUALITY_REVIEWticket,troubled=falseresolves the matching open ticket(s), and analogously forneedsAttention(mapped toTicketType.GENERICon open). Clients should migrate toPOST /tickets+PUT /tickets/{id}onTicketsWebService. The endpoint is retained for back-compat while the UI moves over. ThecurationNotefield is still routed throughCurationNoteUpdateEventpending the note-to-ticket-comment migration (seeCURATION_DETAILS_RETIREMENT.md). -
renameDatasetShortName
@PUT @Path("/{dataset}/short-name") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<DatasetsWebService.RenameDatasetResponse> renameDatasetShortName(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.RenameDatasetRequest body) -
updateDatasetBasics
@PATCH @Path("/{dataset}") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<DatasetsWebService.DatasetBasicsResponse> updateDatasetBasics(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.DatasetBasicsUpdateRequest body) -
commitCuration
@PUT @Path("/{dataset}/curation") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<DatasetsWebService.CurationCommitReport> commitCuration(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("force") @DefaultValue("false") Boolean force, @QueryParam("onBehalfOf") @Nullable String onBehalfOf, @Nullable DatasetsWebService.CurationDocument body) -
preflightCuration
@POST @Path("/{dataset}/curation/preflight") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<DatasetsWebService.CurationCommitReport> preflightCuration(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("onBehalfOf") @Nullable String onBehalfOf, @Nullable DatasetsWebService.CurationDocument body) -
updateDatasetPermissions
@PUT @Path("/{dataset}/permissions") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<DatasetsWebService.DatasetPermissionsValueObject> updateDatasetPermissions(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.PermissionsUpdateRequest body) -
getDatasetPermissions
@GET @Path("/{dataset}/permissions") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<DatasetsWebService.DatasetPermissionsValueObject> getDatasetPermissions(@PathParam("dataset") DatasetArg<?> datasetArg) Retrieve the current sharing state of a dataset.Curation-UI helper: the experiment-page sharing widget needs to read the current public/shared state without performing an update. Same response shape as
updateDatasetPermissions(DatasetArg, DatasetsWebService.PermissionsUpdateRequest). -
makeDatasetPublic
@POST @Path("/{dataset}/makePublic") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<DatasetsWebService.DatasetPermissionsValueObject> makeDatasetPublic(@PathParam("dataset") DatasetArg<?> datasetArg) Curation-UI workflow-step endpoint: raw ACL flip to make a dataset publicly readable. Distinct fromPOST /publish(which is a curator-state-machine transition that ALSO calls this under the hood). Idempotent — re-running on an already-public dataset is a no-op. -
makeDatasetPrivate
@POST @Path("/{dataset}/makePrivate") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<DatasetsWebService.DatasetPermissionsValueObject> makeDatasetPrivate(@PathParam("dataset") DatasetArg<?> datasetArg) Curation-UI workflow-step endpoint: raw ACL flip to make a dataset private. Idempotent. -
publishDataset
@POST @Path("/{dataset}/publish") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<DatasetsWebService.DatasetPermissionsValueObject> publishDataset(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("reviewer") @Nullable String reviewer) Curation-UI workflow-step endpoint: curator-state-machine transition that publishes a dataset under a named reviewer. Distinct fromPOST /makePublic: this endpoint ALSO records the reviewer as aDatasetPublishedEventaudit event (with the reviewer encoded in the note), and is idempotent on already-published datasets (audit-only emission then). -
getDatasetVisibility
@GET @Path("/{dataset}/visibility") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<DatasetsWebService.DatasetPermissionsValueObject> getDatasetVisibility(@PathParam("dataset") DatasetArg<?> datasetArg) Curation-UI compatibility alias forgetDatasetPermissions(DatasetArg). The UI's dataset-page sharing widget callsGET /datasets/{id}/visibility; the canonical gemma-rest endpoint lives at/datasets/{id}/permissions. Hidden from the OpenAPI spec to avoid duplicating the canonical entry. -
getDatasetPipelineStatusAlias
@GET @Path("/{dataset}/pipeline-status") @Produces("application/json") public ResponseDataObject<PipelineStatusValueObject> getDatasetPipelineStatusAlias(@PathParam("dataset") DatasetArg<?> datasetArg) Curation-UI compatibility alias forgetDatasetPipelineStatus(DatasetArg): the UI uses the flatter, hyphenated path/datasets/{id}/pipeline-status; the canonical handler lives at/pipelineStatus. -
getDatasetPipelineStatus
@GET @Path("/{dataset}/pipelineStatus") @Produces("application/json") public ResponseDataObject<PipelineStatusValueObject> getDatasetPipelineStatus(@PathParam("dataset") DatasetArg<?> datasetArg) -
getDatasetsPipelineStatus
@GET @Path("/pipelineStatus") @Produces("application/json") public ResponseDataObject<List<PipelineStatusValueObject>> getDatasetsPipelineStatus(@QueryParam("datasets") DatasetArrayArg datasets) Bulk sibling ofgetDatasetPipelineStatus(DatasetArg).🛑 The path is the literal
/datasets/pipelineStatuswith the ids in a query parameter, NOT/datasets/{datasets}/pipelineStatus: the latter is the same JAX-RS template as the single-dataset route — a path parameter's NAME does not distinguish it — so declaring it would be an ambiguous mapping rather than a second route. -
getStaleDatasets
@GET @Path("/staleSteps") @Produces("application/json") public PaginatedResponseDataObject<DatasetsWebService.StaleDatasetValueObject> getStaleDatasets(@QueryParam("offset") @DefaultValue("0") OffsetArg offset, @QueryParam("limit") @DefaultValue("20") LimitArg limit) The datasets that owe pipeline work: every dataset with at least onestalestep, and which steps those are.🛑 A literal path segment sharing a level with
/{dataset}, like/blacklisted— JAX-RS prefers the literal, so/datasets/staleStepsdoes not resolve as a dataset named "staleSteps". -
getDatasetPipelineStatusBulk
@POST @Path("/pipeline-status") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<Map<Long, PipelineStatusValueObject>> getDatasetPipelineStatusBulk(@Nullable DatasetsWebService.PipelineStatusBulkRequest body) -
getDatasetGeeq
@GET @Path("/{dataset}/geeq") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<GeeqValueObject> getDatasetGeeq(@PathParam("dataset") DatasetArg<?> datasetArg) -
getDatasetGeeqPublic
@GET @Path("/{dataset}/geeq/public") @Produces("application/json") public ResponseDataObject<GeeqValueObject> getDatasetGeeqPublic(@PathParam("dataset") DatasetArg<?> datasetArg) Public sibling ofgetDatasetGeeq(DatasetArg): returns the per-factor GEEQ breakdown without exposing the admin-only detected/manual override scores or the free-textotherIssuescurator field, which live onGeeqAdminValueObject. Drives the GEEQ-badge popover in the browser UI for anonymous and non-admin users.Served by
GeeqValueObjectdirectly. This used to return a parallelPublicGeeqValueObject, written on the belief that the per-factor getters onGeeqValueObjectwere JSON-suppressed; they were not — each backing field carries an explicit@JsonPropertythat Jackson keeps over the ignore on the parallel getter. The two VOs serialized identical 25-key payloads, so the duplicate was retired. -
recomputeDatasetGeeq
@PUT @Path("/{dataset}/geeq") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<GeeqValueObject> recomputeDatasetGeeq(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("mode") @DefaultValue("all") GeeqService.ScoreMode mode) -
recomputeDatasetGeeqViaPost
@POST @Path("/{dataset}/geeq/recompute") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<GeeqValueObject> recomputeDatasetGeeqViaPost(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.GeeqRecomputeRequest body) Alias forrecomputeDatasetGeeq(DatasetArg, GeeqService.ScoreMode)that exposes the GEEQ recompute underPOST /datasets/{id}/geeq/recomputewith a JSON body.Curation-UI compatibility shim: the curation-UI workflow-step "recompute GEEQ" button posts to this path. Behaviour is identical to
PUT /datasets/{id}/geeq— both delegate to the same handler. Themodedefaults toallwhen the body is omitted. SeeCURATION_UI_HANDOFF_INVENTORY.md. -
recomputeDatasetGeeqViaPostAlias
@POST @Path("/{dataset}/geeq/recalculate") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<GeeqValueObject> recomputeDatasetGeeqViaPostAlias(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.GeeqRecomputeRequest body) Curation-UI compatibility alias forrecomputeDatasetGeeqViaPost(DatasetArg, DatasetsWebService.GeeqRecomputeRequest): UI callsPOST /datasets/{id}/geeq/recalculatewith the same body shape. -
importDataset
@POST @Path("/import") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response importDataset(@Nullable DatasetsWebService.DatasetImportRequest body) Curation-UI workflow-step endpoint: kick off an async GEO (or ArrayExpress) accession load. The actual loader runs insideExpressionExperimentLoadTaskCommand; this handler submits the command to theTaskRunningServiceand returns a 202 with aLocationheader pointing at the polling endpoint. -
runDatasetPreprocess
@POST @Path("/{dataset}/tasks/preprocess") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetPreprocess(@PathParam("dataset") DatasetArg<?> datasetArg) -
runDatasetDiagnostics
@POST @Path("/{dataset}/tasks/diagnostics") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetDiagnostics(@PathParam("dataset") DatasetArg<?> datasetArg) -
runDatasetSvd
@POST @Path("/{dataset}/tasks/svd") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetSvd(@PathParam("dataset") DatasetArg<?> datasetArg) -
runDatasetBatchInformationFetch
@POST @Path("/{dataset}/tasks/batchInfo") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetBatchInformationFetch(@PathParam("dataset") DatasetArg<?> datasetArg) -
runDatasetGeeq
@POST @Path("/{dataset}/tasks/geeq") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetGeeq(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("mode") @DefaultValue("all") GeeqService.ScoreMode mode) -
runDatasetSwitchPlatform
@POST @Path("/{dataset}/tasks/switch-platform") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetSwitchPlatform(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.PlatformSwitchRequest body) -
runDatasetPreprocessAlias
@POST @Path("/{dataset}/preprocess") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetPreprocessAlias(@PathParam("dataset") DatasetArg<?> datasetArg) Curation-UI compatibility alias forrunDatasetPreprocess(DatasetArg): UI callsPOST /datasets/{id}/preprocess. -
runDatasetDiagnosticsAlias
@POST @Path("/{dataset}/preprocess/diagnostics") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetDiagnosticsAlias(@PathParam("dataset") DatasetArg<?> datasetArg) Curation-UI compatibility alias forrunDatasetDiagnostics(DatasetArg): UI callsPOST /datasets/{id}/preprocess/diagnostics. -
runDatasetBatchInformationFetchAlias
@POST @Path("/{dataset}/batchInformation/fetch") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetBatchInformationFetchAlias(@PathParam("dataset") DatasetArg<?> datasetArg) Curation-UI compatibility alias forrunDatasetBatchInformationFetch(DatasetArg): UI callsPOST /datasets/{id}/batchInformation/fetch. -
runDatasetDifferentialAnalysis
@POST @Path("/{dataset}/tasks/differential") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetDifferentialAnalysis(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.DifferentialAnalysisRunRequest body) -
runDatasetDifferentialAnalysisAlias
@POST @Path("/{dataset}/analyses/differential") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response runDatasetDifferentialAnalysisAlias(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.DifferentialAnalysisRunRequest body) Alias forrunDatasetDifferentialAnalysis(DatasetArg, DifferentialAnalysisRunRequest)that exposes the DEA dispatch under/datasets/{id}/analyses/differential.Curation-UI compatibility shim: the curation-UI dispatch hook (apps/curation/.../workflow.ts:165) calls
POST /datasets/{id}/analyses/differential; the canonical gemma-rest endpoint lives at/tasks/differential. Both paths delegate to the same handler so the UI's "dispatch DEA" button works without modification. SeeCURATION_UI_HANDOFF_INVENTORY.md. -
redoDatasetDifferentialAnalysis
@POST @Path("/{dataset}/tasks/redo/{analysisId}") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response redoDatasetDifferentialAnalysis(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("analysisId") Long analysisId) -
removeDatasetDifferentialAnalysis
@DELETE @Path("/{dataset}/tasks/differential/{analysisId}") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response removeDatasetDifferentialAnalysis(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("analysisId") Long analysisId) -
redoDatasetDifferentialAnalysisAlias
@POST @Path("/{dataset}/analyses/differential/{analysisId}/redo") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response redoDatasetDifferentialAnalysisAlias(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("analysisId") Long analysisId) Curation-UI compatibility alias forredoDatasetDifferentialAnalysis(DatasetArg, Long): UI callsPOST /datasets/{id}/analyses/differential/{aid}/redo; the canonical handler lives at/tasks/redo/{analysisId}. -
removeDatasetDifferentialAnalysisAlias
@DELETE @Path("/{dataset}/analyses/differential/{analysisId}") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response removeDatasetDifferentialAnalysisAlias(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("analysisId") Long analysisId) Curation-UI compatibility alias forremoveDatasetDifferentialAnalysis(DatasetArg, Long): UI callsDELETE /datasets/{id}/analyses/differential/{aid}. -
deleteDatasetRawData
@DELETE @Path("/{dataset}/data/raw") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response deleteDatasetRawData(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("quantitationType") QuantitationTypeArg<?> quantitationTypeArg, @QueryParam("confirm") @DefaultValue("false") boolean confirm) Delete the raw expression data vectors for a dataset (port ofdeleteRawDataCLI).Synchronous DB delete. Requires the destructive-intent guard
confirm=true; without it the request is rejected as a400so an accidental call (mistyped URL, stale browser tab) cannot wipe vectors. ThequantitationTypequery param selects which raw QT to delete; when omitted the dataset's preferred raw QT is used. -
deleteDatasetProcessedData
@DELETE @Path("/{dataset}/data/processed") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public jakarta.ws.rs.core.Response deleteDatasetProcessedData(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("confirm") @DefaultValue("false") boolean confirm) Delete the processed expression data vectors for a dataset (port ofdeleteProcessedDataCLI).Synchronous DB delete. Requires the destructive-intent guard
confirm=true; without it the request is rejected as a400so an accidental call cannot wipe vectors. -
getDatasetDifferentialExpressionAnalyses
@GET @Path("/{dataset}/analyses/differential") @Produces("application/json") public ResponseDataObject<List<DifferentialExpressionAnalysisValueObject>> getDatasetDifferentialExpressionAnalyses(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("offset") @DefaultValue("0") OffsetArg offsetArg, @QueryParam("limit") @DefaultValue("20") LimitArg limitArg, @QueryParam("includeAssays") @DefaultValue("false") boolean includeAssays) Retrieves the differential analysis results for the given dataset.- Parameters:
datasetArg- can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.
-
getDatasetDifferentialExpressionAnalysisResultSets
@GET @Path("/{dataset}/analyses/differential/resultSets") public jakarta.ws.rs.core.Response getDatasetDifferentialExpressionAnalysisResultSets(@PathParam("dataset") DatasetArg<?> datasetArg, @Context jakarta.ws.rs.core.UriInfo uriInfo) Retrieves the result sets of all the differential expression analyses of a dataset.This is actually performing a 302 Found redirection to point the HTTP client to the corresponding result sets endpoint.
- See Also:
-
getDatasetsDifferentialExpressionAnalysisResultsForGene
@GET @GZIP @Path("/analyses/differential/results/genes/{gene}") @Produces({"application/json","text/tab-separated-values; charset=UTF-8; q=0.9"}) public Object getDatasetsDifferentialExpressionAnalysisResultsForGene(@PathParam("gene") GeneArg<?> geneArg, @QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("offset") OffsetArg offsetArg, @QueryParam("limit") LimitArg limitArg, @QueryParam("threshold") @DefaultValue("1.0") Double threshold, @Context jakarta.ws.rs.core.HttpHeaders headers) Obtain differential expression analysis results for a given gene. -
getDatasetsDifferentialExpressionAnalysisResultsForGeneInTaxon
@GET @GZIP @Path("/analyses/differential/results/taxa/{taxon}/genes/{gene}") @Produces({"application/json","text/tab-separated-values; charset=UTF-8"}) public Object getDatasetsDifferentialExpressionAnalysisResultsForGeneInTaxon(@PathParam("taxon") TaxonArg<?> taxonArg, @PathParam("gene") GeneArg<?> geneArg, @QueryParam("query") QueryArg query, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filter, @QueryParam("offset") OffsetArg offsetArg, @QueryParam("limit") LimitArg limitArg, @QueryParam("threshold") @DefaultValue("1.0") Double threshold, @Context jakarta.ws.rs.core.HttpHeaders headers) Obtain differential expression analysis results for a given gene in a given taxon. -
getDatasetAnnotations
@GET @GZIP @Path("/{dataset}/annotations") @Produces("application/json") public ResponseDataObject<Set<AnnotationValueObject>> getDatasetAnnotations(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("includeFreeText") @DefaultValue("true") Boolean includeFreeText) Retrieves the annotations for the given dataset.- Parameters:
datasetArg- can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.
-
updateDatasetAnnotations
@PUT @Path("/{dataset}/annotations") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<Set<AnnotationValueObject>> updateDatasetAnnotations(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable DatasetsWebService.AnnotationsUpdateRequest body) -
addDatasetAnnotationTag
@POST @Path("/{dataset}/annotations") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN')") public jakarta.ws.rs.core.Response addDatasetAnnotationTag(@PathParam("dataset") DatasetArg<?> datasetArg, @Nullable AnnotationsWebService.AnnotationDto body, @QueryParam("annotationSetId") @Nullable Long annotationSetId) -
removeDatasetAnnotationTag
@DELETE @Path("/{dataset}/annotations/{annotationId}") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR') or hasAuthority('GROUP_ADMIN')") public jakarta.ws.rs.core.Response removeDatasetAnnotationTag(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("annotationId") Long annotationId) -
getSampleCharacteristics
@GET @Path("/{dataset}/samples/{bioAssayId}/characteristics") @Produces("application/json") public ResponseDataObject<Set<AnnotationValueObject>> getSampleCharacteristics(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("bioAssayId") Long bioAssayId) -
updateSampleCharacteristics
@PUT @Path("/{dataset}/samples/{bioAssayId}/characteristics") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<Set<AnnotationValueObject>> updateSampleCharacteristics(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("bioAssayId") Long bioAssayId, @Nullable DatasetsWebService.AnnotationsUpdateRequest body) -
addSampleCharacteristic
@POST @Path("/{dataset}/samples/{bioAssayId}/characteristics") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<AnnotationValueObject> addSampleCharacteristic(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("bioAssayId") Long bioAssayId, @Nullable DatasetsWebService.AnnotationTagInput body) -
removeSampleCharacteristic
@DELETE @Path("/{dataset}/samples/{bioAssayId}/characteristics/{characteristicId}") @Produces("application/json") public ResponseDataObject<AnnotationValueObject> removeSampleCharacteristic(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("bioAssayId") Long bioAssayId, @PathParam("characteristicId") Long characteristicId) -
getDatasetQuantitationTypes
@GET @Path("/{dataset}/quantitationTypes") @Produces("application/json") public ResponseDataObject<Set<QuantitationTypeValueObject>> getDatasetQuantitationTypes(@PathParam("dataset") DatasetArg<?> datasetArg) Retrieve all available quantitation types for a dataset. -
setDatasetQuantitationTypePreferred
@PATCH @Path("/{dataset}/quantitationTypes/{qtId}/preferred") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<QuantitationTypeValueObject> setDatasetQuantitationTypePreferred(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("qtId") Long qtId, @Nullable DatasetsWebService.QuantitationTypePreferredRequest body) Mark a QuantitationType as the preferred one (within its vector-type bucket) for the given dataset.Curation-UI workflow-step endpoint: the experiment-page "set preferred QT" button calls this. The
ExpressionExperimentService.updateQuantitationType(ExpressionExperiment, QuantitationType, QuantitationType)handler takes care of the "unmark every other QT of the same vector type" book-keeping and emits the appropriatePreferredDataChangedEvent. Body may be omitted (defaults topreferred=true) or supplied as{"preferred": false}to clear the flag. -
patchDatasetQuantitationType
@PATCH @Path("/{dataset}/quantitationTypes/{qtId}") @Consumes("application/json") @Produces("application/json") @PreAuthorize("hasAuthority('GROUP_CURATOR')") public ResponseDataObject<QuantitationTypeValueObject> patchDatasetQuantitationType(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("qtId") Long qtId, @Nullable DatasetsWebService.QuantitationTypePatchRequest body) Body-driven PATCH dispatcher for a quantitation type. Curation-UI callsPATCH /datasets/{id}/quantitationTypes/{qtId}with{"isPreferred": true}instead of routing through the/preferredsuffix; this handler dispatches based on which fields are present. -
getDatasetSingleCellDimension
@GZIP @GET @Produces({"application/json","text/tab-separated-values; charset=UTF-8"}) @Path("/{dataset}/singleCellDimension") public Object getDatasetSingleCellDimension(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("quantitationType") QuantitationTypeArg<?> qtArg, @QueryParam("exclude") ExcludeArg<SingleCellDimensionValueObject> excludeArg, @QueryParam("useBioAssayId") @DefaultValue("false") Boolean useBioAssayIds, @Context jakarta.ws.rs.core.HttpHeaders headers) Retrieve the single-cell dimension for a given quantitation type. -
getDatasetCellTypeAssignment
@GZIP @GET @Produces({"application/json","text/tab-separated-values; charset=UTF-8"}) @Path("/{dataset}/cellTypeAssignment") public Object getDatasetCellTypeAssignment(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("quantitationType") QuantitationTypeArg<?> qtArg, @QueryParam("cellTypeAssignment") String ctaName, @QueryParam("protocol") String protocolName, @QueryParam("exclude") ExcludeArg<CellTypeAssignmentValueObject> excludeArg, @QueryParam("useBioAssayId") @DefaultValue("false") Boolean useBioAssayId, @Context jakarta.ws.rs.core.HttpHeaders headers) -
getDatasetCellLevelCharacteristics
@GZIP @GET @Produces({"application/json","text/tab-separated-values; charset=UTF-8"}) @Path("/{dataset}/cellLevelCharacteristics") public Object getDatasetCellLevelCharacteristics(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("quantitationType") QuantitationTypeArg<?> qtArg, @Context jakarta.ws.rs.core.HttpHeaders headers) -
getDatasetExpression
@GZIP(mediaTypes="text/tab-separated-values; charset=UTF-8", alreadyCompressed=true) @GET @Path("/{dataset}/data") @Produces("text/tab-separated-values; charset=UTF-8") public jakarta.ws.rs.core.Response getDatasetExpression(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("filter") @DefaultValue("false") Boolean filterData, @QueryParam("download") @DefaultValue("false") Boolean download, @QueryParam("force") @DefaultValue("false") Boolean force) Retrieves the data for the given dataset.The returned TSV format contains the following columns:
- Probe
- Sequence
- GeneSymbol (optional)
- GeneName (optional)
- GemmaId (optional)
- NCBIid (optional)
Note: Additional gene information is only available if the corresponding platform's annotations has been dumped on-disk.
- Parameters:
datasetArg- can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.filterData- return filtered the expression data.
-
getDatasetProcessedExpression
@GZIP(mediaTypes="text/tab-separated-values; charset=UTF-8", alreadyCompressed=true) @GET @Path("/{dataset}/data/processed") @Produces("text/tab-separated-values; charset=UTF-8") public jakarta.ws.rs.core.Response getDatasetProcessedExpression(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("filter") @DefaultValue("false") Boolean filtered, @QueryParam("download") @DefaultValue("false") Boolean download, @QueryParam("force") @DefaultValue("false") Boolean force) Retrieve processed expression data.The payload is transparently compressed via a
Content-Encodingheader and streamed to avoid dumping the whole payload in memory. -
getDatasetRawExpression
@GZIP(mediaTypes="text/tab-separated-values; charset=UTF-8", alreadyCompressed=true) @GET @Path("/{dataset}/data/raw") @Produces("text/tab-separated-values; charset=UTF-8") public jakarta.ws.rs.core.Response getDatasetRawExpression(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("quantitationType") QuantitationTypeArg<?> quantitationTypeArg, @QueryParam("download") @DefaultValue("false") Boolean download, @QueryParam("force") @DefaultValue("false") Boolean force) Retrieve raw expression data.The payload is transparently compressed via a
Content-Encodingheader and streamed to avoid dumping the whole payload in memory. -
getDatasetDiffExAnalysisArchive
@GET @Path("/{dataset}/data/dea") @Produces("application/octet-stream") public jakarta.ws.rs.core.Response getDatasetDiffExAnalysisArchive(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("analysisId") Long analysisId, @QueryParam("download") @DefaultValue("false") Boolean download, @QueryParam("force") @DefaultValue("false") Boolean force) Retrieve the differential-expression analysis archive for a dataset.Builds (or, on cache hit, locates) the ZIP archive containing the analysis result + per-result-set contrast files for a single differential-expression analysis on this dataset, and sendfile-s the cached file directly.
The archive is generated lazily on first access by
ExpressionDataFileService.writeOrLocateDiffExAnalysisArchiveFile(DifferentialExpressionAnalysis, boolean); subsequent accesses skip the rebuild.If the dataset has more than one differential-expression analysis, the caller must disambiguate by passing
analysisId; otherwise the response is 409 Conflict. -
getDatasetSingleCellExpression
@GZIP(mediaTypes="text/tab-separated-values; charset=UTF-8", alreadyCompressed=true) @GET @Path("/{dataset}/data/singleCell") @Produces({"application/vnd.10xgenomics.mex","text/tab-separated-values; charset=UTF-8;q=0.9"}) public jakarta.ws.rs.core.Response getDatasetSingleCellExpression(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("quantitationType") QuantitationTypeArg<?> quantitationTypeArg, @QueryParam("download") @DefaultValue("false") Boolean download, @QueryParam("force") @DefaultValue("false") Boolean force, @Context jakarta.ws.rs.core.HttpHeaders headers) -
getDatasetDesignJson
@GET @GZIP @Path("/{dataset}/design") @Produces("application/json") public ResponseDataObject<ExperimentalDesignValueObject> getDatasetDesignJson(@PathParam("dataset") DatasetArg<?> datasetArg) Retrieves the structured experimental design for the given dataset as JSON.- Parameters:
datasetArg- can either be the ExpressionExperiment ID or its short name (e.g. GSE1234).
-
previewDatasetDesignChange
@POST @Path("/{dataset}/designPreflight") @Consumes("application/json") @Produces("application/json") public ResponseDataObject<DesignPreflightReport> previewDatasetDesignChange(@PathParam("dataset") DatasetArg<?> datasetArg, ExperimentalDesignValueObject proposed) Dry-run preflight for a proposed design replacement.Accepts the same JSON shape that
GET /datasets/{id}/designreturns (ExperimentalDesignValueObject), withidfields treated as identity claims (existing entity) ornull(new entity), and returns aDesignPreflightReportdescribing validation errors and the impact a real PUT would have.The preflight never mutates state. POST is used (not GET) because the response depends on a non-trivial request body.
-
replaceDatasetDesign
@PUT @Path("/{dataset}/design") @Consumes("application/json") @Produces("application/json") public jakarta.ws.rs.core.Response replaceDatasetDesign(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("force") @DefaultValue("false") Boolean force, @QueryParam("agentProposalId") @Nullable Long agentProposalId, ExperimentalDesignValueObject proposed) Apply a proposedExperimentalDesignValueObjectas the experiment's new design.The same validation pass performed by
POST /datasets/{id}/designPreflightis re-run server-side. If blockers are present, returns 400 with aDesignPreflightReportpayload — fix the body and retry. If the change carries consequences needing consent — it would delete differential-expression analyses, or leave a subset anchored on factor values that no longer exist — andforce=false, returns 409 with the report; admins may re-issue with?force=true. The 409 body is the report itself, so the client can show the curator exactly which analyses and which subsets they are agreeing to. On success, returns 200 with the freshly-rebuilt design. -
getDatasetDesign
@GZIP(mediaTypes="text/tab-separated-values; charset=UTF-8", alreadyCompressed=true) @GET @Path("/{dataset}/design") @Produces("text/tab-separated-values; charset=UTF-8;qs=0.9") public jakarta.ws.rs.core.Response getDatasetDesign(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("quantitationType") QuantitationTypeArg<?> quantitationTypeArg, @QueryParam("useProcessedQuantitationType") @DefaultValue("false") Boolean useProcessedQuantitationType, @QueryParam("download") @DefaultValue("false") Boolean download, @QueryParam("force") @DefaultValue("false") Boolean force) Retrieves the design for the given dataset.Two response media types are supported on this path, selected via the
Acceptheader:application/json(default) — a structuredExperimentalDesignValueObjectwith factors, factor values (statements with stable IDs), and biomaterial-to-factor-value assignments. The JSON variant ignores thequantitationType/useProcessedQuantitationTypeparameters.text/tab-separated-values; charset=UTF-8— the design matrix as TSV, served only when requested explicitly viaAccept.
- Parameters:
datasetArg- can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.
-
getDatasetMetadataFiles
@GET @Path("/{dataset}/metadata") @Produces("application/json") public ResponseDataObject<List<DatasetsWebService.DatasetMetadataFileValueObject>> getDatasetMetadataFiles(@PathParam("dataset") DatasetArg<?> datasetArg) List the preprocessing-metadata files available for a dataset.Entries reflect
ExpressionExperimentMetaFileTypeinstances whose underlying file exists on disk for the given experiment. TheMULTIQC_REPORTalias is suppressed (it duplicatesRNASEQ_PIPELINE_REPORTwith the same id). -
getDatasetMetadataFile
@GET @Path("/{dataset}/metadata/{type}") @Produces("application/octet-stream") public jakarta.ws.rs.core.Response getDatasetMetadataFile(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("type") String typeArg, @QueryParam("download") @DefaultValue("false") Boolean download) Stream a single preprocessing-metadata file by type for a dataset.Returns 404 if the file is absent on disk or the type is a directory with no contents. Successful responses use the file's native MIME type from
ExpressionExperimentMetaFileType.getContentType(). -
getDatasetHasBatchInformation
@GET @PreAuthorize("hasAuthority('GROUP_CURATOR')") @Path("/{dataset}/hasbatch") @Produces("application/json") public ResponseDataObject<Boolean> getDatasetHasBatchInformation(@PathParam("dataset") DatasetArg<?> datasetArg) Indicate if the experiment has batch information.This does not imply that the batch information is usable. This will be true even if there is only one batch. It does not reflect the presence or absence of a batch effect.
-
getDatasetBatchInformation
@GET @PreAuthorize("hasAuthority('GROUP_CURATOR')") @Produces("application/json") @Path("/{dataset}/batchInformation") public ResponseDataObject<DatasetsWebService.BatchInformationValueObject> getDatasetBatchInformation(@PathParam("dataset") DatasetArg<?> datasetArg) -
getDatasetMeanVariance
@GET @GZIP @Path("/{dataset}/mean-variance") @Produces("application/json") public ResponseDataObject<DatasetsWebService.MeanVarianceValueObject> getDatasetMeanVariance(@PathParam("dataset") DatasetArg<?> datasetArg) Retrieves the per-probe mean / variance pre-computed byMeanVarianceService.404 when
ExpressionExperiment.getMeanVarianceRelation()is null (i.e. the mean-variance step hasn't been run for the dataset). Backs the curation-UI Diagnostics tab's mean-variance scatter. -
getDatasetSampleCorrelation
@GET @GZIP @Path("/{dataset}/sample-correlation") @Produces("application/json") public ResponseDataObject<DatasetsWebService.SampleCorrelationMatrixValueObject> getDatasetSampleCorrelation(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("matrix") @DefaultValue("best") DatasetsWebService.CorrelationMatrixChoice which) Retrieves the sample-sample correlation matrix plus both outlier classifications (curator-flagged + algorithmic), unmasked.The UI applies its own masking interactively so the curator can see the effect of including / excluding outliers on the correlation distribution. Two outlier sets accompany the matrix:
actualOutlierBioAssayIds— bioAssays the curator has flagged viaPUT /samples/{id}/outlier(BioAssay.getIsOutlier()).predictedOutlierBioAssayIds— bioAssays the median-correlation algorithm picks as outliers (OutlierDetectionService.getOutlierDetails(ExpressionExperiment)); cached.
-
getDatasetQcMetrics
@GET @GZIP @Path("/{dataset}/qc-metrics") @Produces("application/json") public ResponseDataObject<DatasetsWebService.SequencingQcMetricsValueObject> getDatasetQcMetrics(@PathParam("dataset") DatasetArg<?> datasetArg) Retrieves the per-sample sequencing QC metrics for a dataset — read depth, mapping rate, duplication and the rest of the RNA-Seq pipeline's MultiQC general statistics — keyed by bioAssay id.These are independent of expression similarity, which is the outlier detector's only input, so they are the second piece of evidence when judging a low-correlation sample. Nothing here feeds
OutlierDetectionService; the endpoint is read-only evidence.- See Also:
-
getDatasetSvd
@GET @Path("/{dataset}/svd") @Produces("application/json") public ResponseDataObject<DatasetsWebService.SimpleSVDValueObject> getDatasetSvd(@PathParam("dataset") DatasetArg<?> datasetArg) Retrieves the design for the given dataset.- Parameters:
datasetArg- can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.
-
getDatasetSvdLoadings
@GET @Path("/{dataset}/svd/loadings") @Produces("application/json") public ResponseDataObject<DatasetsWebService.PcLoadingsValueObject> getDatasetSvdLoadings(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("pc") Integer pc, @QueryParam("top") @DefaultValue("50") Integer top, @QueryParam("direction") @DefaultValue("both") DatasetsWebService.PcLoadingDirection direction) Retrieve the top-N probe loadings on a chosen principal component, plus the bioAssay scores on that PC. Backs the curation-UI Diagnostics tab's "click-PC → loaded-genes popup" flow.Uses
SVDService.getTopLoadedVectors(ExpressionExperiment, int, int)to fetch the storedProbeLoadingrows for the component (one DB hit; no expression-matrix recompute). bioAssay scores come from the SVDResult's vMatrix column for the PC. Gene refs are resolved from the gene IDs the fetched vectors already carry, in one batched load, and ship in the sameHeatmapDataValueObject.GeneRefshape heatmap-data rows use. Returns 404 if the dataset has no SVD analysis, 400 ifpcortopare out of range. -
getDatasetsExpressionLevelsForGene
@GET @Path("/expressions/genes/{gene}") @Produces("application/json") public Object getDatasetsExpressionLevelsForGene(@PathParam("gene") GeneArg<?> geneArg, @QueryParam("query") QueryArg queryArg, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filterArg, @QueryParam("offset") @DefaultValue("0") OffsetArg offsetArg, @QueryParam("limit") @DefaultValue("20") LimitArg limitArg, @QueryParam("keepNonSpecific") @DefaultValue("false") Boolean keepNonSpecific, @QueryParam("consolidate") ExpLevelConsolidationArg consolidate, @QueryParam("cursor") CursorArg cursorArg, @QueryParam("precise") @DefaultValue("false") Boolean precise) Retrieve the expression levels of a given gene across all datasets. -
getDatasetsExpressionLevelsForGeneInTaxon
@GET @Path("/expressions/taxa/{taxon}/genes/{gene}") @Produces("application/json") public Object getDatasetsExpressionLevelsForGeneInTaxon(@PathParam("taxon") TaxonArg<?> taxonArg, @PathParam("gene") GeneArg<?> geneArg, @QueryParam("query") QueryArg queryArg, @QueryParam("filter") @DefaultValue("") FilterArg<ExpressionExperiment> filterArg, @QueryParam("offset") @DefaultValue("0") OffsetArg offsetArg, @QueryParam("limit") @DefaultValue("20") LimitArg limitArg, @QueryParam("keepNonSpecific") @DefaultValue("false") Boolean keepNonSpecific, @QueryParam("consolidate") ExpLevelConsolidationArg consolidate, @QueryParam("cursor") CursorArg cursorArg, @QueryParam("precise") @DefaultValue("false") Boolean precise) Retrieve the expression levels of a given gene and taxon across all datasets. -
getDatasetsExpressionLevelsForGenesInTaxon
@GET @Path("/{datasets}/expressions/taxa/{taxon}/genes/{genes}") @Produces("application/json") public ResponseDataObject<List<ExperimentExpressionLevelsValueObject>> getDatasetsExpressionLevelsForGenesInTaxon(@PathParam("datasets") DatasetArrayArg datasets, @PathParam("taxon") TaxonArg<?> taxonArg, @PathParam("genes") GeneArrayArg genes, @QueryParam("keepNonSpecific") @DefaultValue("false") Boolean keepNonSpecific, @QueryParam("consolidate") ExpLevelConsolidationArg consolidate, @QueryParam("precise") @DefaultValue("false") Boolean precise) Retrieves the expression levels of given genes on given datasets.- Parameters:
datasets- a list of dataset identifiers separated by commas (','). The identifiers can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.You can combine various identifiers in one query, but an invalid identifier will cause the call to yield an error.
taxonArg- a taxon to retrieve gene identifiers fromgenes- a list of gene identifiers, separated by commas (','). Identifiers can be one of NCBI ID, Ensembl ID or official symbol. NCBI ID is the most efficient (and guaranteed to be unique) identifier. Official symbol will return a random homologue. Use one of the IDs to specify the correct taxon - if the gene taxon does not match the taxon of the given datasets, expression levels for that gene will be missing from the response.You can combine various identifiers in one query, but an invalid identifier will cause the call to yield an error.
keepNonSpecific- whether to keep elements that are mapped to multiple genes.consolidate- whether genes with multiple elements should consolidate the information. The options are:- pickmax: only return the vector that has the highest expression (mean over all its bioAssays)
- pickvar: only return the vector with highest variance of expression across its bioAssays
- average: create a new vector that will average the bioAssay values from all vectors
-
getDatasetsExpressionLevelsForGenes
@GET @Path("/{datasets}/expressions/genes/{genes}") @Produces("application/json") public ResponseDataObject<List<ExperimentExpressionLevelsValueObject>> getDatasetsExpressionLevelsForGenes(@PathParam("datasets") DatasetArrayArg datasets, @PathParam("genes") GeneArrayArg genes, @QueryParam("keepNonSpecific") @DefaultValue("false") Boolean keepNonSpecific, @QueryParam("consolidate") ExpLevelConsolidationArg consolidate, @QueryParam("precise") @DefaultValue("false") Boolean precise) -
getDatasetsExpressionPca
@GET @Path("/{datasets}/expressions/pca") @Produces("application/json") public ResponseDataObject<List<ExperimentExpressionLevelsValueObject>> getDatasetsExpressionPca(@PathParam("datasets") DatasetArrayArg datasets, @QueryParam("component") @DefaultValue("1") Integer component, @QueryParam("limit") @DefaultValue("100") LimitArg limit, @QueryParam("keepNonSpecific") @DefaultValue("false") Boolean keepNonSpecific, @QueryParam("consolidate") ExpLevelConsolidationArg consolidate, @QueryParam("precise") @DefaultValue("false") Boolean precise) Retrieves the expression levels of genes highly expressed in the given component on given datasets.- Parameters:
datasets- a list of dataset identifiers separated by commas (','). The identifiers can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.You can combine various identifiers in one query, but an invalid identifier will cause the call to yield an error.
component- the pca component to limit the results to.limit- maximum amount of returned gene-probe expression level pairs.keepNonSpecific- whether to keep elements that are mapped to multiple genes.consolidate- whether genes with multiple elements should consolidate the information. The options are:- pickmax: only return the vector that has the highest expression (mean over all its bioAssays)
- pickvar: only return the vector with highest variance of expression across its bioAssays
- average: create a new vector that will average the bioAssay values from all vectors
-
getDatasetsDifferentialExpression
@GET @Path("/{datasets}/expressions/differential") @Produces("application/json") public ResponseDataObject<List<ExperimentExpressionLevelsValueObject>> getDatasetsDifferentialExpression(@PathParam("datasets") DatasetArrayArg datasets, @QueryParam("diffExSet") Long diffExSet, @QueryParam("threshold") @DefaultValue("1.0") Double threshold, @QueryParam("limit") @DefaultValue("100") LimitArg limit, @QueryParam("keepNonSpecific") @DefaultValue("false") Boolean keepNonSpecific, @QueryParam("consolidate") ExpLevelConsolidationArg consolidate, @QueryParam("precise") @DefaultValue("false") Boolean precise) Retrieves the expression levels of genes highly expressed in the given component on given datasets.- Parameters:
datasets- a list of dataset identifiers separated by commas (','). The identifiers can either be the ExpressionExperiment ID or its short name (e.g. GSE1234). Retrieval by ID is more efficient. Only datasets that user has access to will be available.You can combine various identifiers in one query, but an invalid identifier will cause the call to yield an error.
diffExSet- the ID of the differential expression set to retrieve the data from.threshold- the FDR threshold that the differential expression has to meet to be included in the response.limit- maximum amount of returned gene-probe expression level pairs.keepNonSpecific- whether to keep elements that are mapped to multiple genes.consolidate- whether genes with multiple elements should consolidate the information. The options are:- pickmax: only return the vector that has the highest expression (mean over all its bioAssays)
- pickvar: only return the vector with highest variance of expression across its bioAssays
- average: create a new vector that will average the bioAssay values from all vectors
-
refreshDataset
@GET @PreAuthorize("hasAuthority('GROUP_CURATOR')") @Path("/{dataset}/refresh") @Produces("application/json") public jakarta.ws.rs.core.Response refreshDataset(@PathParam("dataset") DatasetArg<?> datasetArg, @QueryParam("refreshVectors") @DefaultValue("false") Boolean refreshVectors, @QueryParam("refreshReports") @DefaultValue("false") Boolean refreshReports) Retrieve a "refreshed" dataset.This has the main side effect of refreshing the second-level cache with the contents of the database.
-
getDatasetSubSetGroups
@GET @Path("/{dataset}/subSetGroups") @Produces("application/json") public ResponseDataObject<List<DatasetsWebService.ExpressionExperimentSubSetGroupValueObject>> getDatasetSubSetGroups(@PathParam("dataset") DatasetArg<?> datasetArg) Retrieve all the "groups" of subsets of a dataset.Each group of subsets is logically organized by a
BioAssayDimensionthat holds its assays. We don't expose that aspect however, and simply use the ID of the BAD as ID of the group. -
getDatasetSubSetGroup
@GET @Path("/{dataset}/subSetGroups/{subSetGroup}") @Produces("application/json") public ResponseDataObject<DatasetsWebService.ExpressionExperimentSubSetGroupValueObject> getDatasetSubSetGroup(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("subSetGroup") Long bioAssayDimensionId, @QueryParam("includePredictedOutliers") @DefaultValue("false") boolean includePredictedOutliers) -
getDatasetSubSets
@GET @Path("/{dataset}/subSets") @Produces("application/json") public ResponseDataObject<List<DatasetsWebService.ExpressionExperimentSubSetWithGroupsValueObject>> getDatasetSubSets(@PathParam("dataset") DatasetArg<?> datasetArg) -
getDatasetSubSetById
@GET @Path("/{dataset}/subSets/{subSet}") @Produces("application/json") public ResponseDataObject<DatasetsWebService.ExpressionExperimentSubSetWithGroupsValueObject> getDatasetSubSetById(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("subSet") Long subSetId) -
getDatasetSubSetSamples
@GET @Path("/{dataset}/subSets/{subSet}/samples") @Produces("application/json") public Object getDatasetSubSetSamples(@PathParam("dataset") DatasetArg<?> datasetArg, @PathParam("subSet") Long subSetId, @QueryParam("cursor") CursorArg cursorArg, @QueryParam("limit") LimitArg limitArg, @QueryParam("includePredictedOutliers") @DefaultValue("false") boolean includePredictedOutliers) Retrieves the samples of a specific subset of a dataset.Step 1u of
CURSOR_PAGINATION_STEP1_PLAN.mdadds an opt-in cursor-mode branch parallel to step 1k (/datasets/{dataset}/samples). The legacy mode (nocursor) is preserved byte-for-byte: an unpaginatedResponseDataObject<List<BioAssayValueObject>>with the full subset sample list. Cursor mode is available for consistency with the other listings; a subset's assay list itself stays small (single-cell size is in cells, not assays). Cursor mode always sorts by ascendingid; the path-derivedsubSet.id = ?constraint is preserved across modes;totalElementsisnullby default (no count query per request).
-
GET /datasets?query=...(the paginated catalogue runs the same search), which every known client uses instead — no caller of this endpoint was found across gemma-ui, gemma-curation-agents, or gemma.R.