Deprecated API
Contents
-
Deprecated InterfacesInterfaceDescriptionSupplanted by the curation agent's own GEO scraping, currently
scrape_geo_and_open_triage.py. The agent discovers candidates, decides what is worth preboarding, and opens its own triage ticket, so Gemma no longer needs to run the scrape itself.Nothing here is removed yet and it still works. What it does that the agent must therefore also do: it creates the
PreboardedExperimentrows, writes theGeoScrapeWatermarkaudit row, and opens ONESCREENINGticket per batch targeting that watermark -- deliberately not one per candidate.The preboarded write API the agent uses instead is
POST /preboarded+POST /preboarded/{id}/annotation-sets, withGET /workflow/queue?datasetType=preboarded_experimentfor the queue.Supplanted by the curation agent's own GEO scraping, currentlyscrape_geo_and_open_triage.py. The agent discovers candidates, decides what is worth preboarding, and opens its own triage ticket, so Gemma no longer needs to run the scrape itself.Nothing here is removed yet and it still works. What it does that the agent must therefore also do: it creates the
PreboardedExperimentrows, writes theGeoScrapeWatermarkaudit row, and opens ONESCREENINGticket per batch targeting that watermark -- deliberately not one per candidate.The preboarded write API the agent uses instead is
POST /preboarded+POST /preboarded/{id}/annotation-sets, withGET /workflow/queue?datasetType=preboarded_experimentfor the queue.this interface only exists as a compatibility shim while callers migrate offCuratable#getCurationDetails(). New code should queryTicketServicedirectly. The shim — and the underlyingCurationDetailsentity — will be retired once all callers move over.as Person is deprecated
-
Deprecated ClassesClassDescriptionsuperseded by
GET /admin/ontologies/obsolete-terms, which answers the same question from a running application and additionally reports the replacement each ontology asserts.This command exists only because a CLI has to load the ontologies itself — hence the
load.ontologies=falseprecondition below and the warm-up loop. A running Gemma already holds them.Two things the endpoint does not carry over. Its
Countcolumn is always 1:checkForObsoleteincrements the count but is only reached inside thecheckedUrisguard, so no term can be counted twice. And it walks every characteristic in the corpus to answer a question about distinct URIs — the endpoint groups CHARACTERISTIC by URI instead and asks each one once.Scheduled for removal once the correction path lands; see
docs/design/OBSOLETE_TERM_CORRECTION.md.This has been replaced with Spring-based configurationSettingsConfigand usage ofValueto inject configurations. You can use@Value("${property}")as replacement.This has been replaced with Spring-based configurationSettingsConfigand usage ofValueto inject configurations. You can use@Value("${property}")as replacement.this ontology was last updated in unmaintained since 2013Nothing calls this any more (Paul, 2026-09-04): we do not map submitter text onto preset ontology terms on import. Both callers are gone —GeoConverterImplandLoadSimpleExpressionDataCli— so a value written by a submitter now survives the load unchanged and grounding is a curation decision rather than something a loader guesses from a 1,386-row lookup table.🛑 Kept rather than deleted, and the mapping file with it. The table is a reviewed body of value → term decisions built up over years; it is the obvious starting point for a curation-side suggester, and re-deriving it would be expensive.
GeoTermReplacementTeststill validates that its URIs resolve, which is what stops it rotting while it sits unused.Do not wire it back into a loader. If a caller wants these terms, the decision to apply one belongs to a curator or to an agent proposing to a curator, not to the import path.
Supplanted by the curation agent's own GEO scraping, currentlyscrape_geo_and_open_triage.py. The agent discovers candidates, decides what is worth preboarding, and opens its own triage ticket, so Gemma no longer needs to run the scrape itself.Nothing here is removed yet and it still works. What it does that the agent must therefore also do: it creates the
PreboardedExperimentrows, writes theGeoScrapeWatermarkaudit row, and opens ONESCREENINGticket per batch targeting that watermark -- deliberately not one per candidate.The preboarded write API the agent uses instead is
POST /preboarded+POST /preboarded/{id}/annotation-sets, withGET /workflow/queue?datasetType=preboarded_experimentfor the queue.this event type was used by the auto-tagger, which has been removed. This event type has been kept so that the audit-trails can still properly display these events, but creation new events of this type should not occur.useTicketService.curation notes will be migrated to ticket comments viaTicketService.addComment(Ticket, Contact, String)once the curation-note ↔ ticket mapping lands (seeCURATION_DETAILS_RETIREMENT.md). Until then this event is still emitted byDatasetsWebService.updateDatasetCurationDetailsso the legacycurationNotefield onCurationDetailsstays populated.resolve the openGENERIC/BATCH_INFO_NEEDEDticket(s) targeting the entity viaTicketService.transition(Ticket, TicketState, Contact, String)(target stateTicketState.RESOLVED). SeeCurationDetailsEventfor the full migration map.seeCurationDetailsEvent— the needs-attention flag is being replaced by openGENERIC/BATCH_INFO_NEEDEDtickets.open aGENERICticket (orTicketType.BATCH_INFO_NEEDEDwhen the trigger is missing batch information) viaTicketService.openTicket(Contact, TicketType, String, Collection)instead. SeeCurationDetailsEventfor the full migration map.resolve the openQUALITY_REVIEWticket(s) viaTicketService.transition(Ticket, TicketState, Contact, String)instead (target stateTicketState.RESOLVED). SeeCurationDetailsEventfor the full migration map.seeCurationDetailsEvent— the trouble flag is being replaced by openQUALITY_REVIEWtickets.open aQUALITY_REVIEWticket viaTicketService.openTicket(Contact, TicketType, String, Collection)instead. SeeCurationDetailsEventfor the full migration map.not neededaim towards using theFactorValueBasicValueObject. This one is confusing. Once usage of this type has been completely phased out, revise the BioMaterialValueObject and relevant DAOs and Services.as Person is deprecated
-
Deprecated FieldsFieldDescriptionuse
Values.SINGLE_CELL_RNA_SEQUENCING_ASSAYinsteaduseValues.SINGLE_CELL_RNA_SEQUENCING_ASSAYinsteadUseFilterArgLexer.VOCABULARYinstead.UseFilterArgParser.VOCABULARYinstead.
-
Deprecated MethodsMethodDescriptionthis method does not support producing Gemma Web contexts, please migrate existing code to use
SpringContextUtils.getApplicationContext(String[], String...)instead.modifying the matrix directly is not recommended, make a copy instead.useExpressionDataMatrix.getDesignElementForRow(int)insteaduseExpressionDataMatrix.getDesignElements()insteaduseOntologyResource.getLabel()instead.useOntologyResource.isObsolete()insteaduseOntologyService.initialize(InputStream, boolean)instead and possiblyOntologyService.cancelInitializationThread()prior to get any running initialization thread out of the wayuseAclEntryAfterInvocationCollectionFilteringProvider.hasPermission(Authentication, List)instead to benefit from bulk-loading of ACLsuseAclEntryAfterInvocationCollectionFilteringProvider.hasPermission(Authentication, List)instead to benefit from bulk-loading of ACLsThis was renamed for clarity.you should never use this property, rely instead on the actual type viaObject.getClass().by omission rather than by policy: aRelationInferenceDirection.TYPED_OBJECT_REQUIREDpredicate cannot be answered without the object's category and comes backRelationInferenceDirection.NEITHERhere. That fails closed, which is the right way for it to fail, but a caller holding a whole row should pass the fourth argument and get the real answer.useArrayDesignValueObject.getTaxonObject()insteadUseCellTypeAssignment.getCellTypes()instead.UseCellTypeAssignment.getCellTypeIndices()instead.UseCellTypeAssignment.getNumberOfCellTypes()instead.Do not use, there's never been an accession field in the data model.useExpressionExperimentValueObject.getTaxonObject()insteaduseFactorValue.getMeasurement()orFactorValue.getCharacteristics()to retrieve the value.useStatement.getSubject()insteaduseStatement.getSubjectUri()insteaduseStatement.setSubject(String)insteaduseStatement.setSubjectUri(String)insteaduseEeWriteService.create(ExpressionExperiment, ArrayDesignsForExperimentCache)directly. Retained only so test fixtures that hitPersisterHelper.persist(ExpressionExperiment, ArrayDesignsForExperimentCache)keep working.useExpressionExperimentPrePersistService.prepare(ExpressionExperiment)directly. Retained only so test fixtures that hitPersisterHelper.prepare(ExpressionExperiment)keep working.avoid using this if possible and ensure that all operations are properly enclosed by a single Hibernate sessionavoid using this if possible and ensure that all operations are properly enclosed by a single Hibernate sessionUseBulkExpressionDataVectorService.findAndThaw(QuantitationType),BulkExpressionDataVectorService.findAndThaw(Collection)orBulkExpressionDataVectorService.findAndThaw(BioAssayDimension)instead, it's much more efficient.do not use this, it is only a workaround to make FV migration fasterbecauseFactorValue.getValue()is deprecateddo not use, this is only for migrating old-style characteristics to statements and will be removeddo not use, this is only for migrating old-style characteristics to statements and will be removedbecauseFactorValue.getValue()is deprecateddo not use, this is only for migrating old-style characteristics to statements and will be removeddo not use this, it is only meant for the purpose of migrating old-style characteristics to statementsdo not use this, it is meant for FactorValue migration onlypreferFilterJpaUtils.formRestrictionClause(CriteriaBuilder, CommonAbstractCriteria, Root, Filters)soinSubqueryfilters can resolve.Reads the watermark written by the deprecated in-Gemma scrape. An agent that scrapes on its own side is the author of its own run records; this only ever sees runs Gemma performed.The curation agent scrapes GEO itself (scrape_geo_and_open_triage.py) and opens its own triage ticket. Still functional; seeGeoScrapeServicefor what an agent-side replacement has to reproduce -- the preboarded rows, the watermark, and ONE batch ticket.useDatasetsWebService.FactorValueCommit.biomaterialIds. Scheduled for removal — Paul, 2026-09-05: "as a choice of way to parameterize, we should not allow it, by removing that as an option for the endpoints. Deprecation is the right step now." Kept working meanwhile so no existing caller breaks.A name is not an addressing form. It is not guaranteed to EXIST — a single-cell sub-bioassay has no accession of its own — and not guaranteed to be UNIQUE: on GEO-sourced single-cell data every sub-bioassay descends from one GSM, so that accession names fifteen samples rather than one. Such a name is now a 400 rather than an arbitrary pick.
An id, by contrast, always exists here: these endpoints never add or remove a dataset's samples, so every sample a commit can refer to was already persisted and already has one. That is what makes removal safe rather than merely desirable — there is no new-entity case for samples, and
clientRefcovers the entities a commit genuinely does create.useDatasetsWebService.FactorValueCommit.biomaterialIds. Scheduled for removal — Paul, 2026-09-05: "as a choice of way to parameterize, we should not allow it, by removing that as an option for the endpoints. Deprecation is the right step now." Kept working meanwhile so no existing caller breaks.A name is not an addressing form. It is not guaranteed to EXIST — a single-cell sub-bioassay has no accession of its own — and not guaranteed to be UNIQUE: on GEO-sourced single-cell data every sub-bioassay descends from one GSM, so that accession names fifteen samples rather than one. Such a name is now a 400 rather than an arbitrary pick.
An id, by contrast, always exists here: these endpoints never add or remove a dataset's samples, so every sample a commit can refer to was already persisted and already has one. That is what makes removal safe rather than merely desirable — there is no new-entity case for samples, and
clientRefcovers the entities a commit genuinely does create.useDatasetsWebService.SampleCharacteristicCommit.bioMaterialId, for the reasons onDatasetsWebService.FactorValueCommit.getBiomaterialShortNames().useDatasetsWebService.SampleCharacteristicCommit.bioMaterialId, for the reasons onDatasetsWebService.FactorValueCommit.getBiomaterialShortNames().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.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).
-
Deprecated Enum ConstantsEnum ConstantDescriptionubic.gemma.persistence.service.expression.experiment.ExpressionExperimentMetaFileType.MULTIQC_REPORTkept for backward-compatibility since we expose this for
addMetadataFile --file-type.